メール送信ドメイン認証 SPF と Sender-ID の設定 (1)


はじめに


電子メールというのは古典をひもとけば UNIX や、いわゆるインターネットというものが脚光を浴びる以前から、大型コンピュータなどにも実装されてきた由緒ある機能でありますが、古典であるがゆえにろくな認証システムが標準では存在せず、便利であるがゆえに悪用する輩が増えていることはみなさん先刻ご承知のことと思います。

現在世の中を飛び交っている UBE/UCE (いわゆるSPAM) に対抗する技術の1つとして、メール送信ドメイン認証というのがあります。(参考 日経 ITPro http://itpro.nikkeibp.co.jp/free/ITPro/OPINION/20041115/152576/index.shtml

実装としてはすでに標準化されつつある SPF と、ベンダー開発技術として、Microsoft の Sender ID, Yahoo の DomainKeys, Cisco の Identified Internet Mail などいくつかの規格があります(つまりまだ充分に標準化されていないのですが)。それぞれ公開されている情報は以下のポインタの通りです。
じゃ、どれがいいのかですが、現時点で標準化にある程度成功しているのは SPF でしょう。DomainKeys については sendmail がサポートを表明しているようです。ただ DomainKeys は DNS にかかる負荷が結構高い上に、すでに指摘されている通りメーリングリストなどヘッダ情報が書き換わるものに対しては実質的に認証ができないなどの実装上の問題もあり、現在鋭意改訂中だそうで、もう少し待ってみた方がよさそうな雰囲気です。もちろん、DNS に全面依存しているので、Poisoning や DoS などの攻撃に対する耐性も要検討です(これは SPF/Sender-ID とて同じですけど)。

Sender ID については2004年9月に Microsoft が知的所有権をふりかざす可能性をライセンス条項に含めたことで紛糾し、IETF の作業部会が解散するという事態になっています。(その後 Microsoft は態度を軟化させたらしいですが)

参考:C|net Japan http://japan.cnet.com/news/media/story/0,2000047715,20075689,00.htm

Cisco の IIM は後発であり実績不足は否めません。2005年2月の RSA カンファレンスでのデモの記事が ITMedia に載っていました。

参考:http://www.itmedia.co.jp/enterprise/articles/0502/17/news050.html


ここでは、現時点である程度実用的に使える SPF と、その後継である Sender-ID について詳しく述べることにします。

設定の前に

いきなりサーバの設定を語る前に確認することがあります。

重要なことは、SPF も Sender-ID も DNS を認証に利用します。従って、あなたがそのゾーンの DNS を管理しているか、あるいは管理者に作業を依頼する必要があります。これが大前提です。

また、sendmail.com の「送信者認証技術の導入におけるレコメンデーション」にある「アウトバウンドでの配送の集中化」がまさに重要で、「誰が実際にあなたのドメイン名が付いたアドレスでメールを送信しているか」正確に把握する必要があります。大きなサイトであればあるほどこれは結構苦労を強いられるでしょう。逆に SOHO の場合、別ドメインのマシンからあなたのドメイン名を持つメールを送信することもあるかもしれませんね。

基本的に言えば、送信ドメイン側ですることは DNS で適切な TXT レコードを設定をするだけです。SPF も Sender-ID もこれは共通です。

実は DNS の設定で、SPF について言えば、Webのフォームで設定ファイルを作るウイザードがあります。

http://spf.pobox.com/wizard.html

しかし、いきなりここだけ見ても巧くいくとは思えませんので、ここの説明は後回しにしたいと思います。



一方受信側では、メールを受け取る際にそのドメインをチェックする仕掛けを入れる必要があります。

sendmail の場合、sid-milter というプラグインを利用します。このプラグインで SPF と Sender-ID 両方に対応できますが、残念ながら sendmail 8.13 以降でないと対応していません。

開発者のサイトは次にある通りです。 http://www.sendmail.net/sid-milter/

Postfix の場合はパッチをあてて libspf なるものをリンクするんだとか。
(↑明らかに気合の入っていない文章なのは、筆者の関心の低さを正直に物語っています…)

ただし、sendmail も最初から milter を使う前提でコンパイルする必要があります。OS同梱の sendmail や、バイナリパッケージを使用している場合は要注意です。また、筆者のように
http://sourceforge.net/mailarchive/forum.php?thread_id=5523184&forum_id=42130
などに足元をすくわれると大はまりするので注意してください。詳しくは後述することにします。

milter といえば梅本さんが書かれた
http://www.imasy.or.jp/~ume/published/sendmail-milter/
も目を通しておくとよいでしょう。ここの本題は Amavis ですが、milter で何ができるのか理解するにはちょうどいいでしょう。

なお、Sender-ID の特許論争に関連してユーザに影響が出る恐れが存在するとすれば、受信側サーバの設定で Sender-ID を利用する設定にしている場合です。ただし、sendmail.com の資料「送信者認証技術の導入におけるレコメンデーション」でも触れられている通り、運用上の最適化(効率化ではない)を考えるのであれば、可能な限り多くの認証方式を受け付けるようにした上で、どういった場合に受信拒否をするのかというポリシーを煮詰めることがベストでしょう。

では、受信サーバのフローを大雑把に確認しましょう。

メールの送信元は too@my.example.jp で vmfreebsd というホストから発信し、受信者は too@example.com で、メールサーバ mail.example.com で受信したとします。
(1) vmfreebsd.my.example.jp から mail.example.com に SMTP セッションが張られる。

(2) SPF の場合、SMTP ハンドシェイクの MAIL FROM を見て(Sender-ID の場合、BODY の From: を見て)該当ドメインの TXT レコードを引く。

(3) TXT レコードに書いてある(送信元ドメインお墨付き)マシンから送信されているか確認する。

(4) 書いてあるマシンからであれば受信処理を継続する。そうでなければ受信拒否処理を行う。
こんな感じです。エラー処理についてはもう少し細かく動作を定義できると思います。

受信拒否処理と書きましたが、このあたりについては、前にも書いた「送信者認証技術の導入におけるレコメンデーション」の「認証失敗したメールの扱い」を読んで検討してみてください。

あとは実際にテスト環境を構築してテストしてみましたので、その環境に沿って実例を交えて解説してみたいと思います。

言うまでもないことですが、以下のページで登場するメールアドレスやドメイン名はすべて架空のものです。

次へ

目次に戻る
>