SPFがPASSなのにDMARCがFAILになる?
メールヘッダーを調査していると、次のような一見不思議な結果を見ることがあります。
SPF = PASS
DKIM = FAIL
DMARC = FAIL
「SPFがPASSしているのに、なぜDMARCはFAILなの?」
と思うかもしれません。
実はDMARCでは、単純にSPFやDKIMがPASSしたかどうかだけを確認しているわけではありません。
重要なのが、
Alignment(アライメント)
です。
この記事では、DMARCのAlignmentとは何なのか、なぜSPF PASSでもDMARC FAILになることがあるのかを説明します。
まず「From」が2種類あることを理解する
SPFとDMARCを理解するときに混乱しやすいのが、メールには複数の「送信元」が存在することです。
特に重要なのが、
Envelope From
Header From
の2つです。
Envelope From
SMTPでメールを配送するときに使用される送信元です。
SMTP通信では、
MAIL FROM:<sender@example.com>
のように指定されます。
SPFでは、基本的にこのEnvelope Fromのドメインを使って認証します。
Header From
一方、メール本文のヘッダーには、
From: sender@example.com
があります。
こちらがHeader Fromです。
OutlookやGmailなどで、利用者が通常「差出人」として目にするのはこちらです。
つまり、
SMTP配送で使う
Envelope From
と
利用者が見る
Header From
は別物です。
そして、必ず同じドメインになるとは限りません。
SPF PASSだけでは不十分な理由
例えば次のメールが送られてきたとします。
Envelope From:
mail@sender-example.com
Header From:
president@company-example.jp
送信元IPが sender-example.com のSPFレコードで許可されていたとします。
すると、
SPF = PASS
になります。
しかし、メールを受け取った人に表示されるのは、
president@company-example.jp
です。
つまり、
SPFで確認したドメイン
sender-example.com
≠
利用者が見るFrom
company-example.jp
です。
SPFはPASSしていますが、表示されているFromとは別のドメインが認証されているわけです。
これをそのまま「正常」と判断してしまうと、Fromのなりすまし対策として不十分です。
そこでDMARC Alignmentを確認する
DMARCでは、SPFがPASSしているかだけでなく、
SPFで認証されたドメインとHeader Fromのドメインに適切な関係があるか
を確認します。
これが、
SPF Alignment
です。
先ほどの例なら、
Header From
company-example.jp
│
│ 比較
▼
SPF認証ドメイン
sender-example.com
↓
Alignment FAIL
となります。
そのため、
SPF
認証:PASS
Alignment:FAIL
です。
SPFそのものは成功していても、DMARCで利用できるSPF認証にはならないというのがポイントです。
DKIMにもAlignmentがある
AlignmentはSPFだけではありません。
DKIMにもあります。
DKIM-Signatureヘッダーには、
DKIM-Signature:
v=1;
d=example.com;
s=selector1;
のような、
d=
があります。
DMARCでは、このd=のドメインとHeader Fromのドメインの関係を確認します。
例えば、
Header From:
user@example.com
DKIM-Signature:
d=example.com
なら、
Header From
example.com
=
DKIM d=
example.com
↓
DKIM Alignment PASS
となります。
DKIM PASSなのにDMARC FAILすることもある
逆に次のようなメールだったとします。
Header From:
president@company-example.jp
DKIM-Signature:
d=sender-example.com
sender-example.com のDKIM署名そのものには問題がなければ、
DKIM = PASS
になります。
しかしDMARCから見ると、
Header From
company-example.jp
≠
DKIM d=
sender-example.com
です。
したがって、
DKIM認証
PASS
でも
DKIM Alignment
FAIL
となります。
SPF側もDMARCの条件を満たしていなければ、
SPF PASS
DKIM PASS
なのに
DMARC FAIL
というケースさえあり得ます。
SPFとDKIMが両方PASSしていても、どちらもHeader FromとAlignmentしていなければDMARCはPASSできません。
ここは非常に重要です。
DMARC PASSの条件
DMARCを理解するなら、次の図が分かりやすいと思います。
Header From
│
┌───────────┴───────────┐
│ │
▼ ▼
SPF DKIM
│ │
認証PASS? 認証PASS?
│ │
Alignment PASS? Alignment PASS?
│ │
└───────────┬───────────┘
│
どちらか一方が
条件を満たせば
│
▼
DMARC PASS
つまり、
SPF認証 PASS
+
SPF Alignment PASS
または、
DKIM認証 PASS
+
DKIM Alignment PASS
のどちらか一方が成立すればDMARCはPASSできます。
DKIM FAILでもDMARC PASSになる理由
ここまで理解すると、以前の記事で扱った、
SPF PASS
DKIM FAIL
DMARC PASS
という結果も分かりやすくなります。
例えば、
SPF
認証 PASS
Alignment PASS
DKIM
body hash did not verify
↓
FAIL
だったとします。
DKIMは失敗しています。
しかしSPF側が、
SPF認証
PASS
+
SPF Alignment
PASS
なので、
SPF
PASS + Alignment
│
▼
OK
│
├──→ DMARC PASS
│
NG
▲
│
DKIM FAIL
となります。
DMARCはSPFとDKIMの両方がPASSすることを要求しているわけではありません。
SPF PASSなのにDMARC FAILになる理由
反対に、今回の記事タイトルになっている、
SPF PASS
DKIM FAIL
DMARC FAIL
を考えてみます。
例えば、
Header From:
user@example.jp
Envelope From:
bounce@mail-service.com
だったとします。
mail-service.com のSPF認証には成功しました。
SPF = PASS
しかし、
Header From
example.jp
≠
SPF認証ドメイン
mail-service.com
なので、
SPF Alignment = FAIL
です。
さらにDKIMもFAILなら、
SPF
認証 PASS
Alignment FAIL
│
└──────┐
│
DKIM │
認証 FAIL │
│ │
└──────┤
▼
DMARC FAIL
となります。
つまり、
SPFは正常なのにDMARCがおかしい
のではありません。
SPF認証は正常だが、そのSPF認証をDMARCの認証として使えなかった
ということです。
relaxedとstrictの違い
DMARC Alignmentには、もう一つ重要な設定があります。
relaxed
strict
です。
DMARCではSPF Alignmentをaspf、DKIM Alignmentをadkimで指定できます。
例えば、
v=DMARC1; p=none; aspf=r; adkim=r;
ならrelaxedです。
relaxed
relaxedでは、組織ドメインが同じであればサブドメインが異なっていてもAlignmentが成立できます。
例えば、
Header From:
example.jp
SPF認証ドメイン:
mail.example.jp
のようなケースです。
単純な文字列の完全一致ではありませんが、同じ組織ドメインとして評価できればAlignmentできます。
strict
strictでは、より厳密に一致する必要があります。
Header From:
example.jp
SPF認証ドメイン:
mail.example.jp
なら、strictでは一致しません。
設定は、
aspf=s
adkim=s
です。
特別な理由がなければ、まずDMARCのデフォルトであるrelaxed Alignmentを理解しておけばよいでしょう。
実際のメール調査では何を見ればいい?
DMARC FAILを調査するときは、単に、
dmarc=fail
だけを見るのではなく、次の3つを確認します。
① Header Fromのドメイン
② SPFで認証されたドメイン
③ DKIM-Signatureの d= ドメイン
そして、
Header From
│
example.jp
/ \
/ \
▼ ▼
SPF認証ドメイン DKIM d=
│ │
▼ ▼
Alignment? Alignment?
と考えます。
これだけでも、DMARC FAILの原因をかなり切り分けやすくなります。
メールヘッダーを見るときの注意
Authentication-Results:には、例えば次のような情報が記録されることがあります。
Authentication-Results:
spf=pass;
dkim=fail;
dmarc=fail
ここで、
「SPF PASSなのにDMARC FAILだからおかしい」
と判断しないことが重要です。
次に確認するのは、
「SPFはどのドメインについてPASSしたのか?」
です。
さらに、
「そのドメインはHeader FromとAlignmentしているのか?」
まで確認します。
DMARCを調査するときは、PASS/FAILだけではなく「どのドメインを認証した結果なのか」を見ることが重要です。
まとめ
DMARCでは、SPFやDKIMが単純にPASSしたかだけではなく、ユーザーが見るHeader FromとのAlignmentを確認します。
そのため、
SPF PASS
でも、
SPF認証ドメイン
≠
Header From
でAlignmentが成立せず、DKIM側も条件を満たさなければ、
DMARC FAIL
になります。
逆に、
DKIM FAIL
だったとしても、
SPF PASS
+
SPF Alignment PASS
なら、
DMARC PASS
になることがあります。
重要なのは、
SPF/DKIMのPASS・FAILだけを見るのではなく、Header Fromとの関係を見ること
です。
これがDMARCのAlignmentを理解する一番のポイントです。


コメント