【Ubuntu Server 22.04】PostfixにSPFチェック機能を追加(policyd-spf)

Ubuntu Server 22.04にインストールされたPostfixでメール受信時にSPFのチェックを行う方法です。

SPFのチェックにはpolicyd-spf(postfix-policyd-spf-python)を使用しています。

メールサーバ構築手順

  1. 【Ubuntu Server 22.04】Postfix + SMTP-AUTH + Dovecotでメ>ールサーバを構築
  2. 【Ubuntu Server 22.04】DovecotをSSL通信で暗号化
  3. 【Ubuntu Server 22.04】PostfixでTLSを有効化して通信を暗号化
  4. 【Ubuntu Server 22.04】PostfixにDKIMの設定を追加
  5. 【迷惑メール対策】ざっくり説明SPFの設定方法(送信側)
  6. 【迷惑メール対策】ざっくり説明DMARCの設定方法(送信側)
  7. 【Ubuntu Server 22.04】PostfixにSPFチェック機能を追加(policyd-spf)
  8. 【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>

コメント

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