SPFはperlでチェックするようになっているので、postfix-policyd-spf-perl in Launchpadからpostfix-policyd-spf-perlをダウンロードする。
(右の方に tar.gz のダウンロードリンクがある)
ダウンロードしたら/usr/local/postfix/sbin/にでも移動しておく。
必要なperlモジュールをインストールする。
とりあえずpostfix-policyd-spf-perl固有の物としては
master.cfとmain.cfを変更する。
# # SPF # policy unix - n n - - spawn user=nobody argv=/usr/local/bin/perl /usr/local/postfix/sbin/postfix-policyd-spf-perl
smtpd_recipient_restrictions = check_helo_access regexp:$config_directory/check_helo_access, permit_mynetworks, permit_sasl_authenticated, check_client_access hash:/usr/local/watcher2/popauth, reject_unauth_destination, check_policy_service unix:private/policy, check_recipient_access hash:$config_directory/acl_rcpt_map, check_client_access hash:$config_directory/tarpit_client_whitelist, check_client_access regexp:$config_directory/tarpit_client_logger, check_client_access regexp:$config_directory/tarpit_client
check_policy_service unix:private/policy は必ず reject_unauth_destination よりも下に書くこと。
上に書くとオープンリレーになってしまう。
設定が完了したらpostfix reloadを実行。
SPF 対応しているドメインからメールを送信してみる。
対応しているかどうかは dig で TXT レコードを引いてみる。
今回は Gmail を使ってみた。
dig TXT google.com. ;; ANSWER SECTION: gmail.com. 300 IN TXT "v=spf1 redirect=_spf.google.com"Gmail からのメールを受信すると以下のようなログが maillog に出力される。
Dec 22 11:57:46 leviathan postfix/policy-spf[92068]:また、メールヘッダには以下のような記述が挿入される。
: SPF pass (Mechanism 'ip4:209.85.128.0/17' matched):
Envelope-from: *******@gmail.com
Dec 22 11:57:46 leviathan postfix/policy-spf[92068]:
handler sender_policy_framework: is decisive.
Dec 22 11:57:46 leviathan postfix/policy-spf[92068]:
: Policy action=PREPEND Received-SPF: pass
(gmail.com ... _spf.google.com: 209.85.216.43 is authorized to
use '*******@gmail.com' in 'mfrom' identity
(mechanism 'ip4:209.85.128.0/17' matched))
receiver=griffonworks.net; identity=mailfrom;
envelope-from="*******@gmail.com"; helo=mail-qw0-f43.google.com;
client-ip=209.85.216.43
Received-SPF: pass (gmail.com ... _spf.google.com: 209.85.216.43 isこれで受信時のSPFチェック対応は完了となる。
authorized to use '*******@gmail.com' in 'mfrom' identity
(mechanism 'ip4:209.85.128.0/17' matched)) receiver=griffonworks.net;
identity=mailfrom; envelope-from="*******@gmail.com";
helo=mail-qw0-f43.google.com; client-ip=209.85.216.43
送信側の対応はDNS設定だけで完了するので難しいことは何もない。
ゾーンファイルに以下の行を追加する。
IN TXT "v=spf1 +ipv4:[自ホストIPアドレス] ~all"
例) IN TXT "v=spf1 +ipv4:219.75.232.51 ~all"
MX ホストからメールを送信するのであれば "+mx" も追加すればよいかと思われる。
SPF レコードのオプションについてはぐぐれ。