結論(SPFの終端ポリシー)
SPFの終端ポリシーとは、SPFレコードの最後に置く all 機構とその修飾子のことで、「一覧に載っていないサーバーから届いたメールをどう扱ってほしいか」を受信側に伝えます。-all(fail:認めない)か ~all(softfail:疑わしい)にすれば、一覧外から自治体ドメインを名乗るメールを受信側が不正の可能性が高いと判断できます。?all(判断しない)や +all(誰でも可)、all を書かない状態では、SPFを公開していてもなりすまし判別の材料になりません。
この記事のポイント
- 修飾子は + pass、- fail、~ softfail、? neutral の4種類で、省略すると + になります(RFC 7208 4.6.2節)。
- all も redirect= もなければ、結果は ?all と同じ neutral です(4.7節)。
- -all と ~all はどちらも「終端ポリシーあり」で、セキュリティAIチェッカーの得点に差はありません。
- RFC 9989 7.1節は、-all による早い段階での拒否が、DKIMでDMARCを通るはずのメールまで拒否しうると注意しています。
- まず ~all で始め、DMARCレポートで送信元の漏れがないと確認してから -all を検討するのが安全です。
| 診断項目名 | SPFの終端ポリシー |
|---|---|
| 項目ID | dns.spf-policy |
| 分類 | DNS・メールのなりすまし対策 |
| 重大度・配点の重み | 中(medium) 重み 2 |
| 関連する標準・ガイドライン | RFC 7208 4.6.2節(修飾子)、4.7節(既定の結果)、5.1節(all 機構)、6.1節(redirect 修飾子)、10.1.2節(メールを送らないドメインの SPF)、RFC 9989 7.1節(DMARC と SPF の -all)、迷惑メール対策推進協議会「送信ドメイン認証技術 DMARC導入ガイドライン」 |
SPFの終端ポリシーとは
SPFの終端ポリシーとは、SPF レコードの最後に置く all 機構とその修飾子のことで、「一覧に載っていないサーバーから送られてきたメールをどう扱ってほしいか」を受信側に伝える部分です。
city.example.lg.jp. IN TXT "v=spf1 ip4:203.0.113.10 include:spf.protection.outlook.com ~all"
-all(fail:認めない)または ~all(softfail:疑わしい)と書けば、一覧外のサーバーから自治体ドメインを名乗るメールが届いたとき、受信側はそれを不正の可能性が高いと判断できます。?all(neutral:何とも言えない)や +all(誰でも可)、あるいは all を書かない状態では、SPF を公開していても、なりすましを判別する材料として機能しません。
この診断項目は、メール受信設定と SPF レコードがあるドメインについて、終端が -all または ~all になっているかを確認します。SPF レコードそのものの有無は「SPFレコード」で確認します。
修飾子と結果(-all・~all・?all・+all の違い)
RFC 7208 4.6.2節は、機構の前に付ける修飾子を次のように定めています。省略した場合は + です。
| 修飾子 | 結果 | 受信側での一般的な扱い |
|---|---|---|
+ | pass | 許可された送信元 |
- | fail | 許可されていない送信元。拒否や隔離の根拠になる |
~ | softfail | おそらく許可されていない。受け入れつつ疑わしいものとして扱う |
? | neutral | 判断しない(SPF がないのと実質同じ) |
5.1節は all を「常に一致する」機構で、右端に置いて明示的な既定値を与えるものと説明しています。レコードの評価は左から順に行われ、どの機構にも一致しなかった場合、all の修飾子が結果になります。all も redirect= もなければ、?all が書かれている場合と同じく結果は neutral です(4.7節)。
SPFの終端ポリシーは -all と ~all のどちらがよいか
-allは意図が最も明確で、メールを送らないドメインではv=spf1 -allが定番です(10.1.2節の考え方)。- 送信を行うドメインでは、DMARC を併用する場合、受信側は SPF 単独の fail よりも DMARC の判定(From ドメインとのアラインメント)を重視するのが一般的です。転送メールでは SPF が失敗しやすいため、DMARC 運用下では
~allを選ぶ組織も多くあります。 - RFC 9989 7.1節は、受信側の構成によっては
-allによる SPF fail が SMTP の早い段階での拒否につながり、DKIM で DMARC を pass できたはずのメールまで拒否され、その拒否は DMARC 集計レポートにも現れないと注意しています。 - 本診断では
-allと~allを同等に「終端ポリシーあり」と扱います。重要なのは、一覧外の送信元を「許可」や「判断なし」にしないことです。
redirect 修飾子との関係
redirect= は、レコード内のどの機構にも一致しなかったとき、評価を別ドメインの SPF に委ねる修飾子です(6.1節)。5.1節は「レコード内に all 機構がある場合、redirect 修飾子は(記述順にかかわらず)無視されなければならない」と定めています。redirect を使う構成では、終端ポリシーはリダイレクト先のレコードで決まります。
DMARC との関係
DMARC(RFC 9989)では、メールが「SPF または DKIM のいずれかで認証され、かつその認証済みドメインが From ヘッダーのドメインと一致(アライン)している」場合に pass となります。SPF の終端が -all か ~all かは、DMARC の判定そのもの(SPF が pass したかどうか)には影響しません。
一方で、DMARC を導入していない受信側や、DMARC 判定に加えて SPF 結果も迷惑メール判定に使う受信側では、softfail と fail の違いが処理に反映されることがあります。終端ポリシーは「SPF 単独での最低限の意思表示」、DMARC は「From 偽装への最終的な対処方針」と役割を分けて考えると整理しやすくなります。DMARC の方針の強さは「DMARC強制ポリシー」で確認します。
SPFの終端ポリシーについてよくある誤解
- 「
?allは安全側の書き方」:neutral は「判断しない」の意味で、なりすまし判定には役立ちません。 - 「
+allを付けておけば自分のメールが確実に届く」:世界中のどのサーバーにも送信を許可する宣言で、なりすましを公認することになります。 - 「
-allにすれば DMARC は不要」:SPF はエンベロープ送信者しか検証しないため、From ヘッダーの偽装には DMARC が必要です。
SPFの終端ポリシーの診断基準(セキュリティAIチェッカー)
取得対象と方法
- 最終URLのホスト名から先頭の
www.を除いた「メールドメイン」について、Google Public DNS(DNS over HTTPS、https://dns.google/resolve)で TXT と MX を問い合わせます。 - MX が1件以上あり、Null MX(
0 .)でない場合に「メール受信設定あり」とします。 - TXT のうち先頭が
v=spf1(その後が空白または末尾)のものを SPF レコードとします。 - SPF レコード内に、空白で区切られた独立した語として
-allまたは~allがあるかを調べます。include:spf-all.example.jpのようにドメイン名の一部に含まれる文字列は数えません。
判定条件
| 判定 | 条件 | 得点への影響 |
|---|---|---|
| ○ 問題なし(pass) | SPF レコードに -all または ~all がある | 重み2 × 1.00 |
| △ 要確認(warn) | SPF はあるが終端が ?all・+all・all(+と同じ)、または all がない(redirect のみの場合を含む) | 重み2 × 0.45 |
| 対象外(na) | MX がない、または SPF レコードがない | 採点から除外 |
SPF の有無は「SPFレコード」、レコードの重複・+all・DNS 参照数超過といった致命的な誤りは「SPFの一意性・構文・DNS参照数」(dns.spf-validity、重み3、+all やレコード重複は「× 要改善」)で評価しています。この項目に「× 要改善(fail)」はありません。
自治体ドメインでの判定例
| SPF レコード | 判定 |
|---|---|
v=spf1 ip4:203.0.113.10 include:_spf.example-mail.jp -all | ○ 問題なし |
v=spf1 include:_spf.google.com ~all | ○ 問題なし |
v=spf1 +ip4:198.51.100.0/28 ~all | ○ 問題なし(+ip4 は通常の許可) |
v=spf1 ip4:203.0.113.10 ?all | △ 要確認 |
v=spf1 ip4:203.0.113.10 | △ 要確認(all なし=neutral) |
v=spf1 redirect=_spf.example.lg.jp | △ 要確認(リダイレクト先を手動確認) |
-all と ~all の扱い
-all と ~all はいずれも本項目では「○ 問題なし」で、得点に差はありません。どちらを選ぶかは、DMARC の運用段階や転送メールの有無を踏まえて各団体が判断する事項です。-all が途中にあり後ろに別の機構が続くレコードも「○ 問題なし」になりますが、all より後ろの機構は評価されない(5.1節)ため、書き順の誤りがないかは目視で確認してください。
診断の限界
redirect=の先は追跡しません。リダイレクト先で-all/~allを設定している場合は実質的に問題ありませんが、本項目では「△ 要確認」になります。根拠を確認し、リダイレクト先を手動で確認してください。include:先の内容は評価しません。
SPFの終端ポリシーが不十分だとどんなリスクがあるか
- なりすましの見逃し:終端が
?allやallなしでは、一覧外のサーバーから自治体ドメインを名乗るメールも neutral となり、受信側の迷惑メール判定で不利な材料になりません。 +allの場合:攻撃者のサーバーも SPF pass になり、DMARC を設定していても SPF アラインメント経由で pass し得るため、DMARC による保護まで無力化されるおそれがあります(エンベロープ送信者を自治体ドメインにした場合)。- 受信側要件への不適合:主要メールサービスの送信者ガイドラインは SPF/DKIM/DMARC による認証を求めています。終端ポリシーが曖昧な状態は認証設計の不備として扱われやすく、正規メールの到達率にも影響し得ます。
SPFの終端ポリシーの設定方法(DNS・Windows Server)
1. 送信元を確定してから終端を設定する
; 段階1:一覧外は softfail
city.example.lg.jp. IN TXT "v=spf1 ip4:203.0.113.10 include:spf.protection.outlook.com ~all"
; 段階2:DMARC集計レポートで漏れがないと確認できたら fail も検討
city.example.lg.jp. IN TXT "v=spf1 ip4:203.0.113.10 include:spf.protection.outlook.com -all"
2. メールを送らないドメイン
www.city.example.lg.jp. IN TXT "v=spf1 -all"
kankou.city.example.lg.jp. IN TXT "v=spf1 -all"
Web 専用のサブドメインやキャンペーン用ドメインにも設定しておくと、それらを名乗るなりすましを防ぎやすくなります。
3. redirect を使う場合
city.example.lg.jp. IN TXT "v=spf1 redirect=_spf.city.example.lg.jp"
_spf.city.example.lg.jp. IN TXT "v=spf1 ip4:203.0.113.10 include:_spf.example-mail.jp -all"
リダイレクト元に all を書くと redirect が無視されるので、どちらか一方にします。
4. Windows Server の DNS で管理している場合
既存の SPF レコードを削除してから新しい値を登録します(2件並存させない)。削除は -WhatIf で対象を確かめてから実行します。
Get-DnsServerResourceRecord -ZoneName "city.example.lg.jp" -Name "@" -RRType Txt
Get-DnsServerResourceRecord -ZoneName "city.example.lg.jp" -Name "@" -RRType Txt |
Where-Object { $_.RecordData.DescriptiveText -like "v=spf1*" } |
Remove-DnsServerResourceRecord -ZoneName "city.example.lg.jp" -WhatIf
Add-DnsServerResourceRecord -ZoneName "city.example.lg.jp" -Name "@" -Txt `
-DescriptiveText "v=spf1 ip4:203.0.113.10 include:spf.protection.outlook.com ~all"
クラウド DNS やレジストラの管理画面では、既存の TXT 値を編集する形で変更します。
5. 確認方法
dig +short TXT city.example.lg.jp | grep -i 'v=spf1'
# 終端ポリシーだけを取り出す
dig +short TXT city.example.lg.jp | grep -io '[-~?+]\?all\b'
テスト送信したメールのヘッダーで Received-SPF: や Authentication-Results: の spf=pass を確認します。一覧外のサーバー(テスト用の別サービス等)から送った場合に spf=softfail / spf=fail になることも確認できます。
メールを止めないための注意点
-allへの変更は、全送信元の棚卸しと DMARC レポートでの確認が済んでから行います。漏れた送信元(複合機、外部委託の通知システム、職員が使う外部メール配信サービス等)からのメールが拒否されます。- メーリングリストや自動転送を経由するメールは SPF が失敗しやすいため、DKIM 署名を必ず併用します。
?allから直接-allにせず、~allを経由すると影響を観察しやすくなります。- レコードの編集は既存レコードの書き換えで行い、新しい
v=spf1レコードを追加しないでください(2件あると permerror)。
よくある質問(FAQ)
SPFの -all と ~all はどちらを使うべきですか?
メールを送らないドメインは v=spf1 -all が定番です。送信を行うドメインでは、DMARC運用下では転送メールでSPFが失敗しやすいため ~all を選ぶ組織も多くあります。本診断では両者を同等に扱い、大切なのは一覧外の送信元を「許可」や「判断なし」にしないことです。
?all は安全側の書き方ですか?
安全側ではありません。?all は neutral、つまり「判断しない」の意味で、SPFがないのと実質同じです。なりすまし判定には役立たないため、-all か ~all にします。
+all を付けると自分のメールが確実に届くのではありませんか?
+all は世界中のどのサーバーにも送信を許可する宣言で、なりすましを公認することになります。エンベロープ送信者を自治体ドメインにすれば攻撃者のメールもSPF passとなり、DMARCの保護まで無力化されるおそれがあります。
redirect= を使っているのに△になるのはなぜですか?
セキュリティAIチェッカーは redirect= の先を追跡しないためです。リダイレクト先で -all か ~all を設定していれば実質的に問題ありません。根拠を確認し、リダイレクト先のレコードを手動で確認してください。
-all にすればDMARCは不要ですか?
不要ではありません。SPFはエンベロープ送信者しか検証しないため、Fromヘッダーの偽装を防ぐにはDMARCが必要です。終端ポリシーは「SPF単独での最低限の意思表示」、DMARCは「From偽装への最終的な対処方針」と役割が異なります。
終端ポリシーを変更するときの注意点は?
既存のSPFレコードを書き換える形で変更し、新しい v=spf1 レコードを追加しないでください(2件あるとpermerror)。-all への変更は全送信元の棚卸しとDMARCレポートでの確認が済んでから行い、?all から直接 -all にせず ~all を経由します。
この項目を含む127項目を、URLを入れるだけで無料診断します。