SPF・DKIM・DMARC診断

三つのDNSレコードが、あなたのドメインから本当に送られたメールはどれかを世界に伝えます。この診断は受信サーバーと同じようにそれらを読み、見つけた項目を一つずつわかりやすく説明します。

I know my DKIM selector

It is the value after s= in the DKIM-Signature header of a message you sent. Put commas between several names. About three dozen usual names are tried without asking.

Or try gmail.com · outlook.com · wikipedia.org

The domains you look up are not saved. To slow down abuse, a one-way hash of your IP address is held for two hours at most, then deleted.

メールの送信者欄は何も証明しない

メールは紙の封筒のように設計されました。差出人の住所は送る側が書き、誰も確認しません。どこの国のサーバーでも、差出人欄にあなたのドメインを表示したメッセージを送れます。後から加わった三つの仕組みがこの穴をふさぎます。三つともDNSゾーンにTXTレコードとして置かれます。

SPF(ドメインそのものに置く)
そのドメインとして送信を許されたサーバーの一覧です。受信側は接続してきたIPアドレスを一覧と照合します。
DKIM(selector._domainkeyに置く)
公開鍵です。送信サービスが対になる秘密鍵で各メッセージに署名するので、受信側は誰もメッセージを改ざんしていないこと、どのドメインが保証しているかを確認できます。
DMARC(_dmarcに置く)
自分のドメイン名でどちらの検査にも通らなかったメールへの指示です。配信する、迷惑メールに入れる、拒否する、のいずれか。毎日のレポートを受け取るメールボックスも指定します。

2024年2月から、GmailとYahooはこれらのレコードがないドメインからの大量送信メールを受け付けなくなり、2025年にはMicrosoftもOutlook.comで続きました。

診断で確認すること

まずMXレコードからメールボックスのプロバイダー(Google Workspace、Microsoft 365、Proton Mail、Fastmailほか8社)を識別します。そこから、どのSPFのincludeとどのDKIMセレクターがあるはずかがわかります。

レコードエラーとするもの警告とするもの
SPFメールサーバーがあるドメインにレコードがない、レコードが二つある、DNSルックアップが10回を超える、自身のSPFがないかループするinclude、綴りを間違えた項目、+all、何も返さないルックアップが3回以上ルックアップが8〜10回、?allまたはallなし、ptr、allの後に置かれた項目、メールボックスのプロバイダーが一覧にない
DKIM公開されているが使えない鍵:1024ビット未満のRSA、壊れたp=の値、不明なアルゴリズム試したどの名前にも鍵がない、1024ビットの鍵、テストフラグt=y
DMARCレコードがない、レコードが二つある、有効なp=がない、レポート先アドレスやタグの値の形式が不正p=none、100未満のpct、より厳しいポリシーの下でのsp=none、受け取りに同意していない別ドメインへのレポート送信

ルックアップ回数は入れ子になったincludeをすべてたどって数えます。上限の10回が誰にも気づかれずに破られるのは、たいていそこです。サブドメインの場合、DMARCの検索は親ドメインまでさかのぼり、そのsp=の値を適用します。総合判定は三つの結果のうち最も悪いものです。三つの任意レコード(MTA-STS、TLS-RPT、BIMI)は、公開されているかどうかだけを表示します。

SPFがv=spf1 -allだけのドメインは、何も送信しないドメインとして扱います。その場合DKIMの鍵がないのは正常で、推奨するDMARCはp=rejectです。

DKIMセレクターの見つけ方

DKIMの鍵には決まった置き場所がありません。送信サービスごとにセレクターと呼ばれるラベルを選び、DNSにはそれを一覧にする方法がありません。この診断はgoogle、selector1、k1、s1など、よく使われる名前を三十数個試します。ですから「鍵が見つからない」は、単にあなたの鍵が別の名前だというだけのことがよくあります。

  1. 自分のドメインから、開けるメールボックス宛てにメッセージを送ります。
  2. その生のソースを表示します。Gmailなら「メッセージのソースを表示」、Outlookなら「メッセージのソースを表示」、Apple Mailなら「表示 > メッセージ > すべてのヘッダ」です。
  3. DKIM-Signature:で始まる行を探し、二つのタグを読みます。d=が署名したドメイン、s=がセレクターです。
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=mta2024; …

この例なら、セレクター欄にmta2024と入力します。d=にあなたのドメインではなくメールマガジン配信サービスの名前が出ていれば、メッセージは署名されていますが、あなたが署名したのではなく、その署名はDMARCでは数えられません。メールヘッダー解析ツールがこれらの行を読み解いてくれます。

安全な順番で直す

あなたのドメインとして送信しているものをすべて書き出してください。メールボックス、メールマガジン配信サービス、ネットショップ、ヘルプデスク、ウェブサイトのお問い合わせフォーム。それぞれを一つのSPFレコードに入れます。次に、対応しているすべてのサービスでDKIMを有効にします。DKIMは転送されても生き残りますが、SPFは生き残らないからです。

p=noneとrua=のアドレスでDMARCを公開し、DMARCレポートリーダーで数週間レポートを読みます。正当な送信元がすべて通るようになったらquarantineへ、次にrejectへ進めます。レコード作成ツールで両方のレコードを書けます。

この診断はDNSを読むだけで、あなたのメッセージを一通も見ていません。サービスが見つかった鍵で本当に署名しているか、署名ドメインが差出人アドレスと一致しているかは確認できません。それには配信されたメッセージのヘッダーが必要です。

よくある質問

SPF、DKIM、DMARCがすべて通っているのに、メールが迷惑メールに入るのはなぜですか?

認証が証明するのは誰が送ったかです。相手が受け取りたいかどうかは示しません。フィルターは苦情の割合、送信元IPアドレスとドメインの評判、メッセージ内のリンク、以前のメールへの受信者の反応も考慮します。まずはブラックリスト確認から始めてください。

ドメインにSPFレコードを二つ置けますか?

いいえ。v=spf1で始まるTXTレコードが二つあると恒久的エラーになり、受信側はレコードが一つもないものとして扱います。すべてのinclude:とip4:の項目を含み、末尾にallを一つだけ置いた一つのv=spf1にまとめてください。

「SPF PermError: too many DNS lookups」とはどういう意味ですか?

レコードを処理するのに10回を超えるDNS問い合わせが必要だった、ということです。include、a、mx、exists、redirectはそれぞれ1回と数え、include内のincludeも数えます。もう使っていないサービスを削除するか、aとmxを固定のip4:アドレスに置き換えてください。こちらは回数に数えられません。

SPFの末尾は~allと-allのどちらにすべきですか?

DMARCがあればどちらでも機能します。失敗したメッセージをどう扱うかはDMARCが決めるからです。送信元をまだ洗い出している途中なら、~allのほうが安全です。+allは絶対に使わないでください。インターネット上のすべてのサーバーを許可することになります。

GmailとYahooにはp=noneで十分ですか?

はい、大量送信者向けのルールはp=noneを認めています。ただ、得られるのはレポートだけで、なりすましメールは引き続き配信されます。保護が始まるのはquarantineからです。

メールを一切送らないドメインにもDMARCは必要ですか?

そういうドメインこそ、設定が最も簡単で最も役に立ちます。使われていないドメインは、フィッシングの格好の隠れ蓑になるからです。ドメインにv=spf1 -allを、_dmarcにv=DMARC1; p=reject;を公開してください。