DMARC Alignmentとは?SPF PASSなのにDMARC FAILになる理由

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を理解する一番のポイントです。


コメント

タイトルとURLをコピーしました