Postfix SPF 認証 設定メモ(postfix-policyd-spf-python)

Linux
Linux
スポンサーリンク

受信したメールの送信元メールアドレスが、詐称されていないかを確認するため PostfixでSPF認証ができるように設定します。SPF認証の仕組みにつきましてはこちらご参照ください。送信側の設定としてはSPFレコードをDNSサーバに登録しますが、今回は受信側のメールサーバ(Postfix)としての設定です。

SPF-Postfix01
今回は postfix-policyd-spf-python 使ってSPF認証機能を追加します。

postfix-policyd-spf-python のインストール

postfix-policyd-spf-python を構成するライブラリをインストールします。「/usr/local/src/」など適当なディレクトリに移動して作業してください。

・python DNSのインストール

cd /usr/local/src/
wget https://pypi.python.org/packages/source/p/pydns/pydns-2.3.6.tar.gz
tar xvzf pydns-2.3.6.tar.gz
cd pydns-2.3.6
python setup.py install

・python pyspfのインストール

cd /usr/local/src/
wget https://pypi.python.org/packages/source/p/pyspf/pyspf-2.0.9.tar.gz
tar xvzf pyspf-2.0.9.tar.gz
cd pyspf-2.0.9
python setup.py install

・python pypolicyd-spfのインストール

cd /usr/local/src/
wget https://launchpad.net/pypolicyd-spf/1.3/1.3/+download/pypolicyd-spf-1.3.tar.gz
tar xvzf pypolicyd-spf-1.3.tar.gz
cd pypolicyd-spf-1.3
python setup.py install

 

続いて ipaddrモジュールをインストールするため、Pythonのパッケージ管理ツールをインストールします。

・easy_installのインストール

wget http://peak.telecommunity.com/dist/ez_setup.py
python ez_setup.py

・ipaddrモジュールのインストール

wget http://peak.telecommunity.com/dist/ez_setup.py
easy_install ipaddr

 

動作確認です。下記コマンドを実行してください。

/usr/bin/python /usr/bin/policyd-spf /etc/python-policyd-spf/policyd-spf.conf
------------------------------
<なにも表示されなければOKです。control+C で抜けます>
------------------------------

postfix-policyd-spf-python の設定

・説明付きのコンフィグファイルに入替

mv /etc/python-policyd-spf/policyd-spf.conf /etc/python-policyd-spf/policyd-spf.conf.org
cp -ip /usr/local/src/pypolicyd-spf-1.3/policyd-spf.conf.commented /etc/python-policyd-spf/policyd-spf.conf

 

基本設定ではSPF認証が「Fail」の場合はメールを破棄するように設定されていますが、今回はヘッダにSPF認証結果を追加するのみとして、メールを破棄しないように設定します。

vi /etc/python-policyd-spf/policyd-spf.conf

HELO_reject = SPF_Not_Pass
 ↓
HELO_reject = False

Mail_From_reject = Fail
 ↓
Mail_From_reject = False

 

「Fail」は「絶対にメールを受信しないでください」という意味ですので、本来であればメールを破棄するのが正しいと思いますが、はじめのうちはSPFの認証状況をみてから調整するのがよいかと思います。

Postfix のSPF認証設定

Postfixの基本設定はこちらを参照してください。

vi /etc/postfix/master.cf

---(下記を最終行に追加)---------------------------
#
# SPF認証設定
#
policy-spf     unix  -       n       n       -       0       spawn
  user=nobody argv=/usr/bin/python /usr/bin/policyd-spf /etc/python-policyd-spf/policyd-spf.conf

vi /etc/postfix/main.cf

smtpd_recipient_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unauth_destination
	 ↓
smtpd_recipient_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unauth_destination
	check_policy_service unix:private/policy-spf

---(下記を最終行に追加)---------------------------
#
# SPF認証設定
#
policy_time_limit = 3600

 

・設定に誤りがないかチェック(なにも表示されなければOKです)
postfix check

・Postfixを再起動します。
service postfix restart
 

SPF認証の動作確認

最後に確認です。Gmailなどからメールを送信して下記のようなログがあればOKです。

tail -f /var/log/mail/maillog

Oct 27 05:53:06 sv01 policyd-spf[9378]: None; identity=helo; client-ip=209.85.192.169; helo=mail-pd0-f169.google.com; envelope-from=XXX@gmail.com; receiver=sample@apar.jp 
Oct 27 05:53:07 sv01 policyd-spf[9378]: Pass; identity=mailfrom; client-ip=209.85.192.169; helo=mail-pd0-f169.google.com; envelope-from=XXX@gmail.com; receiver=sample@apar.jp 

コメント

  1. SPF導入-Postfix | かんのWebメモ より:

    […] 参考1 参考2 […]

  2. MICK より:

    こんにちは。SPF導入において大変参考にさせて頂きました。

    導入後のトラブルで、メールのヘッダが一部消えてしまう
    (In-Reply-To, References)という現象が発生してしまったのですが

    原因または解消方法に心当たりがありますでしょうか…?

    導入したのは、pypolicyd-spf-1.3.2 で Postfix 2.6.6-6、RHEL6.3を使っています。

    • >MICKさん

      コメントありがとうございます。
      申し訳ありませんが、私の環境では、症状を確認できませんでした。

      環境:pypolicyd-spf-1.3 Postfix 2.10.1 CentOS 7.2.1511 RHEL6系の記事なのに7を使っていてすみません(^^;)

      確認方法:
      1)自分のメールサーバからGmailへメールを送信
        ↓
      2)Gmail側で 1)で送られてきたメールに対して返信
        ↓
      3)2)で送られてきたメールヘッダを確認

      もし確認方法など違っていましたら、またコメントください。

  3. ねこ より:

    いつも参考にし、とても良いブログだと尊敬しております

    master.cfにてpolicy-spfと定義してるので
    main.cfをpolicy-spf_time_limitとしないとエラーが起きてしまいます

    宜しくお願い致します

    • あぱーブログあぱーブログ より:

      >ねこさん
      ご指摘ありがとうございます!
      記事の内容がかなり古くなっていますので、近いうちに修正したいと思います。

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