SPFとSender IDを実装しよう

lここではSPFとSender IDを実装していきます。
先にも述べましたが、Sender IDに関してはMicrosoftの特許がらみのおかげで受信側の実装は今のところできていません。
今から実装していくのはSPFとSender IDを実装の送信側の実装と、SPFの受信側の実装になります。

SPF/Sender IDの送信側を実装しよう

SPF/Sender IDの仕組み上、送信側にはDNSにちょちょっと手を加えればすぐに完成します。
BINDの外側のデータベーステキストレコードとして以下のように書き込みます。
本来はSPFとSender IDではテキストレコードの記入方法が少々異なる部分があるのですが、Sender IDは下位互換があるのでレコードは1種類だけでOKです。
mizushima.ne.jp. IN TXT "v=spf1 mx mx:mizushima.ne.jp -all"
以上です。
意味をご紹介しましょう。
mizushima.ne.jp. 認証されるドメインですね。
v=spf1 SPFのバージョンです。Sender IDは本来spf2なのですが、互換性のためspf1と記入してください。
mx:mizushima.ne.jp mxレコードに書かれているドメインからメールが転送される事を示します。
-all それ以外のSMTPサーバーからはメールが転送されることはないということを示します。

実際にはもう少し細かく書くこともできますが、上の書き方が最もシンプル且つ汎用性が高いかと思われます。
詳細なテキストレコードを書きたい方はウィザードに従って作成してもらうといいでしょう。
SPFウィザード http://www.openspf.org/
Sender IDウィザード http://www.microsoft.com/mscorp/safety/content/technologies/senderid/wizard/

実際のレコードを下に示しておきます。

$TTL 86400
@         IN  SOA  mizushima.ne.jp. root.mizushima.ne.jp. (
                  2006092301
                  3600
                  900
                  604800
                  86400 )
          IN  NS    mizushima.ne.jp.
          IN  MX 10  mizushima.ne.jp.
@           IN  A  210.253.233.28
mizushima.ne.jp. 300 IN TXT "v=spf1 mx:mizushima.ne.jp -all"

編集が完了したらBINDを再起動させます。

# /etc/rc.d/init.d/named restart

postfix-policyd-spf-perlでPosyfixにSPFの受信側を実装しよう

依存関係などで必要なPerlモジュールを先にインストールしておきましょう。
必要になるのはMail::SPF::Queryです。
私の環境ではcpanからインストールしようとしたら失敗したので、yumからインストールします。

# yum install perl-Mail-Spf-Query

引き続きpostfix-policyd-spf-perlをダウンロードしてきます。
使用するのはただのPerlスクリプトですので、置くディレクトリはどこでもいいのではないでしょうか。
私は/usr/local/spfディレクトリを作成し、ここにpostfix-policyd-spf-perl 1.08をダウンロードしてきました。
スクリプトの位置は/usr/local/sf/1.08/postfix-policyd-spf-perlになります。
ダウンロード、解凍が完了したら起動スクリプトを起動しておきましょう。

# mkdir /usr/local/spf
# cd /usr/local/spf
# wget http://new.openspf.org/source/software/postfix-policyd-spf-perl/tags/1.08.tar.gz
# tar zxvf 1.08.tar.gz
# perl /usr/local/sf/1.08/postfix-policyd-spf-perl

引き続きPostfix側の設定に入ります。
Postfixは/etc/postfix/master.cf、/etc/postfix/main.cf双方に設定を追記する必要があります。

まずはmaster.cfです。

policy unix - n n - - spawn
  user=nobody argv=/usr/bin/perl /usr/lib/postfix/policyd-spf-perl

続いてmain.cfです。

smtpd_recipient_restrictions = reject_unauth_destination check_policy_service unix:private/policy

設定が完了したらPostfixをリロードして設定を読み込ませます。

# postfix reload

これでSPF/Sender IDの全設定は完了です。
では、正しく動いているかテストしてみましょう。
テスト用メールアドレスが用意されていますので、check-auth@verifier.port25.comにメールを送信します。
返信されてきたメールの本文が下記のようになっていればOKです。

----------------------------------------------------------
mail-from check details:
----------------------------------------------------------
Result: pass
Address: 〜@mizushima.ne.jp
Header: verifier.port25.com smtp.mail=〜@mizushima.ne.jp; mfrom=pass;

SPF TXT record/s:
v=spf1 mx:mizushima.ne.jp -all

----------------------------------------------------------
PRA check details:
----------------------------------------------------------
Result: pass
Address: 〜@mizushima.ne.jp
Header: verifier.port25.com header.from=〜@mizushima.ne.jp; pra=pass;

PRA TXT record/s:
v=spf1 mx:mizushima.ne.jp -all

Resultに認証結果が、SPF/PRA(Sender ID)TXT record/s:にはDNSの内容が書かれています。
今度はメール本文ではなくメールヘッダを見てください。
Received-SPF:pass
の文字が見えれば認証側、postfix-policyd-spf-perlもきちんと動作しています。

以上です。
お疲れ様でした。