そもそも、なぜメールにこれが必要なのか
メールについて、ちょっと耳の痛い話をさせてください。メールは1980年代の初め、お互いを信頼し合う人たちの小さなネットワークのために設計されました。何も対策をしなければ、誰でも [email protected] から送ったことにしたメールを送れてしまいます。基本的な仕組みの中に、それを止めるものは何もないんです。
SPF・DKIM・DMARCは、その問題を解決するためにあとから追加されたものです。この3つがそろうことで、Gmail、Outlook、Yahooといった受信側は、ひとつの問いに答えられるようになります。このメールは、名乗っているドメインから本当に送られてきたのか? 答えが「ノー」なら、そのメールは迷惑メールフォルダに入るか、受信を拒否されます。逆に、自分のドメインでこれらを設定していないと、本物のメールが偽物のように扱われてしまうこともあります。
たとえで考えるとわかりやすいです:
- SPF は招待客リスト:あなたのドメインとしてメールを送ってよいサーバーの一覧です。
- DKIM は封蝋:メールが途中で書き換えられていないことを証明する署名です。
- DMARC は入口の警備員への指示書:チェックに失敗したメールをどう扱うか、そして誰に報告するかを決めます。
SPF:招待客リスト
SPF(Sender Policy Framework)は、ドメインのDNSに公開する1行のテキストです。あなたの代わりにメールを送ってよいサーバーやサービスを列挙します。Gmailがあなたのドメインからメールを受け取ると、そのリストを調べて、送ってきたサーバーが載っているかどうかを確認します。
よくあるSPFレコードはこんな感じです:
v=spf1 include:_spf.google.com include:sendgrid.net ~all左から順に読んでいくと:
v=spf1:「これはSPFレコードです」という宣言。include:_spf.google.com:Google Workspaceは私の代わりに送信してOK。include:sendgrid.net:SendGridもOK(たとえば自分のアプリが送るメール用)。~all:それ以外はたぶん私ではないので、疑ってかかってください。(-allなら「絶対に私ではないので拒否して」という意味です)
さらに、1つのSPFレコードの中でできるDNSルックアップは10回までという制限もあります。include: はそれぞれ1回と数えられ、その中に含まれるincludeもカウントされます。たくさんのサービスを使っていると、気づかないうちに上限に達して、すべての送信でSPFが失敗してしまうことがあります。
DKIM:封蝋
SPFはメールがどこから来たかをチェックします。一方DKIM(DomainKeys Identified Mail)は、メールそのものが改ざんされていないかをチェックします。メールサービスは、送信するすべてのメッセージに、自分だけが知っている秘密鍵で署名します。あなたは対になる公開鍵をDNSに公開しておきます。受信側のサーバーはその公開鍵を使って署名を検証するわけです。
途中で誰かがメールを書き換えたら、たとえ本文の1単語だけでも、署名はもう一致しません。昔の手紙の封蝋のようなものです。封が破れていたら、誰かが開けたとわかりますよね。
DKIMレコードは、たとえば google._domainkey.yourdomain.com のような特別な名前で公開され、値はだいたいこんな感じです:
v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1...うれしいことに、これを自分で書く必要はありません。メールサービスが生成してくれるので、あなたはそれをDNSにコピーするだけです。._domainkey の前にある単語(ここでは google)はセレクタと呼ばれます。サービスごとに1つずつ、複数の鍵を持てるようにするためのものです。
DMARC:入口の警備員への指示書
SPFとDKIMは、受信側のサーバーに「事実」を伝えます。DMARC(Domain-based Message Authentication, Reporting and Conformance)は、その事実をもとにどうするかを伝えます。さらに、アライメントという大事なルールも加えます。SPFやDKIMに合格したドメインが、読み手が実際に目にする「From(差出人)」のドメインと一致していなければならない、というものです。このルールがないと、詐欺師は自分のドメインでSPFに合格しつつ、差出人にはあなたのドメインを表示できてしまいます。
DMARCレコードは _dmarc.yourdomain.com に置かれ、こんな見た目をしています:
v=DMARC1; p=none; rua=mailto:[email protected]p=none:監視だけして、まだ何もブロックしない。最初の一歩にぴったりです。p=quarantine:失敗したメールを迷惑メールフォルダへ。p=reject:失敗したメールを完全に拒否。いちばん強力な保護です。rua=mailto:...:受信側が毎日の集計レポートを送る先。
実は、このレポートこそが隠れたお宝です。あなたのドメインを使ってメールを送っているすべてのサーバーが見えるので、存在を忘れていたサービスや、あなたになりすまそうとしている人まで見つけられます。
ステップごとの設定方法
たとえば、あなたが myshop.com を持っていて、メールボックスにはGoogle Workspaceを、注文確認メールにはSendGridやMailgunのようなサービスを使っているとしましょう。私ならこの順番で進めます:
- 自分のドメイン名義でメールを送っているものをすべて書き出す:メールボックスのプロバイダ、Webサイトやアプリ、メルマガ配信ツール、サポートツール、請求書ソフトなど。多くの人が飛ばしてしまうステップですが、あとで起きる問題の大半はここが原因です。
- SPFレコードを1つ作る:DNSに(
myshop.comのTXTレコードとして)すべてのサービスを含めたレコードを作り、最後を~allで締めます。 - 各サービスでDKIMを有効にする:それぞれのサービスがDNSにコピーするレコードを出してくれます。コピーしたら、そのサービスで「確認」や「認証を開始」を押しましょう。
p=noneのDMARCレコードを追加する:レポートの送り先アドレスも含めて、_dmarc.myshop.comに追加します。- 1〜2週間待ってレポートを読みます。正当なのに失敗しているものがあれば修正しましょう。
- 本物のメールがすべて合格していると確信できたら、ポリシーを強化して
p=quarantineに、さらに後でp=rejectにします。
受け取ったメールで確認する方法
特別なツールは必要ありません。メールアプリがすでに結果を見せてくれています:
- Gmail:メールを開いて3点メニューをクリックし、メッセージのソースを表示を選びます。上のほうに
SPF: PASS、DKIM: PASS、DMARC: PASSのような行が表示されます。 - Outlook:メッセージを開き、表示 → メッセージの詳細を表示(またはメッセージのソース)を選んで、
Authentication-Resultsヘッダーを探します。 - Apple Mail:表示 → メッセージ → すべてのヘッダの順に選びます。
実際のヘッダーはこんな感じです:
Authentication-Results: mx.google.com;
dkim=pass header.d=myshop.com;
spf=pass smtp.mailfrom=myshop.com;
dmarc=pass (p=QUARANTINE) header.from=myshop.com3つとも合格で、ドメインも一致している。このメールは本物です。fail が出ていたり、ドメインが表示されている差出人と一致しなかったりしたら注意してください。これはフィッシングメールの見分け方でも取り上げている危険サインのひとつです。
自分のドメインを設定しているなら、使い捨ての受信箱とGmailのアドレスにメールを送り、Gmail側のヘッダーを確認するのが手っ取り早いテスト方法です。2分で終わりますし、外の世界からどう見えているかがそのままわかります。
よくあるトラブルと解決策
- 「SPF: softfail」や「neutral」:メールを送ったサーバーがSPFレコードに含まれていません。そのサービスが案内している
include:を追加しましょう。 - 「SPF permerror」:たいていはSPFレコードが2つあるか、ルックアップが10回を超えています。1つのレコードにまとめて、もう使っていないサービスを削除しましょう。
- テンプレートを編集したら「DKIM: fail」:署名されたあとに何かがメールを書き換えています(一部の転送サービスやメールのフッター機能がこれをやります)。直接送信して、もう一度テストしてみてください。
- SPFは合格なのにDMARCが失敗する:アライメントの問題です。SPFが合格したのは送信サービスのドメインで、あなたのドメインではありません。そのサービスで自分のドメインを使ったDKIMを有効にするか、カスタムのReturn-Pathドメインを設定しましょう。
- すべて合格しているのに迷惑メールに入る:認証が証明するのは「あなたが誰か」であって、「相手があなたのメールを望んでいるか」ではありません。内容や送信元の評判、苦情の割合も影響します。これについてはアプリのメールが迷惑メールに入ってしまう理由で詳しく書いています。
本当に3つとも必要?
はい、必要です。2024年から、GmailとYahooは大量にメールを送る送信者に対して、SPF、DKIM、DMARCレコードのすべてを求めています。少量しか送らない送信者でも、3つそろっていれば到達率がぐっと良くなります。そして何より、p=reject を設定したDMARCこそが、詐欺師があなたの名前を使って、あなた自身のお客さんに偽メールを送るのを防いでくれるんです。
設定にかかるのは半日ほど。そのあとは毎日、静かにあなたのドメインを守ってくれます。ドメインを持っていて、ずっと後回しにしていたなら、この記事をきっかけにしてください。今日は p=none から始めましょう。強化するのはあとからで大丈夫です。