2024年3月10日日曜日

PostfixにSPF検証機能を実装する

メールセキュリティの機能として知られる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か所に対して実施し、受信拒否をすることができる。

今回はどちらもチェックさせるよう、そのままの設定とするが、受信拒否をさせたくない場合は、FailFalseに変更すればよい。また、このままでは内部から外部へメール送信時も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の記載を追記

人気の投稿