SPF対応(CentOS Postfix)

メールサーバ(Postfix)をSPF(Sender Policy Framework)の検査に対応してみる。相手にチェックさせるだけであればDNSにレコードがあるだけでいいので、DKIM,DomainKeysと比べて実装はしやすい。自身に届くメールのチェックをするにはPosftfixの「check_policy_service」でチェックするようにする。

DKIM(Domainkeys)対応はこちら

必要なパッケージのインストール

yum install perl-Mail-SPF perl-Sys-Hostname-Long

SPFのチェック用のモジュールはパッケージではないのでソースをダウンロードしてくる(perlスクリプト)
http://www.openspf.org/Softwareのあたりから、postfix-policyd-spf-perl-2.010.tar.gzをダウンロードしてくる。
ファイルの配置

tar xzvf postfix-policyd-spf-perl-2.010.tar.gz
cp postfix-policyd-spf-perl-2.010/postfix-policyd-spf-perl /usr/local/lib/postfix-policyd-spf-perl

/etc/postfix/master.cf

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

/etc/postfix/main.cf(Postgreyと併用)

smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, check_policy_service unix:private/policy
policy_time_limit = 3600

DNSのレコードにSPFの情報を記述(例)

spf01   IN TXT "v=spf1 +ip4:xxx.xxx.xxx.xxx/24 ~all"
spf02   IN TXT "v=spf1 +ip4:yyy.yyy.yyy.yyy/24  ~all"
@       IN TXT "v=spf1 include:spf01.example.com include:spf02.example.com ~all"

確認
SPFに対応しているアドレス(gmailなど)とやりとりしてヘッダーにSPFの情報があるか確認

Received-SPF: none  ~
Received-SPF: pass  ~
Received-SPF: softfail ~

以下のアドレスへメールを送るとチェックしてメールが返信されてくる。(SPF,DKIM,DomainKeysなどがチェックできる)

check-auth@verifier.port25.com
sa-test@sendmail.net
http://senderid.espcoalition.org/

 
 
 
<追記>
デフォルトだと、「fail」になった時に550でrejectしてしまうので、チェックだけしてスルーするように変更してみた。

<         return "550 $helo_authority_exp";
---
>         #return "550 $helo_authority_exp";
>         return "PREPEND $helo_spf_header"
>             unless $cache->{added_spf_header}++;
297c299,301
<         return "DEFER_IF_PERMIT SPF-Result=$helo_local_exp";
---
>         #return "DEFER_IF_PERMIT SPF-Result=$helo_local_exp";
>         return "PREPEND $helo_spf_header"
>             unless $cache->{added_spf_header}++;
371c375,377
<         return "550 $mfrom_authority_exp";
---
>         #return "550 $mfrom_authority_exp";
>         return "PREPEND $mfrom_spf_header"
>             unless $cache->{added_spf_header}++;
374c380,382
<         return "DEFER_IF_PERMIT SPF-Result=$mfrom_local_exp";
---
>         #return "DEFER_IF_PERMIT SPF-Result=$mfrom_local_exp";
>         return "PREPEND $mfrom_spf_header"
>             unless $cache->{added_spf_header}++;

</追記>

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA