PostfixでSPF認証に対応する¶
※Postfixは運用中のものとする
※DNSを利用できるものとする
送信側の設定¶
- DNSのゾーンにTXTレコードをいずれか追加
# mxからのメールを送信する _spf IN TXT v=spf1 mx ~all # 特定のIPアドレスのメールを送信する _spf IN TXT v=spf1 +ip4:192.168.0.1 +ip4:127.0.0.1 ~all
- 正しく設定されているか確認(DNSの浸透まで時間がかかる場合がある)
# dig example.com txt ;; ANSWER SECTION: example.com. 299 IN TXT "v=spf1 +ip4:192.168.0.1 +ip4:127.0.0.1 -all"
受信側の設定¶
パッケージの導入¶
- EPELリポジトリを導入する。
# yum install epel-release
- SPFのパッケージをインストールする
# yum install perl-NetAddr-IP perl-Mail-SPF perl-Sys-Hostname-Long perl-Sys-Syslog wget
- SPF用のperlリソースを取得する
# wget https://launchpad.net/postfix-policyd-spf-perl/trunk/2.011/+download/postfix-policyd-spf-perl-2.011.tar.gz
- 展開、配置します
# tar xzf postfix-policyd-spf-perl-2.011.tar.gz # cd postfix-policyd-spf-perl-2.011 # cp -p postfix-policyd-spf-perl /usr/local/lib/policyd-spf-perl
- 他に不足パッケージがないか確認する。下記のように確認できること。
# perl /usr/local/lib/policyd-spf-perl 応答なし[ENTER] action=DUNNO 終了[Ctrl+C] 例) Can't locate Sys/Syslog.pm in @INC…… 等が出る場合、下記のように実行して不足パッケージを導入する。 # yum install perl-Sys-Syslog
- Postfixのmaster.cfの末尾に以下を追加する
# vi /etc/postfix/master.cf ----------------------------- policy unix - n n - 0 spawn user=nobody argv=/usr/local/lib/policyd-spf-perl
- Postfixのmain.cfに以下を追記する。「smtpd_recipient_restrictions」がすでにある場合、「check_policy_service」を追記する
# vi /etc/postfix/main.cf ----------------------------- policy_time_limit = 3600 smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, check_policy_service unix:private/policy
- postfixを再起動する
# systemctl restart postfix
テスト¶
受信テスト¶
- 他のメールサーバから本サーバにメールを送信する。
- /var/log/maillogに下記の記載があること
# tailf /var/log/maillog postfix/policy-spf[xxxx]: Policy action=PREPEND Received-SPF: pass (……中略……)
- メールを正しく受信できていること
送信テスト¶
- SPFチェック可能な他のサーバにメールを送信する
# mail test@example.com Subject: spf-test spf-test . EOT
- メールを送信されたサーバで、/var/log/maillogにDNS設定したSPFチェックを取得しpassしたこと
# tailf /var/log/maillog postfix/policy-spf[xxxx]: Policy action=PREPEND Received-SPF: pass (……中略……)
- メールを正しく受信できていること