メールのヘッダーを調べてみた
興味があったからちょっと調べてみた。以下に記述しているのはヘッダーを全文表示した場合に出てくる。
どこから来たかを調べる
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:まぁ、こんな単純なものでも無いんだろうけどね