5.サーバ: December 2005アーカイブ

前回は送信側の設定を行い、所有するドメインの正規なメールサーバを全世界に宣言した。今度は、自分と同じようにメールサーバを公開しているドメインを参照し、SPF認証を行う機能をMTAに組み込んでみよう。

当サイトでは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設定に入ります。
今日、ドコモが新たな迷惑メール対策を発表した。さる12/6にも、KDDIが同様の発表をしたばかり。
ドコモのニュースリリースでは具体的な技術案件は記載されていないが、おそらくKDDIと同じ「SPF(Sender Policy Framework)/Sender ID(Caller ID for E-Mail)」認証を行うのであろう。digでTXTレコードを調べてみたところ、SPFの記述があった。

$ dig TXT ezweb.ne.jp
;; ANSWER SECTION:
ezweb.ne.jp. 1249 IN TXT "v=spf1 include:spf-im1.ezweb.ne.jp include:spf-im2.ezweb.ne.jp include:spf-im3.ezweb.ne.jp include:spf-im4.ezweb.ne.jp include:spf-im5.ezweb.ne.jp include:spf-im6.ezweb.ne.jp include:spf-nm.ezweb.ne.jp include:spf-az.ezweb.ne.jp ~all"



$ dig TXT docomo.ne.jp
;; ANSWER SECTION:
docomo.ne.jp. 83965 IN TXT "v=spf1 +ip4:203.138.203.0/24 ~all"



「SPF/Sender ID」はメールの送信元ドメインについて、そのドメインのDNSを問い合わせることによって送信元ドメインの正当性を評価する仕組みである。メールプロトコルの仕組み上、いままでは簡単に送信元を詐称することが可能であったのでフィッシング詐欺など大きな問題となっていた。これが、「SPF/Sender ID」を導入することによってドメイン詐称の可能性を評価できるようになったため、偽装したスパムやフィッシングメールは受信そのものを拒否し、ブラックリストへの登録によって第三者に騙られたドメインが誤ってブラックリストに登録されてしまうのを防ぐこともできる。
まだ一般的とまでには普及していない「SPF/Sender ID」認証だが、いままでのインターネットメールの仕組みでは難しかったスパムメールの抑制効果が期待されている。現時点で上記のドコモ、KDDI以外にもAOL、Gmail、IIJなど続々と対応が始まっている。

SPFとSender IDの違いだが、SPFは「Envelope-From」を確認するのに対し、Sender IDは「From:→Sender:→Resent-From:→Resent-Sender:」の優先順位でヘッダを順に評価する。メールがバウンスしたときMTAは「Envelope-From」へメールの差し戻しを試みるので、SPFのほうが扱いとして正しい気がする。現時点での普及度では、「Sender ID」でマイクロソフトがライセンスがらみで一悶着あったらしく「SPF」のほうがより導入度が高いと言えそうである。

そこで、当サイトでも「SPF/Sender ID」がもたらす「なりすましメールの根絶」の効果と、具体的にどのように設定を行えばいいのかを検証してみよう。当サイトではDNSにはbind、MTAにqmailを使用しているので、bind + qmail + SPF の構成を構築する。
「SPF/Sender ID」は送信側と受信側でそれぞれ独立した設定が必要であるが、両方行わずとも大きなメリットがある。
送信側で「SPF/Sender ID」に対応すれば、スパマーに自分が所有している大切なドメインを騙られてスパムを送らてしまうことを防ぐことができるし(厳密には、受信側で対応されてないとスパムは届いてしまうことになるが、最低限責任を果たしているといえるだろう)、受信側で対応すれば、無駄なメールを受信すらしないこともできる。

今回は、送信側の設定として上記のサイトのように、DNSゾーンに「SPF/Sender ID」対応レコードを追加してみよう。
PHPはApacheなどWEBサーバと連携して使用することが多いが、v4.2.0以降ではコマンドライン(CLI)でも動作するようになっている。UNIX、LINUX系では、シェル(csh、bashなど)やPerlなどの言語を標準で使えるが、どうせならPHPでバッチプログラムなどを作成してもいいだろう。
v4.3.0以前のPHPをコマンドラインで利用するには明示的に ./configure --enable-cli する必要があったが、現在のバージョンではデフォルトで有効となった。configureオプションでapacheのapxsなどのSAPIモジュールを有効にするか、--disable-cgi オプションを指定するとCLIがインストールされる。

ただし、気をつけなければ行けないのは「PHPをCLIとしてのみ使用したい」とき。
このとき、configureオプションから単にApacheのDSOモジュールサポートオプション(--with-axps)を外すと、PHPがCGIとしてインストールされてしまう。

もし、シェルで

$ php --help
Usage: php [-q] [-h] [-s] [-v] [-i] [-f <file>]
php <file> [args...]



のように、「-r」オプションが表示されない場合はおそらくCGIとしてインストールされている。これでは、実行ごとにいちいちヘッダを出力されてしまったり、色々とめんどくさいことになってしまう。

こんなときは、「make install」直後に「make install-cli」としてみよう。今度は「-r」オプションが表示されたはずだ。
「-r」オプションはちょっとしたコードをシェル上で試せるのでとても便利でおすすめです。


[参考]
http://jp.php.net/manual/ja/features.commandline.php

アーカイブ

最近のコメント

Music

Photos