DMARCとは
DMARC(Domain-based Message Authentication, Reporting, and Conformance)は、SPFとDKIMの
認証結果を束ね、認証に失敗したメールを受信側にどう扱ってほしいかを宣言する仕組みです。
_dmarc.<ドメイン> のTXTレコードとして設定します。
DMARCが担うのは次の2つです。
- ポリシーの宣言 — 認証に失敗したメールを「何もしない/隔離する/拒否する」のどれで 扱ってほしいかを指示します。
- フィードバックの受信 — 「誰が自ドメインを騙って送信しているか」「正規の送信元で 認証に失敗しているものはないか」を集約レポートとして受け取れます。
SPF・DKIMだけでは足りない理由
SPFが検証するのはエンベロープの送信元ドメイン(Return-Path)であり、受信者がメールソフトで 目にするFromヘッダーのドメインではありません。攻撃者は自分が管理するドメインでSPFを 合格させたうえで、Fromヘッダーだけをあなたのドメインに偽装できます。
DMARCはここに**アラインメント(識別子の整合)**という条件を加えます。「SPFまたはDKIMに 合格していること」に加えて「その認証されたドメインがFromヘッダーのドメインと整合していること」を 要求するため、Fromの偽装が通らなくなります。
SPF側の設定については SPFレコードの書き方と設定方法 を参照してください。
DMARCレコードの書き方
_dmarc.example.com. IN TXT "v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com"
ホスト名の先頭に _dmarc. が付く点に注意してください。SPFのスペース区切りとは異なり、
DMARCはセミコロン区切りです。
主なタグ
| タグ | 意味 | 既定値 |
|---|---|---|
v |
バージョン。DMARC1 固定で、必ず先頭に書く |
必須 |
p |
ポリシー。none / quarantine / reject |
必須 |
sp |
サブドメイン向けポリシー | 未指定なら p を継承 |
rua |
集約レポートの送信先(カンマ区切りで複数可) | なし |
ruf |
失敗レポートの送信先 | なし |
pct |
ポリシーを適用する割合(0〜100) | 100 |
adkim |
DKIMのアラインメント。r(緩和)/ s(厳密) |
r |
aspf |
SPFのアラインメント。r(緩和)/ s(厳密) |
r |
p は必須タグです。欠けているレコードは無効として扱われ、DMARCが設定されていないのと
同じ状態になります。
アラインメントの r と s
- relaxed(
r、既定):組織ドメインが一致していれば整合とみなします。Fromがexample.comで、SPFの認証ドメインがmail.example.comでも合格します。 - strict(
s):完全一致を要求します。上の例は不合格になります。
サブドメインを使い分けて送信する一般的な構成では relaxed が適切です。特別な理由がなければ 既定のままで問題ありません。
導入手順:必ず p=none から始める
いきなり p=reject を設定すると、SPF・DKIMの設定漏れがあった送信元からの正規のメールが
拒否されます。次の順で段階的に進めてください。
段階1: p=none で観測する
_dmarc.example.com. IN TXT "v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com"
p=none は「認証に失敗しても特別な処理はせず、レポートだけ送ってほしい」という意味で、
配送への影響はありません。この段階でやることは観測だけです。
rua のレポートは受信事業者ごとに1日1通程度、XML形式で届きます。送信量が多いドメインでは
通数も増えるため、個人の業務用アドレスではなく専用のアドレスか、DMARCレポート解析サービスの
受信先を指定することを推奨します。
別ドメインのアドレスへ送る場合は、受信側ドメインに許可レコードが必要です。
example.com のレポートを analyzer.example で受け取るなら、analyzer.example 側に次の
レコードが要ります(解析サービス利用時はサービス側の手順に従ってください)。
example.com._report._dmarc.analyzer.example. IN TXT "v=DMARC1"
段階2: レポートを数週間確認する
集約レポートから次を確認します。
- レポートに現れる送信元IP・ドメインをすべて洗い出す
- 正規の送信元がSPFまたはDKIMで合格しているか
- 認証に失敗している正規の送信元があれば、先にSPFへの追加やDKIMの設定を行う
転送メール(メーリングリスト等)はSPFが失敗しやすいという性質があります。転送されても 壊れにくいDKIM側の合格状況もあわせて確認してください。
**この確認を飛ばして次へ進むと、正規のメールが届かなくなります。**最低でも数週間、 月次の定期送信がある場合はそれを1周分含む期間を観測してください。
段階3: quarantine へ
_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com"
認証に失敗したメールを迷惑メールフォルダへ隔離するよう指示します。ここでも数週間、 問い合わせと集約レポートの両方を注視してください。
不安がある場合は pct で適用割合を絞り、段階的に上げる方法もあります。
"v=DMARC1; p=quarantine; pct=10; rua=mailto:dmarc-reports@example.com"
10 → 25 → 50 → 100 と上げていき、最終的に pct タグ自体を削除します(未指定時の既定値が
100のため、削除すれば全件適用になります)。
段階4: reject へ
_dmarc.example.com. IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com"
認証に失敗したメールを受信側で拒否させます。なりすまし対策としてはここが到達点です。
この状態では、SPF・DKIMに登録し忘れた送信元からのメールが届かなくなります。新しい配信 サービスを導入するときは、先にSPF・DKIMを設定してから送信を開始する運用を徹底してください。
よくある失敗
DMARCレコードが複数ある
v=DMARC1 で始まるTXTレコードが _dmarc に2件以上あると、RFC 7489は「そのドメインには
DMARCが設定されていないものとして扱う」と定めています。ポリシーも適用されず、レポートも
届きません。設定変更時に既存レコードを置き換えず追加してしまうのが典型的な原因です。
p=none のまま放置している
p=none は導入の第一段階としては正しい設定ですが、そこに留まり続けると「DMARC設定済み」
でありながらなりすましメールの配送を止める効果はゼロという状態になります。レポートで
送信元の実態を把握できたら、必ず次の段階へ進めてください。
rua を設定していない
rua がないと、なりすましの発生状況も、正規送信元の認証失敗も観測できません。ポリシーを
強める判断材料が得られないため、p=none から先へ進めなくなります。DMARCを設定するなら
rua は実質必須です。
sp=none でサブドメインだけ無防備
sp を指定しなければサブドメインには p の値が継承されます。つまり sp=none は
「サブドメインだけ意図的に保護を外す」という明示的な指定です。
親ドメインを p=reject で守っていても、invoice.example.com のような実在しない
サブドメインを騙るメールは素通りします。攻撃者は受信者が見分けにくいサブドメインを
自由に作れるため、ここは実際に悪用されうる抜け道です。サブドメインからの送信の整備が
済んでいないなら、sp=quarantine を経由して段階的に強めてください。
構文の細かな誤り
- 区切りはセミコロン(SPFのスペース区切りと混同しやすい)
v=DMARC1は必ず先頭ruaの値はmailto:を含むURI形式(rua=admin@example.comは不正)pの値はnone/quarantine/rejectのいずれか
これらの誤りがあるレコードは受信側に破棄され、DMARCが設定されていないのと同じ扱いに なります。
設定できているか確認する
dig TXT _dmarc.example.com +short
v=DMARC1 を含む行が1行だけ返ることを確認してください。
構文・ポリシーの強度・レポート設定・アラインメントまでまとめて確認したい場合は、 このページ下部の診断フォームにドメインを入力してください。SPFとあわせて診断します。
サブドメインを診断する場合の注意
本ツールは入力されたドメインの _dmarc レコードだけを確認します。実際の運用では、
サブドメインにDMARCレコードがなくても親ドメイン(組織ドメイン)のポリシーが継承されます。
サブドメインを診断して「未設定」と表示された場合は、親ドメインを診断して継承元の設定を
確認してください。
- あわせて読む: SPFレコードの書き方と設定方法(10回のDNS参照制限に注意)