受信したメールの送信元メールアドレスが、詐称されていないかを確認するため PostfixでSPF認証ができるように設定します。SPF認証の仕組みにつきましてはこちらご参照ください。送信側の設定としてはSPFレコードをDNSサーバに登録しますが、今回は受信側のメールサーバ(Postfix)としての設定です。
今回は 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 参考2 […]
こんにちは。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)で送られてきたメールヘッダを確認
もし確認方法など違っていましたら、またコメントください。
いつも参考にし、とても良いブログだと尊敬しております
master.cfにてpolicy-spfと定義してるので
main.cfをpolicy-spf_time_limitとしないとエラーが起きてしまいます
宜しくお願い致します
>ねこさん
ご指摘ありがとうございます!
記事の内容がかなり古くなっていますので、近いうちに修正したいと思います。