メールのヘッダーを調べてみた

興味があったからちょっと調べてみた。以下に記述しているのはヘッダーを全文表示した場合に出てくる。

どこから来たかを調べる

SPAMメールとかの送信元を調べるのに使える。

Received: from サーバA by サーバB

これはfromからbyへとメールが渡されたことを表している。この場合は、「サーバB → サーバA」という経路をメールが届いている。こいつはメールサーバを経由するごとにサーバが記述していく。

ログから調査してみる

ログには大抵Message-IDが載っている。

Message-ID: 004801c898b7$938408c0$850aa8c0

とか。全てのメールに一意に振られる。こいつでログからどのメールなのかを調べることができる。

スレッド表示の仕組み

スレッド表示にもMessage-IDを使っている

In-Reply-To: B9C8926A4DD440

In-Reply-Toの後ろについているのはMessage-IDで、どのメールに対する返信かを表している。スレッド表示はこのIn-Reply-Toに書いてあるMessage-IDで親子関係を作って表示している模様。

スパムメールがReceivedを詐称する

なにも行わなければ、Receivedを見ればどこのドメインから送ってきたのかは一目瞭然となる。だからスパムメールはReceivedを詐称する。

Received: from サーバA by サーバB
↓↓↓ ここから詐称 ↓↓↓
Received: from サーバC by サーバD
Received: from サーバD by サーバE
↑↑↑ ここまで詐称 ↑↑↑

SPAMメールは、この「ここから詐称」と書いてある部分をはじめからメールのヘッダーに付け加えてメール送る。そうすることで、どこからメールが送られてきたのかを分かりにくくするという仕組みだ。まぁ、これもある程度の技術者から見られれば分かるらしい。上で書いている例だと、C〜Bに移るメールのログが無いことになる。つまり、「Received: from サーバC by サーバD」の部分が詐称されている可能性が高く、一番最初はBからメールが来ているものと判断することが出来る*1

まとめ

結構奥が深い。でも、メールヘッダーってのはアプリで大部分を詐称することができる。なんで、メールヘッダーを鵜呑みにしてはいけないってのが僕の調べてみた感想。スパムメールとかも、Receivedを詐称して送ってくるのがほとんどみたいだから注意が必要。

スレッド表示は面白そうだなぁ。再帰の勉強がてらスレッド表示のプログラムを作ってみようかな。

*1:まぁ、こんな単純なものでも無いんだろうけどね