2024年1月28日日曜日

SPF、DMARC、DKIMに対応するためのDNSとPostfix (OpenDKIM)設定手順

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)という設定としている。

ruarufは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 件のコメント:

コメントを投稿

人気の投稿