そらとぶへび

仕事・プライベートを通しての気づき、JavaやPHP、データベースやサーバの話などこつこつと書いていきます

スパムメール・偽装メールの確認方法

まず初めに、メールヘッダの読み方について、説明します。
メールクライアントソフトによって、表示のさせ方は異なりますが、
ヘッダ情報としては、以下の構造になっています。

===============================================================
[エンベローブ]
 MAIL FROM ・・・送信元
 RCPT TO  ・・・送信先
 DATA

[ヘッダ]
 Retrurn-Path ・・・送信元アドレス
 Delivered-To ・・・宛先アドレス
 Recevived   ・・・メールを送信したメールサーバの情報
 From     ・・・送信元アドレス(メールの作成者が入力したもの)
 To      ・・・宛先アドレス(メールの作成者が入力したもの)
 Subject    ・・・件名

[メール本文]
 ・・・
 ・・・
 ・・・

===============================================================

エンベローブはメールサーバが送信に使う情報、
ヘッダは送信者や受信者の便宜のために準備された情報になります。

基本的に両者は同じ情報ですが、メールサーバはエンベローブしか見ていないので、
エンベローブとヘッダに差異があっても、送信自体には問題がありません。
つまり、送信元でヘッダ情報はいくらでも偽装が可能になっています。

ただし、Recevivedフィールドは、経由したメールサーバが付加した情報なので、
比較的改ざんの難しい場所
になります。
なので、ほかのフィールドとRecevivedフィールドの整合性が取れないことを頼りに、
偽装メールを判別することができます。

Recevivedフィールドは以下のような記述となっています。

Recevived:from 送信元 MTA by 送信元 MTA

この送信元と、送信先がちぐはぐになっていれば、偽装された可能性は高いと判断することができます。