DMARC (Domain-based Message Authentication、Reporting & Conformance) とは何か?
DMARC (Domain-based Message Authentication、Reporting & Conformance) はメール認証プロトコルで、SPFおよびDKIM の上に構築されます。これにより、ドメイン所有者は、認証に失敗したメッセージを受信サーバーがどう処理すべきかを指定するポリシーを公開でき、メール認証をモニターするためのレポーティングメカニズムを提供します。
DMARCが不可欠である理由
SPF およびDKIM 単独には重大なギャップがあります: 彼らは受信者に失敗したメッセージですべきことを伝えません。攻撃者はSPF/DKIM なしのスプーフィングされたメールを送信でき、受信者はガイダンスがありません。
DMARC は以下により解決します:
- ポリシー定義: 失敗メッセージを拒否、隔離、または許可
- アライメント必須: From ヘッダーはSPF/DKIM ドメインに一致する必要
- レポーティング有効: 認証結果を表示する集計およびフォレンジックレポート
DMARC の動作方式
1. 送信者が公開 DMARC ポリシーDNS内 (TXT レコード _dmarc.domain.com)
2. メール送信 From: user@domain.com で
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:dmarc@example.com"
DMARC タグ
| タグ | 必須 | 説明 | 例 |
|---|---|---|---|
| v | はい | バージョン | v=DMARC1 |
| p | はい | ポリシー | p=none/quarantine/reject |
| rua | いいえ | 集計レポートURI | rua=mailto:reports@example.com |
| ruf | いいえ | フォレンジックレポートURI | ruf=mailto:forensic@example.com |
| 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:dmarc@example.com
p=quarantine: 失敗メッセージをスパム/junk に送信
v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com
p=reject: 失敗メッセージを完全に拒否
v=DMARC1; p=reject; rua=mailto:dmarc@example.com
DMARC 実装パス
フェーズ1: 監視 (p=none)
メールエコシステムを理解するため、監視で開始:
v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com
2-4週間レポートを分析して、以下を特定:
- SPF/DKIM が欠落している正当な送信サービス
- 権限がない送信者 (スプーフィング)
- アライメント問題
フェーズ2: 隔離 (p=quarantine)
正当なソースが認証されたら:
v=DMARC1; p=quarantine; pct=10; rua=mailto:dmarc-reports@example.com
最初に10%のみ隔離するため pct=10 を使用し、段階的に増加します。
フェーズ3: 拒否 (p=reject)
完全な保護:
v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com
DMArc レポート
集計レポート (rua)
毎日すべてのメール向けの認証結果を示すXMLレポート:
- メールボリューム
- SPF、DKIM、DMARC向けのpass/fail レート
- 送信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"
# hasDMARC ステータスを返す
一般的なDMARC 問題
レポート受信がない: rua アドレスが大型メール受信できることを確認; いくつかのプロバイダーはフィルタリング。 正当なメール失敗: すべての送信サービス向けのSPF/DKIM を確認; アライメントを検証。 サードパーティサービス失敗: 多くのサービスはDMARC アライメント向けカスタムDKIM セットアップが必要。DMARC はメール認証の最終仕上げ。SPF および DKIM が正しく機能してから実装します。