メールセキュリティの機能として知られるSPF検証は、迷惑メールなどの対策として、ほぼすべてのメールシステムで実装されている。
本記事では、PostfixにSPF検証機能を実装する手順を記載する。
環境
- OS : AlmaLinux release 9.3
- Postfix : 3.5.9
- pypolicyd-spf : 2.9.3-4
導入手順
1. pypolicyd-spfをインストール
Postfixは単体ではSPF検証を行うことはできないので、pypolicyd-spfをdnf
でインストールする。
# dnf install pypolicyd-spf -y
pypolicyd-spfの設定ファイルはシンプルな内容となっている。SPFレコードのチェックは、HELO時に記載されたドメインとMAIL FROMに記載されたドメインの2か所に対して実施し、受信拒否をすることができる。
今回はどちらもチェックさせるよう、そのままの設定とするが、受信拒否をさせたくない場合は、Fail
をFalse
に変更すればよい。また、このままでは内部から外部へメール送信時もSPFチェックがされてしまうので、ローカルのネットワークアドレスをskip_addresses
に追加しておこう。
/etc/python-policyd-spf/policyd-spf.conf
# For a fully commented sample config file see policyd-spf.conf.commented
debugLevel = 1
TestOnly = 1
HELO_reject = Fail
Mail_From_reject = Fail
PermError_reject = False
TempError_Defer = False
skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0/104,::1,192.168.0.0/16
2. Postfixの設定
メール受信時にpolicyd-spfに渡すための設定を実施する。
/etc/postfix/master.cf
policyd-spf unix - n n - 0 spawn
user=nobody argv=/usr/libexec/postfix/policyd-spf
/etc/postfix/main.cf
smtpd_recipient_restrictions = check_policy_service unix:private/policyd-spf
policyd-spf_time_limit = 3600
設定後、Postfixのサービスを再起動し、設定を反映させる。
# systemctl restart postfix
# systemctl status postfix
3. 動作確認(SPF検証成功例)
実際にメールを受信した際に、SPF検証に成功している際のログを以下に記載する。
Mar 10 06:40:54 hoge policyd-spf[57430]:
prepend Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=123.45.67.89;
helo=mail-xxxx.google.com; envelope-from=hoge@gmail.com; receiver=<UNKNOWN>
通過したメールのヘッダーにもSPF検証がPassしている旨追記される。
4. 動作確認(SPF検証NGの例)
SPF検証がNGとなる場合は、HELOとMAIL FROMの場合で若干メッセージが異なるため、2パターンをそれぞれ記載する。
HELOのSPF検証NG
550 5.7.23 <tech-mmmm@hoge.tech-mmmm.com>:
Recipient address rejected: Message rejected due to: SPF fail - not authorized.
Please see http://www.openspf.net/Why?s=helo;id=example.com;ip=192.168.111.1;r=<UNKNOWN>
MAIL FROMのSPF検証NG
550 5.7.23 <tech-mmmm@hoge.tech-mmmm.com>:
Recipient address rejected: Message rejected due to: SPF fail - not authorized.
Please see http://www.openspf.net/Why?s=mfrom;id=from@hoge.tech-mmmm.com;ip=192.168.111.1;r=<UNKNOWN>
以上で、PostfixにSPF検証機能を実装する手順は完了となる。
更新履歴
- 2024/3/10 新規作成
- 2024/3/16 skip_addressesの記載を追記