メールサーバー

メールサーバーを立ち上げる際には設定と各種迷惑メール対策はかなり多くなるので「覚え書き」として残しておきます。
このページをご覧の皆様の参考になれば幸いです。
尚、以下に紹介する内容は全てに当てはまる訳ではありませんのでご了承下さい。
様々な条件によっては上手く行かない場合もあります。自己責任において行って下さい。
かなり長いページになりますがじっくり読んで下さい。

概要

ホームページを作ると「問い合わせ」フォーム等からの問い合わせに対しメールで返信する事があります。その際に自社(自分)のドメインで返信したいと思う事は当然のことだと思います。
そこでメールサーバーを立ち上げ自社(自分)のドメインでメールを送信するようにします。
しかし、スパムメールや迷惑メール対策で多くの業者が厳しい対策をとっています。その対策(送信条件)をクリアしないとメールを送信することはできません。
また、迷惑メール等の送信者はランダムに総攻撃を仕掛けてくるので中途半端なセキュリティーのメールサーバーを乗っ取り踏み台にしてされてしまう事があります。
「まさか、総攻撃なんて自社(自分)には関係ないよ」、「そんな、大袈裟な」と思う人もいるかと思いますが実際問題として迷惑メール等の送信者は機械的に世界中に攻撃を仕掛けています。
現状確認として下記のコマンドをターミナル等で実行してみて下さい。
[root@vm-system]#cat /var/log/maillog | grep 'authentication failed' | awk '{print $7}'
unknown[123.45.678.90]:
unknown[123.45.678.90]:
unknown[123.45.678.90]:
unknown[123.45.678.90]:



上記のようにドメイン不明な同じIPアドレスが多く表示されます。メールログを見ると数秒間隔でアクセスのあるIPアドレスもあります。ほとんどが海外からのアクセスです。
普通に考えて海外からこんなに多くのアクセスがあるのは考えられないので間違いなく迷惑メールの踏み台にしようとのアクセスです。
IP調査兵団(https://ip-sc.net/ja) にアクセスして「調査するIPアドレス」に上記で表示されたIPアドレスを入力して「調査」をクリックすると入力したIPアドレスの詳細が表示されるので確認してみて下さい。
詳細画面の下の方にある『脅威レベル』や『脅威の詳細』の欄に“脅威レベル 高”、“サイバーアタックの攻撃元”等の記載があれば対策が必要です。
◆前提条件
・サーバーOSはCentOS Stream 8
・固定グローバルIPアドレス
・自宅サーバー
・ホスト名(ドメイン名):mail.vm-system.net
◆固定グローバルIPアドレス
『「問い合わせ」フォーム等からの問い合わせに対しメールで返信する』との観点から、問い合わせしたホームページと同じドメインからの返信が望ましいので固定グローバルIPアドレスを取得し、自社(自分)のメールサーバーからメール送信を行った方が望ましいです。
また、各種迷惑メール等の対策には固定グローバルIPアドレスが必須の場合がありますので是非とも取得して下さい。
プロバイダー等によっても違うと思いますが追加料金無しで固定グローバルIPアドレスに変更できるプロバイダもありますし、今までの月額料金に数百円から1000円前後の追加料金で固定グローバルIPアドレスに変更できるプロバイダも多くあります。
一度、ご自分(自社)が契約しているプロバイダに確認してみてはいかがでしょうか。
◆メールサーバー構成
送信サーバー(postfix)、受信サーバー(dovecot)にLet's Encryptより取得した認証証明書を利用してSSL通信(暗号化通信)行いMailサーバーを構築します。
また、送信ドメイン認証(SPF/DKIM)と、なりすましメール対策(DMARC)の設定を行い、迷惑メール等の踏み台対策を行います。
なお、SMTP認証にはシステムアカウントを利用する事とします。
なお、送信サーバー及び受信サーバーのバージョンはpostfix 3.5.8、dovecot 2.3.16になります。
バージョンの確認方法は下記の方法で確認出来ます。
[root@vm-system]#postconf | grep mail_version
mail_version = 3.5.8
[root@vm-system]#dovecot --version
2.3.16 (7e2e900c1a)
※なお、設定や確認に出て来る vm-system.net は当社のドメインですのでご自身のドメインに替えてお読み下さい。

認証証明書

◆Let's Encrypt より認証証明書を取得
Let's Encrypt とは認証証明書を無料で発行しているプロジェクトで実績もあり多くのブラウザ・サーバー等で信頼済として扱われています。
証明書の有効期間は90日間になるが Snapd からインストールした Certbot にはタイマーが付属されているため自動で有効期間の更新ができます。
◆snapd のインストールと有効化
EPELからインストールするためのリポジトリを追加します。
[root@vm-system]#dnf -y install epel-release
他リポジトリとのパッケージの競合をさけるため、enabled=0 として普段は読まないようにしておきます。
[root@vm-system]#sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/epel.repo
snapd をインストールします。
[root@vm-system]#dnf --enablerepo=epel -y install snapd
snapd のシンボリックの作成と有効化をします。
[root@vm-system]#ln -s /var/lib/snapd/snap /snap
[root@vm-system]#echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' > /etc/profile.d/snap.sh
[root@vm-system]#systemctl enable --now snapd.service snapd.socket
◆Certbot のインストール
Snap からインストールします。
[root@vm-system]#snap install certbot --classic
シンボリックの作成。
[root@vm-system]#ln -s /snap/bin/certbot /usr/bin/certbot
◆認証証明書の取得
Let's Encrypt でメール用の証明書を取得します。
初回は以下のようにいくつかの質問に回答します。また、同一サーバにwebサーバーがある場合、Let's Encryptは80番ポートを使うのでエラーとなります。なのでhtml(apache等)を停止して発行します。
[root@vm-system]#certbot certonly --standalone -d mail.vm-system.net
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Enter email address (used for urgent renewal and security notices)
# 受信可能なメールアドレスを指定
(Enter 'c' to cancel): **********@gmail.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# 利用条件に同意する
(Y)es/(N)o: y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# ニュースやサポート情報のメールを受け取る
(Y)es/(N)o: y

# 回答が終わると証明書の作成が始まり、下記のように『Congratulations!』と証明書へのパスが表示されます。

- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/ mail.vm-system.net /fullchain.pem※証明書へのパス
Your key file has been saved at:
/etc/letsencrypt/live/ mail.vm-system.net /privkey.pem※証明書へのパス
Your cert will expire on 2019-01-16. To obtain a new or tweaked

*** 以下略 ***
2回目以降はメールアドレス等の基本情報は登録されているので証明書発行だけになります。
上記では、
fullchain.pem
:証明書と中間証明書を連結したファイル
privkey.pem
:秘密鍵
二つのファイルが作成されているのが分かります。
◆認証証明書の確認
証明書は /etc/letsencrypt/live/mail.vm-system.net に作成されますので確認します。
mail.vm-system.netの部分は自分(自社)のホスト名(ドメイン名)に変えて下さい。
[root@vm-system]#ls /etc/letsencrypt/live/mail.vm-system.net
READMEcert.pemchain.pemfullchain.pemprivkey.pem
先ほどの二つのファイルの他に、
cert.pem
:証明書
chain.pem
:中間証明書
二つのファイルが作成されているのが分かります。
◆認証証明書の更新後設定
Let's Encryptで作成したサーバー証明書は有効期限が三か月ですがSnapd からインストールした Certbot にはタイマーが付属されているため自動で有効期間の更新ができます。
しかし、更新が実行された場合にはPostfixとdovecotを再起動して、更新された証明書を読み込む必要があります。
そこで、証明書の更新が行われた場合のみPostfixとdovecotを再起動させるコマンドを設定します。
[root@vm-system]#crontab -e
# 以下追記
0 2 * * * certbot renew -q --deploy-hook "systemctl restart postfix dovecot"
0 4 * * * certbot renew -q --deploy-hook "systemctl restart postfix dovecot"
2回実行するように記載しているのは1回目が失敗した場合のためです。
◆認証証明書の自動更新失敗時の手動更新
『◆認証証明書の取得』でも書きましたが同一サーバー機にWebサーバーがある場合は自動更新ができません。(Webサーバーが80番ポートを使っているため)
更新に失敗するとroot宛にエラーメールが届きますのでそれを利用して更新を行います。
まずroot宛のエラーメールを自分のメールアドレスに送るようにします。
[root@vm-system]#vi /etc/aliases
# 末尾に以下追記(@vm-system.net の部分はご自分のメールアドレスを指定)
root:******@vm-system.net
転送設定を反映させます。
[root@vm-system]#newaliases
これで更新に失敗すると上記で設定したアドレス宛にエラーメールが届きます。
件名に『Cron certbot renew -q --deploy-hook "systemctl restart postfix dovecot"』
内容は『Failed to renew certificate mail.vm-system.net with error: Could not bind TCP port 80 because it is already in use by another process on this system (such as a web server). Please stop the program in question and then try again. All renewals failed. The following certificates could not be renewed: /etc/letsencrypt/live/mail.vm-system.net/fullchain.pem (failure) 1 renew failure(s), 0 parse failure(s)』
となっています。
内容の意味は
証明書 mail.vm-system.net の更新に失敗しました。TCP ポート 80 は、このシステム上の別のプロセス (Web サーバーなど) によって既に使用されているため、バインドできませんでした。問題のプログラムを停止してから、もう一度やり直してください。・・・・・以下省略
そこでWebサーバーを一旦停止して手動で更新します。
まずWebサーバーを一旦停止します。
[root@vm-system]#systemctl stop httpd
続いて手動で更新します。
[root@vm-system]#certbot renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/mail.vm-system.net.conf※メールサーバー
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Renewing an existing certificate for mail.vm-system.net※メールサーバー

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/www.vm-system.net.conf※Webサーバー
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Certificate not yet due for renewal※Webサーバー

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all renewals succeeded:※メールサーバー
/etc/letsencrypt/live/mail.vm-system.net/fullchain.pem (success)
The following certificates are not due for renewal yet: ※Webサーバー
/etc/letsencrypt/live/www.vm-system.net/fullchain.pem expires on 2022-00-00 (skipped)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
上記ではメールサーバー用の更新が完了し、Webサーバー用の更新は2022-00-00なので今回は更新しないとなっています。
メールサーバー用証明書はこれで更新が完了しました。
最後にWebサーバーの起動とメールサーバー(postfix・dovecot)の再起動をします。
[root@vm-system]#systemctl start httpd
[root@vm-system]#systemctl restart postfix dovecot
最初の方に『証明書の有効期間は90日間になるが Snapd からインストールした Certbot にはタイマーが付属されているため自動で有効期間の更新ができます。』と書いたのに自動更新ができないじゃないかと思われる方もいると思います。
しかし、これはメールサーバーとWebサーバーが同一サーバー機にない事が前提になっています。

ホスト名の正引き確認

DNSのホスト名の正引きができないとLet's Encrypt の証明書が利用できないので確認します。
確認にはhostコマンドを利用するので bind をインストールします。
[root@vm-system]#dnf -y install bind-utils
正引きを確認します。
[root@vm-system]#host mail.vm-system.net.(ホスト名記述)
mail.vm-system.net has address 123.45.678.90
IPアドレスが表示されれば正引きはできています。

postfix

◆postfixのインストール
[root@vm-system]#dnf -y install postfix
◆設定について
設定は基本設定・SMTP-AUTH設定・SSL/TLS設定の設定を行います。
送信ドメイン認証(SPF/DKIM)と、なりすましメール対策(DMARC)の設定はその後に行います。
◆postfix main.cfの設定
[root@vm-system]#vi /etc/postfix/main.cf

#myhostname = host.domain.tld
#myhostname = virtual.domain.tld
# 追記 ホスト名の指定
myhostname = mail.vm-system.net

#mydomain = domain.tld
# 追記 ドメイン名の指定
mydomain = vm-system.net

#myorigin = $myhostname
# 追記 @以下の表示にドメイン名の指定
myorigin = $mydomain

# コメント解除 全てのインターフェースで待ち受け
inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
# コメント化 全てのインターフェースで待ち受け
#inet_interfaces = localhost

# Enable IPv4, and IPv6 if supported
# all から書き換え 待ち受けにIPv4を指定
inet_protocols =ipv4

# コメント化
#mydestination = $myhostname, localhost.$mydomain, localhost
# コメント解除 自サーバーにドメインを追加しドメインでの送受信を許可
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

* コメント解除 ローカルに存在しないユーザーのメールを受け取らない
local_recipient_maps = unix:passwd.byname $alias_maps

#mynetworks = 168.100.189.0/24, 127.0.0.0/8
#mynetworks = $config_directory/mynetworks
#mynetworks = hash:/etc/postfix/network_table
# 追記 自ネットワーク
mynetworks = 192.168.1.0/28, 127.0.0.0/8

#home_mailbox = Mailbox
# コメント解除 メールボックス形式をMaildir形式に指定
home_mailbox = Maildir/

#smtpd_banner = $myhostname ESMTP $mail_name
#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
# 追記 セキュリティ対策として、サーバー名を表示しないように設定
smtpd_banner = $myhostname ESMTP

# 書き換え Let’s Encryptで取得した証明書のパス
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.vm-system.net/fullchain.pem

# 書き換え Let’s Encryptで取得した秘密鍵のパス
smtpd_tls_key_file = /etc/letsencrypt/live/mail.vm-system.net/privkey.pem

# 確認 SSL/TLSを有効化する mayは強制しない SSL/TLSを利用しない場合はコメント化
smtpd_tls_security_level = may

# 確認 SSL/TLSを有効化する mayは強制しない SSL/TLSを利用しない場合はコメント化
smtp_tls_security_level = may
meta_directory = /etc/postfix


### 設定ファイルに無い項目をファイル末尾に追記 ###

# メールアドレスにサブドメインを表示しない
masquerade_domains = vm-system.net
# システムユーザの情報を隠す
disable_vrfy_command = yes
# HELO コマンド(SMTP に送信するホストのドメイン・ネームを識別)を使用しないメールは拒否
smtpd_helo_required = yes
# 最大メールサイズを指定 デフォルトの10MB(10240000)から20MBに変更
message_size_limit = 20971520


### SMTP-AUTH設定 ###

## smtp (送信)用設定 ##

# SMTP-AUTHの認証方法
smtp_sasl_mechanism_filter = plain
# SMTP-AUTHに使うユーザ名とパスワードを指定するファイル
smtp_sasl_password_maps = hash:/etc/postfix/authinfo
# plaintext(平文)の使用を禁止
smtp_sasl_security_options = noanonymous


## smtpd (受信)用設定 ##

# MTP-AUTH を有効
smtpd_sasl_auth_enable = yes
# SMTP-AUTHの認証形式をdovecotに指定
smtpd_sasl_type = dovecot
# 認証用のソケットファイルを指定
smtpd_sasl_path = private/auth
# リレー(中継)設定
smtpd_recipient_restrictions =
# [mynetwork]で指定したアドレスのリレー(中継)許可
permit_mynetworks
# SASL認証が通ればリレー(中継)許可
permit_sasl_authenticated
# 自サーバーのドメイン宛のメール送信のリレー(中継)許可
permit_auth_destination
# 自サーバーのドメイン宛以外のメール送信のリレー(中継)拒否(不正中継対応)
reject_unauth_destination
# 匿名での接続を拒否
smtpd_sasl_security_options = noanonymous
# 認証に使用するメールサーバーのホスト名を指定
smtpd_sasl_local_domain = $myhostname
# Outlook Expressや古いOutlookクライアント用
broken_sasl_auth_clients = yes


### SSL/TLS設定 ###

# SSL/TLS通信用キャッシュデータベースの指定
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
# SSL/TLS通信のキャッシュ保持時間
smtpd_tls_session_cache_timeout = 3600s
# プロトコルおよび暗号に関する情報をReceivedヘッダーに追加
smtpd_tls_received_header = yes
# SSL/TLS通信時のログ出力レベル
smtpd_tls_loglevel = 1
◆postfix master.cfの設定
[root@vm-system]#vi /etc/postfix/master.cf

# コメント解除 サブミッションの有効化(Outbound Port25 Blocking対応)
submissioninetn-n--smtpd
# コメント解除
-o syslog_name=postfix/submission
# -o smtpd_tls_security_level=encrypt
# コメント解除
-o smtpd_sasl_auth_enable=yes
# -o smtpd_tls_auth_only=yes
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# 追記
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
# コメント解除 SSL/TLSの有効化
smtpsinetn-n--smtpd
# コメント解除
-o syslog_name=postfix/smtps
# コメント解除
-o smtpd_tls_wrappermode=yes
# コメント解除
-o smtpd_sasl_auth_enable=yes
◆postfixの設定確認
[root@vm-system]#postfix check
エラーメッセージ等何も表示されずに終了すれば設定に問題はありません。

dovecot

◆dovecotのインストール
[root@vm-system]#dnf -y install dovecot
◆設定について
設定は基本設定・SMTP-AUTH設定・SSL/TLS設定の設定を行います。
送信ドメイン認証(SPF/DKIM)と、なりすましメール対策(DMARC)の設定はその後に行います。
◆dovecot.confの設定
[root@vm-system]#vi /etc/dovecot/dovecot.conf

# listen = *, ::
# 追記 IPV4 or IPV6を設定
# コメントアウトして両方で通信もできますがdovecot起動時にエラーが出た場合はIPV4(*)を指定する
listen = *

# protocols = imap pop3 lmtp submission
# 追記 受信プロトコルを設定
# postfixでsubmission設定を行っているのでダブルで設定すると起動エラーになる
protocols = imap pop3 lmtp
◆10-mail.confの設定
[root@vm-system]#vi /etc/dovecot/conf.d/10-mail.conf

#mail_location =
# postfixでsubmission設定を行っているのでダブルで設定すると起動エラーになる
# 追記 メールの保存先
mail_location = maildir:~/Maildir
◆10-auth.confの設定
[root@vm-system]#vi /etc/dovecot/conf.d/10-auth.conf

#disable_plaintext_auth = yes
# 追記 非SSLの認証にも対応
disable_plaintext_auth = no

#auth_mechanisms = plain
# 追記 認証メカニズムをloginとloginに設定
auth_mechanisms = plain login

#!include auth-deny.conf.ext
#!include auth-master.conf.ext

# 確認 コメント化されていない事を確認 メールアカウント = システムユーザー
!include auth-system.conf.ext
◆10-ssl.confの設定
[root@vm-system]#vi /etc/dovecot/conf.d/10-ssl.conf

# 確認or書き換え required = 必須SSL/TLS(995) yes = SSL/TLS(995)orPOP(110) no = POP(110)
ssl = required

# 書き換え 証明書のパス
ssl_cert = </etc/letsencrypt/live/mail.vm-system.net/fullchain.pem
# 書き換え 秘密鍵のパス
ssl_key = </etc/letsencrypt/live/mail.vm-system.net/privkey.pem

# コメント解除 SSL用データ作成
ssl_dh = </etc/dovecot/dh.pem

# コメント解除 Dovecot 2.3以降
ssl_min_protocol = TLSv1.2
◆dh.pem の作成
上記10-ssl.confで設定したdh.pemの作成をします。
[root@vm-system]#openssl dhparam -out /etc/dovecot/dh.pem 4096
かなりの時間がかかります。
当サーバーの場合は約1時間掛かりました。こんなに時間がかかるものかと不安になりましたが無事終了しました。
◆10-master.confの設定
[root@vm-system]#vi /etc/dovecot/conf.d/10-master.conf

service imap-login {
inet_listener imap {
#port = 143
# 追記 143ポートを使用しない
port = 0
}
inet_listener imaps {
# コメント解除  ssl・993ポート使用する
port = 993
ssl = yes
}
}

service pop3-login {
inet_listener pop3 {
#port = 110
# 追記 110ポートを使用しない
port = 0
}
inet_listener pop3s {
# コメント解除  ssl・995ポート使用する
port = 995
ssl = yes
}
}

# Postfix smtp-auth
#unix_listener /var/spool/postfix/private/auth {
# mode = 0666
#}
# 追記 Postfixからの認証要求を受け付ける
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
◆ログ出力先の指定
[root@vm-system]#vi /etc/dovecot/conf.d/10-logging.conf
##
## Log destination.
##

# Log file to use for error messages. "syslog" logs to syslog,
# /dev/stderr logs to stderr.
#log_path = syslog
* 追記 ログ出力先の指定
log_path = /var/log/dovecot.log
◆dovecotの設定確認
[root@vm-system]#doveconf -n | head
OSやホスト名等の情報が表示されるので確認して下さい。エラーメッセージ等が表示されなければ設定に問題はありません。

メールサーバーの起動

◆postfixの起動
[root@vm-system]#systemctl start postfix
◆postfixの再起動
[root@vm-system]#systemctl restart postfix
◆postfixの自動起動設定
[root@vm-system]#systemctl enable postfix
◆postfixの自動起動の確認
[root@vm-system]#systemctl is-enabled postfix
# 以下のように表示されればOKです。
enabled
◆postfixのstatus確認
[root@vm-system]#systemctl status postfix
postfix.service - Postfix Mail Transport Agent
Loaded:
loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
Active:
active (running)since Sat 2022-04-30 18:19:05 JST; 18s ago
Main PID:
1469 (master)
Tasks:
7 (limit: 35913)
Memory:
20.8M
├─1469 /usr/libexec/postfix/master -w
├─1485 qmgr -l -t unix -u
├─1491 tlsmgr -l -t unix -u
├─1546 anvil -l -t unix -u
├─4274 pickup -l -t unix -u
├─5447 smtpd -n smtp -t inet -u -o stress= -s 2
└─5470 smtpd -n smtp -t inet -u -o stress= -s 2
*** 以下略 ***
Statusに問題がないことを確認します。
◆dovecotの起動
[root@vm-system]#systemctl start dovecot
◆dovecotの再起動
[root@vm-system]#systemctl restart dovecot
◆dovecotの自動起動設定
[root@vm-system]#systemctl enable dovecot
◆dovecotの自動起動の確認
[root@vm-system]#systemctl is-enabled dovecot
# 以下のように表示されればOKです。
enabled
◆dovecotのstatus確認
[root@vm-system]#systemctl status dovecot
dovecot.service - Dovecot IMAP/POP3 email server
Loaded:
loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
Active:
active (running)since Sat 2022-04-30 18:19:05 JST; 18s ago
Docs:
man:dovecot
https://doc.dovecot.org/
Process:
5814 ExecStop=/usr/bin/doveadm stop (code=exited, status=0/SUCCESS)
Process:
5819 ExecStartPre=/usr/libexec/dovecot/prestartscript (code=exited, status=0/SUCCESS)
Main PID:
5828 (dovecot)
Tasks:
4 (limit: 35913)
Memory:
4.5M
CGroup:
/system.slice/dovecot.service
├─5828 /usr/sbin/dovecot -F
├─5829 dovecot/anvil
├─5830 dovecot/log
└─5831 dovecot/config
*** 以下略 ***
Statusに問題がないことを確認します。

SPF

◆SPFレコードの登録
まず初めにSPFレコードの登録を行います。
SPF(センダー・ポリシー・フレームワーク)は、送信元のメールアドレスの正当性を検証するものです。
利用しているDNSサーバー(プロバイダーやドメインレジストラのDNSサーバー、自宅サーバーのDNSサーバー)にSPFレコードを登録します。
登録方法はDNS設定ページ(画面)で
IN TXT "v=spf1 +ip4:<メールサーバーのIPアドレス> -all"
を記述します。
これは『独立行政法人情報処理推進機構』で案内している設定ですがプロバイダーやドメインレジストラ等によっては多少違う場合があるので確認が必要です。
なお。最後の「-all」(ハイフンall)は指定したメールサーバ以外からのメールを「 絶対拒否」、これを「~all」(チルダall)とすると指定したメールサーバ以外からのメールを「 なるべく 拒否」となります。
詳しくは、『 なりすましメール撲滅に向けたSPF(Sender Policy Framework)導入の手引き:IPA 独立行政法人 情報処理推進機構 』を参照して下さい。
なお、上記設定は一般的な設定でプロバイダーやドメインレジストラによってはDNSの設定方法が違います。
違う登録方法の例としてvalue-domain(バリュードメイン)の場合は下記の通りです。
txt @ v=spf1 +ip4: <メールサーバーのIPアドレス> -all
となります。
["]ダブルクォーテーションがなく、[txt @]の後に一般的な設定が続きます。
また、value-domain(バリュードメイン)の登録例ではIPアドレスではなくドメインで登録するようになっているため固定IPアドレスでなくても登録することができるかもしれません。(確認は取れていません)
txt @ v=spf1 a:vm-system.net -all
と登録することも可能です。
◆登録確認
[root@vm-system]#dig vm-system.net txt
*** 途中略 ***
;;ANSWER SECTION:
<ドメイン>.1200INTXT "v=spf1 +ip4: 123.456.789.012 -all"
*** 以下略 ***
上記のようにANSWER SECTIONで登録したIPアドレスが表示されれば登録されています。
◆pypolicyd-spfのインストール
迷惑メール対策のため受信側のSPF検証モジュールであるpypolicyd-spfをインストールします。
pypolicyd-spfは標準のレポジトリには入っていないのでepelレポジトリをインストールしてない場合はインストールします。
[root@vm-system]#dnf -y install epel-release
pypolicyd-spfをインストールします。
[root@vm-system]#dnf -y install --enablerepo=epel pypolicyd-spf
次に、pypolicyd-spfに必要なpython3をインストールします。
[root@vm-system]#dnf -y install python3
次に、python3を有効します。
[root@vm-system]#alternatives --config python
2 プログラムがあり 'python' を提供します。
選択コマンド
----------------------------------------------------------------------------------------------
*+1/usr/libexec/no-python
2/usr/bin/python3
# 2を入力してEnter(python3を選択)
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2
◆pipをpip3に変更
[root@vm-system]#update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
Python・pipのバージョン変更確認をします。
[root@vm-system]#python --version
Python3.6.8
[root@vm-system]#pip --version
pip9.0.3from/usr/lib/python3.6/site-packages (python 3.6)
Pythonのバージョンが3になっている事を確認をします。
◆pypolicyd-spfの設定
[root@vm-system]#vi /etc/python-policyd-spf/policyd-spf.conf
# For a fully commented sample config file see policyd-spf.conf.commented

debugLevel=1
TestOnly =1

HELO_reject=Fail
Mail_From_reject=Fail

# True に書き換え
PermError_reject =True
# True に書き換え
TempError_Defer =True

# コメント化
#skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0/104,::1

# 以下追記
Whitelist = 192.168.1.0/24
Domain_Whitelist = vm-system.net
Hide_Receiver = No
※参考
debugLevel
:出力ログレベルを設定
・1(最低限)~5(詳細)を設定
HELO_reject
:HELO拒否ポリシーを指定
・SPF_Not_Pass
:結果がPass / None / Tempfailでない場合は拒否(デフォルト)
・Softfail
:結果がSoftfail又はFailの場合に拒否
・Fail
:結果がFailの場合にのみ拒否
・Null
:結果がFailかつ送信者がNullの場合のみ拒否
・False
:HELOで拒否/延期しない、ヘッダーのみを追加
・No_Check
:HELOをチェックしない
Mail_From_reject
:Mail From 拒否ポリシーを指定
・SPF_Not_Pass
:結果がPass / None / Tempfailでない場合は拒否
・Softfail
:結果がSoftfailで失敗した場合に拒否
・Fail
:失敗したメールを拒否(デフォルト)
・False
:Mail Fromを拒否/延期せず、ヘッダーのみを追加
・No_Check
:メールの送信元をチェックしない
PermError_reject
:DNSサーバーの設定ミスなど、障害が発生した場合のメールの拒否指定
・True
:メールを拒否
・False
:メールを受信
TempError_Defer
:DNS障害で一時的なSPFの認証障害が発生した場合のメールの遅延指定
・True
:メールを遅延
・False
:メールを遅延しない
Whitelist
:SPFをチェックしないネットワークを設定
・自身のプライベートネットワークを設定
Domain_Whitelist
:ドメイン名ベースでSPFをチェックしないネットワークを指定
・指定されたドメインのSPFをチェックをしない
Hide_Receiver
:DNS障害で一時的なSPFの認証障害が発生した場合のメールの遅延指定
・Yes
:受信者表記を<unknown>に置き換えられる
・No
:受信者表記を<unknown>に置き換えない
◆pypolicyd-spfの稼働確認
[root@vm-system]#/usr/libexec/postfix/policyd-spf
スクリプトを起動して入力待ち状態(コマンドプロンプトに戻ってこない)になっていれば正常です。もし起動してすぐに終了(コマンドプロンプトに戻る)などしたら設定ファイルの読み込みで障害が起こっている可能性があります。
終了する場合は[Ctrl] + [c] で終了します。

SPFのpostfixとの連携

◆main.cfの設定
[root@vm-system]#vi /etc/postfix/main.cf

# 末尾に以下追記
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
check_policy_service unix:private/policyd-spf
permit
check_policy_service unix:private/policyd-spf を記述する位置は
reject_unauth_destination permit_sasl_authenticated
の後に記述して下さい。そうでないと
オープンリレーサーバー
(スパムメール等の迷惑メールの送信サーバーとして利用されてしまう)
になってしまいますので注意して下さい。
◆postfix master.cfの設定
[root@vm-system]#vi /etc/postfix/master.cf

# 末尾に以下追記
policyunix-nn-0spawn
user=nobody argv=/usr/libexec/postfix/policyd-spf

DKIM

◆opendkimのインストール
ドメイン認証ソフトopendkimをインストールします。
opendkimは標準のレポジトリには入っていないのでepelレポジトリをインストールしてない場合はインストールします。
[root@vm-system]#dnf -y install epel-release
opendkimをインストールします。
opendkim-toolsも一緒にインストールします。opendkim-toolsは鍵作成ツールなのでインストールしないと鍵を作成できません。
[root@vm-system]#dnf -y install --enablerepo=epel opendkim opendkim-tools
インストールが完了すると『/etc』内に『/opendkim/keys』というディレクトリが出来ています。
◆秘密鍵と公開鍵の作成
上記で出来た/opendkim/keys』ディレクトリに秘密鍵と公開鍵を作成保存するディレクトリを作成します。
ディレクトリ名は何でも良いのですがここではわかりやすくvm-system.netとします。
[root@vm-system]#mkdir /etc/opendkim/keys/vm-system.net
vm-system.netディレクトリ内に、秘密鍵と公開鍵を作成します。
[root@vm-system]#opendkim-genkey -D /etc/opendkim/keys/vm-system.net -d vm-system.net -b 2048 -s 20220401
各オプションは以下の通りです。
・-D
秘密鍵と公開鍵の作成・保存先ディレクトリ
・-d
ドメイン名を指定
・-b
暗号化キーのサイズを指定
・-s
セレクタ名を指定
任意の名前、定期的に新しく作成することが推奨されているため作成日をセレクタ名とするのが望ましいです。
上記コマンドを実行すると何事もなかったかのようにコマンドプロンプトに戻ります。
随分簡単に秘密鍵と公開鍵が出来ています。
/etc/opendkim/keys/vm-system.netの中を確認します。
[root@vm-system]#ls /etc/opendkim/keys/vm-system.net
20220401.private20220401.txt
・20220401.private
秘密鍵
・20220401.txt
公開鍵
秘密鍵と公開鍵が出来ている事が確認出来ます。
秘密鍵と公開鍵の所有権とアクセス権の変更
他人に絶対見られないよう、所有権とアクセス権を変更します。
# 現状確認
[root@vm-system]#ls -al /etc/opendkim/keys/vm-system.net/
-rw------- 1 root root 900 Apr 1 12:34 20220401.private
-rw------- 1 root root 500 Apr 1 12:34 20220401.txt

# 所有権とアクセス権をopendkimに変更
[root@vm-system]#chown -R opendkim:opendkim /etc/opendkim/keys/vm-system.net/

# 変更確認
[root@vm-system]#ls -al /etc/opendkim/keys/vm-system.net/
-rw------- 1 opendkim opendkim 900 Apr 1 12:34 20220401.private
-rw------- 1 opendkim opendkim 500 Apr 1 12:34 20220401.txt
◆公開鍵レコードの登録
まず初めに公開鍵レコードの登録を行います。
利用しているDNSサーバー(プロバイダーやドメインレジストラーのDNSサーバー、自宅サーバーのDNSサーバー)に公開鍵レコードを登録します。
登録方法はDNS設定ページ(画面)で
20220401._domainkey. vm-system.net. IN TXT "v=DKIM1; k=rsa; p=**********"
を記述します。
p=**********の**********の部分は公開鍵の内容を記述
記述する内容は公開鍵を開き、その内容をコピーして貼り付けます。
[root@vm-system]#cat /etc/opendkim/keys/vm-system.net/20220401.txt
20220401._domainkey IN TXT ( "v=DKIM1; k=rsa; "
p=*******************************************************************************"
"************************************************************************************" )
; ----- DKIM key 20220401 for vm-system.net
上記のp=以降の*****の部分をコピーして貼り付けます。上記ではバランスの関係で短くしていますが実際は数百文字にも及ぶ長い文字列になります。
なお、上記設定は一般的な設定でプロバイダーやドメインレジストラによってはDNSの設定方法が違います。 違う登録方法の例としてvalue-domain(バリュードメイン)の場合は下記の通りです。
txt 20220401._domainkey v=DKIM1; k=rsa; p=***********************************
となります。
["]ダブルクォーテーションがなく、[txt]の後に一般的な設定が続きます。
長い文字列の中にいくつかの["]があり文字列を分割している様に見えますが一切無視して["]を削除して一行で記述して下さい。
◆ADSPレコードの登録
ADSPレコードの登録を行います。
ADSPレコードは、DKIM署名をしたドメインのポリシーを、受け取り側に示すレコードです。
利用しているDNSサーバー(プロバイダーやドメインレジストラのDNSサーバー、自宅サーバーのDNSサーバー)にADSPレコードを登録します。
登録方法はDNS設定ページ(画面)で
_adsp._domainkey.vm-system.net. IN TXT "dkim=unknown"
を記述します。
各オプションは以下の通りです。
・Unknown
送信されるメールの一部もしくは全部にDKIM署名する
・all
送信される全てのメールにDKIM署名する
・discardable
送信される全てのメールにDKIM署名する
DKIM署名が与えられない場合は受信者はそのメールを破棄する
なお、上記設定は一般的な設定でプロバイダーやドメインレジストラによってはDNSの設定方法が違います。
違う登録方法の例としてvalue-domain(バリュードメイン)の場合は下記の通りです。
txt _adsp._domainkey dkim=unknown
となります。
["]ダブルクォーテーションがなく、[txt]の後に一般的な設定が続きます。

DNS設定の確認

◆公開鍵の確認
公開鍵はTXTレコードとして登録されていますのでdigコマンドで確認します。
[root@vm-system]#dig 20220401._domainkey.vm-system.net txt
; <<>> DiG 9.11.36-RedHat-9.11.36-3.el8 <<>> 20220401._domainkey.vm-system.net txt
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49948
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;20220401._domainkey.vm-system.net. IN TXT

;; ANSWER SECTION:
20220401._domainkey.vm-system.net. 800 IN TXT "v=DKIM1; k=rsa; p=**************************"

;; Query time: 53 msec
;; SERVER: 123.456.78.90#53(123.456.78.90)
;; WHEN: 土 4月 01 10:56:40 JST 2022
上記の様に表示されればOKです。
◆ADSPレコードの確認
ADSPレコードもTXTレコードとして登録されていますのでdigコマンドで確認します。
[root@vm-system]#dig _adsp._domainkey.vm-system.net txt
; <<>> DiG 9.11.36-RedHat-9.11.36-3.el8 <<>> _adsp._domainkey.vm-system.net txt
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1234
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 621
;; QUESTION SECTION:
;_adsp._domainkey.vm-system.net. IN TXT

;; ANSWER SECTION:
_adsp._domainkey.vm-system.net. 800 IN TXT "txt dkim=unknown"

;; Query time: 15 msec
;; SERVER: 123.456.78.90#53(123.456.78.90)
;; WHEN: 土 4月 01 11:02:04 JST 2022
;; MSG SIZE rcvd: 85
上記の様に表示されればOKです。

OpenDKIMの設定

◆opendkim.confの設定
[root@vm-system]#vi /etc/opendkim.conf

## Selects operating modes. Valid modes are s (sign) and v (verify). Default is v.
## Must be changed to s (sign only) or sv (sign and verify) in order to sign outgoing
# 書き換え 送信時に署名、受信時に署名確認
Modesv

## Create a socket through which your MTA can communicate.
# この後の設定で必要になるのでポート番号を書き留めておく
Socket inet:8891@localhost

## Add a DKIM-Filter header field to messages passing through this filter
## to identify messages it has processed.
# 書き換え OpenDKIMのバージョンを表示させない
SoftwareHeaderno

## Gives the location of a private key to be used for signing ALL messages. This
## directive is ignored if KeyTable is enabled.
# コメント化
#KeyFile /etc/opendkim/keys/default.private

## Gives the location of a file mapping key names to signing keys. In simple terms,
## this tells OpenDKIM where to find your keys. If present, overrides any KeyFile
## directive in the configuration file. Requires SigningTable be enabled.
# コメント解除 有効化
KeyTable /etc/opendkim/KeyTable

## Defines a table used to select one or more signatures to apply to a message based,
## on the address found in the From: header field. In simple terms, this tells
## OpenDKIM how to use your keys. Requires KeyTable be enabled.
# コメント解除 有効化
SigningTable refile:/etc/opendkim/SigningTable

## Identifies a set of "external" hosts that may send mail through the server as one
## of the signing domains without credentials as such.
# コメント解除 有効化
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts

## Identifies a set "internal" hosts whose mail should be signed rather than verified.
# コメント解除 有効化
InternalHosts refile:/etc/opendkim/TrustedHosts
◆KeyTableの設定
署名に使用する秘密鍵を設定をします。
[root@vm-system]#vi /etc/opendkim/KeyTable

# 末尾に以下追記
20220401._domainkey.vm-system.net vm-system.net:20220401:/etc/opendkim/keys/vm-system/20220401.private
◆SigningTableの設定
署名を行うドメインを設定をします。
[root@vm-system]#vi /etc/opendkim/SigningTable

# 末尾に以下追記
*@vm-system.net 20220401._domainkey.vm-system.net
◆TrustedHostsの設定
メールサーバのIPアドレスを設定をします。
[root@vm-system]#vi /etc/opendkim/TrustedHosts

# 設定文内に 127.0.0.1 が書かれている事を確認 書かれていなければ記述
127.0.0.1
◆鍵の自動作成機能をOFF設定
既に、鍵は手動で作成したので、自動作成機能をOFFにしておきます。
[root@vm-system]#vi /etc/sysconfig/opendkim

# 末尾に以下追記
AUTOCREATE_DKIM_KEYS=NO

OpenDKIMのpostfixとの連携

postfixとopendkimを連携するように設定します。
[root@vm-system]#vi /etc/postfix/main.cf

# 末尾に以下追記
# 『◆opendkim.confの設定』で書き留めていたポート番号を記入
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
各オプションは以下の通りです。
・smtpd_milters
smtpdが使用するフィルターの定義 ホスト名とポート番号を指定
DKIMの一般的なポートは8891
・non_smtpd_milters
smtpd以外が使用するフィルターの定義 ホスト名とポート番号を指定
・milter_default_action
smtpdが使用するフィルターが使用出来なかった時の処理を指定
・accept
フィルターを無視
・reject
以降のコマンドを拒否
・tempfail
以降のコマンドを一時的に拒否

設定確認

◆postfixの設定確認
[root@vm-system]#postfix check
エラーメッセージ等何も表示されずに終了すれば設定に問題はありません。

メールサーバーの起動及び再起動

◆opendkimの起動
[root@vm-system]#systemctl start opendkim
◆opendkimの再起動
[root@vm-system]#systemctl restart opendkim
◆opendkimの自動起動設定
[root@vm-system]#systemctl enable opendkim
◆opendkimの自動起動の確認
[root@vm-system]#systemctl is-enabled opendkim
# 以下のように表示されればOKです。
enabled
◆opendkimのstatus確認
[root@vm-system]#systemctl status opendkim
opendkim.service - DomainKeys Identified Mail (DKIM) Milter
Loaded:
loaded (/usr/lib/systemd/system/opendkim.service; enabled; vendor preset: disabled)
Active:
active (running)since Sat 2022-04-30 18:19:05 JST; 18s ago
Docs:
man:opendkim(8)
man:opendkim.conf(5)
man:opendkim-genzone(8)
man:opendkim-testadsp(8)
man:opendkim-testkey
http://www.opendkim.org/docs.html
Process:
65792 ExecStartPost=/bin/sleep 1 (code=exited, status=0/SUCCESS)
Process:
65789 ExecStart=/usr/sbin/opendkim $OPTIONS (code=exited, status=0/SUCCESS)
Main PID:
65791 (opendkim)
Tasks:
3 (limit: 35912)
Memory:
1.5M
CGroup:
/system.slice/opendkim.service
└─65791 /usr/sbin/opendkim -x /etc/opendkim.conf -P /run/opendkim/opendkim.pid
*** 以下略 ***
Statusに問題がないことを確認します。
◆postfixの再起動
[root@vm-system]#systemctl restart postfix
◆postfixのstatus確認
[root@vm-system]#systemctl status postfix
postfix.service - Postfix Mail Transport Agent
Loaded:
loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
Active:
active (running)since Sat 2022-04-30 18:19:05 JST; 18s ago
Main PID:
1469 (master)
Tasks:
7 (limit: 35913)
Memory:
20.8M
CGroup:
/system.slice/postfix.service
├─1469 /usr/libexec/postfix/master -w
├─1485 qmgr -l -t unix -u
├─1491 tlsmgr -l -t unix -u
├─1546 anvil -l -t unix -u
├─4274 pickup -l -t unix -u
├─5447 smtpd -n smtp -t inet -u -o stress= -s 2
└─5470 smtpd -n smtp -t inet -u -o stress= -s 2
*** 以下略 ***
Statusに問題がないことを確認します。
◆認証ソケットファイルの作成確認
メールサーバー稼働後、認証ソケットファイルの作成確認をします。
[root@vm-system]#ls -F /var/spool/postfix/private/auth
# 以下のように表示されればOK
/var/spool/postfix/private/auth =

DMARC

DMARCはSPFやDKIMの送信ドメイン認証を補完し、なりすましメールかどうかを判断することができる送信認証です。
◆DMARCレコードの登録
DMARCレコードの登録を行います。
DMARCとは「Domain-based Message Authentication Reporting and Conformance」の略で、SPFやDKIMの送信ドメイン認証を補完し、なりすましメールかどうかを判断することができる送信認証です。 利用しているDNSサーバー(プロバイダーやドメインレジストラのDNSサーバー、自宅サーバーのDNSサーバー)にDMARCレコードを登録します。
登録方法はDNS設定ページ(画面)で
_dmarc.<ドメイン名> IN TXT “v=DMARC1 ; P= ; rua=mailto:<メールアドレス> ; ruf=mailto:<メールアドレス>”
を記述します。
各オプションは以下の通りです。
・v
DMARCレコードのバージョン番号
・p
DMARCポリシー受信拒否 = reject隔離 = quarantin受信 = none
・rua,ruf
レポートメールを受信するアドレス
なお、上記設定は一般的な設定でプロバイダーやドメインレジストラによってはDNSの設定方法が違います。
違う登録方法の例としてvalue-domain(バリュードメイン)の場合は下記の通りです。
txt @ v=DMARC1; p=none; rua=mailto:<メールアドレス>
となります。
["]ダブルクォーテーションがなく、[txt]の後に一般的な設定が続きます。
◆OpenDMARCのインストール
opendkimは標準のレポジトリには入っていないのでepelレポジトリをインストールしてない場合はインストールします。
[root@vm-system]#dnf -y install epel-release
opendmarcをインストールします。
[root@vm-system]#dnf -y install --enablerepo=epel opendmarc
◆/etc/opendmarc.confの設定
[root@vm-system]#vi /etc/opendmarc.conf

# AuthservID name
# 追記 hostnameを設定
AuthservID HOSTNAME
◆/etc/postfix/main.cfの設定
[root@vm-system]#vi /etc/postfix/main.cf

smtpd_milters = inet:127.0.0.1:8891
# 追記 OpenDKIMがすでに設定してあるので、その後ろに追記します。
smtpd_milters = inet:127.0.0.1:8891, inet:127.0.0.1:8893
◆opendmarcの起動
[root@vm-system]#systemctl start opendmarc
◆opendmarcの再起動
[root@vm-system]#systemctl restart opendmarc
◆opendmarcの自動起動設定
[root@vm-system]#systemctl enable opendmarc
◆opendmarcの自動起動の確認
[root@vm-system]#systemctl is-enabled opendmarc
# 以下のように表示されればOKです。
enabled
◆opendmarcのstatus確認
[root@vm-system]#systemctl status opendmarc
opendmarc.service - Domain-based Message Authentication, Reporting & Conformance (DMARC) Milter
Loaded:
l loaded (/usr/lib/systemd/system/opendmarc.service; enabled; vendor preset: disabled)
Active:
active (running)since Sun 2022-04-01 21:49:28 JST; 1min 2s ago
Docs:
man:opendmarc(8)
man:opendmarc.conf(5)
man:opendmarc-import(8)
man:opendmarc-reports(8)
http://www.trusteddomain.org/opendmarc/
Main PID:
60950 (opendmarc)
Tasks:
3 (limit: 35912)
Memory:
648.0K
CGroup:
/system.slice/opendmarc.service
└─60950 /usr/sbin/opendmarc -c /etc/opendmarc.conf -P /run/opendmarc/opendmarc.pid
*** 以下略 ***
Statusに問題がないことを確認します。
◆postfixの再起動
[root@vm-system]#systemctl restart postfix
◆postfixのstatus確認
[root@vm-system]#systemctl status postfix
postfix.service - Postfix Mail Transport Agent
Loaded:
loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
Active:
active (running)since Sat 2022-04-30 18:19:05 JST; 18s ago
Main PID:
1469 (master)
Tasks:
7 (limit: 35913)
Memory:
20.8M
CGroup:
/system.slice/postfix.service
├─1469 /usr/libexec/postfix/master -w
├─1485 qmgr -l -t unix -u
├─1491 tlsmgr -l -t unix -u
├─1546 anvil -l -t unix -u
├─4274 pickup -l -t unix -u
├─5447 smtpd -n smtp -t inet -u -o stress= -s 2
└─5470 smtpd -n smtp -t inet -u -o stress= -s 2
*** 以下略 ***
Statusに問題がないことを確認します。

ポートの開放確認

POP3S用995番ポート、IMAPS用995番ポート、SMTPS用465番ポート・587番ポート、opendkim用8891番ポート、opendmarc用8893番ポートを使用するのでポート開放確認をします。
[root@vm-system]#netstat -nat
*** 途中略 ***
tcp00 0.0.0.0:9930.0.0.0:*LISTEN
tcp00 0.0.0.0:9950.0.0.0:*LISTEN
tcp00 0.0.0.0:4650.0.0.0:*LISTEN
tcp00 0.0.0.0:5870.0.0.0:*LISTEN
tcp00 127.0.0.1:88910.0.0.0:*LISTEN
tcp00 127.0.0.1:88930.0.0.0:*LISTEN
*** 以下略 ***

メール不正中継拒否テスト

メールサーバーに設定、起動は完了しましたが念のためメールの不正中継を拒否できているかテストをします。
『Open Relay Test』にアクセスし「Mail Server」に自宅サーバーのホスト名(例:vm-system.net)を入力して「Check for Open Relay」ボタンをクリックして下さい。

Thunderbirdの設定

ここでは、ThunderbirdにDKIM Verifier(アドオン)を追加して視覚的に SPF・DKIM・DMARC を確認します。
1.「ツール」→「アドオンとテーマ」をクリック
2.右上の「アドオンを探す」に“DKIM Verifier”と入力し検索(虫メガネ)マーク、もしくは→(右矢印)マークをクリック
3.“DKIM Verifier”を確認し「+Thunderbirdへ追加」をクリック
これでThunderbirdにDKIM Verifierが追加されました。
続いて、設定を行います。
4.「ツール」→「アドオンとテーマ」をクリック
5.左側メニューの「拡張機能」をクリック
6.DKIM Verifierの設定(スパナ)アイコンをクリック
7.「Authentication-Results ヘッダを確認」にチェックを入れる
これで設定は終了です。
後は実際にメールの送受信を行い確認します。
下記はgmailで送受信を行った例です。
赤枠の中に DKIM = 有効・SPF = pass・DMARC = pass となっていることが確認できます。
Thunderbirdの詳しい設定方法は色々なサイト様で公開されていますのでそちらをご覧下さい。

最後に

永々と書いてきましたがメールサーバーを設置する事はハードルが高いことを改めて感じています。
しかし、出来ない事ではありません。しっかりとセキュリティー対策を施し設置後も細目にメンテナンスを行い安全なメールサーバーの運営を行って下さい。
ここに書いてあることは100%正解ではありませんし結果を保証するものでもありません。ご自身のサーバー環境によっても違ってきますので参考程度にお読み下さい。