SiteKensa

「DMARCが機能しない状態です」と出たとき|足りないのはSPFとDKIMです

公開日 更新日 DMARCSPFDKIMメール
DMARCがSPFとDKIMの2本の足で立っており、どちらか1本あれば立つが0本では立たないことを示す図

DMARCレコードを追加したのに診断で「DMARCが機能しない状態です」または「DMARCが機能しているか確認できません」と表示されることがあります。

この表示だけでは、DMARCレコードの書式まで正しいと判断できません。診断が見ているのはSPFとDKIMのどちらも見つからないことだけで、DMARCレコード自体の中身までは確認していません。DMARCレコードそのものについての指摘が別に出ていないかもあわせて確認してください。指摘の見分け方はDMARCレコードの書式エラーで扱っています。

先に結論を書きます。

  • DMARCは、SPFかDKIMのどちらかが成功して、そのドメインが差出人(From)と揃っていることを前提にしています
  • どちらも無い状態では、このドメインから送るメールはDMARCの判定に必ず失敗します
  • この状態で p=quarantinep=reject を指定していると正規のメールが届かなくなる可能性があります
  • ステップ1では、DKIMが本当に無いかを確かめます。「見つからなかっただけ」の場合があります
  • ステップ2でSPFかDKIMを入れ、ステップ3で認証が通ってからポリシーを見直します

この記事は、DMARCレコードをすでに追加した方に向けて書いています。DMARCレコードをまだ追加していない場合は、DMARCを設定していないリスクと最初に置く設定を先に読んでください。

用語をここで揃えます。すでにご存じの場合は読み飛ばしてください。

用語 意味
SPF そのドメインのメールを送ってよいサーバーをDNSで公開する仕組み
DKIM 送信時にメールへ電子署名を付け、公開鍵をDNSで公開する仕組み
DMARC SPFとDKIMの結果を使って、なりすましメールの扱いを受信側に指示する仕組み
From 受信者の画面に見える差出人。DMARCが守る対象
セレクタ DKIMの公開鍵を置く場所の名前。selector1._domainkey.example.jpselector1 の部分

DMARCはSPFかDKIMの上に乗る仕組みです

DMARCは、それ自体でメールの正当性を確かめる仕組みではありません。SPFとDKIMの結果を受け取り、その結果が差出人のドメインと揃っているかを見るところが役目です。

RFC 9989 セクション5.3.5 は、受信側の判定を次のように定めています。

If one or more of the Authenticated Identifiers align with the Author Domain, the message is considered to pass the DMARC mechanism check.

If no Authenticated Identifiers exist for the domain, or none of the Authenticated Identifiers align with the Author Domain, the message is considered to fail the DMARC mechanism check.

(認証済みの識別子のうち1つ以上がAuthor Domainと揃っていれば、そのメッセージはDMARCの検査に合格したものとみなされる。ドメインについて認証済みの識別子が存在しない場合、または認証済みの識別子のいずれもAuthor Domainと揃っていない場合、そのメッセージはDMARCの検査に失敗したものとみなされる)

「認証済みの識別子」は、SPFかDKIMが成功したときに残るドメイン名のことです。SPFもDKIMも設定していなければ、この識別子が1つも生まれません。DMARCの判定はそこで失敗が確定します。

2つの表示の違い

診断は2つの表示を使い分けています。どちらもSPFが見つからない点は同じで、DKIMについて何を確認できたかが違います。

表示 何を確認できたか 深刻度
DMARCが機能しない状態です SPFが無く、利用中のメールサービスの既定のセレクタにも公開鍵が無かった 要修正
DMARCが機能しているか確認できません SPFは無い。DKIMは試したセレクタで見つからなかっただけ 要確認

後者で断定していない理由は、DKIMのセレクタ名が自由に決められるためです。RFC 6376 セクション3.1 は、セレクタの例として事業所の名前や署名した日付を挙げたうえで次のように書いています。

While some domains may wish to make selector values well-known, others will want to take care not to allocate selector names in a way that allows harvesting of data by outside parties.

(セレクタの値を広く知られるようにしたいドメインもあれば、外部の第三者によるデータの収集を許すような形でセレクタ名を割り当てないよう注意したいドメインもあるだろう)

外部から辿れない名前を選ぶことが、仕様の側で想定されています。よく使われる名前を試して見つからなくても設定されていない証明にはなりません。

ステップ1/3: DKIMが本当に無いかを確かめる

自分宛にメールを1通送り、届いたメールのヘッダーを見ます。送信元は、そのドメインで普段使っている経路にしてください。問い合わせフォームや普段のメールソフトなどです。

見るのは2か所です。

見る場所 何が分かるか
Authentication-Results:dkim= 受信側がDKIMの検証をどう判定したか
DKIM-Signature:d= その署名がどのドメインを名乗っているか

dkim=pass が出ていて、かつ d= があなたのドメインであれば、DKIMは設定されています。SPFが無くてもDMARCはDKIM側で通っています。

d= が配信サービスのドメインになっている場合は、DKIMが成功していてもDMARCには使えません。RFC 9989 セクション4.4.1 が理由を書いています。

There is currently no generally accepted mechanism by which a Domain Owner may assert a list of third-party DKIM Signing Domains that are authorized to sign on behalf of a given Author Domain. Therefore, DMARC requires that Identifier Alignment is applied to the DKIM-Authenticated Identifier because a message can bear a valid signature from any domain, even one used by a bad actor.

(あるAuthor Domainの代理として署名する権限を持つ第三者のDKIM署名ドメインの一覧をドメイン所有者が表明するための一般に受け入れられた仕組みは、現時点で存在しない。したがってDMARCは、DKIMで認証された識別子に対して識別子のアライメントを適用することを求める。なぜなら、悪意ある者が使うドメインを含め、どのドメインからでも有効な署名を持つメッセージを作れるからである)

署名が付いていることは、その署名が自分のドメインを名乗っている証明になりません。

ヘッダーの読み取りはメールヘッダー解析に貼り付けて行えます。貼り付けた内容はブラウザの中だけで処理され、サーバーには送信されません。

dkim=none と出ている場合、あるいは DKIM-Signature: の行そのものが無い場合は、署名が付いていません。次のステップに進んでください。

ステップ2/3: SPFかDKIMを入れる

どちらか片方で、DMARCが通る経路は成立します。両方あればより確実になります。

RFC 9989 は、ドメイン所有者の作業として セクション5.1.1 に「揃ったドメインのSPFレコードを公開する」、セクション5.1.2 に「揃ったドメインでDKIM署名するよう送信システムを設定する」を並べています。どちらを先にするかは決められていません。

どちらを選ぶかの判断はSPFだけでDKIMは不要かで扱っています。

作業の場所が2つで違います。

何をするか どこで作業するか
SPF DNSにTXTレコードを1本置く DNSを管理している事業者の管理画面
DKIM 鍵を発行してから公開鍵をDNSに置く 鍵の発行はメールサービス側。DNSへの登録はDNSの管理画面

DKIMの鍵はメールサービスが発行するもので、DNS事業者の管理画面にはその機能がありません。手順は「DKIMが設定されていない可能性があります」と出たときで扱っています。

置く値は、ドメインの状態によって変わります。メール認証の診断にドメインを入れるといまの設定にもとづいた値が生成されます。そちらを使ってください。

ステップ3/3: 認証が通ってからポリシーを見直す

SPFかDKIMが通るようになるまでポリシーを強めないでください。

いま p=reject を宣言している場合、認証済みの識別子が1つも無いので、受信側の判定は確実にDMARCの失敗になります。ただし、失敗した先でメールがどう扱われるかは別です。

RFC 9989 セクション8は、受信側の適合要件として「Author Domainの p=reject ポリシーだけを理由にメッセージを拒否してはならない(MUST NOT)」と定めています。セクション7.4も同じ趣旨で、ほかに判断材料が無い場合は「その失敗したメールを p=quarantine が指定されていたものとして扱わなければならない(MUST)」としています。セクション5.4はさらに広く、「メッセージの最終的な取り扱いは、常にローカルポリシーの問題であり、受信側の裁量に委ねられる」と述べています。

つまり、認証の経路が無いままだとメールは確実にDMARCの判定に失敗しますが、それを拒否するか隔離するかは受信側の判断で、ほかに材料が無ければ隔離(quarantine)相当として扱うことが仕様上求められています。それでも、隔離されるだけで正規のメールが迷惑メールフォルダへ振り分けられ、読まれなくなる可能性は残ります。診断が「DMARCが機能しない状態です」を要修正として出しているのはこの状態が正規のメールに影響しうるためです。

ポリシーを none から quarantinereject へどう進めるかそのものは、この記事では扱いません。ここで扱ったのはその前提となる認証の経路を作るところまでです。

直さなくてよい場合

このドメインからメールを送らないのであれば、SPFもDKIMも要りません。

診断は、SPFで「このドメインからメールを送らない」と宣言しているドメインに対して、この項目を出しません。DKIMについても「DKIMの設定は不要です」と表示に切り替えます。署名する対象のメールが無いためです。

条件は -all が書いてあることではありません。送信を許可する記述(include:ip4: など)が1つも無く、all- で閉じている形のときだけです。

SPFレコード 送らないと宣言しているか
v=spf1 -all しています
v=spf1 include:_spf.example.jp -all していません(このドメインは送信します)

メールを使わないドメインの閉じ方はNull MXでメールを受け取らないドメインにするで扱っています。

入れたのに通らない場合

SPFかDKIMを設定したあとも dmarc=fail が出る場合は、別の原因になります。認証は成功しているのにそのドメインが差出人(From)と揃っていない状態です。

外部のメール配信サービスを使っているとこの形になりやすくなります。詳しくはSPFはpassなのにDMARCがfailするときを読んでください。

設定が反映されたかどうかは、メール認証の診断で確認できます。DNSの変更が外から見えるまでには時間がかかることがあり、その場合はDNSの変更が反映されないときを読んでください。

まずは全体を診断してみましょう

専門知識がなくてもいまの設定状況と具体的な対処方法をわかりやすく確認できます。

ドメイン設定を診断する

利用中のDNS事業者が分かっているなら事業者別の設定手順から直接進めます。