無料・アカウント不要

SPF・DMARCチェッカー

ドメインのSPF、DMARC、MTA-STS、CAAレコードをオンラインで確認し、それぞれの判定を表示します。メールを送信するドメインを入力してください。たとえばwww.example.comではなくexample.comです。

ウェブサイトの公開設定を無料でチェックします。サイトに変更は加えません。

登録不要 破壊的通信なし 公開ウェブサイトのチェック
レコード参照

各レコードの役割と判定方法

チェッカーは入力したホスト名でこれらのレコードを読みます。SPF、DMARC、MTA-STSの未設定は、ホストにMXレコードがある場合にだけ指摘します。メールを受信しないホストでは、同じようには必要ないためです。

レコード公開場所望ましい設定このチェッカーの判定
MXホスト名のMXレコード。メールを受信するドメインに存在すること。件数と内容を表示します。それだけで指摘になることはありません。
SPFホスト名にある、v=spf1で始まるTXTレコード。ドメインからメールを送るすべてのサービスを列挙した、ただ1つのSPFレコード。ホストにMXレコードがあるのに未設定:中。レコードの文字列を表示します。
SPFのallメカニズムSPFレコードの最後の項目。-allまたは~all。+all:高。?all:低。-allと~allは指摘しません。
SPFのDNSルックアップレコード内のinclude、a、mx、ptr、exists、redirectの各項目。DNSルックアップが必要な項目は10個まで。最上位のレコードで10個を超える場合:中。include:の参照先は展開しないため、入れ子のルックアップは数えません。
DMARCexample.comの場合は_dmarc.example.comにある、v=DMARC1で始まるTXTレコード。正規のメールがすべて通過することをレポートで確認できたら、p=quarantineまたはp=reject。ホストにMXレコードがあるのに未設定:中。p=none:低。quarantineまたはreject:合格。sp、pct、rua、アライメントは評価しません。サブドメインでは受信側が組織ドメインのDMARCポリシーも適用しますが、このチェックはそれを読みません。
MTA-STS_mta-sts.example.comにある、v=STSv1で始まるTXTレコードと、mta-stsホスト上のポリシーファイル。レコードとポリシーファイルの両方。テスト後はenforceモード。ホストにMXレコードがあるのにレコードが未設定:低。確認するのはDNSレコードだけで、ポリシーファイルは取得しません。
CAAホスト名のCAAレコード。実際に使う証明書発行機関だけを指定したレコード。CAAレコードがあれば:合格。なし:低。内容を証明書と照合することはしません。サブドメインでは証明書発行機関が親ドメインのCAAも参照しますが、このチェックはそれを読みません。
DKIMselector._domainkey.example.comにあるTXTレコード。メールに署名する各サービスの鍵。確認しません。セレクター名はDNSだけでは見つけられないためです。

TLSレポート、DNSSEC、BIMIは確認しません。

修正方法

SPFとDMARCでよくある指摘の修正方法

レコードは1つずつ変更し、再確認の前にDNSが更新される時間を置いてください。例ではexample.comと仮のサービスを使っています。自分のドメインと、実際にメールを送っているサービスに置き換えてください。

DMARCを監視モードで公開する

Fromアドレスのドメインの_dmarcにTXTレコードを1つだけ追加します。p=noneは配信に影響せず、ruaは受信側に集計レポートを依頼します。レポートには、どのサーバーがそのドメインとしてメールを送っているか、またアラインメントの取れたSPFまたはDKIMを通過しているかが示されます。レポートの送り先が別のドメインなら、そのドメインで受け取りを許可するレコードを公開する必要があります。

; DMARC record for example.com, monitoring only
_dmarc.example.com.  TXT  "v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com"

; Only if rua points to another domain, for example rua=mailto:reports@example.net,
; example.net publishes:
example.com._report._dmarc.example.net.  TXT  "v=DMARC1"

quarantineを経てrejectへ移行する

正規の送信元がすべて通過しているとレポートで確認できたらp=quarantineに切り替え、もう一度レポートを確認してからp=rejectに移行します。RFC 7489には、失敗したメールの一部にだけポリシーを適用するpctがありました。これを置き換えるRFC 9989は、部分的な値の扱いが受信側でばらついたためpctを廃止し、公開したポリシーより1段階弱く適用するよう求めるt=yを追加しています。RFC 7489に従う受信側はt=yを無視するため、テスト中はpct=0も併記してください。同じく1段階弱い扱いを求めることになります。本適用時は両方のタグを外します。

; Publish one version at a time, in this order, after p=none
; 1. Quarantine in test mode (t=y, plus pct=0 for RFC 7489 receivers), then in full
_dmarc.example.com.  TXT  "v=DMARC1; p=quarantine; t=y; pct=0; rua=mailto:dmarc-reports@example.com"
_dmarc.example.com.  TXT  "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com"
; 2. Reject in test mode, then in full
_dmarc.example.com.  TXT  "v=DMARC1; p=reject; t=y; pct=0; rua=mailto:dmarc-reports@example.com"
_dmarc.example.com.  TXT  "v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com"

SPFレコードはドメインごとに1つ

1つの名前に置けるv=spf1で始まるTXTレコードは1つだけです。2つあるとSPFは恒久的なエラーで失敗します。すべての送信元を1つのレコードにまとめてください。include:はプロバイダー自身のレコードを確認し、redirect=はポリシー全体を別のドメインに委ねます。複数のドメインで1つのポリシーを共有するときに便利です。レコードにallも含まれていると、redirect=は無視されます。

; Before: two SPF records on one name (permerror)
example.com.  TXT  "v=spf1 include:_spf.mailhost.example ~all"
example.com.  TXT  "v=spf1 include:spf.newsletter.example ~all"

; After: one record
example.com.  TXT  "v=spf1 include:_spf.mailhost.example include:spf.newsletter.example ~all"

; Another domain that uses the same policy
example.org.  TXT  "v=spf1 redirect=example.com"

DNSルックアップは10回まで

SPFでは、DNSルックアップが必要な項目(include、a、mx、ptr、exists、redirect)は、入れ子のincludeも含めて合計10個までです。1つでも超えるとSPFは恒久的なエラーで失敗します。使わなくなったサービスのincludeを削除し、aとmxを自分で管理するip4またはip6の範囲に置き換え、ptrを外し、大量配信のサービスは専用のSPFレコードを持つサブドメインに移してください。プロバイダーのアドレスをレコードに直接書き写してもルックアップは減りますが、プロバイダーがアドレスを変えると古くなります。このチェッカーが数えるのは最上位の項目だけです。

; One lookup each: include, a, mx, ptr, exists, redirect (plus every lookup inside an include)
; No lookup: ip4, ip6, all

; Before: 4 lookups in the top-level record alone
example.com.       TXT  "v=spf1 a mx include:_spf.mailhost.example include:spf.oldtool.example ~all"

; After: fixed address, unused service removed, bulk mail on its own subdomain
example.com.       TXT  "v=spf1 ip4:192.0.2.10 include:_spf.mailhost.example ~all"
news.example.com.  TXT  "v=spf1 include:spf.newsletter.example ~all"

~allと-allは慎重に選ぶ

レコードの末尾は~all(softfail)か-all(fail)にし、どのサーバーでも通過させる+allは使わないでください。-allのほうが強い指定ですが、SPFを早い段階で確認する受信側は、DMARCが有効なDKIM署名を確認する前に転送メールを拒否することがあります。DMARCポリシーを適用しているなら、~allにすると判断をDMARCに任せられます。メールを送らないドメインはv=spf1 -allを公開できます。

; Choose one ending for example.com, not both
example.com.  TXT  "v=spf1 include:_spf.mailhost.example ~all"
example.com.  TXT  "v=spf1 include:_spf.mailhost.example -all"

; A domain that sends no mail
example.net.  TXT  "v=spf1 -all"

DKIMをFromドメインとアラインさせる

DMARCは、Fromアドレスとアラインしたドメインについて、SPFまたはDKIMが通過すれば合格です。多くのサービスは既定で自社のドメインで署名するため、DKIMは通過してもアラインメントは取れません。各サービスで自分のドメインによる署名を有効にして署名にd=example.comが入るようにし、サービスが示す鍵またはCNAMEをそのセレクターの下に公開してください。既定の緩いアラインメントでは同じ組織ドメインのサブドメインも一致とみなされ、adkim=sとaspf=sでは完全一致が必要です。

; Key for a sending service, selector s1: a CNAME or a TXT record, as the service says
s1._domainkey.example.com.  CNAME  s1.dkim.mailhost.example.
s1._domainkey.example.com.  TXT    "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOC..."

; Aligned signature in a delivered message: d= matches the From domain
From: news@example.com
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=s1; ...

DNSの変更がすべてのリゾルバーに届くまで、古いレコードのTTLと同じだけ時間がかかることがあります。その後、Fromアドレスのドメインでチェッカーを再実行してください。チェッカーは入力したホスト名そのものを読みます。

結果の読み方

各ステータスの読み方。

  1. 01合格レコードが見つかり、チェックを満たしています。
  2. 02低 · 中 · 高レコードが欠けているか、このチェックが指摘する設定になっています。レベルは完全なスナップショットと同じです。
  3. 03観測レコードは記録されましたが、合格にも指摘にもなりませんでした。
  4. 04観測なしチェックは実行されましたが、表示するレコードが見つかりませんでした。
  5. 05対象外チェックの対象外です。たとえばホストにMXレコードがないときのSPFやDMARCです。
  6. 06未計測DNSの問い合わせに失敗したため、合格には数えません。
範囲

このチェッカーがしないこと。

  1. 01入力したホスト名そのもののレコードを読みます。www.example.comの場合はwww.example.comと_dmarc.www.example.comを問い合わせ、example.comは調べません。
  2. 02ホスト名がアドレスに解決できる必要があります。AまたはAAAAレコードのないメール専用ドメインは、ここでは結果が出ません。
  3. 03DKIM、TLSレポート、DNSSECは確認せず、SPFのinclude:も展開しません。
  4. 04メールのレコードは公開DNSから読むだけで、メールは送信しません。同じ実行で、ほかの7つのチェックのためにトップページへ通常のリクエストもいくつか送ります。到達性テスト、脆弱性スキャン、ペネトレーションテストではありません。
  5. 05結果はある時点の状態です。DNSの変更がすべてのリゾルバーに届くまで時間がかかることがあります。
よくある質問

SPF・DMARCチェックについての質問。

www.example.comでSPFレコードが表示されないのはなぜですか?

チェッカーは入力したホスト名そのものを読みます。メールのレコードは通常、メールを送信するドメインにあるため、example.comそのものを入力してください。

p=noneは間違いですか?

p=noneは監視モードです。DMARCレポートを読む間の通常の最初のステップなので、低と判定します。正規のメールがすべて通過するようになったら、quarantineまたはrejectに移行してください。

DKIMを確認しないのはなぜですか?

DKIMの鍵は、送信サービスだけが知っているセレクター名の下に公開されるため、DNSだけでは見つけられません。メールを送信する各サービスの設定で確認してください。

メールが受信トレイに届くかをテストしますか?

いいえ。メールのレコードは公開DNSから読むだけで、メールは送信しません。同じ実行で、ほかのチェックのためにトップページへ通常のリクエストもいくつか送ります。脆弱性スキャンやペネトレーションテストではありません。受信トレイに届くかどうかは、送信サービスやその評判、個々のメッセージにも左右されます。

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

いいえ。1つの名前にv=spf1で始まるTXTレコードが複数あると、SPFはすべてのメッセージについて恒久的なエラーを返します。メカニズムを1つのレコードにまとめてください。長いレコードは、同じレコード内で引用符付きの複数の文字列に分けられます。受信側はそれらを空白を加えずに連結します。

SPFは通過しているのにDMARCが失敗するのはなぜですか?

SPFが確認するのはエンベロープ送信者で、多くの場合はメールサービスのバウンス用ドメインです。Fromアドレスのドメインではありません。その結果がDMARCで数えられるのは、2つのドメインがアラインしている場合だけです。各サービスで、自分のドメインによるDKIM署名か、自分のサブドメインを使った独自のエンベロープ送信者を設定してください。

p=noneはどのくらい続けるべきですか?

請求書のように月に1回しか送られないメールも含めて、正規の送信元がすべてアラインしたドメインで通過していると集計レポートで確認できるまでです。利用者がメーリングリストに投稿するドメインについて、RFC 9989はrejectを勧めていません。それでも選ぶ場合は、先に少なくとも1か月をnoneで、同じ期間をquarantineで過ごしてください。