ネットワーク

メールヘッダー解析

受信したメールの生ヘッダーを貼り付けると、そのメールに実際に何が起きたかが分かります。経由したサーバーと各ホップに要した時間、受信側が下した SPF・DKIM・DMARC の判定、そして From・Return-Path・Reply-To が名乗る差出人が互いに一致しているか。文字化けした件名も復号します。解析はすべてブラウザー内で行い、内容を送信することはありません。

  • Received ヘッダーを配送のタイムラインに並べ直し、ホップごとの所要時間を表示
  • 受信側が記録した認証結果を項目ごとに読み解き、各判定の意味も明示
  • From・Return-Path・Reply-To を突き合わせ、表示名に埋め込まれた別アドレスも検出
  • DKIM 署名をタグ単位で分解し、本文の一部しか署名しない l= タグを指摘
  • エンコードされた件名を復号。Shift_JIS・GB2312・Big5 などの旧文字コードにも対応
0 文字

Gmail は「メッセージのソースを表示」、Outlook は「プロパティ」または「メッセージ ソースの表示」、Apple Mail は「すべてのヘッダ」を有効にします。

コピーやダウンロードの際にメールアカウント名とアドレスの末尾を伏字にします。認証の話題で必要になるドメインはそのまま残します。

ヘッダーを貼り付けると、配送経路・認証結果・このメールが名乗る差出人が表示されます。

概要

ヘッダーは三つの問いに答えます。メールはどこを通ったか、受信側はそれをどう判断したか、そして誰を名乗っているか。以下の各項目がそれぞれを担当します。

  1. 01

    経路と、各ホップに要した時間

    Received ヘッダーをメールが実際に通った順に並べ直し、隣り合う時刻を引き算します。6 分間キューに滞留していたことが、ここではじめて見えるようになります。最も遅いホップには印が付きます。到着が遅れた理由はたいていそこにあります。

  2. 02

    認証結果は転記ではなく解説

    Authentication-Results の各方式について、判定とその実際の意味を併記します。ソフト失敗と失敗の違い、そして「レコードがない」と「検証に失敗した」がまったく別物であることも分かります。

  3. 03

    複数のアドレスを突き合わせ

    From・Return-Path・Reply-To・Sender を並べて表示し、表示名に紛れ込んだ別アドレスは単独で指摘します。多くのメールソフトが表示名しか見せないため、この種の偽装はそこを突いてきます。

  4. 04

    DKIM 署名をタグ単位で分解

    ドメイン、セレクター、アルゴリズム、署名対象ヘッダーの一覧。特に注目すべきタグは二つで、本文の先頭部分しか署名しない l= と、そもそも From を含めていない h= です。

  5. 05

    エンコードされた件名を復号

    =?UTF-8?B? のような形式の件名をその場で復号します。いまも流通している旧文字コード、Shift_JIS・GB2312・Big5・ISO-8859 系にも対応します。問い合わせ票の中の文字化けした件名は、たいていこれです。

  6. 06

    内容はこのページから出ません

    ヘッダーには受信者のアドレス、内部ホスト名、プライベートアドレスが含まれます。解析はブラウザー内で完結し、伏字の切り替えでコピーやダウンロードの際にアカウント名とアドレスの末尾を隠せます。

使い方

表示された画面ではなく元のメッセージを取り出し、貼り付けて、上から順に読みます。

  1. 01

    元のメッセージを開きます。Gmail は「メッセージのソースを表示」、Outlook は「プロパティ」または「メッセージ ソースの表示」、Apple Mail は「すべてのヘッダ」です。

  2. 02

    全体を入力欄に貼り付けます。最初の空行より後は本文なので無視されます。

  3. 03

    まず判定と所見を読みます。どこが問題かを先に名指ししてくれます。

  4. 04

    次に認証結果で受信側の記録を確認します。最上部の通常の Authentication-Results から見始め、authserv-id を手掛かりに信頼できるメールシステムの記録かを判断してください。

  5. 05

    配送経路を起点から順に追い、時間を消費しているホップを探します。

  6. 06

    署名ドメインを DNS 側で確認したい場合は、署名カードから SPF・DMARC チェックへ移動します。

詳細

ヘッダーを読む難しさの大半は、雑音のように見える細部にあります。解析はそうしたケースを想定して作られています。

  • 折り返しを先に結合するため、5 行にまたがる Received も断片ではなく 1 つの値として読み取ります
  • サーバーは Received を末尾ではなく先頭に追加するため、経路は逆順で再構成します
  • 直前より古い時刻のホップは、負の所要時間として表示せず時計のずれとして報告します
  • 要約には最上部の通常の Authentication-Results を使いますが、信頼性を決めるのは位置ではなく authserv-id であることを明示します
  • ARC セットは別に数えます。メーリングリスト経由のメールが封をし直されているのは通常の状態だからです
  • 送信元アドレスは角かっこ表記から取得するため、ホスト名や TLS の注記に含まれる数字を送信元と取り違えません

活用シーン

ヘッダーを読む理由はたいてい二つです。届くべきものが遅れたか、届くべきでないものが届いたか。

  1. 遅延した区間を特定する

    20 分かかったメールは、どこか具体的な場所で待たされています。ホップごとの所要時間が、どのサーバーが抱えていたかを示します。送信側の問題か受信側の問題かはここで分かれます。

  2. 不審なメールが名乗り通りか確かめる

    表示名は有名企業なのにアドレスは別物、あるいは DMARC が失敗している。どちらも数秒で確認できますが、メールソフトの画面ではどちらも見えません。

  3. 迷惑メールに入った理由を調べる

    フィルターは判断の根拠を残していることが多く、SpamAssassin のスコアと一致ルール、Microsoft の迷惑メール確信度などが読み取れます。認証を直すべきか評判を直すべきかはそこで判断します。

  4. 自分のメールの署名を確認する

    自分宛に送って DKIM 署名を読みます。どのドメインが、どのセレクターで署名したか、そして From ヘッダーが署名対象に入っているかどうかまで確認できます。

  5. 転送メールの DMARC 失敗を説明する

    転送は SPF を壊し、メーリングリストは DKIM も壊しがちです。ARC セットとホップ一覧が、どこで誰が封をし直したかを示します。

  6. 文字化けした件名を読む

    =?UTF-8?B? で始まる件名や、ログで疑問符の羅列になった件名をここで復号できます。旧システムがいまも使っている文字コードにも対応します。

  7. アドレスを伏せたまま問い合わせ票に貼る

    伏字を有効にすると、アカウント名とアドレスの末尾は隠れ、ドメインは残ります。要約をそのまま共有のチケットに貼り付けられます。

  8. ヘッダーの読み方を教える

    各判定にその意味が添えてあるため、実際に問題のあるメール一通が、SPF・DKIM・DMARC が何を主張しているのかを説明する教材になります。

関連情報

ヘッダーが語るのは一通のメールの経緯で、その裏にあるレコードはドメインに属します。ドメインが公開している SPF・DKIM・DMARC を読むには SPF・DMARC チェックをご利用ください。任意のレコード種別を直接引いたり、ルートサーバーから委任をたどったりするには DNS 検索があります。最初の Received に記録されたアドレスの持ち主を調べるなら IP アドレス検索が使えます。

使い方のヒント

いくつかの習慣が、ヘッダー調査を速くし、結論を確かなものにします。

  • 転送されたものではなく元のメールを入手します。転送はヘッダーを書き換えるため、読めるのは転送そのものの記録になってしまいます。
  • 最上部の通常の Authentication-Results から見ますが、authserv-id が信頼できるメールシステムのものと確認できて初めて信用します。古い記録は背景情報であり、独立した証拠ではありません。
  • 利用できる場合は、From と SPF 通過として記録された ID を比べます。Return-Path は参考になりますが、SPF が実際に評価した ID の代わりにはなりません。
  • タイムスタンプの整合が取れるまで、ホップごとの所要時間は目安にとどめます。1 台の時計がずれるだけで前後の値は意味を失います。
  • DKIM は有無だけでなく h= タグを確認します。From を含まない署名は、見た目ほど守ってくれません。
  • 共有のチケットに貼る前に伏字にします。アカウント名も内部ホスト名もプライベートアドレスも、すべてそこに含まれています。

制限事項

ここで扱うのは貼り付けられたテキストだけです。そのぶん、結果が言えることには明確な限界があります。

  • DKIM 署名は読み取るだけで検証はしません。検証には改変されていない本文と DNS 上の公開鍵が必要で、転送中の変更は正しかった署名も無効にします。
  • 認証結果は受信側の主張であり、独立した検査ではありません。このページで SPF や DMARC を再実行することはできず、受信サーバーが記録した内容をそのまま伝えます。
  • 信頼できる最後のホップより下のヘッダーは偽装され得ます。もっともらしい経路に見える Received も含め、送信者が書いたものはすべて送信者の管理下にあります。
  • ドメインの同一性は完全な Public Suffix List で比較します。リストは問い合わせずにページとともに配信されます。一方 RFC 9989 は DMARC の組織ドメインを DNS ツリーウォークで決めるため、厳密な評価とは判定が分かれることがあります。
  • DNS 参照は一切行いません。セレクターがいまも公開されているか、送信元アドレスが名乗るネットワークに実際に属するかは、このページが行わない問い合わせを必要とします。
  • フィルターのスコアは、ある受信側のある日の判断です。同じメールでも他所では違うスコアになり、スコアが低いことは安全の証明にはなりません。
  • 読み取るのはヘッダー部分だけです。最初の空行より後の内容、添付や本文中の追跡要素は対象外です。

よくある質問

メールヘッダーの見方、経路の追跡、そしてヘッダーから何が言えて何が言えないかについてのよくある質問です。

メールの生ヘッダーはどこで見られますか。

Gmail ではメールを開き、右上のその他メニューから「メッセージのソースを表示」を選びます。Outlook on the web は同じくその他メニューの「メッセージ ソースの表示」、デスクトップ版は「ファイル」から「プロパティ」を開き「インターネット ヘッダー」の欄です。Apple Mail は「表示」「メッセージ」から「すべてのヘッダ」を有効にします。全体をコピーして貼り付ければ十分で、メール全体でも構いません。最初の空行より後は無視されます。

ヘッダーからメールがどこで遅延したか分かりますか。

分かります。メールを扱った各サーバーは、受け取った時刻を記した Received ヘッダーを先頭に追加するため、一覧は逆順になっています。並べ直すと実際の順序になり、隣り合う時刻の差が、次のサーバーに受け取られるまで待っていた時間です。1 分を超えるホップがあれば、遅延はそこです。ただし時計を先に確認してください。1 台でも時刻がずれていると前後の値は無意味になるため、直前より古い時刻のホップは負の数を出さず、時計のずれとして報告します。

メールヘッダーは偽装できますか。

送信者が書く部分は偽装できます。From、Reply-To、Date に加え、経路を長く見せるために捏造した Received も含まれます。送信者の管理を離れた後に追加されたヘッダーにも、信頼の境界内でしか証拠価値はありません。最上部の通常の Authentication-Results から見て、その authserv-id が信頼できるメールシステムのものかを確認してください。下の記録はより早い時点の主張であって独立した証拠ではなく、起点が悪意あるサーバーなら記録も信用できません。

Authentication-Results からは何が分かりますか。

受信サーバーが SPF・DKIM・DMARC を実行して出した結論が記録されています。spf=pass は送信サーバーがエンベロープドメインの送信を許可されていたこと、dkim=pass は署名が検証でき署名対象が改変なく届いたこと、dmarc=pass はそのいずれかが受信者の見る From と一致するドメインについて通過したことを意味します。最後の一つが、認証と名乗られた差出人を結び付ける部分です。本ツールは各判定に実際の意味を添えて表示し、検査をやり直すのではなく受信側の結論を伝えます。

SPF が通っているのに DMARC が失敗するのはなぜですか。

DMARC はアライメントも要求するからです。SPF が見るのは Return-Path のエンベロープ送信者で、配信サービス経由の場合それは相手のドメインの返送先であることがほとんどです。結果としてサービス側のドメインでは SPF が通る一方、From には自社ドメインが表示され、両者が揃わないため DMARC は失敗します。自社ドメインでの DKIM 署名の方が堅実なのは、DKIM のアライメントが転送を越えて残るのに対し SPF は残らないためです。

DKIM 署名の l= タグとは何ですか。

本文の長さを指定するタグで、署名は先頭の l バイトだけを対象にします。それより後に追記された内容は以前と変わらず検証を通るため、署名済みのメールに第三者が内容を足せることになります。もともとはメーリングリストが末尾に付ける署名文に耐えるための仕組みですが、本ツールがこれを指摘するのはそのためです。本文のどこまでを保証しているか分からない署名は、全体を覆う署名より弱いといえます。

件名が =?UTF-8?B? のような文字列になるのはなぜですか。

RFC 2047 のエンコードです。ヘッダー項目は ASCII しか許されないため、それ以外の文字は base64 か quoted-printable で符号化し、文字コード名を前置します。メールソフトは表示前に復号するので、符号化された形が見えるのはログや問い合わせ票、コピーしたヘッダーの中だけです。本ツールはこれを復号し、旧システムがいまも使う Shift_JIS・GB2312・Big5・ISO-8859 系にも対応します。

ヘッダーから送信者の本当の IP アドレスは分かりますか。

分かる場合もあります。最下部の Received には最初の受信サーバーが見たアドレスが記録され、メールソフトから送られたメールならそれは送信者のネットワークであることが多いです。ただしウェブメールから送られた場合そのアドレスは事業者のものですし、自前のサーバーを持つ送信者はより早い段階の Received を好きに書けます。証拠になるのは信頼できるサーバーが追加したホップだけで、そこに記録されたアドレスもプライベート範囲であることが多く、そのネットワークの外では何も特定できません。

このツールはメールを送信しますか。

しません。解析はブラウザー内で行われ、内容がどこかへ送られることはありません。ヘッダーには受信者のアドレス、内部ホスト名、キュー ID、プライベートアドレスが日常的に含まれるため、この点は多くのツール以上に重要です。共有のチケットに結果を載せる場合のために、コピーやダウンロード時にアカウント名とアドレスの末尾を伏字にする切り替えも用意しています。

ARC とは何で、転送メールに付いているのはなぜですか。

転送は認証を壊します。転送元は元ドメインの許可一覧にないため SPF が失敗し、メーリングリストは件名の書き換えや署名文の追加で DKIM も壊しがちです。ARC は、中継がそうした変更を加える前に見た結果を記録して封をする仕組みで、最終的な受信側がそれを信用するかどうかを判断できます。ARC セットが複数あるのは、そうした中継を複数経由したという意味に過ぎず、メーリングリスト経由のメールでは通常の姿です。

表示名の警告はどういう意味ですか。

アドレスの前に表示される名前の中に別のメールアドレスが含まれており、それが実際の差出人ではないという意味です。多くのメールソフトは表示名しか見せないため、まったく無関係のメールボックスから送られたメールが銀行からのものに見えます。基盤を乗っ取る必要のない最も安価な偽装で、生の From ヘッダーを見ない限り気付けません。

SPF・DMARC チェックとの違いは何ですか。

同じ問題の両端を見ています。チェックの方はドメインが DNS に公開している内容、つまり SPF のチェーン、DMARC のポリシー、DKIM の鍵を読み、設定の良し悪しを判断します。本ツールは配送済みのメール 1 通を読み、実際に何が起きたかを報告します。ドメインを設定するときは前者、特定のメールで問題が起きたときは後者です。署名カードにはリンクがあり、ここで見つけた署名ドメインをそのまま向こうで確認できます。

関連ツール

署名ドメインの裏にあるレコードを確認したり、DNS を直接引いたり、送信元アドレスの所属ネットワークを調べたりできます。