当サイトではMTAにqmailを使用しているので、qmailをSPF認証に対応させるパッチを公開しているchristophe氏にありがたく感謝をしつつ、さっそくダウンロード。
現在の最新版は qmail-spf-rc5.patch。RCリリースになっているのは、SPFの仕様がRFCとして確定してないからのようだが、安定版とのことなので気にしないことにする。
このパッチ、かなりの範囲で qmail に手を入れるのですでに他のパッチを多数当てている環境な人には、一発で当たらないかもしれない。当サイトでもそうだったのだが、こういった場合パッチはサイズの大きな大手術ものから先に当てていくと、あとあと楽である。
ちなみに当サイトの場合は以下の手順でコンパイルした。
$ cd /usr/local/src
$ tar zxvf qmail-1.03.tar.gz
$ cd qmail-1.03
■SPF対応化パッチ。
$ patch -p1 < ../qmail-spf-rc5.patch
patching file byte_cspn.c
patching file byte.h
patching file byte_rcspn.c
patching file dns.c
patching file dnsfq.c
patching file dns.h
patching file dnsptr.c
patching file dnstxt.c
patching file FILES
patching file Makefile
patching file qmail-control.9
patching file qmail-showctl.c
patching file qmail-smtpd.8
patching file qmail-smtpd.c
patching file spf.c
patching file spf.h
patching file spfquery.c
patching file str_cpyb.c
patching file str.h
patching file strsalloc.c
patching file strsalloc.h
patching file TARGETS
patching file tcp-env.c
■qmailの648行目の条件分岐を修正するパッチ。
$ patch -p1 < ../qmail-1.03.qmail_local.patch
patching file qmail-local.c
■DNSを引いたとき返答のUDPパケットが512バイトを超えると処理できなくなる不具合に対応したパッチ。
$ patch -p1 < ../qmail-dns-patch
patching file dns.c
Hunk #1 succeeded at 22 (offset 1 line).
Hunk #2 succeeded at 48 (offset 1 line).
Hunk #3 succeeded at 84 (offset 1 line).
■qmailに日本標準時のヘッダを付加するパッチ。
$ patch -p1 < ../qmail-date-localtime.patch
patching file date822fmt.c
■110番ポートでPOP3認証とAPOP認証を自動的に認識させるパッチ(checkpw同梱)
patch -p1 < ../checkpw-1.00/qmail-popup-auth.patchpatching file Makefile
patching file qmail-popup.c
最後に、badmailfromをログに出力するパッチを当てます。
このパッチは --dry-run オプションでことごとくエラーが出たので手編集で直接 Makefile と qmail-smtpd.c を編集。
あとは通常通りに、make → su → make setup check。
これで、qmailを一度起動してひととおり送受信チェック。問題がなければ肝心のSPF設定に入ります。
[spfbehavior]
0から6までの半角数字を設定する。3より値を大きくすると実用的ではないかもしれない。
「0」 ... SPFレコードを参照しない。Received-SPFヘッダも付加しない(デフォルト)
「1」 ... SPFレコードを参照する。Received-SPFヘッダも付加するが、拒否はしない
「2」 ... SPFレコードを参照に失敗したら、一時エラーを返答
「3」 ... SPFレコードが「fail(拒否条件に一致)」だったら拒否
「4」 ... SPFレコードが「softfail(許可条件にマッチしない)」だったら拒否
「5」 ... SPFレコードが「neutral(SPFレコードが未定義)」だったら拒否
「6」 ... SPFレコードが「pass(許可条件にマッチ)」以外だったら拒否
[spfexp]
拒否時のエラーメッセージを設定する。
自動的に先頭に「550(半角スペース)」が挿入される。
例:「the expanded SPF explanation (#5.7.1)」
デフォルトではSPFサイトに誘導。
「See http://spf.pobox.com/why.html?sender=%{S}&ip=%{I}&receiver=%{xR}.」
設定が終わったら、SPFレコードに登録されていないネットワークやホストから、直接SMTPコマンドで確認。
$ telnet example.jp 25
helo
220 example.jp ESMTP
250 example.jp
mail from: test@docomo.ne.jp
250 ok
rcpt to: test@example.jp
550 See http://spf.pobox.com/why.html?sender=test%40docomo.ne.jp&ip=1.2.3.4&receiver=example.jp (#5.7.1)
quit
221 example.jp
上記のように、qmailがSMTPセッション中で550エラーを返していればOK。
前回とあわせると以上で、qmailでSPF認証に対応することができた。
コメントする