← PC・IT用語集へ戻る

SPF / DKIM / DMARC

SPF / DKIM / DMARC
security network beginner
送信元メールアドレスの偽装(なりすましメール)を防ぎ、メールの信頼性を証明するための3つの代表的な送信ドメイン認証技術。
SPF / DKIM / DMARC (SPF / DKIM / DMARC)

概要(サマリー)

SPF、DKIM、DMARC(送信ドメイン認証)とは、インターネット上を流れるメールが「本物の送信者から送られたものか、それとも詐欺師によるなりすましメールか」を証明するための3大セキュリティ規格である。
メールの仕組みは、ハガキの裏に「差出人(From)」の住所や名前を自分で自由に手書きして偽装できるように、送信元アドレスを簡単に騙れてしまうという古い脆弱性を持っている。
たとえるなら、

  • SPF: 差出人の住所が「公式に認められた住所(IPアドレス)のリスト」にあるかを確認するセキュリティチェック。
  • DKIM: 封筒の封印に「公式のハンコ(デジタル署名)」が押されており、途中で手紙が改ざんされていないかを確認する封印チェック。
  • DMARC: もし上記のチェック(SPF/DKIM)で偽物だと判断された場合、「その怪しい手紙を即座に破棄するか、迷惑メールフォルダに入れるか」の事後処理のルールを指示するルールブック。

これら3つの仕組みをドメイン側の設定に組み込むことで、なりすましメールを見分けやすくし、正規のメールが迷惑メール扱いされにくい状態を作れる。ただし、設定すれば必ず受信箱に届くという保証ではなく、メール本文の品質、配信量、苦情率なども到達率に影響する。

詳細解説

1. SPF(Sender Policy Framework)の仕組み

SPFは、ドメインの所有者が「このドメインのメールは、このサーバー(IPアドレス)から送信します」という許可リストを、DNS(ドメイン情報サーバー)に登録しておく仕組みである。
受信側のメールサーバーは、メールを受け取ると送信元IPアドレスを確認し、DNSに登録されているSPFレコードと一致するかをチェックする。ただし、SPFが直接確認するのは、画面に見えるFromアドレスそのものではなく、主にReturn-PathやEnvelope Fromと呼ばれる配送用のドメインである。そのため、DMARCではFromドメインとの一致(アライメント)も重要になる。

2. DKIM(DomainKeys Identified Mail)の仕組み

DKIMは、暗号技術(公開鍵暗号)を使った電子署名の仕組みである。
送信側のサーバーは、メールの送信時にメールヘッダーへ「電子署名」を付与する。受信側のメールサーバーは、送信元ドメインのDNSに公開されている「公開鍵」を取得し、電子署名が本物であるかを検証する。これにより、署名したドメインの正当性だけでなく、署名対象の本文やヘッダーが途中で書き換えられていないかも確認できる。

3. DMARC(Domain-based Message Authentication, Reporting, and Conformance)の仕組み

DMARCは、SPFとDKIMのチェック結果を利用し、認証に失敗したメールをどのように取り扱うか(受信拒否にするか、隔離するか、そのまま通すか)を、ドメイン所有者自身が指定できる仕組みである。
また、認証に失敗したメールがどれだけ送られてきたかといったレポートをドメイン所有者宛てに送信させることができるため、自分のドメインが悪用されていないかを常に監視することができる。

DMARCで重要な「アライメント」

DMARCでは、SPFまたはDKIMが単に成功するだけではなく、認証されたドメインがFromアドレスのドメインと整合しているかを確認する。
これを「アライメント」と呼ぶ。たとえば、Fromが example.com なのに、SPFで認証された配送用ドメインやDKIM署名ドメインがまったく別のドメインであれば、DMARC上は失敗扱いになることがある。
そのため、メール配信サービスを使う場合は、SPFやDKIMを「通す」だけでなく、自分のFromドメインと一致するように設定することが重要である。

DNSレコードとして設定する

SPF、DKIM、DMARCはいずれも、基本的にはDNSにレコードを追加して設定する。
SPFとDMARCはTXTレコードとして登録されることが多く、DKIMはTXTレコードまたはメール配信サービスが指定するCNAMEレコードを使うことがある。設定先は、メール送信プログラムではなく、ドメインを管理しているDNS管理画面である。

なぜ現在のWeb開発でこの3つが極めて重要なのか?

2024年初頭、Google(Gmail)や米Yahoo!などが「メール送信者に対するガイドライン」を大幅に強化した。
特に、個人向けGmailアカウントへ1日5,000通前後以上を送る大量送信者には、SPFまたはDKIMによる認証、DMARCレコード、送信元ドメインの整合性などが求められる。
そのため、お問い合わせフォーム、ECサイトの注文確認メール、会員登録の自動返信メールなどを実装する際、これらの設定は到達率と信頼性を左右する重要な実務作業となっている。

AIコーディングとの関係

AIとメール設定トラブルの解決

Webアプリ開発において「自作のWebアプリからメールを送るプログラムをAIに書いてもらったが、Gmailに送信すると『迷惑メール』に入ったり、そもそも届かずにエラー(ブロック)になる」というトラブルは初心者に最頻出する。
この際、AIにメール送信のプログラムコードの修正を求めるだけでなく、「DNSに設定すべきSPFやDMARCのTXTレコードの書き方を教えて」と相談することで、正しいDNSレコードの記述テキストを出力してもらえる。

指示を出す際のポイント

DNS設定をAIに生成させる際は、自分のドメイン名や送信元のサーバー情報を伝えることで、設定候補となるDNSレコードを作成してもらえる。ただし、実際の値はメール配信サービスやサーバー会社が指定するものを優先し、AIの出力は必ず公式手順と照合する必要がある。

  • 「お名前.comで管理している独自ドメイン example.com から、エックスサーバーを使ってメールを送りたい。DNSのTXTレコードに登録すべきSPFレコードの書き方を示して」
  • 「DMARCを設定したい。ポリシーは『隔離(quarantine)』とし、レポートの送信先を admin@example.com にする場合のDNSレコードの値を教えて」

よくある勘違い

プログラムコード(PHPやNode.js)を書き換えればメール認証を通過できる?

送信ドメイン認証(SPF/DKIM/DMARC)の設定は、プログラムコードを修正するだけでは完了しない。
基本的には、あなたが独自ドメインを管理しているサービス(お名前.com、ムームードメイン、Cloudflareなど)の 「DNSレコード設定画面(DNS管理画面)」 に、指定されたTXTレコードやCNAMEレコードを追加するインフラ設定の作業である。プログラムのバグではなく、ネットワーク側の設定ミスであることを理解する必要がある。

SSL/TLS(暗号化通信)を設定しておけば、この3つは不要?

SSL/TLSは、メールを送信する際の「通り道(通信経路)」を暗号化し、盗聴を防ぐための技術(HTTPSのようなもの)である。
一方、SPF/DKIM/DMARCは、「手紙の差出人が本物であること」を証明する技術である。
暗号化された安全なトンネル(SSL/TLS)を通って送られてきたメールであっても、その手紙自体が詐欺師によるなりすましメールであれば意味がない。そのため、SSL/TLSによる通信の暗号化と、送信ドメイン認証による本人確認の両方を設定しなければならない。

送信元のFromアドレスを適当な名前にしても、この設定をすれば届く?

Fromアドレス(ハガキの差出人欄)と、認証を行っているドメインが一致している必要がある。
たとえば、あなた自身のサイトのドメインが example.com であるにもかかわらず、Fromアドレスに google.comyahoo.co.jp を指定してメールを送信した場合、認証の「ドメイン不一致(アライメントエラー)」が発生し、DMARCによって即座にブロックされる。メールアドレスは必ず自分が所有し、DNS設定を行ったドメインのものを使用しなければならない。

DMARCは最初からrejectにすれば一番安全?

いきなり p=reject にすると、正規のメール配信サービスまで認証不一致で届かなくなることがある。
実務では、まず p=none でレポートを受け取り、どの送信元が正しくSPF/DKIMに通っているかを確認する。その後、問題がないことを確認しながら quarantinereject へ段階的に強める運用が一般的である。

まとめ

  • SPF、DKIM、DMARCは、送信元アドレスの偽装(なりすましメール)を検知し、メールの信頼性を証明するネットワーク規格である。
  • SPFは送信元IP、DKIMは電子署名、DMARCはFromドメインとの整合性と失敗時の扱いを管理する。
  • 近年の主要メールサービス(Gmail等)の送信者要件強化により、これらの設定はメール到達率に大きく影響する。
  • 設定はプログラムコードの修正ではなく、ドメインの「DNSレコード」に特定の文字列を登録する作業である。
  • AIにインフラ情報を渡すことでDNS登録用レコードの候補を作れるが、最終的にはメール配信サービスの公式値とDNS反映結果を確認する必要がある。

情報ソース

より詳しくAIに聞いてみよう

  • Gmailの送信者ガイドライン(2024年以降)で定められた、1日5000通以上送信する送信者に対する「DMARC」「SPF」「DKIM」の具体的な必須要件について教えてください。
  • DNSレコードに設定する「SPFレコード(例:v=spf1 include:... ~all)」の記述ルールと、~all(SoftFail)と -all(Fail)の違いを分かりやすく解説してください。
  • Amazon SES(Simple Email Service)やSendGridなどのメール送信専用APIサービスを利用する際に、DNSに設定する必要がある「DKIMのCNAMEレコード」や「SPFのinclude設定」の手順を教えてください。
  • DMARCポリシーにおける3つのモード「none(監視のみ)」「quarantine(隔離)」「reject(受信拒否)」の違いと、段階的な運用の進め方を説明してください。
  • AIに「自社のメール配信状況を分析するためのDMARCレポート(XML形式)を、読みやすいテキストやグラフ用データに解析・変換するスクリプト」を書いてもらいましょう。