久々のサーバいじり(pypolicyd-spfインストール忘れ事件)

 業務で大量のサーバの更改をしている中でメールサーバにspf+DKIM+DMARCを適用していてふと思い出す。
 実は本サーバをCentOS8からCentOS8 Streamに変更した際にメール周りに未解決の問題があったことを。
 内容としてはsmtpd_relay_restrictionsにcheck_policy_service unix:private/policyを記載しているとメール受信ができなくなると言うモノだった。
 当時は凄く急いでいたので問題の設定をコメントアウトしてやり過ごしていた。
 なお、理由は単純で、SPF判定用のモジュールであるpypolicyd-spfのインストール忘れだった。業務用のサーバにSPFチェックを仕込む際にふと気がついた。なんというミス。

 さて、受信メールのSPFチェックの確認をしていたのにこんなミスに気がつかなかったのにはちゃんと理由がある。
 結論から言えば、opendmarcがSPFチェックを行っていたのである。

 opendmarcの競ってファイル内のSPFSelfValidateがデフォルトでtrueになっていたことにより、pypolicyd-spfによるSPFチェックがスキップされたことでopendmarcによるSPFチェックが発生した模様。
 なお、実験的にpypolicyd-spfを有効化した場合、pypolicyd-spfによる判定結果がヘッダーに記録されるとともにopendmarcによるSPFチェックはスキップされていた。
 さらに、SPFIgnoreResultsがtrueであるため、判定結果がFAILやSOFTFAILであってもメールの拒否等は発生しない。

 上記から、pypolicyd-spfのFAILメール挙動をFALSEにするのであれば、別にわざわざpypolicyd-spfを使用しなくてもいいことが分かる。
 ただし、opendmarcによるSPFチェックについて一つ気に入らないのが、SPFチェックの結果をRecieved-SPFヘッダーにしてくれず、
 "Authentication-Results: domain.net; spf=pass smtp.mailfrom=from@domain.net"
 というヘッダーにしてしまう。
 これが非常に気に入らないため、最終的にpylocyd-spfを有効化することに決定。
 ついでにopendmarcのSPFSelfValidateをFALSEにしておく。

 とりあえずテストメールのヘッダーを確認して想定通りの挙動であることを確認して終了。


 

 

Linux