ホーム‎ > ‎mail‎ > ‎postfix‎ > ‎

policyd-spf-python


受信したメールのSPFレコード対応をする場合。思ったよりも詳しく書かれている

install

apt-get install postfix-policyd-spf-python  python-authres python-dns python-spf

  • /usr/bin/policyd-spf
  • /etc/postfix-policyd-spf-python/policyd-spf.conf
がインストールされる

postfix setting

master.cf

以下を追記
# for policyd-spf
policy-spf  unix  -       n       n       -       0       spawn
  user=nobody argv=/usr/bin/policyd-spf /etc/postfix-policyd-spf-python/policyd-spf.conf

main.cf

以下を設定。smtpd_recipient_restrictionsに追加
policy-spf_time_limit = 3600s
smtpd_recipient_restrictions =
                   permit_mynetworks,
                   permit_sasl_authenticated,
                   regexp:/etc/postfix/recipient_checks.reg,
                   reject_non_fqdn_recipient,
                   reject_unauth_destination,
                   reject_unknown_recipient_domain,
                   reject_rbl_client sbl.spamhaus.org,
                   reject_rbl_client cbl.abuseat.org,
                   reject_rbl_client dul.dnsbl.sorbs.net,
                   
reject_unauth_pipelining,
                   
check_policy_service unix:private/policy-spf,
                   permit


その後再起動

policy-spf_time_limit

spawn(8) デーモンは デフォルトで1000秒後に子プロセスを kill します。これは SMTP クライアントが SMTP サーバプロセスに接続している間動き続けるポリシーデーモンには 短すぎます。デフォルトの時間制限は明示的に "policy-spf_time_limit" を設定する ことで上書きされます。パラメータの名前は master.cf エントリの名前 ("policy-spf") と "_time_limit" サフィックスをつなげたものです。

policy-spf_time_limit = 3600s

check_policy_service

"policy-spf" という名前の UNIX ドメインソケットで listen し、Postfix spawn(8) デーモンの制御下で動くポリシー サーバを作るには、このようなものを使います
 check_sender_access および check_policy_service は 確実に reject_unauth_destination の 「後に」指定してください。そうしないとシステムがオープンメールリレーに なってしまいます。

SPF Check

メール送信

hotmailから
Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=65.54.190.77; helo=bay0-omc2-s2.bay0.hotmail.com; envelope-from=xxxx@live.jp; receiver=foo@xxx.bar
ということでheaderに結果が残る。当然ながら○

failの場合

SoftFail

headerにはSoftFailの記録が残るがメールは届く。logとheaderには残るけど
Received-SPF: Softfail (domain owner discourages use of this host) identity=mailfrom; client-ip=xxx.xxx.xxx.xxx; helo=$server; envelope-from=foo@xxx.bar; receiver=holly@xxx.bar

Fail

メールは届かない
Fail; identity=mailfrom; client-ip=xxx.xxx.xxx.xxx; helo=mail.$server; envelope-from=hogehoge@xxx.bar; receiver=holly@xxx.bar
Jul 28 14:19:41 vmachine-dev1 postfix/smtpd[11823]: NOQUEUE: reject: RCPT from $server[xxx.xxx.xxx.xxx]: 550 5.7.1 <holly@xxx.bar>: Recipient address rejected: Message rejected due to: SPF fail - not authorized. Please see http://www.openspf.net/Why?s=mfrom;id=hogehoge@xxx.bar;ip=xxx.xxx.xxx.xxx;r=holly@xxx.bar; from=<hogehoge@xxx.bar> to=<holly@xxx.bar> proto=ESMTP helo=<mail.$server>


許可したい場合は以下を変更
Mail_From_reject = False

Comments