DMARCとは何ですか?
DMARC(Domain-based Message Authentication, Reporting & Conformance)は、SPFまたはDKIMで認証されたドメインが、メッセージのFromアドレスのドメインと整合しているかを確認するメール認証プロトコルです。ドメイン所有者は、DMARC検証に失敗したメッセージの処理方針を指定して公開し、集計レポートまたはメッセージ単位の失敗レポートを求めることができます。
DMARCが不可欠な理由
SPFとDKIMは送信識別子を認証します。しかし、それだけでは、認証された識別子がFromアドレスのドメインと整合しているか、また失敗したメッセージに対するドメイン所有者の処理方針を確認できません。
DMARCは、次の仕組みによってこの問題を解決します。
- 処理方針を示す: DMARC検証に失敗したメッセージに対して、none、quarantine、rejectのいずれかを指定します
- アライメントを確認する: 認証されたSPFまたはDKIMの識別子の少なくとも1つが、Fromドメインと整合している必要があります
- レポートを求める: 集計レポートとメッセージ単位の失敗レポートによって、観測された認証結果を把握できます
DMARCの仕組み
1. 送信者が公開します: DNSにDMARCポリシーを設定します(_dmarc.domain.comのTXTレコード)
2. メールが送信されます: From: [email protected]を付けて送信されます
3. 受信側が確認します: SPFとDKIMを確認します
4. 受信側がアライメントを確認します: 認証されたドメインがFromヘッダーと一致するかを確認します
5. 処理を決定します: 受信側が要求されたポリシーとその他のシグナルを考慮します
6. レポートが送信される場合があります: 対応する受信側は、要求された集計レポートまたはメッセージ単位の失敗レポートを送信できます
DMARCアライメント
DMARCではアライメントが必要です。Fromヘッダーのドメインは、レコードの緩和モードまたは厳格モードに従い、少なくとも1つの認証済み識別子と整合している必要があります。
- SPFアライメント: SPFで検証されたMAIL FROMドメイン、またはMAIL FROMがnullの場合のHELOドメイン
- DKIMアライメント: 有効なDKIM署名のd=ドメイン
アライメントがない場合、SPFまたはDKIMが成功してもDMARCは失敗することがあります。DMARCは、Fromドメインそのものを使う特定の種類のなりすましに直接対応します。見た目が似たドメインや、送信者の表示名の悪用は検出しません。
DMARCレコードの形式
DMARCレコードは、_dmarc.yourdomain.comにあるTXTレコードです。
_dmarc.example.com. IN TXT "v=DMARC1; p=reject; rua=mailto:[email protected]"
DMARCタグ
| タグ | 必須 | 説明 | 例 |
|---|---|---|---|
| v | はい | バージョン | v=DMARC1 |
| p | 推奨(任意) | DMARC検証に失敗したメールに対して指定する処理方針 | p=none/quarantine/reject |
| rua | いいえ | 集計レポートURI | rua=mailto:[email protected] |
| ruf | いいえ | メッセージ単位の失敗レポートURI | ruf=mailto:[email protected] |
| t | いいえ | ポリシーのテストモード | t=y or t=n |
| sp | いいえ | 既存のサブドメインに対して指定するポリシー | sp=reject |
| np | いいえ | 存在しないサブドメインに対して指定するポリシー | np=reject |
| adkim | いいえ | DKIMアライメントモード | adkim=s (strict) or adkim=r (relaxed) |
| aspf | いいえ | SPFアライメントモード | aspf=s or aspf=r |
pctタグは歴史的なものです。現在のDMARC標準では、失敗するメッセージの割合に応じてポリシーを適用するために使用されなくなりました。pタグは推奨されますが任意です。pタグのない有効なレコードは、p=noneとして扱われます。
DMARCポリシー
p=none: 失敗したメッセージの処理方法を指定しません。ドメイン所有者は、レポートを確認する間によくこの設定を使用します。v=DMARC1; p=none; rua=mailto:[email protected]
p=quarantine: 受信側に、DMARC検証に失敗したメッセージを不審なものとして扱うよう要求します。
v=DMARC1; p=quarantine; rua=mailto:[email protected]
p=reject: 受信側に、DMARC検証に失敗したメッセージを拒否するよう要求します。受信側はこの方針を他のシグナルと併せて考慮するため、拒否が保証されるわけではありません。
v=DMARC1; p=reject; rua=mailto:[email protected]
DMARCの導入手順
フェーズ1: 監視(p=none)
メール環境を把握するため、まず監視から始めます。
v=DMARC1; p=none; rua=mailto:[email protected]
レポートを分析して、次の項目を特定します。
- SPF/DKIMが設定されていない正規の送信サービス
- 権限のない送信者(なりすまし)
- アライメントの問題
フェーズ2: 隔離(p=quarantine)
正規の送信元を認証できたら、次の設定に進みます。
v=DMARC1; p=quarantine; rua=mailto:[email protected]
より厳格なポリシーを選択する前に、レポートを確認し、正規のメールが認証されていることを確認してください。現在のDMARC標準では、割合を指定して段階的に適用する方法は定義されていません。
フェーズ3: 拒否(p=reject)
DMARC検証に失敗したメッセージの拒否を要求します。
v=DMARC1; p=reject; rua=mailto:[email protected]
DMARCレポート
集計レポート(rua)
受信側には、集計XMLレポートを毎日またはそれ以上の頻度で送信することが推奨されます。レポートは観測されたメッセージストリームを要約するため、利用可能性と網羅性はレポートを送信する受信側に左右されます。
- メール量
- SPF、DKIM、DMARCの成功率と失敗率
- 送信元IPアドレス
- 受信者の組織
失敗レポート(ruf)
メッセージ単位のレポートには、メッセージヘッダーまたは内容が含まれる場合があります。プライバシー上の懸念などから、すべての受信側が送信するわけではありません。
- 認証失敗の詳細
レポートの処理
集計DMARCレポートはXML形式で、読みにくい場合があります。次のようなサービスを利用できます。
- DMARC Analyzer
- Dmarcian
- Valimail
- Postmark DMARC
DMARCを確認する
認証が必要なDomScan Email Authentication APIは、ドメインごとに3クレジットが必要で、DMARCレコードと解析済みのタグを返します。
dig _dmarc.example.com TXT
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/email-auth?domain=example.com"
# Check dmarc.record and dmarc.tags in the JSON response
DMARCでよくある問題
レポートが届かない: ruaアドレスで大容量のメールを受信できることを確認してください。一部のプロバイダーはフィルタリングします。 正規のメールが失敗する: すべての送信サービスのSPF/DKIM設定を確認し、アライメントを検証してください。 第三者サービスが失敗する: DMARCアライメントのためにカスタムDKIM設定を必要とするサービスが多くあります。DMARCは、SPFやDKIMにアライメント確認、処理方針の指定、レポート機能を加えます。より厳格な処理を要求する前に、送信元とレポートを確認してください。