PostfixにSPF導入

今さらながら、やっと導入してみた。その導入メモ。

現在は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"

参考資料

タイトルとURLをコピーしました