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 (……中略……) 
- メールを正しく受信できていること