Nifty/Gmail/ezwebにmydnsからのメールが届くようにする

何代か前のサーバーのときにOP25BなるものがでてきてNiftyはじめ、mydnsドメインからのメールが届かなくなったことがあるが、その際はOP25B対応してメールが届くようになった。

が、いつだったか再びあちこちにmydnsからのメールが届かなくなって何だろうな~と思ったら、今どきのメールっていろいろ処置を施さないと届かないようで…

ということで、いろいろ対策してみた。

今どきのメールに必要なこと

OP25B対応も必要だが、これ以外に以下が必要。

  • SPFの設定
  • DMARCの設定
  • DKIM認証の設定

このうち、SPFとDMARCはDNSレコードで設定するのだが、これは自鯖でなくmydnsのレコードを設定する。

SPFの設定

SPFはメール送信者のドメインに対して送信サーバは○○だよという設定をして、メールの偽装を防ぐ仕組み。 具体的にはDNSのレコードに、

IN TXT "v=spf1 +ip4:メールサーバのIPアドレス -all"

といった記述をするのだが、mydnsでは自動でSPFを設定しているようなので特に追加の設定は不要
(SPFの記述をしたTXTレコードを追加すれば、そちらを優先するらしい)

DMARCの設定

DMARCは送信されたメールがDMARCの認証に合格しないときにどう処理するかを記述したレコード。

https://dmarcian.com/dmarc-inspector/https://mxtoolbox.com/ で確認しながら設定してみたところ、mydnsでは、

HostnameTypeContent
_dmarcTXTv=DMARC1; p=; rua=mailto:レポート送信先アドレス;

と書くのが良さそうだ。

DKIM認証の設定

DKIMはDomain Keys Identified Mailの略で、メール送信時に電子署名を付加し、受信側ではDNSに設定された内容に基づいて受信したメールの署名を確認する仕組み。

つまり、メールを送信する際に電子署名を付加するようにしなければならず、これはOpendkimをインストールするとできるようだ。

Opendkimは、

apt update
apt install opendkim opendkim-tools

でインストールでき、インストール後に、

opendkim-genkey -b 1024 -D /etc/dkimkeys -d xxxx.xxxx.jp -s <セレクター>
※mydnsのTXTレコードは250文字までしか登録できないので、"-b 1024"で秘密鍵の長さを制限する。

で秘密鍵を作成し、

chown opendkim:opendkim /etc/dkimkeys/mail.private
chown opendkim:opendkim /etc/dkimkeys/mail.txt

で所有者を変更。そして/etc/opendkim.confを、

Mode		sv
Domain		xxxx.xxx.jp
Selector	<セレクター>
KeyFile 	/etc/dkimkeys/mail.private
Socket      inet:8891@localhost

な感じで編集する。編集後、

systemctl restart opendkim

で再起動すればOK。

次に、mydns側のレコードに/etc/dkimkeys/mail.txtの内容をもとに、

HostnameTypeContent
<セレクター>._domainkeyTXTv=DKIM1; h=sha256; k=rsa; p=~

のように追加する。

これでOpendkimとDNSレコードの設定はできたが、もう一つ、メール送信時に電子署名を付加するよう、postfixの設定(/etc/postfix/main.cf)に以下を追加する。

smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

設定変更後、systemctl restart postfixで再起動すればOK。

テスト送信

自鯖アカウントを設定したメールクライアントから、Nifty、Gmail、ezwebにテストメールを送信、それぞれ受信することができ、

Nifty宛てOK
Gmail宛てOK
ezweb宛てOK

SPF/DMARC/DKIMのチェックがパスしたという情報がヘッダに付加されたことが確認でき、自鯖からのメールが適切に処理されるようになった。