DMARCポリシーの強化

DMARCのquarantine・reject移行ガイド:正規メールを失わずにp=noneから強化する手順

監視だけのDMARCレコードからquarantine、rejectへ進めるための実践手順です。レポートから何が分かるか、自社ドメインで送信しているサービスをどう洗い出すか、緩和アライメントで足りるのはどんな場合か、pctが段階導入に使えなくなった理由とその代わり、サブドメインの扱い、そして正規メールが失敗したときの戻し方までを順に説明します。

ミントの封印をしたアイボリーの封筒が銅のコンベアで3段のガラスゲートを通り、封印のない灰色の封筒1通だけが銅のアームで透明なガラスの容器へ振り分けられるコンセプトイラスト。
概念を表すイラスト

p=noneのDMARCレコードが受信側に求めているのは、観察して報告することだけです。差出人(From)に自社ドメインを詐称したメールは、ポリシーがない場合と同じように配信され続けます。p=quarantine、さらにp=rejectへ進めると、そうしたメールを迷惑メールフォルダーに入れるか受信を拒否するよう求めることになります。ただし、その要求は見落としていた正規のサービスにも同じように働きます。請求書の発行ツール、問い合わせ窓口のシステム、自社ドメインで見積もりを送るCRMなどです。

このガイドでは安全に進めるための道筋を説明します。集約レポート(rua)の読み方、送信元の完全なリストの作り方、緩和アライメントと厳格アライメントの選び方、現行の標準でpctが廃止された今t=yで段階的に進める方法、spとnpによるサブドメインのポリシー、現実的なスケジュール、正規メールが失敗したときの対処、そして実際に公開されているレコードの確認方法です。ドメイン名、IPアドレス、セレクターはすべて例です。

このガイドの対象範囲

無料のSPF・DMARCチェッカーと公開準備スナップショットは、入力したホスト名そのものの公開DNSレコードを読みます。DMARCレコードがない場合やp=noneは指摘しますが、レポートの読み込みやsp、np、t、pct、アライメントの評価は行わず、ペネトレーションテストでもありません。

1. p=none、quarantine、rejectは受信側に何を求めるのか

_dmarc.example.comに置くDMARCレコードのpタグは、FromドメインがDMARCに失敗したメール、つまりFromドメインとアライメントの取れたドメインでSPFもDKIMも成功しなかったメールを、受信側にどう扱ってほしいかを示します。これは命令ではなく要望です。2026年5月に公開され、RFC 7489に代わった現行のDMARC標準であるRFC 9989も、最終的な判断は各受信側のローカルポリシーに委ねています。

ポリシー受信側に求めること見落とした正規の送信元はどうなるか主な使いどころ
p=none配信の扱いは変えず、報告だけを行うこれまでどおり配信され、失敗はレポートに現れる送信元を洗い出して直すまでの監視期間
p=quarantine失敗したメールを疑わしいものとして扱う。多くは迷惑メールへの振り分けや保留による追加確認迷惑メールフォルダーに入り、受信者の目に触れないことがある適用の第1段階
p=rejectSMTPのやり取りの中で、恒久的な5xxエラーとして受信を拒否する差し戻され、送信側のサービスに不達通知が届くすべての送信元がアライメントを満たし、DKIM署名済みのドメインの最終段階

移行を考えるうえで大事な点が二つあります。一つ目は、p=noneだけでは何も守れないことです。レポートが届くだけで、それもレコードにruaのアドレスがある場合に限られます。二つ目は、受信側によって適用の仕方が違うことです。RFC 9989はポリシーがrejectだという理由だけで拒否しないよう受信側に求めており、代わりに隔離する受信側もあります。同じ変更でも、メールボックス事業者ごとに結果が異なり得るということです。スイッチを一度切り替えるのではなく、小さく元に戻せる手順の連続として計画してください。

大手のメールボックス事業者は大量送信者にDMARCレコードを求めていますが、p=noneでも受け入れています。各社の要件とレコードの各タグの意味はSPF・DMARCの確認方法の解説にまとめています。

2. DMARC集約レポート(rua)の読み方

安全な移行を可能にするのは集約レポートです。レコードにrua=mailto:dmarc-reports@example.comのようなレポート送付先を加えると、レポートを送る受信側から圧縮されたXMLファイルが届くようになります。多くはUTCの1日分で、Fromに自社ドメインを使ってメールを送ったIPアドレスごとに、その結果が並んでいます。形式はRFC 9990で定められています。receiver.example!example.com!1791590400!1791676800.xml.gzのようなファイル名は、報告した受信側、自社ドメイン、そして対象期間の開始と終了(Unix時刻)を表します。

ファイル内の各<record>は、送信元と結果ごとにメールをまとめたものです。特に重要な項目は次のとおりです。

項目分かること注目する点
source_ip、count送信したサーバーと、期間中に送ったメールの数見覚えのないアドレスから大量に送られていないか。運用者を調べる
policy_evaluatedのdkim、spf方式ごとのDMARCの判定。ここでのpassは「成功し、かつアライメントも取れている」の意味正規の送信元が両方failなら、適用後に影響を受ける
policy_evaluatedのdisposition受信側の処理:none、pass、quarantine、rejectポリシー変更後、見覚えのあるメールが隔離や拒否になっていないか
reason受信側がポリシーと違う扱いをした理由:local_policy、mailing_list、trusted_forwarder、policy_test_mode、otherDKIMがないと届かなくなるメーリングリストや転送
identifiersのheader_from、envelope_fromFromドメインと、エンベロープ送信者(Return-Path)のドメインエンベロープのドメインが自社ではなく事業者のものになっていないか
auth_resultsのdkimとspfアライメント判定前の生の結果。署名ドメイン、セレクター、SPFのドメインが分かるDKIMが自社ドメインではなく事業者のドメインで成功していないか

最後の行とpolicy_evaluatedの違いを理解することが、いちばん役に立ちます。ニュースレター配信サービスがauth_resultsでmailer.example.netのDKIM passを示していても、そのドメインはexample.comとアライメントが取れていないため、DMARCとしては失敗します。DMARCの結論を表すのはpolicy_evaluatedだけです。

レポートは1日分ではなく数週間分を読んでください。月次の請求書、四半期ごとのニュースレター、年1回の更新案内は、それぞれ自分の周期で送られてきます。量が増えると生のXMLを読むのは大変なので、送信元、アライメント、処理結果ごとに日単位で集計できるパーサーやレポートツールを使うと確認が現実的になります。すべての受信側が集約レポートを送るわけではないため、静かな1週間だったからといって自社ドメインで何も起きていないとは限りません。ruaの送付先が別の組織ドメインにある場合、そのドメインはexample.com._report._dmarc.reports.example.netのような、v=DMARC1で始まる許可レコードを公開する必要があります。ないと受信側はその送付先を無視します(RFC 9990の4節)。

3. 適用前に正規の送信元をすべて洗い出す

適用を安全に進められるのは、Fromに自社ドメインを入れて送るすべてのシステムを把握しているときだけです。リストは二つの方向から作ります。組織が使っているものと、レポートに現れるものです。よくある送信元は次のとおりです。

  • 社員が毎日使うメールサービス。
  • マーケティングとニュースレター。誰かがまだログインしている古い配信ツールも含みます。
  • アプリケーションのトランザクションメール:登録確認、パスワード再設定、領収書など。
  • 業務ツール:CRM、請求・決済、問い合わせ管理、人事・採用、日程調整、電子署名。
  • Webサイトのフォームやプラグイン:noreply@example.comとして送るもの。
  • 機器やスクリプト:複合機のスキャン送信、監視アラート、定期ジョブ、社内のリレーサーバー。

次に、レポートに出てくる送信元を一つずつリストの項目に対応づけます。IPアドレスの逆引き(dig +short -x 192.0.2.10)で事業者が分かることが多く、その事業者のドキュメントに対応するSPFのincludeとDKIMの設定方法が載っています。結果は次のような表にまとめておきます。

送信元レポート上の手がかりSPFのアライメントDKIMのアライメント対応
社員用メールサービス事業者のアドレス、DKIMはd=example.comありあり不要
ニュースレター配信エンベロープとDKIMがmailer.example.netなしなしd=example.comでのDKIM署名を設定
請求システム自社サーバーのアドレス、DKIM署名なしありなしDKIMを追加。SPFだけでは転送で失敗する
Webの問い合わせフォームWebサーバーのアドレス、エンベロープはホスティング会社のドメインなしなし認証付きのリレーかメール配信サービス経由で送る
不明多数のアドレス、少量ずつ、無関係なエンベロープのドメインなしなし詐称の可能性が高い。失敗のままにする

この作業の目的は最後の行にあります。把握している送信元がすべて成功するようになれば、なお失敗するのは主に詐称メールか設定ミスのメールで、まさにそれを止めるのが適用の役目です。たまにしか送らない送信元ほど見落とされやすいので、静かな1か月を信じる前に、経理、人事、サポートの担当者に使っているツールを確認してください。

4. SPFとDKIMのアライメント:緩和(relaxed)か厳格(strict)か

DMARCが成功するのは、SPFかDKIMが成功し、かつその対象ドメインがFromドメインとアライメントが取れているときです。アライメントの取れた成功が一つあれば十分です。SPFで確認されるのはエンベロープ送信者のドメイン(RFC 7208)、DKIMでは有効な署名のd=の値(RFC 6376)です。どこまで一致を求めるかはaspfとadkimタグで決めます。

  • 緩和(r、既定値):二つのドメインが同じ組織ドメインに属していればよく、bounce.example.comもnews.example.comもexample.comとアライメントが取れます。
  • 厳格(s):ドメインが完全に一致する必要があります。

RFC 9989は、RFC 7489が頼っていたパブリックサフィックスリストではなく、DNSツリーウォーク(DNS Tree Walk)で組織ドメインを決めます。完全なドメイン名から上位に向かって_dmarcレコードを問い合わせる方式です。

FromドメインSPFが成功したドメインDKIMのd=緩和厳格
example.combounce.example.comなしSPFで一致不一致
news.example.comexample.comnews.example.comSPFとDKIMの両方で一致DKIMのみ一致
example.commailer.example.netmailer.example.net不一致不一致
example.comなし(転送されSPFは失敗)example.comDKIMで一致DKIMで一致

RFC 9989によれば、ほぼすべてのドメイン所有者にとって緩和アライメントで十分です。厳格アライメントは、事業者ごとにバウンス用サブドメインを用意するというよくある構成を壊してしまいます。明確な理由がない限り既定値のままにしてください。理由の例としては、サブドメインを外部の委託先に任せている場合があります。緩和アライメントのままだと、vendor.example.comで認証されたメールがexample.comとして通ってしまうからです。どちらを選ぶにしても、すべての送信元でDKIMをアライメントの取れた認証方式にしてください。転送ではSPFが失敗します。転送するサーバーが自社のレコードに載っていないためです。一方、DKIM署名はメールが書き換えられない限り、通常は転送後も有効です。

5. 段階的な導入:pctは廃止、t=yを使う

以前の解説ではpctで段階的に進める方法が紹介されていました。p=quarantine; pct=10から始めて25、50、100と上げ、失敗したメールのうちポリシーを適用する割合を増やしていくやり方です。RFC 7489では、抽出から外れたメールには一段階弱いポリシーが適用されました。RFC 9989はこのタグを削除しました。付録A.6によると、0と100以外の値はほとんど正確に適用されておらず、そのずれも実装ごとに大きく異なっていたためです。

この削除には落とし穴があります。RFC 9989は、知らないタグを無視するよう受信側に求めています。そのため新しい標準に従う受信側は、p=quarantine; pct=25を単なるp=quarantineとして読み、失敗したメールすべてに適用します。中間のpct値で影響を抑えることは、もう当てにできません。

代わりに導入されたのがテストフラグtです。t=yを付けると、公開したポリシーより一段階弱い扱いを受信側に求めます。p=quarantine; t=yはnoneのように、p=reject; t=yはquarantineのように扱われます。レポートはこれまでどおり届き、受信側はこの違いを理由policy_test_modeとして記録できます。RFC 9989はt=yとt=nを、それぞれpct=0とpct=100に相当するものとしています。

移行期間中は、RFC 7489しか実装しておらずtを無視する受信側もあれば、pctを無視する新しい受信側もあります。旧ルールのpct=0と新ルールのt=yは同じ扱いを求めるものなので、テスト中は両方を公開しておけます。

v=DMARC1; p=quarantine; t=y; pct=0; rua=mailto:dmarc-reports@example.com

数週間レポートを確認したら、両方のタグを外してp=quarantineを完全に適用します。rejectの前にも同じ手順を繰り返します。p=reject; t=y; pct=0は隔離を求める指定で、二つのタグを外すと拒否が有効になります。

割合ではなくメールの種類ごとに段階を分ける方法もあります。news.example.comのようなサブドメインは独自のDMARCレコードを持てるので、メインのドメインより先に、または後から適用に進めることができます。RFC 9989自身の導入例でも、まずサブドメインでt=y付きのp=quarantineを試してから強化しています。

6. サブドメインのポリシー:spとnp

example.comのDMARCレコードは、独自の_dmarcレコードを持たないサブドメインにも適用されます。次の二つのタグで、サブドメインのポリシーをpと変えられます。

設定対象指定がない場合使い方の例
sp独自レコードを持たない、実在するサブドメインpが適用されるサブドメインの送信元を直している間のp=reject; sp=quarantine
npDNS上に存在しないサブドメインsp、それもなければpが適用される存在しない名前から正規のメールは送られないので、早い段階からnp=reject
サブドメイン自身の_dmarcレコードそのサブドメイン親のレコードのspまたはpが適用される独自のスケジュールで進めるマーケティング用サブドメイン

動きを予測しやすくするためのルールがいくつかあります。spが意味を持つのは組織ドメインのレコードだけで、独自のレコードを公開しているサブドメインには、そのレコードのpが適用されます。pがまだnoneのうちにnp=rejectを設定するのは、リスクの低い最初の一歩です。billing-support.example.comのような架空の名前を使った詐称メールは拒否され、npに対応していない受信側は単にspかpを使います。これを頼りにする前に、実際にメールを送っているサブドメインには少なくとも一つDNSレコードがあり、実在するものとして扱われることを確認してください。また、SPFは継承されない点にも注意が必要です。エンベロープ送信者として使う名前には、DMARCのポリシーにかかわらず、それぞれSPFレコードが必要です。

7. p=noneからp=rejectまでの現実的なスケジュール

どのドメインにも当てはまるスケジュールはありません。RFC 9989も、適用の準備が整うまでに何か月分ものレポートが必要になることがあると注意しています。利用者がメーリングリストに投稿するドメインについては、少なくとも1か月をp=noneで、同じくらいの期間をp=quarantineで過ごして結果を比べることを勧め、それでもそうしたドメインはrejectを公開すべきではないとしています。送信サービスが数個ある組織なら、たとえば次のように計画できます。

段階レコード(簡略化)目安の期間次へ進む条件
洗い出しと監視p=none; rua=…4〜8週間把握している送信元がすべてDKIMのアライメントで成功し、失敗しているのは不明な送信元か詐称だけ
quarantineのテストp=quarantine; t=y; pct=02〜4週間レポートに新しい正規の送信元が現れない
quarantinep=quarantine4週間以上メールが届かないという声がなく、処理結果が想定どおり
rejectのテストp=reject; t=y; pct=02〜4週間転送メールやメーリングリストのメールもDKIMで成功し続けている
rejectp=reject継続少なくとも月に1回、そして新しいツールが送信を始めるたびにレポートを確認する

変更の前には、_dmarcのTXTレコードのTTLを、変更前のTTLの期間以上前もって300秒程度まで下げておきます。こうしておけば、元に戻すときもすぐにリゾルバーへ反映されます。変更は週の前半に行い、サポート担当に何に注意すべきかを伝え、公開した値を日付とともに記録しておきましょう。RFC 9989は、p=rejectを公開するドメインに対し、SPFだけに頼らず有効なDKIM署名をメールに付けることを求めています。rejectだけが正解というわけでもありません。社員がメーリングリストで使うドメインなら、しっかり監視したquarantineのほうが適している場合があります。一方、請求書や通知だけを送るドメインはrejectの有力な候補です。

8. 正規メールが失敗したとき:原因の特定、修正、切り戻し

いずれ、レポートや同僚からの連絡で正規のメールが失敗していると分かる日が来ます。集約レポートで該当する行を探すか、影響を受けたメールの全ヘッダーをもらってAuthentication-Resultsヘッダーを読み、次のパターンと照らし合わせてください。

症状考えられる原因対処
SPFは事業者のドメインで成功、自社ドメインのDKIMがないサービスが自社のエンベロープドメインと署名ドメインを使っているサービス側で独自ドメインのDKIMを有効にし、そのセレクターをexample.comに公開する。選べるなら独自のバウンス用サブドメインも設定する
既知のセレクターでDKIMが失敗する鍵の更新や削除、レコードの途中切れ、署名後のメールの書き換え事業者の鍵を公開し直し、selector._domainkey.example.comのTXTレコードを確認する
SPFがpermerrorDNS参照を伴う項目が10を超えている、または同じ名前にSPFレコードが2つある使っていないincludeを削除し、レコードを1つにまとめる。詳しくはSPFレコードの解説を参照
一部の受信者でだけ失敗する転送:転送サーバーのアドレスがSPFレコードにない通常は転送後も有効な、アライメントの取れたDKIMに頼る
メーリングリスト経由で失敗するリストが件名や本文を書き換え、DKIM署名が無効になったFromを書き換えるリストなら失敗を避けられる。リストの利用が多いドメインはquarantineにとどめることも検討する
社内のアラートや複合機のメールが失敗する機器が認証なしで直接送信している認証付きのリレーか、自社ドメインで署名する配信サービスを経由させる

失敗の規模が大きい場合や、領収書やパスワード再設定のような売上に関わるメールに影響している場合は、まず切り戻してから調べます。t=yとpct=0を加えるか、以前のポリシーに戻してください。TTLを短くしてあれば、変更は数分で大半のリゾルバーに届きます。5xxの拒否は恒久的なものなので、すでに拒否されたメールが後から配信されることはありません。影響を受けたチームに、どのメールを送り直すべきか伝えてください。そのうえで送信元を直し、数日分のレポートで成功を確かめてから、もう一度先へ進みます。ARC(RFC 8617)で認証結果を引き継ぐ転送サービスやメーリングリストは助けになりますが、RFC 9989はこの種の仕組みがまだ広くは使われていないと指摘しています。すべての送信元でDKIMを使うことが、今も確実な対処です。

9. 公開されているDMARCレコードの確認方法

DNSの管理画面の表示ではなく、実際に公開されている内容を確認します。

dig +short TXT _dmarc.example.com
nslookup -type=TXT _dmarc.example.com
dig +short NS example.com
dig +short TXT _dmarc.example.com @ns1.example.net

最初の2行はリゾルバーが返す内容を表示します。最後の行は権威DNSサーバーに直接問い合わせるので、キャッシュされた応答の期限が切れる前でも変更を確認できます。次の点を確かめてください。

  • _dmarcにあるv=DMARC1で始まるTXTレコードがちょうど1つであること。2つあると受信側は両方を破棄し、DMARCレコードがないのと同じ扱いになります。
  • v=DMARC1が最初のタグで、pの値がnone、quarantine、rejectのいずれかであること。
  • ruaのメールボックスが存在し、別のドメインにある場合は_report._dmarcレコードで許可されていること。
  • タグがセミコロンで区切られ、文書から貼り付けた全角の引用符や余計な文字が混ざっていないこと。

続いて、各サービスから自分で管理しているメールボックスにメールを送り、Authentication-Resultsヘッダーを読みます。Fromドメインとともにdmarc=passとあれば、それが受信側の判定で、最終的に意味を持つのはこの結果です。

外部から手早く確認したいときは、無料のSPF・DMARCレコードのチェッカーが、入力したホスト名そのものの_dmarcレコードを読みます。親ドメインにはさかのぼりません。レコードがない場合(ホストにMXレコードがあれば中)とp=none(監視モードとして低)を指摘し、quarantineとrejectではシグナルを出しません。レポートは読まず、sp、np、t、pct、rua、アライメントも評価しません。同じメールDNSのチェックはSPF、MTA-STS、CAAも読み、無料の公開準備スナップショットが行う8項目のパッシブなチェックの一つです。スナップショットは登録不要で、スコアと各チェックの結果を返します。継続的な見直しについてはDNSとメールの安全性の解説をご覧ください。

よくある質問

DMARCのquarantineとrejectの違いは何ですか?

p=quarantineは、失敗したメールを疑わしいものとして扱うよう受信側に求めるもので、多くの場合は迷惑メールフォルダーに入ります。p=rejectはSMTPのやり取りの中で受信を拒否するよう求めるもので、メールは配信されず、送信側のサービスに不達通知が返ります。最終的な判断は受信側が行い、p=rejectでも隔離にとどめる受信側があります。

quarantineに進む前に、p=noneはどのくらい続けるべきですか?

正規の送信元がすべてアライメントを満たして成功するまでです。月次や不定期のメールも現れるよう、少なくとも4〜8週間分のレポートを見るのが一般的です。利用者がメーリングリストに投稿するドメインについて、RFC 9989はnoneで少なくとも1か月、quarantineでも同じくらいの期間を勧めています。

pct=10やpct=50でDMARCを段階的に導入できますか?

確実にはできません。中間の値は適用にばらつきがあったため、RFC 9989はpctを削除しました。この標準に従う受信側はタグを無視し、ポリシーを全面的に適用します。テスト期間にはt=yを使い、まだRFC 7489に従う受信側向けにpct=0も併記してください。

adkim=sとaspf=sで厳格アライメントにすべきですか?

通常は不要です。既定の緩和アライメントは組織ドメインのどのサブドメインでも一致とみなすため、バウンス用サブドメインを使う構成にはこれが必要です。厳格アライメントが意味を持つのは主に、外部の委託先が運用するサブドメインのメールをメインのドメインとして通したくない場合です。

DMARCレコードのsp=は何のためのものですか?

spは独自のDMARCレコードを持たない実在のサブドメインのポリシーを、npはDNS上に存在しないサブドメインのポリシーを指定します。どちらもなければサブドメインにはpのポリシーが適用されます。独自の_dmarcレコードを持つサブドメインは、そのレコードに従います。

p=rejectにすれば自社ブランドを悪用したフィッシングはすべて防げますか?

いいえ。p=rejectが求めるのは、Fromで自社ドメインそのものを詐称したメールの拒否です。似た綴りのドメイン、紛らわしい表示名、乗っ取られたアカウントはDMARCが確認する範囲の外にあります。レポートを読み続け、受信者から転送されてくる情報にも目を配ってください。

出典・参考資料

  1. RFC 9989: DMARCwww.rfc-editor.org
  2. RFC 9990: DMARC集約レポートwww.rfc-editor.org
  3. RFC 7489: DMARC(廃止済み、pctタグを定義していた旧仕様)www.rfc-editor.org
  4. RFC 7208: Sender Policy Framework (SPF)www.rfc-editor.org
  5. RFC 6376: DomainKeys Identified Mail (DKIM) 署名www.rfc-editor.org
  6. RFC 8617: Authenticated Received Chain (ARC)www.rfc-editor.org
  7. dmarc.org: DMARCの概要dmarc.org
Sitelemetryチーム

Sitelemetry編集チームが作成しています。詳しく学ぶには、掲載した参考資料をご覧ください。

SITELEMETRY

学んだことを実践へ。

Sitelemetryでサイトの構造、設定、技術的な手掛かりを探りましょう。