ソースルーティングを利用したメールの第三者不正中継

とあるメールサーバで第三者不正中継が可能になっているとの指摘を受けた。よくある話。とりあえず、おなじみのOpen Relay Checker (http://check.jippg.org/)と、RBL.JP(http://www.rbl.jp/)でチェック。何種類かある不正中継試行リクエストの中でひとつだけ通過した(不正中継を受け付けた)結果が出た。両ツールの結果は同じことを指摘している。


1.OpenRelayChecker

2.RBL.JP


Toに指定しているアドレスに何やら「%」が含まれている。これは見たことがない。いったい何なのか。(職業病なのか)不正エンコードと疑ってみたが、そうではないらしい。実はこれはRFCに規定されているれっきとした正規のリクエスト。正規というと誤解を受けるかもしれない。送信意図は不正でもプロトコル上はこういう書き方が許されているらしい。

ソースルーティングというものらしい。RFC1123(http://www.isi.edu/in-notes/rfc1123.txt)に規定されている(5.2.16項あたり)。普通ネットワーク上のルーティングはルータがやるんだが、ソースルーティングは送信の起点であるクライアントがルーティングを指定するもの。RFC1123が策定された当初ではインターネット上のホストはこれをサポートすべき的なことが書かれて、メールサーバもこのRFCに厳密に則って実装すると機能として搭載されることになる。

たとえば「aaa%bbb.com@ccc.com」というリクエストは、「ccc.comを経由してbbb.comのaaaというユーザにメールを送る」ということになる。実はほかにも記法があって、「@ccc.com:aaa@bbb.com」という「:」を使った書き方もある。

そもそもこのソースルーティングはメールの配信遅延を防ぐためにインターネット黎明期に策定されたもの。実際に、RFC1123は1989年に最初に規定されたものだ。現在ではRFC1123においても[DESCUSSION]で使用すべきではない的なことが書かれている(以下、日本語訳より抜粋)。

送信元ルーティングは不要であり、単純なターゲットアドレスである "user@domain" で常に十分なはずである。これは、メールにおいて送信元ルーティングではなく共通的な名前を使うという、明確で体系立てられた決定の結果である。従って、SMTP はエンドツーエンドの接続性を提供し、DNS は世界共通で位置に依存しない名前を提供する。MX レコードは、それが無ければ送信元ルーティングが必要な主要なケースを扱っている。


ほう、機能的には実装されてもいいような気がする。インターネット環境では無効にすべきだが、テスト環境とかローカルな環境では有用な機能かもしれない。巷のメールサーバにおいては、

1.sendmail
 実装されている。sendmail.cfで以下を設定すると無効にできる。
 REJECT_SOURCE_ROUTE_RELAY=yes

2.postfix
 実装されている。main.cfで以下の行をコメントアウトすると無効にできる
 #allow_percent_hack = no

3.qmail
 実装されている。デフォルトで無効にされていてソースルーティングを使用する場合はqmail-send の percenthack に適用するドメイン名を記述する。


ざっと調べただけなので実際の構築場面で設定する場合はちゃんとマニュアル見てほしいのだけれど、調べてみた感じではメールサーバいじる人にとって、このソースルテーティングは当たり前の知識だったみたいだ.......知らなかったよ......