Postfix の SPF 対応

2007年2月25日

Postfix でSPF に対応しようと思い作業したメモ。

受信側の設定

参考にしたサイトはTATSUYA.info – サーバ構築関係/PostfixでSPF/DomainKeysに対応/SPF(C) で、ここに書かれている手順に従ってlibspf2 と Policyd を導入すれば問題なく利用できるようになりました。導入した環境は、Vine 3.2 + Postfix 2.2.5 。

有効に動作していると、受信した際にメールのヘッダに、

Received-SPF: pass (mail.u-1.net: domain of bounces.amazon.com designates 207.171.188.8 as permitted sender) client-ip=207.171.188.8; envelope-from=emailSenderApp+EQH00H53JNFR-1RSXYQ8ODI5X5-9R2G7HIGYP8U@bounces.amazon.com; helo=mm-retail-out-103.amazon.com;

みたいな情報が追加されるようになります。受信する側の設定はこんなもので。必要に応じてSpamAssassin とかのルールを追加して、passした際のスコアを減じるなどしてやるとよろしいかと。

送信側の設定

Postfix の設定ではないけれども、送信する側は、DNSのレコードを適切に追加してやる必要があるということです。この辺、ややこしくて、完全に理解し切れてないけれども、ウチのようにシンプルな構成のネットワークならば、

u-1.net. IN TXT "v=spf1 ip4:124.41.72.8 ~all"

というようなTXTレコードを追加してやればOK。実際に、dig コマンドなどで確認すると、

$ dig @ns1.u-1.net u-1.net txt

; <<>> DiG 9.3.2-P2 <<>> @ns1.u-1.net u-1.net txt
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18410
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 6, ADDITIONAL: 1

;; QUESTION SECTION:
;u-1.net.                       IN      TXT

;; ANSWER SECTION:
u-1.net.                86400   IN      TXT     "v=spf1 ip4:124.41.72.8 ~all"

;; AUTHORITY SECTION:
u-1.net.                86400   IN      NS      ns1.everydns.net.
u-1.net.                86400   IN      NS      ns2.everydns.net.
u-1.net.                86400   IN      NS      ns3.everydns.net.
u-1.net.                86400   IN      NS      ns4.everydns.net.
u-1.net.                86400   IN      NS      ns.maihama-net.com.
u-1.net.                86400   IN      NS      ns1.u-1.net.

;; ADDITIONAL SECTION:
ns1.u-1.net.            86400   IN      A       124.41.72.8

;; Query time: 44 msec
;; SERVER: 124.41.72.8#53(124.41.72.8)
;; WHEN: Fri Feb 23 13:49:29 2007
;; MSG SIZE  rcvd: 212&#91;/code&#93;

というように、TXTレコードの追加が確認できます。

実際に設定が適当かどうかは、check-auth@verifier.port25.com 宛へメールを送信すると、チェックして結果を送り返してくれます。ウチの場合、どうもDNS 情報の更新が完了してないようで、まだ<code>neutral</code> が帰されるのですが、テストメールを送信すると、受信側ではしっかり<code>Pass</code> になっているので、とりあえずは良いのかな、と。

<h3>Amavisd-new との併用でトラブった?</h3>
バージョンがやや古めの<a href="http://www.ijs.si/software/amavisd/">Amavisd-new</a> を稼働させていた環境だと、

[code]
Feb 23 14:16:18 host amavis[30504]: (27164-05) run_command: child process [30504]: Error closing main::stdin: \311\324\300\265\244\312\245\325\245\2
41\245\244\245\353\265\255\275\322\273\322\244\307\244\271 at /usr/sbin/amavisd line 1879.\n
Feb 23 14:16:18 host amavis[27164]: (27164-05) TROUBLE in check_mail: parts_decode_ext FAILED: parsing file(1) results - missing last 1 results at (
eval 40) line 154.
Feb 23 14:16:18 host amavis[27164]: (27164-05) PRESERVING EVIDENCE in /var/amavis/tmp/amavis-20070223T141618-27164

のようなエラーがmaillog に記録され、キューも大変なことになりかけました。

私の環境ではMOX – Take It Eazy! 配布の日本語版を使用しているので、そちらから最新のアーカイブをダウンロードして、導入したら解消しました。

$ wget http://marijuana.ddo.jp/download/amavisd-new-2.4.3-JP.tgz
$ gtar xvzf amavisd-new-2.4.3-JP.tgz
$ cd amavisd-new-2.4.3-JP
$ sudo sh amavisd_install.sh update perl

update perl をパラメータとしてamavisd_install.sh に渡してやると、Amavisd-new 本体および、使用するPerlのモジュールが更新されるます。エラー内容からすると、Amavisd-new 本体のバグがあったのかな?