Ubuntu Server 22.04にインストールされたPostfixでメール受信時にSPFのチェックを行う方法です。
SPFのチェックにはpolicyd-spf(postfix-policyd-spf-python)を使用しています。
メールサーバ構築手順
- 【Ubuntu Server 22.04】Postfix + SMTP-AUTH + Dovecotでメールサーバを構築
- 【Ubuntu Server 22.04】DovecotをSSL通信で暗号化
- 【Ubuntu Server 22.04】PostfixでTLSを有効化して通信を暗号化
- 【Ubuntu Server 22.04】PostfixにDKIMの設定を追加
- 【迷惑メール対策】ざっくり説明SPFの設定方法(送信側)
- 【迷惑メール対策】ざっくり説明DMARCの設定方法(送信側)
- 【Ubuntu Server 22.04】PostfixにSPFチェック機能を追加(policyd-spf)
- 【Ubuntu Server 22.04】PostfixとOpenDMARCでDMARC認証を行う方法
policyd-spf
UbuntuにインストールされているPostfixと連携させるpolicyd-spfには、pythonを使うものとperlを使うもの2種類があります。
- postfix-policyd-spf-python
- postfix-policyd-spf-perl
今回はpythonを使うpostfix-policyd-spf-pythonを使用していきます。
インストール
aptを使ってpostfix-policyd-spf-pythonをインストールします。
$ sudo apt update $ sudo apt install postfix-policyd-spf-python
設定
設定ファイルである/etc/postfix-policyd-spf-python/policyd-spf.confを編集します。
$ cd /etc/postfix-policyd-spf-python/ $ sudo cp -p sudo cp -p policyd-spf.conf policyd-spf.conf_$(date +%Y%m%d-%H%M%S) $ sudo vi policyd-spf.conf
編集内容
初期設定ではSPFの認証チェックに失敗するとメールを受信拒否する設定(Fail)になっていますので、ヘッダーに失敗を情報を追加する設定(False)に変更します。
SPFの認証チェックに失敗した場合、受信を拒否したい場合はFailのままで構いません。
変更前
HELO_reject = Fail Mail_From_reject = Fail
変更後
HELO_reject = False Mail_From_reject = False
SPFのチェックに失敗した際の動作には下記の種類が有ります。
- SPF_Not_Pass :Pass None Tempfail以外は拒否
- Softfail :SoftfailまたはFailの場合拒否
- Fail :Failの場合拒否
- Null :Failかつ送信者がNullの場合拒否
- False :チェック失敗の場合ヘッダーのみを追加
- No_Check :チェックしない
Postfix
postfix-policyd-spf-pythonとPostfixを連携させるための設定を行っていきます。
master.cf設定
/etc/postfix/master.cfにpolicyd-spf用の設定を追加します。
$ cd /etc/postfix $ sudo cp -p master.cf master.cf_$(date +%Y%m%d-%H%M%S) $ sudo vi master.cf
master.cfの最後に下記の内容を追加します。
# Policyd-sfp Setting policyd-spf unix - n n - 0 spawn user=policyd-spf argv=/usr/bin/policyd-spf
一行目のspawnの後にはスペースなどを入れずに改行してください。
2行目の最初はTabかスペースを入力する必要が有ります。
main.cf設定
$ sudo cp -p main.cf main.cf_$(date +%Y%m%d-%H%M%S) $ sudo vi main.cf
SPF認証チェックのタイムアウト設定である「policyd-spf_time_limit」と、smtpd_relay_restrictionsに「check_policy_service unix:private/policyd-spf」の設定を追加します。
check_policy_serviceは必ずpermit_sasl_authenticatedやreject_unauth_destinationの後に追加する必要が有ります。
smtpd_relay_restrictionsは設定した順番にルールが適用されていくので、前に入れてしまうとオープンリレーのメールサーバとなってしまいます。
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination check_policy_service unix:private/policyd-spf policyd-spf_time_limit = 3600
smtpd_relay_restrictionsではなく、smtpd_recipient_restrictionsでメールのリレー制御を行っている場合も同様に、permit_sasl_authenticatedとreject_unauth_destinationの後にcheck_policy_service unix:private/policyd-spfを追加してください。
設定反映
Postfixを再起動して設定を反映させます。
$ sudo systemctl restart postfix
オープンリレーチェック
下記サイトでオープンリレーする設定になっていないか確認してください。
https://tools.appriver.com/OpenRelay.aspx
Mail Serverの欄にチェックするメールサーバのホスト名を入力し、「Check for Open Relay」ボタンを押下すると18種類のテストが始まり、しばらくすると結果が表示されます。
それぞれのテスト結果にRelay NOT Acceptedと表示されていることを確認してください。
動作確認
実際にメールを受信して、ヘッダーにSPFチェックの情報が記載されているか確認してください。(下記画像では情報を一部マスクしています)
/var/log/mail.logにもplicyd-spfのログが残っているので、SPFの認証チェックについて確認することが出来ます。
gmailからのメールを受信した際のログになります。(情報を一部マスクしています)
policyd-spf[17367]: prepend Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=xxxx.xxx.xxx.xxx; helo=xxxxx.google.com; envelope-from=xxx@gmail.com; receiver=<UNKNOWN>
コメント