Postfix に DKIM を設定する
メールを送信していると何故か迷惑メール扱いになる事があった。
SPF は設定していたのだが DKIM は設定していなかったので、新たに設定してみる事にした。
OpenDKIM のインストール
OpenDKIM は次の方法でインストールする。
# dnf install opendkim opendkim-tools
インストールすると「/etc/opendkim/」ディレクトリが作成される。
しかし何故か設定ファイルは「/etc/opendkim.conf」として作成される。
キーファイルの作成
ここで、自宅のメールサーバーは「mail.magic-object.mydns.jp」なのでそれに対するキーを作成する。
ここを参考にする場合は、自分のメールアドレスの「ユーザー@ドメイン」のドメイン部分に対するキーを作成して下さい。
「/etc/opendkim/keys/」はキーを格納するディレクトリですが、インストールした段階でカラで作成されます。
そして「-s」の後に指定する部分は「セレクタ」と呼ばれる部分なのですが、Postfix で使用するために作成しますので「postfix」としています。
# opendkim-genkey -D /etc/opendkim/keys/ -b 1024 -d mail.magic-object.mydns.jp -s postfix # chown -R opendkim:opendkim /etc/opendkim/keys/ # ls -l keys 合計 8 -rw-------. 1 opendkim opendkim 916 3月 26 01:27 postfix.private -rw-------. 1 opendkim opendkim 330 3月 26 01:27 postfix.txt
これで公開キー「postfix.txt」と秘密キー「postfix.private」が作成されました。
公開キーは DNS で使用します。(DNSのTXTレコード形式で記述されています。)
「/etc/opendkim.conf」の編集
次の項目を編集します。
ドメイン部分(Domain)は自分のモノに変更して下さい。
セレクタ(Selector)は「postfix」にします。
キーファイル(Keyfile) には秘密キーを指定します。(公開キーはDNSで使用しますので指定する必要はありません)
ソケット(Socket)はネットワーク形式で記述します。(UNIXドメインソケット形式は後術)
その他は変更の必要はありません。
# 送信時は署名を行い、受信時は検証する Mode sv Domain mail.magic-object.mydns.jp Selector postfix KeyFile /etc/opendkim/keys/postfix.private Socket inet:8891@localhost
ソケットをUNIXドメインソケット形式にするには次の様に設定します。(個人的には非推奨)
ですが、家の環境ではどうしても接続エラーになってしまいました。
Socket local:/run/opendkim/opendkim.sock Umask 000
OpenDKIM の起動とデフォルト化
# systemctl enable opendkim.service # systemctl start opendkim.service
Postfix の「/etc/postfix/main.cf」の編集
次の部分を追加します。
smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters milter_default_action = accept milter_protocol = 2
UNIXドメインソケット形式では「smtpd_milters = unix:/run/opendkim/opendkim.sock」と指定します。
Postfix の再起動
# systemctl restart postfix
MyDNS での編集
「/etc/opendkim/keys/postfix.txt」(公開キー)の内容は次の様になっていました。
※ 必ず自分で作成した公開キーを参考にして下さい。こちらを参考にしても意味はありません。
postfix._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZOXGC1e0ASZTbYKkaDCdXFwMEm5KIBERA/Ej5+rC2Xo3koAlczPypQFR/ZDrDqVPjbPH7mQPZvBeVnaejft6qXoxhYBOQqdwxZtdDBESAzQfIkMf7Eke4ydmRkT1nQ0kU29r4Jik+Bg4wDrfN1+ceOJKQ2L8BfGUYqX9pM7EjqwIDAQAB" ) ; ----- DKIM key postfix for mail.magic-object.mydns.jp
ですので、MyDNS では次の様に設定しました。
追加するのは2項目「_adsp._domainkey.mail」と「postfix._domainkey.mail」です。
ポイントは「mail」が既にサブドメインですので、それに追加する形で「.mail」が必要な事です。(メールアドレスのドメイン部分が「XXX@mail.XXX」となっている場合はこうなるハズです。
どちらも「TXT」タイプで指定して「_adsp._domainkey.mail」には「dkim=unknown」と指定します。
では設定が上手くいっているか確認します。
# dig @8.8.8.8 _adsp._domainkey.mail.magic-object.mydns.jp TXT ; <<>> DiG 9.18.24 <<>> @8.8.8.8 _adsp._domainkey.mail.magic-object.mydns.jp TXT ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34157 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;_adsp._domainkey.mail.magic-object.mydns.jp. IN TXT ;; ANSWER SECTION: _adsp._domainkey.mail.magic-object.mydns.jp. 300 IN TXT "dkim=unknown" ;; Query time: 31 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) (UDP) ;; WHEN: Tue Mar 26 22:52:47 JST 2024 ;; MSG SIZE rcvd: 97
# dig @8.8.8.8 postfix._domainkey.mail.magic-object.mydns.jp TXT ; <<>> DiG 9.18.24 <<>> @8.8.8.8 postfix._domainkey.mail.magic-object.mydns.jp TXT ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58030 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;postfix._domainkey.mail.magic-object.mydns.jp. IN TXT ;; ANSWER SECTION: postfix._domainkey.mail.magic-object.mydns.jp. 300 IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZOXGC1e0ASZTbYKkaDCdXFwMEm5KIBERA/Ej5+rC2Xo3koAlczPypQFR/ZDrDqVPjbPH7mQPZvBeVnaejft6qXoxhYBOQqdwxZtdDBESAzQfIkMf7Eke4ydmRkT1nQ0kU29r4Jik+Bg4wDrfN1+ceOJKQ2L8BfGUYqX9pM7EjqwIDAQAB" ;; Query time: 46 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) (UDP) ;; WHEN: Tue Mar 26 22:54:15 JST 2024 ;; MSG SIZE rcvd: 321
メールを送信してみて確認する
メールを Gmail に送信して、メールのソースを確認します。
dkim=pass header.i=@mail.magic-object.mydns.jp header.s=postfix header.b=lETfiDSh;
無事にパスしています。これで DKIM の設定は完了しました。
問題
SPF も設定してパスし、DKIM もパス、「dmarc=pass」となっているにも関わらず Gmail では迷惑メール扱いになる。どうやら MyDNS を利用している事に問題がありそうだ。