DMARCとは何か?
DMARC(Domain-based Message Authentication, Reporting & Conformance)は、SPFとDKIMを基盤にしたメール認証プロトコルです。ドメイン所有者は、認証に失敗したメッセージを受信サーバーがどう扱うかをポリシーとして公開でき、メール認証を監視するためのレポートも受け取れます。
DMARCが不可欠な理由
SPFとDKIMだけでは重要な点が欠けています。認証に失敗したメッセージをどう扱うべきかを受信側に伝えられないためです。攻撃者がSPF/DKIMなしでなりすましメールを送信しても、受信側には判断の指針がありません。
DMARCは次の仕組みでこの問題を解決します。
- ポリシーを定義する: 失敗したメッセージを拒否、隔離、または許可します
- アライメントを必須にする: FromヘッダーがSPF/DKIMのドメインと一致することを求めます
- レポートを有効にする: 集計レポートとフォレンジックレポートで認証結果を確認できます
DMARCの仕組み
1. 送信者が公開する: DNSの _dmarc.domain.com にTXTレコードとしてDMARCポリシーを公開します
2. メールが送信される: From: [email protected] を付けて送信します
3. 受信側が確認する: SPFとDKIMを検証します
4. 受信側がアライメントを確認する: 認証されたドメインがFromヘッダーと一致するか確認します
5. ポリシーを適用する: DMARCレコード(none、quarantine、reject)に基づいて処理します
6. レポートを送信する: 指定されたアドレスへ集計レポートを送ります
DMARCアライメント
DMARCでは「アライメント」、つまりFromヘッダーのドメインが次のいずれかと一致することが必要です。
- SPFアライメント: エンベロープ送信者(MAIL FROM)のドメイン
- DKIMアライメント: DKIM署名のd=ドメイン
アライメントがなければ、SPF/DKIMがパスしてもDMARCは失敗します。
DMARCレコードの形式
DMARCレコードは _dmarc.yourdomain.com に置くTXTレコードです。
_dmarc.example.com. IN TXT "v=DMARC1; p=reject; rua=mailto:[email protected]"
DMARCタグ
| タグ | 必須 | 説明 | 例 |
|---|---|---|---|
| v | はい | バージョン | v=DMARC1 |
| p | はい | ポリシー | p=none/quarantine/reject |
| rua | いいえ | 集計レポートURI | rua=mailto:[email protected] |
| ruf | いいえ | フォレンジックレポートURI | ruf=mailto:[email protected] |
| pct | いいえ | ポリシーの適用割合 | pct=100 |
| sp | いいえ | サブドメインポリシー | sp=reject |
| adkim | いいえ | DKIMアライメントモード | adkim=s (strict) or adkim=r (relaxed) |
| aspf | いいえ | SPFアライメントモード | aspf=s or aspf=r |
DMARCポリシー
p=none: 監視だけを行い、失敗したメッセージには何もしません。v=DMARC1; p=none; rua=mailto:[email protected]
p=quarantine: 失敗したメッセージを迷惑メールとして扱います。
v=DMARC1; p=quarantine; rua=mailto:[email protected]
p=reject: 失敗したメッセージを完全に拒否します。
v=DMARC1; p=reject; rua=mailto:[email protected]
DMARCの導入手順
フェーズ1: 監視(p=none)
まずは監視から始めて、自分のメール送信環境を把握します。
v=DMARC1; p=none; rua=mailto:[email protected]
2~4週間レポートを分析し、次の点を特定します。
- SPF/DKIMが設定されていない正規の送信サービス
- 権限のない送信者(なりすまし)
- アライメントの問題
フェーズ2: 隔離(p=quarantine)
正規の送信元を認証できたら、次の設定に進みます。
v=DMARC1; p=quarantine; pct=10; rua=mailto:[email protected]
最初は10%だけを隔離するために pct=10 を使い、段階的に割合を増やします。
フェーズ3: 拒否(p=reject)
完全な保護を有効にします。
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を確認する
dig _dmarc.example.com TXT
curl "https://domscan.net/v1/health?domain=example.com"
# Returns hasDMARC status
よくあるDMARCの問題
レポートが届かない: ruaアドレスで大容量のメールを受信できることを確認してください。プロバイダーによってはフィルタリングされます。 正規のメールが失敗する: すべての送信サービスのSPF/DKIM設定を確認し、アライメントを検証してください。 第三者サービスのメールが失敗する: DMARCアライメントのために、カスタムDKIM設定を必要とするサービスが多くあります。DMARCはメール認証の仕上げとなる仕組みです。SPFとDKIMが正しく機能していることを確認してから導入してください。