メモ > サーバ > 構築: メールサーバ設定 > DKIMの設定
■DKIMの設定
■OpenDKIMインストール
OpenDKIM で迷惑メール判定を回避する - Qiita
https://qiita.com/bezeklik/items/a3619b5abc01ab38bec4
自ドメインのDNSとPostfixをSPF/DKIM対応させてみた - Qiita
https://qiita.com/Sabuuuuu---nn/items/fc5448b7f5e3057365a1
CentOSのPostfixで迷惑メール判定されないようDKIMを設定する - レムシステム エンジニアブログ
https://www.rem-system.com/dkim-postfix04/
# amazon-linux-extras install -y epel … EPELのインストール
# yum install -y opendkim … OpenDKIMのインストール
■OpenDKIMの設定
# mkdir /etc/opendkim/keys/refirio.net … キーペア保存用ディレクトリ作成(管理ドメイン毎にキーペアを生成するため)
# mkdir /etc/opendkim/keys/stg.refirio.net … stg.refirio.net も設定する場合
以降にある「20200409」は「default」でもいいか
もしくは、複数回作成したり定期的にキーを変更したりするなら、記載のとおり日付の方がいいか
# opendkim-genkey -D /etc/opendkim/keys/refirio.net -d refirio.net -s 20200409 … キーペアの作成
# opendkim-genkey -D /etc/opendkim/keys/stg.refirio.net -d stg.refirio.net -s 20200409 … stg.refirio.net も設定する場合
# chown -R opendkim:opendkim /etc/opendkim/keys … 所有者の一括変更
# vi /etc/opendkim/KeyTable … KeyTableの変更
※上記設定のフォーマットは以下のとおり
[セレクタ名]._domainkey.[ドメイン名] [ドメイン名]:[セレクタ名]:[秘密鍵へのパス]
20200409._domainkey.refirio.net refirio.net:20200409:/etc/opendkim/keys/refirio.net/20200409.private
20200409._domainkey.stg.refirio.net stg.refirio.net:20200409:/etc/opendkim/keys/refirio.net/20200409.private … stg.refirio.net も設定する場合
# vi /etc/opendkim/SigningTable … SigningTableの変更
※上記設定のフォーマットは以下のとおり
*@[ドメイン名] [セレクタ名]._domainkey.[ドメイン名]
*@refirio.net 20200409._domainkey.refirio.net
*@stg.refirio.net 20200409._domainkey.stg.refirio.net … stg.refirio.net も設定する場合
# vi /etc/opendkim.conf … 設定ファイルの編集
■Postfixの設定
#Mode v
Mode sv … 「s」送信時の署名「v」受信の確認の両方行う
#KeyFile /etc/opendkim/keys/default.private … コメントアウト
# KeyTable /etc/opendkim/KeyTable
KeyTable /etc/opendkim/KeyTable … コメント解除
# SigningTable refile:/etc/opendkim/SigningTable
SigningTable refile:/etc/opendkim/SigningTable … コメント解除
# ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts … コメント解除
# InternalHosts refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts … コメント解除
# vi /etc/postfix/main.cf … 最終行へ設定を追記
※sendmailとPostfixでは、Milterと呼ばれるAPIが提供されている
Milterを利用して外部プログラムと連携し、メールの受信や配送を制御する機能を追加できる
Milterは通常、127.0.0.1の8891番ポートで稼働している
DKIM署名を行なうための外部プログラムは、このアドレスとポートで待機している
OpenDKIMの場合 /etc/opendkim.conf でポートを設定できるが、通常変更する必要は無い。また内部通信用なので、ファイヤーウォールで開放する必要も無い
MTAとMilterによる外部連携 | OSSのデージーネット
https://www.designet.co.jp/ossinfo/postfix/milter/
Postfix で dkim-milter(dkim-filter) を使ってDKIM に対応する(Debian/Ubuntu編) | レンタルサーバー・自宅サーバー設定・構築のヒント
https://server-setting.info/debian/postfix-dkim-milter.html
■OpenDKIM起動
# DKIM
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
# systemctl restart postfix
# systemctl start opendkim
# systemctl enable opendkim
■DNSの設定
No サブドメイン 種別 内容 優先度
4 20200409._domainkey TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFzmEY4m3v2bNRL68kIGwtTkmFxs5IU+cQdZHLOEtNAi+7m33wvgEz/AAbWqxMUX5+lTNpon0nLSKRlcvKGmNfQWCtwAbQOt3n5HleiZrtme66G8o0cpWryI9YF7lWFzw0OPYm+oNwCZEd9x5aSEIWwtCxuiJjnDu7iZGnDwNtKwIDAQAB"
5 _adsp._domainkey TXT "dkin=unknown"
※20200409._domainkey の内容は /etc/opendkim/keys/refirio.net/20200409.txt の内容を参照する
複数行で以下のように記載されているので、上のように1行にして記載する
# cat /etc/opendkim/keys/refirio.net/20200409.txt
20200409._domainkey IN TXT ( "v=DKIM1; k=rsa; "
"p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFzmEY4m3v2bNRL68kIGwtTkmFxs5IU+cQdZHLOEtNAi+7m33wvgEz/AAbWqxMUX5+lTNpon0nLSKRlcvKGmNfQWCtwAbQOt3n5HleiZrtme66G8o0cpWryI9YF7lWFzw0OPYm+oNwCZEd9x5aSEIWwtCxuiJjnDu7iZGnDwNtKwIDAQAB" ) ; ----- DKIM key 20200409 for refirio.net
■反映の確認
別サーバから以下で反映を確認
$ dig 20200409._domainkey.refirio.net any
$ dig _adsp._domainkey.refirio.net any
反映されていれば、Gmailに対してメールを送信してみる
メッセージのソースを表示して以下のように表示されていれば成功
2020年4月時点に試したところ、SPFとDKIMの両方を設定して初めて、Gmailに迷惑メール扱いされなくなった
DKIM: 'PASS'(ドメイン: refirio.net)
■PHPから送信
※未検証
※PHPの標準命令で送信する場合、PHPMailerでSMTPを使って送信する場合、の両方で
普通に送信すればDKIM署名付きで送信できているみたい
PHPでDKIM署名を作成する | Tricorn Tech Labs
https://lab.tricorn.co.jp/yamada/4109
反映されていれば、Gmailに対してメールを送信してみる
メッセージのソースを表示して以下のように表示されていれば成功
DMARC: 'PASS'