日曜日, 5月 27, 2007

バウンシングバック認証の実装がヘボだと…

 「やぎさんゆうびん問題」は、「自サイトのユーザーがスパムを受けなくてすむためには、他サイトのユーザーに手間をかけさせてもかまわない」という身勝手どうしがぶつかり合うとどうなるかと考えて書いたお話である。白やぎさんと黒やぎさんがともに相手からの手紙を食べてしまったという童謡「やぎさんゆうびん」になぞらえて、双方が同じことをすることによって互いに情報が伝わらなくなるという問題をこのように名付けた(英訳は「the Goats' Mail problem」とでもしようか)。
 実際のところ、白やぎさん、黒やぎさんともにペンディングキューに気を付けていれば、やぎさんゆうびん問題は起こらない。しかし、白やぎさんが、個人間のメールのやり取りを始めたばかりの初心者だったら、ペンディングキューに落ちているバウンシングバック認証メールに気付かないということは十分にありうる。また、黒やぎさんも初心者だったら、白やぎさんからのメールがペンディングキューに落ちているのに気付かないかもしれない。かくして、やぎさんゆうびん問題は起こる。
 これを防ぐために考えられることは、バウンシングバック認証メールはpostmaster、mailer-daemon、または空アドレス(<>)を返送先アドレス(MAIL FROMコマンドで通知されるアドレス、すなわちReturn-Path)として送信するものとして、それらを返送先アドレスとするメールはバウンシングバック認証にかけずに通過させることである。そうすれば、宛先誤りのエラーリターンに気付かないというトラブルも避けることができる。しかし、そのことを知ったスパマーは、それらを返送先アドレスとするスパムを大量に送り込んでくるだろう。
 ところで、「やぎさんゆうびん問題」のお話を書いた時、私は、暗黙のうちに仮定を置いていた。バウンシングバック認証メールはpostmaster名で送信され、それに対するバウンシングバック認証メールはpostmaster宛になり、postmaster宛のメールはバウンシングバック認証にかけずに受けるという仮定である。しかし、postmaster宛のメールもバウンシングバック認証にかけるというヘボな実装をしていると、大変なことが起こる。

「黒やぎさんへ、白やぎです。」
「黒やぎさんちの郵便局の局長ですが、黒やぎさんにメールを送ったのは、本当に白やぎさん、あなたですか?」
「白やぎさんちの郵便局の局長ですが、白やぎさんにメールを送ったのは、本当に黒やぎさんちの郵便局の局長さん、あなたですか?」
「黒やぎさんちの郵便局の局長ですが、私にメールを送ったのは、本当に白やぎさんちの郵便局の局長さん、あなたですか?」
「白やぎさんちの郵便局の局長ですが、私にメールを送ったのは、本当に黒やぎさんちの郵便局の局長さん、あなたですか?」
「黒やぎさんちの郵便局の局長ですが、私にメールを送ったのは、本当に白やぎさんちの郵便局の局長さん、あなたですか?」

メールループが起こって、ディスク容量の余裕が少ない方のサーバがダウンするまで続く。さらに言えば、ダウンのタイミングによっては、立ち直った後、ダウンしなかった方のサーバからメールが吐き出されてメールループが再開する。手動で止めるしかない。
 まさかとは思うが、バウンシングバック認証メールの返送先アドレスをpostmasterなどでなく受信者本人のアドレスにするというヘボな実装だったとしたら、やはり大変なことになる。

「黒やぎさんへ、白やぎです。」
「黒やぎですが、私にメールを送ったのは、本当に白やぎさん、あなたですか?」
「白やぎですが、私にメールを送ったのは、本当に黒やぎさん、あなたですか?」
「黒やぎですが、私にメールを送ったのは、本当に白やぎさん、あなたですか?」

ディスク容量の余裕が少ない方のサーバがダウンするまで繰り返される。さらに言えば、ダウンのタイミングによっては、立ち直った後、ダウンしなかった方のサーバからメールが吐き出されてメールループが再開する。手動で止めるしかない。
 これを避けるためには、白やぎさんが黒やぎさんにメールを送った時に、白やぎさんのサーバで自動的に黒やぎさんのアドレスをホワイトリスト登録すればよいというアイデアが浮かぶが、それは浅知恵である。たとえば、私が自分のサイトで公表している連絡先アドレスが「webmaster」、自分が送信するメールの送信者アドレスが「deo」であるように、送信者が宛てるアドレスとそれに対する返信の送信者アドレスが異なる場合がある。エイリアス展開した後のアドレスを返送先アドレスとしてバウンシングバック認証メールを送るというヘボな実装だと…

「ダンディー黒やぎさんへ、白やぎです。」
(白やぎさんのサーバで「ダンディー黒やぎ」がホワイトリスト登録される。)
「黒やぎですが、私にメールを送ったのは、本当に白やぎさん、あなたですか?」
(白やぎさんのサーバでは「黒やぎ」はホワイトリスト登録されていないので…)
「白やぎですが、私にメールを送ったのは、本当に黒やぎさん、あなたですか?」
「黒やぎですが、私にメールを送ったのは、本当に白やぎさん、あなたですか?」

以下同文。ディスク容量の余裕が少ない方のサーバがダウンするまで続く。さらに言えば、ダウンのタイミングによっては、立ち直った後、ダウンしなかった方のサーバからメールが吐き出されてメールループが再開する。手動で止めるしかない。
 送信メールの返送先アドレスを自動的にエクスパンションアドレスに書き換えて送り出せば、それに対するバウンシングバック認証メールはエクスパンションアドレス宛になり、バウンシングバック認証にかからずに通過できる。この方法ならば、メールループは起こらない。しかし、エクスパンションアドレスの決め方が一定だと、スパマーに推測されて、エクスパンションアドレス宛のスパムが大量に送り込まれるおそれがある。だから、エクスパンションアドレスは時々変更しなければならない。作り込みがやっかいである。宛先サイトのサーバにホワイトリスト登録されるのがこのエクスパンションアドレスだとしたら、それを変更するたびにまたバウンシングバック認証メールが来る。
 身勝手どうしのぶつかり合いによるトラブルを避ける対処法を考えると、そこからまたスパマーに突かれる穴ができるような気がしてならない。あああ、頭いてえ…

0 件のコメント: