SPFチェックで確認する内容
入力したドメインのTXTレコードを読み取り、v=spf1で始まるレコードを特定します。次に、受信サーバーと同じ方法ですべてのincludeとredirectをたどり、DNSクエリが発生するルックアップを記録し、各項目の構文を確認します。
ここではIPアドレスを使用しません。確認するのは、特定のサーバーが送信できるかどうかではなく、レコードが有効で、評価するすべてのサーバーにとってDNSルックアップ数の上限内に収まるかどうかです。特定のサーバーについて確認するには、完全なテストでメールを送信します。レポートには、受信側が実際に取得した結果が表示されます。
DNSルックアップが多すぎる場合: 上限は10回
RFC 7208では、SPFの評価時にDNSクエリが必要な項目を10個までに制限しています。対象はinclude、a、mx、ptr、exists、redirectです。数はツリー全体で合計されるため、さらに3つのincludeを含むincludeは4回分を使用します。上限を超えると結果はpermerrorになり、DMARCではSPF不合格として扱われます。
実際の評価は最初に一致した時点で停止しますが、このチェッカーでは評価時に到達しない可能性があるものも含め、すべての項目を数えます。リストの前方にあるサーバーは合格し続けても、後方にあるサーバーは不合格になり始めます。外部から見ると、一部のメールでは機能し、別のメールでは機能しないように見えます。
ip4とip6の項目はルックアップ数を消費しません。includeをアドレス範囲に置き換えるフラット化を行うとルックアップ数を減らせますが、プロバイダーの変更に合わせて、その範囲を手動で更新する必要があります。
確認すべきSPF設定ミス
1つのドメインにSPFレコードが2つあるケースです。2つ目のプロバイダーの設定ガイドにレコードを追加するよう書かれていて、既存のレコードに統合されなかった場合に発生します。レコードが2つあるだけでpermerrorになります。
末尾が+allの場合、インターネット上のすべてのサーバーが合格します。?allはどのサーバーについても何も指定しないため、何も保護しません。RFC 7208で使用しないよう定められているptr項目にも注意が必要です。何年も前に利用を停止したサービスのincludeも、それぞれルックアップを1回消費します。
よくある質問
SPFレコードの書き方は?
ドメインに設定するTXTレコードのうち、v=spf1で始まり、送信を許可する送信元を列挙し、その他すべてに適用するルールで終わるレコードです。v=spf1 include:_spf.google.com ip4:203.0.113.5 ~allは、Google Workspaceと1台のサーバーからの送信を許可し、それ以外をsoftfailにします。1つのドメインで公開できるSPFレコードは1つだけです。
SPFのsoftfailとhardfail: ~allと-allのどちらを使う?
DMARCを導入済みであれば、どちらでも機能します。失敗したメッセージの処理はDMARCが決定するためです。送信に使用しているすべてのサービスをまだ確認している段階では、~all(softfail)の方が安全です。DMARCレポートで正当なメールの失敗がないことを確認したら、-allに切り替えます。
完全なテストでは合格するのに、ここではルックアップが10回を超えるのはなぜですか?
受信側は、送信サーバーに一致する最初の条件で評価を停止したため、残りのルックアップは実行しませんでした。リストの後方で一致する別のサーバーでは、同じ評価が10回を超えて失敗します。
空のルックアップとは何ですか?
レコードが返されない、または存在しない名前に対するDNSクエリです。RFC 7208では、1回の評価で2回まで許可されます。3回目はpermerrorになります。存在しなくなったドメインへのincludeが一般的な原因です。
1つのドメインに2つのSPFレコードを設定できる?
できません。RFC 7208で許可されるのは、v=spf1で始まるレコード1つだけです。2つあると、すべての評価がpermerrorになります。1つに統合してください。v=spf1を1つだけ残し、両方のincludeとip4をそのレコードに入れ、最後に1つのallを指定します。v=spf1 include:_spf.google.com include:servers.mcsv.net ~allなら、1つのレコードで2つのプロバイダーを対象にできます。
詳細ガイド: Multiple SPF records
SPFのpermerrorとは?
永続的なエラーです。公開されているレコードを評価できないため、再試行しても結果は同じです。一般的な原因は、DNSルックアップが10回を超えている、1つのドメインにSPFレコードが2つある、構文エラーがある、結果が空のDNSルックアップが3回目に達した、のいずれかです。DMARCでは、permerrorはSPF不合格として扱われます。
詳細ガイド: SPF permerror: too many DNS lookups
SPFレコードが見つからない場合は?
受信側の結果はnoneとなり、DMARCではfailと同じ扱いになります。また、誰でもエンベロープ送信者にそのドメインを使用できます。ドメイン自体にTXTレコードを1つ公開してください。v=spf1で始め、そのドメインから送信するサービスを列挙し、~allまたは-allで終わらせます。