SPF・DKIM・DMARCを解説:メール送信者認証の仕組み

かつては誰でもメールの「差出人」を偽装できました。SPF・DKIM・DMARCがどのようにそれを難しくしたのかを解説します。

メールの送信者偽装(スプーフィング)問題

メールをやり取りする基本プロトコルであるSMTPは、そもそも送信者アドレスを検証する仕組みを持っていませんでした。そのため誰でも「差出人」欄に銀行や会社のアドレスをそのまま記載して送ることができ、これが長年にわたるフィッシングメールの土台になっていました。

SPF:送信サーバーのホワイトリスト

SPF(Sender Policy Framework)は、ドメインの所有者がDNSのTXTレコードに「このドメイン名でメールを送信できるサーバーの一覧」を登録しておく仕組みです。受信側のメールサーバーは、実際にメールを送信したサーバーのIPアドレスがこの一覧に含まれているかを確認し、偽装かどうかを判断する材料にします。

DKIM:電子署名で改ざんを検知

DKIM(DomainKeys Identified Mail)は、メールを送信する際に本文と主要なヘッダーの一部を送信ドメインの秘密鍵で署名し、メールヘッダーに付加します。受信側のサーバーはDNSに公開された公開鍵でこの署名を検証し、送信後に内容が変更されていないかを確認します。

DMARC:結果を統合してポリシーを指定

DMARC(Domain-based Message Authentication, Reporting & Conformance)は、SPFとDKIMの検査結果に加えて、実際の差出人アドレスと認証に使われたドメインが一致しているか(アライメント)まで確認します。ドメイン所有者は認証に失敗したメールをそのまま配送するか(none)、迷惑メールに振り分けるか(quarantine)、完全に拒否するか(reject)をポリシーとして指定でき、失敗状況をまとめたレポートを受け取ることもできます。

3つの技術の関係

SPFとDKIMはそれぞれ独立して動作する個別の認証手段であり、DMARCはこの2つの結果を統合して「認証に失敗した場合どう処理するか」を指示する上位のポリシー層です。3つすべてを揃えて初めて、なりすまし防止の効果が十分に発揮されます。

受信メールで確認する方法

メールの生ヘッダーを開くと、「Authentication-Results」というフィールドに、spf=pass、dkim=pass、dmarc=passのように各検査結果が表示されます。この値がfailやnoneになっている場合は、送信者が本当に名乗っている本人かどうかを改めて疑ってみる必要があります。

SPFの「10回ルール」とよくある設定ミス

SPFでは、include・a・mx・exists・redirectのようにDNS照会を伴う記述の合計が10回までと仕様(RFC 7208)で定められています。これを超えると受信側はpermerror(恒久的エラー)を返し、DMARCの判定ではSPF失敗として扱われます。ip4やip6で直接IPを書く記述は回数に数えられません。クラウドサービスを導入するたびにincludeを足していくと上限に達しやすいため、使わなくなった送信サービスの記述は定期的に削除しましょう。また、1つのドメインにv=spf1で始まるTXTレコードを複数置くのも典型的な誤りで、必ず1行にまとめる必要があります。末尾の~all(ソフトフェイル)は「許可外は疑わしい」、-all(ハードフェイル)は「許可外は不正」という意思表示の違いです。

DKIMのセレクタと鍵の長さ

DKIMの公開鍵は「セレクタ._domainkey.ドメイン名」というDNSレコードに公開されます。セレクタは鍵を区別する名前で、メール配信サービスごと、あるいは鍵の世代ごとに別のセレクタを使えるため、複数のサービスから同じドメインで送信しても署名が衝突しません。鍵の長さについては、RFC 8301が署名側にRSA 1024ビット以上を必須、2048ビット以上を推奨としており、新しく発行するなら2048ビットを選ぶのが一般的です。DNSの1レコードに収まらない長さの鍵は分割して登録する必要があるため、DNS管理画面の仕様も事前に確認してください。鍵は定期的に新しいセレクタへ切り替える(ローテーション)運用が安全です。

アライメント:relaxedとstrictの違い

DMARCが重視するのは、受信者の画面に見える差出人(Fromヘッダー)のドメインと、認証に使われたドメインが一致しているかどうかです。SPFの場合は封筒上の送信者(Return-Path)のドメイン、DKIMの場合は署名のd=ドメインが比較対象になり、どちらか一方でも一致して認証に通れば、DMARCは合格となります。一致の判定にはrelaxed(組織ドメインが同じならサブドメインの違いは許容)とstrict(完全一致)の2種類があり、既定はrelaxedです。外部の配信サービスが独自ドメインのReturn-Pathで送っている場合、SPFは通ってもアライメントで失敗するため、そのサービス側でDKIMを自社ドメインで署名するよう設定するのが定石です。

転送やメーリングリストで認証が壊れる理由

メールを別のアドレスへ自動転送すると、実際の送信元IPが転送サーバーに変わるため、元のドメインのSPFは失敗します。一方、DKIMの署名は本文や署名対象ヘッダーが変わらなければ転送後も有効なので、DMARCはDKIM側で合格できます。ただしメーリングリストは件名にタグを付けたりフッターを追記したりして内容を改変するため、署名が無効になることがあります。こうした中継を考慮した仕組みとしてARC(RFC 8617)が提案されており、中継サーバーが「受け取った時点では認証に通っていた」という記録を付け足せます。受信側がそれを信頼するかは運用方針次第です。

DMARCレポートで何がわかるか

DMARCレコードのruaタグに宛先を書くと、受信側のメールサービスから集計レポート(XML形式、通常は1日単位)が届きます。レポートには、自社ドメインを名乗って送信されたメールの送信元IP、件数、SPFとDKIMの結果、適用されたポリシーなどが含まれます。これを読むと、把握していなかった正規の送信元(営業ツールや古いサーバー)が見つかる一方、なりすましの試みも可視化されます。rufタグによる失敗メールの個別レポートもありますが、提供する事業者は限られ、個人情報に配慮する必要があります。XMLを直接読むのは大変なので、無料の解析サービスを使う組織も多いです。

大量送信者に求められる要件(2024年以降)

2024年2月から、GoogleとYahooは大量にメールを送る事業者に対し、SPFとDKIMの両方の設定、最低でもp=noneのDMARCレコードの公開、マーケティングメールへのワンクリック配信停止(RFC 8058)の実装、スパム報告率を低く保つことなどを求めています。Googleの場合、個人のGmailアドレス宛に1日あたり約5,000通以上送る送信者が目安とされています。これらの条件や基準値は各社の公式ガイドラインで更新されることがあるため、送信量の多い方は最新の公式ドキュメントを確認してください。

なぜ1つだけでなく3つすべてが重要なのか

SPFだけでは、ドメインの承認済みリストにあるサーバーから送信しつつ表示名を偽装するといった攻撃を防げず、DKIMだけでは表示上の「差出人」アドレスが署名ドメインと一致しているかは検証できません。DMARCは、表示上の送信者と実際にSPFまたはDKIMを通過したドメインとの整合性を要求することでこの隙間を埋めます。セキュリティを意識する組織が1つだけに頼らず3つすべてを組み合わせて設定するのはこのためです。

設定を誤った厳格なDMARCポリシーの代償

サードパーティのマーケティングツールやCRMなど、正規の送信元をすべて適切に認可する前にDMARCポリシーを積極的にreject(拒否)へ設定してしまうと、自組織の正規のメールが他のメールサーバーで静かに拒否されてしまうことがあります。多くの組織はまずnone(何もしない)ポリシーから始めてレポートを収集し、正規の送信元がすべて把握できたことを確認してから、段階的にquarantine、さらにrejectへと移行します。

導入の順序:いきなりrejectにしない

実務では、次の順序で進めるのが定石です。まず自社が使っているすべての送信サービス(自社サーバー、メール配信サービス、問い合わせ管理、請求書システムなど)を洗い出し、SPFに登録します。次に各サービスでDKIM署名を有効にし、署名ドメインを自社ドメインに揃えます。その後、p=noneとruaを設定して数週間レポートを集め、認証に失敗している正規の送信元がなくなったことを確認してからquarantineへ、さらに問題がなければrejectへ進みます。サブドメインに別のポリシーを適用したい場合はspタグを使います。レコードの確認は、コマンドラインのnslookupやdigでTXTレコードを引くか、無料の検査サイトで行えます。

認証に通る=安全、ではありません

SPF・DKIM・DMARCが保証するのは「そのドメインを名乗る権限があるか」だけで、メールの中身が安全かどうかは別問題です。攻撃者が自分で取得した類似ドメイン(例えばアルファベットを一字入れ替えたもの)から送れば、そのドメインの認証には正当に合格します。また、正規のアカウントが乗っ取られて送られたメールも認証には通ります。つまり、これらの技術は「ドメインの直接的な偽装」を防ぐものであり、類似ドメインや内容による詐欺は、リンク先のドメイン確認や送信者への別経路での確認といった利用者側の注意が引き続き必要です。

よくある質問

SPFに合格すれば、そのメールは確実に正規のものと言えますか?

それだけでは言えません。SPFは送信サーバーがそのドメインについて認可されているかを確認するだけで、表示上の「差出人」アドレスが一致しているか、内容が送信途中で改ざんされていないかまでは検証しません。DKIMとDMARCがこれらの隙間を補うため、3つを組み合わせて運用することが前提とされています。

正規のメールなのになぜDMARCに失敗することがあるのですか?

マーケティングプラットフォームやチケット管理システムなど、サードパーティのサービスを経由してメールを送信している場合に、そのドメインのSPFレコードに適切に追加されていなかったり、独自のDKIM署名が設定されていなかったりすることが原因でよく起こります。ドメインのメールを管理する担当者は、自社のメールサーバーだけでなく、すべての正規の送信元を認可しておく必要があります。

自分のドメインの設定が正しいか、どう確認すればよいですか?

TXTレコードを直接見る方法が基本です。SPFはドメイン名そのもの、DMARCは_dmarc.ドメイン名、DKIMはセレクタ._domainkey.ドメイン名をnslookupやdigで引きます。最も確実なのは、自分のドメインから実際にGmailなどへテストメールを送り、「メッセージのソースを表示」でAuthentication-Resultsにspf=pass・dkim=pass・dmarc=passが並ぶかを確認することです。

個人のドメインでメールを送るだけでも設定は必要ですか?

送信量が少なくても、設定しておくメリットは大きいです。SPFとDKIMがないと迷惑メールに振り分けられやすくなりますし、DMARCを公開しておくと、第三者があなたのドメインを騙って送ったメールを受信側が拒否しやすくなります。まずはp=noneで始め、レポートを見ながら調整すれば、正規のメールを止めるリスクを抑えられます。