SPF Permanent Error でメールが受信できない(届かない)

SPF Permanent Error でメールが受信できない(届かない)


事象

【メール送信側】
メールを送信しようとするとエラーが表示されて送信できない

【メール受信側】
受信トレイにもSpamにもメールが届いておらず、メールが確認できない

原因調査

メールログ確認

送信側受信側どちらに問題があるかわからないので、こちら側(受信側)のメールサーバーのログを確認しました

vi /var/log/maillog

最近届いていなかったメールのドメイン(3つほど)でフィルターしたところ、以下のようなエラーが出ており、メールがreject(拒否)されていました

Recipient address rejected: Message rejected due to: SPF Permanent Error: Unknown mechanism found
Recipient address rejected: Message rejected due to: SPF Permanent Error: Two or more type TXT spf records found
Recipient address rejected: Message rejected due to: SPF Permanent Error: Too many DNS lookups

それぞれ細かい内容は少し違うものの、すべて「SPF Permanent Error」が出ていることがわかります

SPF Permanent Errorについて

SPF Permanent Error はどういうエラーかというと、メール送信側のSPFレコードが正しく設定できていない(構文エラーがある)時に出るエラーです

つまり、送信サーバー側の設定が間違っているということです

解決策

相手側の設定間違いとはいえ、相手に直してくれとは言いづらい(特にお客様相手だと)ものですし、最近同様の件で複数メールが受信できていないのでこちら側で何か対応できないか調べました
(本音を言うと、向こうが原因なので悔しいですが)

こちら側のサーバーではSPF認証用にpostfix-policyd-spf-pythonを使用しています
/etc/python-policyd-spf/policyd-spf.conf というファイルを編集して許可や拒否の設定を実施します
その中のPermError_rejectの設定を変更し、SPF構文エラーがあるメールでも受信できるようにします
※ 本来はセキュリティの観点からTrueが望ましいので、設定は自己責任でお願いします

vi /etc/python-policyd-spf/policyd-spf.conf
#PermError_reject = True ← コメントアウト
PermError_reject = False ←追加

設定変更後、postfixを再起動します

systemctl reload postfix

参考

https://hgotoh.jp/wiki/doku.php/documents/quick/quick-0016
https://www.tyksnet.com/blog/archives/2916