NO IMAGE

PostfixをSPF認証に対応(CentOS)

自宅メールサーバからgmailに送信すると、迷惑メールに分類されてしまいます。
受信者に「迷惑メールではない」ボタンを押してもらうのも申し訳ない。

迷惑メールと判断されないようにするための第一ステップとして、
今回、メールサーバPostfixにSPF認証の機能を組み込んでみました。

ここでのSPFは、Sender Policy Framework(センダー・ポリシー・フレームワーク)の略です。
「SPF50の日焼け止め」とかの、Sun Protection Factor (紫外線防御指数) の略ではありません。
なりすましによる迷惑メールを排除するため、メールアドレスのドメインを見て、それが正規のサーバから送信されたものか確認し認証します。

■SPF送信側の設定
SPFレコードは、現在利用しているELDOMAINさんのDNSサーバで設定しました。
タイプとして「TXT」を選び「v=spf1 mx ~all」を設定。

SPFの確認には以下のサイトが利用できます。

ドメイン名を入力し、「私はロボットではありません」をチェックし、「Survey Domain」をクリックします。
「No SPF Record for this domain.」の表示がなければ正常です。

・・・mxをメールサーバのIPアドレスとして以下のように記述した方がDNSの処理分早いらしい。
「v=spf1 mx ip4:192.168.1.21 ~all」

ただし、SPF送信側の設定だけでは、gmailに送信しても迷惑メールに分類されてしまいました。


■SPF受信側の設定
受信側の設定方法は、Perl で動く「postfix-policyd-spf-perl」を使う方法と、Python で動く「pypolicyd-spf」を使う方法があるようですが、今回は「postfix-policyd-spf-perl」を入れてみました。

# wget https://launchpad.net/ubuntu/+archive/primary/+files/postfix-policyd-spf-perl_2.010.orig.tar.gz
# tar -xvf postfix-policyd-spf-perl_2.010.orig.tar.gz
# cd postfix-policyd-spf-perl-2.010
# cp postfix-policyd-spf-perl /usr/sbin/postfix-policyd-spf-perl

実は、後で気づいたのですが、サーバがCentOS6.8なのに、クライントOSがUbuntu16.04なので、勘違いで上記のパッケージを入れていました。・・・が、正常に動作しており問題はないようです。


/etc/postfix/master.cfの最後尾にでも以下の記述を追加します。
(user=の前の空白はタブではダメ。半角スペースを入れましょう。)

# for SPF
policy	unix	-	n	n	-	0	spawn
  user=nobody argv=/usr/sbin/postfix-policyd-spf-perl



/etc/postfix/main.cfの最後尾にでも以下の記述を追加します。

smtpd_recipient_restrictions =
	permit_mynetworks,
	reject_unauth_destination,
	check_policy_service unix:private/policy,
	permit_atuh_destination,
	reject

policy_time_limit = 3600



Postfixを再起動します。
起動時にエラーが無いことも確認しておきましょう。

# service postfix restart
# tailf /var/log/maillog

自宅サーバ側からgmailへメールを送ってみます。
無事、迷惑フォルダではなく、受信フォルダに届いてくれましたので、成功です。

念の為、メールを閲覧表示し「メッセージのソースを表示」を実行。
「Received-SPF: pass ・・・」の表示があれば正常です。

今更ながらの覚え書きでした。