メインコンテンツまでスキップ

メール認証(SPF/DKIM/DMARC)

概要

メールの**なりすまし(フィッシング・スパム)**を防ぐために、現代のメール送受信では複数の認証技術が組み合わせて使われています。

技術目的
SPF送信サーバーのIPアドレスを検証する
DKIM電子署名でメールの正当性・完全性を保証する
DMARCSPF/DKIMの結果をポリシーとして統合し、受信側の処理を指示する

この3つを正しく設定することで、メールの到達率が向上し、ブランドの信頼性も高まります。


SPF(Sender Policy Framework)

仕組み

SPFは、特定のドメインから送信が許可されているIPアドレスのリストをDNSに公開する仕組みです。受信サーバーは、メールの**Envelope From(Return-Path)**に記載されたドメインのSPFレコードを参照して送信元の正当性を検証します。

DNS TXTレコードの例

v=spf1 include:sendgrid.net ~all
要素説明
v=spf1SPFバージョン1
include:sendgrid.netSendGridのIPアドレスセットを許可リストに含める
~allリスト外からの送信はSoftFail(警告として処理)
-allリスト外からの送信はHardFail(拒否)
SPFの注意点
  • SPFレコードは1ドメインにつき1つのTXTレコードのみ有効です。複数記述すると無効になります。
  • include のネストが深くなりすぎると(10回を超えると)DNS参照エラーになります。
  • SPFのみではメール転送時に破綻しやすいため、DKIMと組み合わせることが重要です。

DKIM(DomainKeys Identified Mail)

仕組み

DKIMは電子署名を使ってメールの正当性を証明します。送信側が秘密鍵でメールヘッダーと本文にデジタル署名を付与し、受信側がDNSの公開鍵で検証します。

DKIMシグネチャの例(メールヘッダー)

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com;
s=s1; h=from:to:subject:date; bh=...; b=...
フィールド説明
d=署名しているドメイン(DMARC Alignmentに使われる)
s=セレクター(DNS参照パスに使われる)
h=署名対象のヘッダーフィールド
bh=本文のハッシュ値
b=署名値

DKIMセレクターとは

**セレクター(Selector)**は、DKIMの公開鍵をDNSで一意に識別するための文字列です。1つのドメインに対して複数の鍵ペアを管理できるようにするために導入されています。

{セレクター}._domainkey.{ドメイン}

たとえば、SendGridから「DKIM Selector: sgqcd」と指示された場合、DNS上で公開鍵を参照するレコード名は次のようになります:

sgqcd._domainkey.example.com

セレクターを複数持つ理由

ユースケース
複数のメール送信サービスを使い分けるSendGrid用: sgqcd、自社MTAサーバー用: mail
鍵のローテーション(新旧の鍵を切り替える移行期間)旧鍵: v1、新鍵: v2
環境ごとの分離(本番・テスト)本番: prod、テスト: stg
SendGrid が発行するセレクター名について

SendGrid の sgqcd のようなセレクター名は、SendGrid が自動生成する固有の識別子です。この名前はSendGridのAutomated Securityによって決まるものであり、任意に変更することはできません。 CNAMEレコードを使う場合、実際のDNS登録名は:

  • sgqcd._domainkey.example.comsgqcd.domainkey.u1234567.wl.sendgrid.net

のような形になります(SendGrid管理画面から発行された実際のCNAME値を使用してください)。

DNS TXTレコードの例(公開鍵)

セレクターが s1、ドメインが example.com の場合:

s1._domainkey.example.com. TXT "v=DKIM1; k=rsa; p=MIGfMA0G..."

DMARC(Domain-based Message Authentication, Reporting & Conformance)

仕組み

DMARCは、SPFとDKIMの検証結果をポリシーとして統合し、受信側にどのように処理するかを指示します。さらに、認証に失敗したメールのレポートを送信者に送る機能も持ちます。

Alignment(アライメント)の概念

DMARCが重要なのは、単なる認証の合否だけでなく、**メールのFrom ヘッダーと認証ドメインの一致(Alignment)**を要求するからです。

技術一致確認する対象
SPF AlignmentEnvelope From(Return-Path)と From ヘッダーのドメイン
DKIM AlignmentDKIM-Signatured= タグと From ヘッダーのドメイン

DMARC TXTレコードの例

_dmarc.example.com. TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc-report@example.com; pct=100"
タグ説明
v=DMARC1DMARCバージョン
p=ポリシー(none / quarantine / reject
rua=集計レポートの送信先メールアドレス
ruf=個別フォレンジックレポートの送信先
pct=ポリシー適用割合(%)。段階的に強化する際に使用

DMARC適用フェーズの例

フェーズポリシー目的
監視フェーズp=noneまず現状を把握する(メール配信は通常通り)
段階適用p=quarantine; pct=10徐々に適用割合を増やす
完全適用p=rejectなりすましメールを完全にブロック
DMARCの段階的適用

最初から p=reject にすると、設定ミスで自社の正規メールが届かなくなるリスクがあります。p=none から始めてレポートを分析し、徐々に強化するのがベストプラクティスです。


Envelope From(Return-Path)と From ヘッダーの違い

メールには複数の「差出人」アドレスが存在します。この違いを理解することはDMARC設定において非常に重要です。

┌─────────────────────────────────────────────────┐
│ SMTPエンベロープ │
│ Envelope From: bounce@sendgrid.net ← Return-Path(バウンスメールの返送先)│
│ │
│ ┌───────────────────────────────────────────┐ │
│ │ メールヘッダー │ │
│ │ From: sender@yourdomain.com ← ユーザーが目にするFromアドレス │
│ │ To: recipient@example.com │ │
│ │ Subject: ... │ │
│ └───────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
項目役割DMARC Alignment
Envelope From(Return-Path)バウンスメールの返送先。SMTP通信で使われるSPF の検証対象
From ヘッダーメールクライアントで表示される差出人DMARC の基準ドメイン
DKIM d= タグ署名したドメインDKIM Alignmentの検証対象

SendGridのデフォルト設定では、Envelope Fromが bounce.xxx.sendgrid.net のようなSendGridドメインになります。これをカスタムドメインに統一するには**Sender Authentication(ドメイン認証)**の設定が必要です。


SendGrid のドメイン認証(Sender Authentication)

概要

SendGridを利用しながら、独自ドメイン(例: example.com)でSPF/DKIM認証を通過させるための設定です。CNAME レコードをDNSに追加することで実現します。

Automated Security(推奨)

SendGridの Automated Security を有効にする方法では、TXTレコードを直接DNSに追加する必要がなく、CNAME経由でSendGridが自動的に認証を管理します。

CNAMEレコードの構成

Automated Security が生成するCNAMEは以下の3件です:

目的DNS名(ホスト)指す先(値)
メールサブドメイン(Envelope From設定)em1234.example.comu1234567.wl.sendgrid.net
DKIM公開鍵(1件目)s1._domainkey.example.coms1.domainkey.u1234567.wl.sendgrid.net
DKIM公開鍵(2件目)s2._domainkey.example.coms2.domainkey.u1234567.wl.sendgrid.net
備考

上記はサンプルです。実際の値はSendGrid管理画面から発行されたCNAMEを使用してください。

設定手順

  1. SendGrid管理画面にログイン

    • Settings → Sender Authentication → 「Authenticate Your Domain」をクリック
  2. ドメイン情報を入力

    • DNSホストを選択(例: AWS Route 53、Cloudflare など)
    • 認証するドメイン(例: example.com)を入力
    • 「Use automated security」にチェックが入っていることを確認
  3. CNAMEレコードが生成される

    • 3件のCNAMEレコードが表示されるので控えておく
  4. DNS事業者でCNAMEを登録

    • 発行された3件のCNAMEレコードをDNS管理画面に追加
    • DNS反映には最大48時間かかる場合がある
  5. SendGrid管理画面でVerify実行

    • Settings → Sender Authentication → 対象ドメインの「Verify」をクリック
    • 3件すべてにチェックマークが付けば認証完了

Verifyが失敗する場合

原因対処法
CNAMEがまだDNSに反映されていない数時間から最大48時間待ってから再試行
CNAME値のタイプミスDNS管理画面でレコード内容を再確認
既存のDKIMレコードとの競合古いTXTレコードを削除する
TTL設定が長いTTLを短くして変更の反映を早める

設定後のメール送信フロー


まとめ

設定DNS レコード種別効果
SPFTXTレコード(Automated Security利用時はCNAMEで代替)送信サーバーIPの正当性証明
DKIMTXTレコード(Automated Security利用時はCNAMEで代替)メール署名による完全性証明
DMARCTXTレコード(_dmarc. プレフィックス)SPF/DKIMの統合ポリシー適用
SendGrid Sender AuthenticationCNAMEレコード 3件Envelope FromとDKIM署名ドメインを独自ドメインに統一
実践的なアドバイス
  1. まず p=none でDMARCを有効にし、レポートで現状の認証状況を確認する
  2. SendGridのAutomated Securityを使うとSPF/DKIMの管理が簡素化される
  3. DMARC rua= に設定したアドレスに届くレポートを定期的に確認し、異常な送信元がないかチェックする
  4. 最終的には p=reject に設定してなりすましメールを完全にブロックする