Postfix3.3 迷惑メール対策 SPF設定

この記事は約11分で読めます。

Postfix 3.4 [迷惑メール対策 SPF] CentOS7 (マルチドメイン)
↑こちらもご覧ください。記事が新しいです。

迷惑メール対策のひとつ「SPF」を設定します。
Postfix3.3 迷惑メール対策 DKIM設定(2018/10/23追加)もご覧ください。

PostfixのSPFでは、perl版と、python版があります。

perl版 SPF

最初、perl版に挑戦をしていたのですが、どうもうまくいかない。

コマンドラインから、
# /usr/local/lib/policyd-spf-perl
と起動させて、

request=smtpd_access_policy
protocol_state=RCPT
protocol_name=SMTP
helo_name=(ホスト名)
queue_id=(英数字)
sender=(メールアドレス)
recipient=(ホスト名
client_address=(差出側アドレス)
client_name=(ホスト名)

というふうに書き込む(標準入力に入れる)と、/var/log/maillog に

Oct XX XX:XX:XX postfix/policy-spf[XXXX]: Policy action=PREPEND Received-SPF: softfail ; identity=mailfrom; envelope-from=”(メールアドレス)”; helo=(ホスト名); client-ip=(差出側アドレス)

と、SPFの判定がでるのに、なぜか、Postfix経由だと、perl版SPFを認識してくれない。

ということで、perl版SPFを断念(悲)。

python版 SPF

もうひとつの「python版PSF」を入れてみます。

単純に

# yum install pypolicyd-spf

と、yumコマンドで入れると、

# yum install pypolicyd-spf
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
(略)

(1/6): python-ipaddr-2.1.11-1.amzn2.noarch.rpm
(2/6): postfix-2.10.1-6.amzn2.0.3.x86_64.rpm
(3/6): pypolicyd-spf-1.3.2-5.el7.noarch.rpm
(4/6): python-pydns-2.3.6-2.el7.noarch.rpm
(5/6): python-pyspf-2.0.11-5.el7.noarch.rpm
(6/6): mysql-community-libs-compat-5.7.23-1.el7.x86_64.rpm
(略)

Installed:
  pypolicyd-spf.noarch 0:1.3.2-5.el7
(略)

Complete!
------------------------------------------------------

と、postfix 2.1も入ってしまうので、今回は、ソース版のSPFをインストール。

python版、SPFの「pypolicyd-spf」

「pypolicyd-spf」は、version 1.3 系と、version 2.0系があり、 Version 1.3系は、python ver.2 をサポートするが、pypolicyd-spf version 2.0系は、python ver.3に。

今回、新しい方の、「pypolicyd-spf」version 2.0系、python ver.3系を入れる。
python 2 系を削除すると、yumなどに影響をするので、python2 と python3 を同居させるようにインストール。

インストール方法は、別途。

「pypolicyd-spf」には、「py3dns」と、「pyspf」というライブラリが必要になります。

AmazonLinux2 で、python2 とpython3との共存(2019/01/04追記)

Amazon Linux 2 で、python ver.2 と、python ver.3 を共存するのは、比較的簡単。
# yum install python3
で、インストールをします。

# yum install python3

(略)

Dependencies Resolved

=============================================================================================================
 Package                       Arch              Version                         Repository             Size
=============================================================================================================
Installing:
 python3                       x86_64            3.7.1-9.amzn2.0.1               amzn2-core             66 k
Installing for dependencies:
 python3-libs                  x86_64            3.7.1-9.amzn2.0.1               amzn2-core            9.0 M
 python3-pip                   noarch            9.0.3-1.amzn2.0.1               amzn2-core            1.9 M
 python3-setuptools            noarch            38.4.0-3.amzn2.0.6              amzn2-core            617 k

(略)

Installed:
  python3.x86_64 0:3.7.1-9.amzn2.0.1

Dependency Installed:
  python3-libs.x86_64 0:3.7.1-9.amzn2.0.1                   python3-pip.noarch 0:9.0.3-1.amzn2.0.1
  python3-setuptools.noarch 0:38.4.0-3.amzn2.0.6

Complete!

# /usr/bin/python --version
Python 2.7.14

# /usr/bin/python3 --version
Python 3.7.1

と、2つのバージョンが入りました。

py3dns(pypolicyd-spf用ライブラリ)

「py3dns」は、python 用 DNS ライブラリ。

「pydns」pydns-2.3.6.tar.gzは、python 2 用。

今回、python3 用を入れます。
https://sourceforge.net/projects/pydns/files/py3dns/py3dns-3.0.2.tar.gz/download
から、
py3dns-3.0.2.tar.gz
をダウンロードしてインストール

# tar xzvf py3dns-3.0.2.tar.gz
# cd py3dns-3.0.2
# python3 setup.py install
running install
running build
running build_py
creating build

(略)

writing byte-compilation script '/tmp/tmpssywzi_o.py'
/usr/bin/python3 /tmp/tmpssywzi_o.py
removing /tmp/tmpssywzi_o.py
running install_egg_info
Writing /usr/lib/python3.6/site-packages/pydns-3.0.1-py3.6.egg-info

pyspf(pypolicyd-spf用ライブラリ)

https://sourceforge.net/projects/pymilter/files/pyspf/pyspf-2.0.12/pyspf-2.0.12.tar.gz/download
からダウンロードしてインストール。

# tar xzvf pyspf-2.0.12.tar.gz
# cd pyspf-2.0.12/

# python3 setup.py install
running install
running build
running build_py

(略)

running install_egg_info
Writing /usr/lib/python3.6/site-packages/pyspf-2.0.12-py3.6.egg-info

pypolicyd-spf 本体インストール

# wget https://launchpad.net/pypolicyd-spf/2.0/2.0.2/+download/pypolicyd-spf-2.0.2.tar.gz
# tar xzvf pypolicyd-spf-2.0.2.tar.gz
# cd pypolicyd-spf-2.0.2/

# python3 setup.py install
running install
running build
running build_py

(略)

creating /etc/python-policyd-spf
copying policyd-spf.conf -> /etc/python-policyd-spf
copying policyd-spf.peruser.5 -> /usr/share/man/man5
running install_egg_info
Writing /usr/lib/python3.6/site-packages/pypolicyd_spf-2.0.2-py3.6.egg-info

pypolicyd-spf 設定

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

Mail_From_reject = Fail
↓
Mail_From_reject = False

Failだと、メールが届かないので、「False」にして、ヘッダ情報に付加して、メールは、届くようにする。

pypolicyd-spf テスト

# /usr/bin/python3 /usr/bin/policyd-spf /etc/python-policyd-spf/policyd-spf.conf

で、何も反応がないことを確認。
実際には、標準入力を待っている状態。
不具合がある場合は、なにか、エラーメッセージが出てきます。

postfix 設定

vi /etc/postfix/master.cf
policy unix -       n       n       -       0       spawn
  user=nobody argv=/usr/bin/python3 /usr/bin/policyd-spf /etc/python-policyd-spf/policyd-spf.conf

上記、2行を加えます。行頭の 「policy」の部分を、main.cfでも、同じ名前にします。「policy」でなくても大丈夫。
vi /etc/postfix/main.cf

smtpd_recipient_restrictions = permit_mynetworks,  permit_sasl_authenticated, permit_auth_destination, reject_unauth_destination, reject
↓
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination,check_policy_service unix:private/policy

postfix 2.10から変更された
smtpd_recipient_restrictions
から
smtpd_relay_restrictions
にする。
(古い設定のままでした(汗))

そして、「check_policy_service unix:private/policy」を加えます。

policy_time_limit = 3600s

も、加えます。

実際のメール受信で、SPFをテスト

SPFが設定されている、メールアドレスからテストなどをしてみます。

policyd-spf[4769]: prepend Received-SPF: None (mailfrom) identity=mailfrom;

上記は、SPFは、確認できなかったメール。

policyd-spf[4769]: prepend Received-SPF: Pass (mailfrom) identity=mailfrom;

上記は、OKなメール。

「Pass」だとOK。

 

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