今さらながら、やっと導入してみた。その導入メモ。
現在はRspamdのSPF機能を使用しているため、この機能は使っていない。
環境
- FreeBSD 13.1
- Postfix 3.7.2
- py-spf-engine (※今回導入)
PostfixにSPFを導入する記事を探すと「postfix-policyd-spf-python」を使用しているものが多い。このpostfix-policyd-spf-pythonが廃止され、後継となったのがpy-spf-engine。らしい。
送信側の設定
DNSにSPFレコードを追加
DNSサーバの設定に、次の行を追加。
txt @ v=spf1 ip4:192.168.1.23 ip4:192.168.1.22 ~all
IPアドレスは実際のサーバアドレスに合わせて適宜変更。
動作確認
SPFレコードが引けているかどうか、チェックツールでチェックする。
一番上の「Domain name」の欄にドメイン名を入力し、「Get SPF Record (if any)」ボタンをクリック。SPFレコードが表示されればOK。表示されなければ、何か設定を失敗している。
受信側の設定
py-spf-engineをインストール
portmasterでmail/py-spf-engineをインストールする。
> sudo portmaster mail/py-spf-engine
master.cf
/usr/local/etc/postfix/master.cfに次の行を追加。
policyd-spf unix - n n - 0 spawn
user=nobody argv=/usr/local/bin/policyd-spf
main.cf
/usr/local/etc/postfix/main.cfに次の行を追加。
smtpd_recipient_restrictions =
reject_unauth_destination
check_policy_service unix:private/policyd-spf
policyd-spf_time_limit = 3600
smsmtpd_recipient_restrictionsの定義がすでにある場合には、check_policy_serviceの定義を必ずreject_unauth_destinationの後ろに追記する。記載順を間違えるとオープンリレーになってしまうため。と、インストール時に表示される説明に書かれていた。
policyd-spf.conf
/usr/local/etc/python-policyd-spf/policyd-spf.confを編集。
debugLevel = 1
TestOnly = 1
HELO_reject = False
Mail_From_reject = False
PermError_reject = False
TempError_Defer = False
skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0/104,::1
HELO_rejectとMail_From_rejectは、デフォルトでFailになっていたのをFalseに変更。
SoftfailやNeutralなメールを拒否せず、Received-SPFヘッダをつけて様子見をするため。問題なさそうなら、いずれFailに変更するかもしれない。
rc.conf
/etc/rc.confに次の行を追加。システム起動時にpolicydを有効にするため。
pyspf_milter_enable="YES"
参考資料
- 間違いから学ぶSPFレコードの正しい書き方 (インターネット協会)