Gmailは2024年2月より、1日あたり5,000件以上のメールを送信する送信元においては、SPF(エスピーエフ)、DMARC(ディーマーク)、DKIM(ディーキム)の設定が必須となるよう、セキュリティポリシーが変更される。
私は自宅検証環境においてメール送受信できるPostfixのメールサーバを構築しているが、SPF以外のDMARCとDKIMの対応ができていなかった。
そこで、本記事では、DNSへレコード追加とPostfixへOpenDKIMを導入し、SPF、DMARC、DKIMに対応したメール送信環境を構築する手順を記載する。
環境
自宅検証環境の構成概要図は以下の通り。今回は、以下構成図の赤枠で示している内部のメールサーバのPostfixと、外部DNSとして利用している「お名前ドットコム」に対して設定変更を行う。
本記事で説明に用いるドメインはexample.tech-mmmm.com
とするため、各自の所有するドメインに読み替えて参照いただきたい。
SPF
SPFへの対応はDNSへ登録するのみで完了できる。具体的には以下のようなSPFレコード (TXTレコード)をDNSに登録する。
example.tech-mmmm.com. 3600 IN TXT
"v=spf1 +ip4:[送信元となるメールサーバのIPアドレス] -all"
DMARC
DMARCへの対応もSPFと同様、DNSへ登録するのみで完了できる。レコードは_dmarc.[ドメイン名]
で登録するが、具体的には以下のようなDMARCレコード (TXTレコード)をDNSに登録する。
p=none
はポリシーの設定であり、今回はDMARCの結果において特に何もしない (None)という設定としている。
rua
とruf
はDMARCの判定結果のレポートを送信する自ドメインのメールアドレスを設定すればよい。設定すると、Gmailからは1日1回おおよそAM 9:00 (UTCでいうと0:00)に「Report domain: example.tech-mmmm.com Submitter: google.com」というタイトルのメールがレポートとして送られてくるようになる。
_dmarc.example.tech-mmmm.com. 3600 IN TXT
"v=DMARC1; p=none; rua=mailto:dmarc-report@example.tech-mmmm.com; ruf=mailto:dmarc-report@example.tech-mmmm.com;"
DKIM
DKIMに関してはメール送信時に署名を付与する仕組みが必要であり、Postfixの場合はMilter (Mail Filter)として動作するOpenDKIMを使用する。
以下に導入手順を記載する。
1. OpenDKIMインストール
EPELのリポジトリ追加後、以下をインストールする。opendkim-tools
に鍵情報を作成するコマンドが含まれているため、併せてインストールすること。
# dnf install epel-release -y
# dnf install opendkim opendkim-tools -y
2. DKIM署名用の鍵を作成
DKIM署名用の鍵は、opendkim-genkey
コマンドで行う。
-s
オプションでセレクタと呼ばれる任意の識別するための文字列を指定できる。今回はmyselector
と設定した。-b
オプションは鍵の長さを設定するオプションとなり、OpenDKIMのデフォルトは1024bitとなるが、セキュリティの観点から2048bitで設定する。
# mkdir /etc/opendkim/keys/example.tech-mmmm.com
# opendkim-genkey -D /etc/opendkim/keys/example.tech-mmmm.com/ -d example.tech-mmmm.com -s myselector -b 2048
# ls -l /etc/opendkim/keys/example.tech-mmmm.com/
合計 8
-rw-------. 1 root root 887 1月 27 18:01 myselector.private
-rw-------. 1 root root 328 1月 27 18:01 myselector.txt
鍵情報のファイルは、ユーザー・グループを変更しておく。
# chown -R opendkim:opendkim /etc/opendkim/keys/example.tech-mmmm.com/
# ls -l /etc/opendkim/keys/example.tech-mmmm.com/
合計 8
-rw-------. 1 opendkim opendkim 887 1月 27 18:01 myselector.private
-rw-------. 1 opendkim opendkim 328 1月 27 18:01 myselector.txt
3. 設定ファイル修正
OpenDKIMの設定ファイルであるopendkim.conf
を以下の通り修正する。
# vi /etc/opendkim.conf
Mode sv # vからsvに変更
Socket inet:8891@localhost # アンコメント (UNIXドメインソケットからinetソケットに変更)
#Socket local:/run/opendkim/opendkim.sock # コメントアウト
Selector myselector # defaultから変更
KeyTable /etc/opendkim/KeyTable # アンコメント
SigningTable refile:/etc/opendkim/SigningTable # アンコメント
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts # アンコメント
InternalHosts refile:/etc/opendkim/TrustedHosts # アンコメント
セレクタとドメインのに対して使用する鍵情報を紐づけるKeyTable
ファイルを以下の通り記載する。
# vi /etc/opendkim/KeyTable
myselector._domainkey.example.tech-mmmm.com example.tech-mmmm.com:myselector:/etc/opendkim/keys/myselector.private
署名する際のメールのドメインと使用する鍵情報を紐づけるSigningTable
ファイルを以下の通り記載する。
# vi /etc/opendkim/SigningTable
*@example.tech-mmmm.com myselector._domainkey.example.tech-mmmm.com
OpenDKIMが信頼できるホストとして認識するホストやネットワークを指定する。今回は内部環境となるので、0.0.0.0/0
で指定する。
# vi /etc/opendkim/TrustedHosts
0.0.0.0/0
4. OpenDKIMサービスを起動
設定完了後、OpenDKIMのサービスを起動させる。
# systemctl start opendkim
# systemctl enable opendkim
起動するとポート8891番でLISTENしているかどうか確認しておく。
# ss -nl | grep 8891
tcp LISTEN 0 128 127.0.0.1:8891 0.0.0.0:*
5. Postfixの設定修正
OpenDKIMをMilterとして指定するため、以下3行を追加する。
# vi /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
設定完了後、Postfixを再起動しておく。
# systemctl restart postfix
6. DNS設定
DKIMはDNSの登録された公開鍵情報を用いて署名の検証を行うため、DNSへレコードの追加が必要となる。レコードは[セレクタ名]._domainkey.[ドメイン名]
で登録する。レコードの内容は鍵を生成した際に作成される、/etc/opendkim/keys/example.tech-mmmm.com/myselector.txt
のファイルに記載されているで、このまま登録を行えば問題ない。
# cat /etc/opendkim/keys/example.tech-mmmm.com/myselector.txt
myselector._domainkey IN TXT ( "v=DKIM1; k=rsa; "
"p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCyLeUjkqVc712NhH1/20UMGW4rxg4F4sQilrauxt5mWPEbu342y+Px+OD4oVZ1yeF9NAAAgExIJBwl854p1bn87rVgam9J/3mYICCD5GhbBy6MEFODgMZXcSvJ8Q2g7S1Y0mro95mI2p+8WtPfxjUTzERemcduNa3eZu7+i1I1GwIDAQAB" ) ; ----- DKIM key myselector for example.tech-mmmm.com
上記の通りDNSに登録を行う。
myselector._domainkey.example.tech-mmmm.com. 3600 IN TXT
"v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCyLeUjkqVc712NhH1/20UMGW4rxg4F4sQilrauxt5mWPEbu342y+Px+OD4oVZ1yeF9NAAAgExIJBwl854p1bn87rVgam9J/3mYICCD5GhbBy6MEFODgMZXcSvJ8Q2g7S1Y0mro95mI2p+8WtPfxjUTzERemcduNa3eZu7+i1I1GwIDAQAB"
動作確認
実際にメールを送信した際のGmailにおける受信結果が以下となる。SPF、DKIM、DMARCがすべてPASSしていることがわかる。
以上で、DNSへレコード追加とPostfixへOpenDKIMを導入し、SPF、DMARC、DKIMに対応したメール送信環境を構築する手順は完了となる。
0 件のコメント:
コメントを投稿