「なりすましメール対策にはSPF・DKIM・DMARCがあるけど、それぞれの違いは何?よくわからない」そんな疑問を持ったことはありませんか。
「DMARC」は従来のSPFやDKIMといった技術だけでは完全には防げなかったなりすましを、解決するために登場した画期的な仕組みです。
本記事では、DMARCがなぜ必要になったのかという背景から、メールヘッダーに記された「fail」や「quarantine」といった判定結果が何を意味するのかまで、実際のスパムメールの解析例を交えてステップバイステップで分かりやすく解説しています。
DMARCとは何か?
DMARCは、メールの送信元が本物であることを確認し、不正ななりすましメールを防ぐための認証技術です。
送信者は認証に失敗したメールを「何もしない」「隔離」「拒否」するのいずれかのポリシーを設定することができます。
受信者はレポートを受け取って状況を把握できるため、フィッシング詐欺やなりすまし対策に非常に効果的です。
DMARCが効果を発揮するのは「不正ななりすまし」に対してです。他の迷惑メールは対象外です。
なお、DMARCは「Domain-based Message Authentication, Reporting, and Conformance」の略で、ドメインに基づいたメッセージ認証、レポート、適合というです。
SPFとDKIMでは不十分だった
DMARCが登場する前に、なりすまし防止対策として「SPF」と「DKIM」という2つの身分証明の機能がありました。
しかし、これらだけではなりすましメールを防ぎきることができませんでした。
なお、DMARC、SPF、DKIMはいずれも送信者側が設定するものです。
SPFは、「送信元のサーバー(IPアドレス)」を根拠に認証する仕組みです。差出人が本物かチェックすることができます。
DKIMは、「電子署名」を根拠に認証する仕組みです。途中で中身が書き換えられていないかチェックすることができます。
なぜSPFでは不十分だったのか?
SPFが検証するのは、メールの通信上の差出人だけで、ユーザーの画面に表示されるヘッダーFrom(表示上の差出人)」は検証しません。
このため、攻撃者は自分のサーバーからメールを送り、通信上の差出人は自分にしてSPFをパスさせつつ、画面上の送信者を偽装することが可能でした。
例えば、以下のように送信する人が、送信者に好きな名前を設定することができてしまいます。
SPFは送信者が「自分の送信メールサーバーから送っている」ことを証明する仕組みです。
このため、なりすましの犯人が使用しているメールサーバーから自分として送ればSPFは正しいとして通過してしまいます。
メールでは実際の送信者のメールアドレス(ヘッダーFrom)の他に、表面上の送信者の名前とメールアドレス(エンベロップFrom)を自分で指定することができます。
SPFがチェックするのは、送信元のサーバーとヘッダーFromが一致しているかどうかだけです。
なぜDKIMでは不十分だったのか?
DKIMは公開鍵と暗号鍵を使った認証方式です。
送信メールに暗号鍵で作成したデジタル署名を載せます。受信したサーバーがDNSに問い合わせ公開鍵でこの署名を開ければ、改ざんがないことを証明します。
DKIMが効果を発揮するのは、送信メールにデジタル署名がある場合のみです。
世の中にはDKIMによる署名をしていないメールが山のように溢れています。その中には正規のメール送信者も含まれています。
このため、DKIMのデジタル署名を必ず参照するという厳しい対応をとることができません。
デジタル署名がない場合は、なりすましか本物か判断できないのでそのまま通過せざるを得ません。
このため、犯人はDKIMを設定しなければ、この認証を通過できてしまいます。
判断は受信サーバー任せ、かつ、全受信が基本
更には、SPFとDKIMで認証が失敗した場合に、そのメールをどうするかは受信サーバー任せでした。
送信元がSPFとDKIMを導入していても、受信する側がそれらの認証結果によらず全てのメールを受信する設定になっていれば、認証に失敗したメールも普通に受信BOXに届いてしまいました。
これもしょうがない部分もあります。送信者側でSPFやDKIMの設定ミスがあったり、また受信する側も「認証に失敗しているが、本当に偽物なのかわからない」という心理があり、結果として「とりあえず全て受信しておく」という設定にしているところがほとんどです。
メールが正しく届かなかった場合、その責任は受信する側にありました。このため、間違って重要なメールを消さないためにも一旦受信しておくのがメールサーバー運用者側の判断になっていました。
DMARCが登場した理由
DMARCが登場した理由は以下の2つです。
- SPFとDKIMだけでは不十分だったなりすまし対策を強化する
- 「認証に失敗したメールをどう処理するか」の決定権(責任)を受信側から送信側へ移す
DMARCの登場により「なりすましメール」への対策が劇的に向上しました。
DMARCによる認証に失敗したメールをどう扱うかの条件は、メールを送信した人ではなく、送信したメールのヘッダーFrom(表示上のメールアドレス)のドメインの設定に従います。
つまり、なりすました人(犯人)は何もできず、なりすまされた人(被害者)の設定に従うということです。
DMARCの仕組み
DMARCが最終的な判定を下し、メールが処理されるまでの仕組みは、受信サーバーがメールを受け取った瞬間から、次の5つのステップで処理が進みます。
STEP1:SPF認証
受信サーバーは、送信元サーバーのIPアドレスを確認し、送信元ドメインのDNSに登録されているSPFレコードと照合します。
結果は「SPF-Pass」または「SPF-Fail」として記録されます。
この時点ではまだ「ヘッダーFrom(表示上の差出人)」は見ていません。
ステップ2:DKIM認証
受信サーバーは、メールヘッダーにある電子署名(DKIM署名)を確認し、送信元ドメインのDNSから公開鍵を取得して検証します。
結果は「dkim=pass」または 「dkim=fail」や「dkim=none」して記録されます。
署名ドメイン(d=)が、「ヘッダーFrom(表示上の差出人)」と違っていても、署名自体が正しければ「Pass」になります。
DKIMが設定されていなければ「dkim=none」になります。
STEP3:DMARC認証(ヘッダーFrom(表示上の差出人))
DMARCは、SPFで認証したドメインとDKIM署名のドメイン(d=)がそれぞれ、ヘッダーFrom(表示上の差出人のメールアドレス)と一致しているかを確認します。
STEP4:DMARCの最終判定
SPF、DKIM、DMARC(ヘッダーFromの検証)の認証結果を元に、DMARCとしての最終的な判定を下します。
判定結果は以下の4つです。
- dmarc=pass(合格)
- dmarc=fail(不合格)
- dmarc=none(設定なし)
- dmarc=bestguesspass(推測による合格)
1. dmarc=pass(合格)
DMARCの検証が成功した状態です。
- 条件: SPFまたはDKIMのどちらか一方が「認証成功(Pass)」かつ「アライメント(Fromドメインとの一致)」も満たしている。
- 配送: ほぼ確実に受信ボックスへ届きます。
2. dmarc=fail(不合格)
DMARCの検証に失敗した状態です。
- 条件: SPFもDKIMも、認証に失敗しているか、あるいは認証に通ってもドメインがFromと一致していない。
- 配送: 送信側が設定したポリシー(
p=none/quarantine/reject)に従って処理されます。
ドメインが一致していないので、ほぼなりすましです。
3. dmarc=none(設定なし)
送信側のドメインに、DMARCレコード自体が登録されていない状態です。
- 意味: 「判定不能」です。受信サーバーはDMARCのルールを適用できず、従来の迷惑メールフィルタ(SPF/DKIM単体や、AIによる判定)のみで配送を決定します。
- デメリット: なりすましメールが届きやすくなり、また正規のメールも「身元不明」として迷惑メール扱いされやすくなります。
GmailやYahoo!メールなどに送信した場合、dmarcを設定していなければ強制的にメールが届かない仕様になっています。(※Gmailでは5000通/日送信する送信者にのみ適用)
4. dmarc=bestguesspass(推測による合格)
Google(Gmail)などが独自に出すことがある判定で、「DMARCレコードはないけれど、状況から見ておそらく本物だろう」という判定です。
- 意味: 正式なDMARC設定はないものの、SPFなどが通っており、信頼性が高そうだと受信サーバーが「おまけ」でパスさせてくれている状態です。
- 注意: あくまで「推測」なので、いつ判定が厳しくなって届かなくなるか分かりません。
Gmailに届いたメールで、DMARCはないけれども、SPFやパスしていて、かつ、ヘッダーFromも一致している場合に適用されることがあります。
STEP5:ポリシーの適用と配送
DMARCが不合格(Fail)だった場合、ヘッダーFromのドメインがDNSで宣言しているDMARCポリシー(pタグ)に従って、受信サーバーがメールを捌きます。
DMARCで設定するポリシーには以下の3つがあります。
- p=none(policy=none)
認証失敗を記録(レポート)するが、メールは通常通り受信ボックスへ配送する - p=quarantine(policy=quarantine)
メールを迷惑メールフォルダへ隔離する - p=reject(policy=reject)
メールの受信を拒否(遮断)し、送信者にエラーを返す。
DMARCでスパム判定されたメールの例
例えば、以下のようなメールヘッダーのメールが届いたとします。
Return-Path: <yiapakci@mail15.dyrtools.com>
Delivered-To: youremail@example.com
Authentication-Results: sv868.xbiz.ne.jp;
dkim=none;
spf=pass (sv868.xbiz.ne.jp: domain of yiapakci@mail15.dyrtools.com designates 34.97.186.113 as permitted sender) smtp.mailfrom=yiapakci@mail15.dyrtools.com;
dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=amazon.co.jp (policy=quarantine)
From: "=?utf-8?Q?Amazon.co.jp?=" <mailnews@mail.amazon.co.jp>
このメールの送信アドレスは「yiapakci@mail15.dyrtools.com」です。ヘッダーFrom(表示する送信者)は「=?utf-8?Q?Amazon.co.jp?=” mailnews@mail.amazon.co.jp」となっており、amazonからのメールとなっています。
「dkim=none」なので、DKIMのデジタル署名はありません。
「spf=pass」なので、SPFは通過しています。これは迷惑メールを送ったドメイン「yiapakci@mail15.dyrtools.com」とSPFに記載のドメイン「yiapakci@mail15.dyrtools.com」が一致しているためです。
「dmarc=fail」でDAMRC認証は失敗しています。理由は以下の2つです。
①「SPFのドメイン」と「ヘッダーFromのドメイン」が一致しないこと
②DKIMが設定されていないこと
ヘッダーFromのドメインである「amazon.com」はDMARCの設定で「policy=quarantine」を指定しています。
このため、このメールは迷惑メールフォルダに振り分けられます。
(補足)受信設定時の注意点
メールサーバーによっては、迷惑メールを自動的にゴミ箱などに入れる仕組みを提供しているものもあります。
その設定をONにした際に、本来は全ての迷惑メールがゴミ箱に入るはずですが、その指示に従わずに、迷惑メールフォルダにメールが割り振られることもあります。
これは、受信側で、ゴミ箱に割り振る機能に加えて、DMARCによる結果を優先した設定にしている場合に発生します。

