SPF、DKIM、DMARCの違いをまとめました。
1. SPFとは

何をする?
- 送信元IPアドレスの正当性チェック
- 「このドメインのメールは、このサーバーから送っていい」と DNSで宣言
- なりすましメールの送信を防ぐための第一の防御線
- メール受信側が、送信元のIPアドレスが正当な送信サーバーかどうかを確認できるようにする
- DNSレコードに許可された送信サーバーのIPアドレスやホスト名をリスト化して公開
仕組み(超要約)
- 送信側が、自分のドメインのDNSにSPFレコード(TXTレコード)を設定
- 例:
v=spf1 ip4:192.0.2.1 include:_spf.example.com ~all - 許可する送信サーバーのIPアドレス、ホスト名、その他のドメインを指定
- 例:
- メール送信時に、送信サーバーのIPアドレスがメールヘッダーに記録される
- 受信側のメールサーバーがメールを受信すると、送信元IPアドレスを確認
- 受信側が送信元ドメインのDNSを問い合わせ、SPFレコードを取得
- SPFレコードに記載された許可リストと送信元IPアドレスを照合
- 結果を判定:
- Pass: IPアドレスが許可リストに含まれている
- Fail: IPアドレスが許可リストに含まれていない
- SoftFail: 許可されていないが、厳密には拒否しない
- Neutral: 判定不能
2. DKIMとは

何をする?
- メール内容に電子署名を付けて
- 「途中で改ざんされていないか」を検証
- メールの送信元が本当にそのドメインから送られたものかを証明
- メール本文やヘッダーが転送中に改ざんされていないことを保証
- 公開鍵暗号方式を使用して、メールの真正性を数学的に証明
仕組み(超要約)
- 送信側の準備:
- 送信サーバーが秘密鍵と公開鍵のペアを生成
- 公開鍵をDNSのTXTレコード(
_domainkey.example.com)に公開 - 秘密鍵は送信サーバーに安全に保管
- メール送信時の署名プロセス:
- 送信サーバーがメールのヘッダーと本文(または選択された部分)をハッシュ化
- 生成されたハッシュ値を秘密鍵で暗号化(署名)
- 署名情報をメールヘッダー(
DKIM-Signature)に追加 - 署名に使用したセレクタ(鍵の識別子)もヘッダーに含める
- 受信側の検証プロセス:
- 受信サーバーがメールの
DKIM-Signatureヘッダーからセレクタを取得 - セレクタと送信元ドメインからDNSを問い合わせ、公開鍵を取得
- メールの同じ部分を再度ハッシュ化
- 署名を公開鍵で復号化し、ハッシュ値と比較
- 受信サーバーがメールの
- 検証結果:
- Pass: 署名が有効で、メールが改ざんされていない
- Fail: 署名が無効、またはメールが改ざんされている
- Neutral: 署名が存在しない、または検証不能
3. DMARCとは

何をする?
- SPF / DKIM の結果を統合
- 「失敗したメールをどう扱うか」を宣言
- レポートを受け取れる
- SPFやDKIMだけでは不十分な点を補完する総合的な認証ポリシー
- なりすましメールに対する明確な処理方針を定義
- 認証失敗時の詳細なレポートを送信側に提供し、セキュリティ状況を可視化
- 段階的なポリシー適用(none → quarantine → reject)で安全に導入可能
仕組み(超要約)
- 送信側がDNSにDMARCレコード(TXTレコード)を設定
- 例:
v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com; pct=100; p: ポリシー(none/quarantine/reject)rua: 集約レポートの送信先ruf: フォレンジックレポートの送信先pct: ポリシーを適用するメールの割合(0-100)
- 例:
- 受信側のメールサーバーがメールを受信すると、まずSPFとDKIMの検証を実行
- Alignment(整合性)チェック:
- SPF Alignment: SPFがPassし、かつ
Return-PathドメインとFromドメインが一致(またはサブドメイン関係) - DKIM Alignment: DKIMがPassし、かつ署名のドメイン(
d=)とFromドメインが一致(またはサブドメイン関係) - SPFまたはDKIMのどちらか一方でもPassし、かつAlignmentが成立すればDMARCはPass
- SPF Alignment: SPFがPassし、かつ
- DMARCポリシーの適用:
- Pass: 認証成功 → 通常通り配信
- Fail + p=none: 認証失敗だが、監視のみ(配信は継続)
- Fail + p=quarantine: 認証失敗 → 迷惑メールフォルダに隔離
- Fail + p=reject: 認証失敗 → メールを拒否(バウンス)
- レポートの送信:
- 集約レポート(rua): 1日1回、認証結果の統計情報を送信
- フォレンジックレポート(ruf): 認証失敗したメールの詳細情報をリアルタイムで送信
4. SPF、DKIM、DMARCの違い
| 項目 | SPF | DKIM | DMARC |
|---|---|---|---|
| 役割 | 送信元IP確認 | 改ざん検知 | 総合判定 |
| DNS必須 | ✅ | ✅ | ✅ |
| 転送耐性 | ❌ 弱い | ✅ 強い | ◯ |
| 改ざん検知 | ❌ | ✅ | 間接的 |
| レポート | ❌ | ❌ | ✅ |
| 必須度 | 高 | 高 | 非常に高 |