SPF softfail(~all)とhard fail(-all)の違いと使い分け
要旨
SPF softfailは~all、hard failは-allです。各限定子の意味、hard failで転送メールが失われる理由、送信ドメインには~allとDMARCが正解な理由を解説します。

SPF softfail(~all)は実際にメールを送信するドメインで使い、hard fail(-all)はメールをまったく送信しないドメインでだけ使います。hard failのほうが安全に聞こえますが、DMARCでポリシーを強制していれば、softfailでもなりすましに対して同じ保護が得られ、正規の転送メールがバウンスすることもありません。
SPFのallの限定子を比べると次のとおりです。
| 限定子 | 名称 | 意味 | 受信側の一般的な動作 |
|---|---|---|---|
-all | Hard fail | 記載のない送信者は許可されていない | 配信時にメッセージを拒否することがある |
~all | Softfail | 記載のない送信者はおそらく許可されていない | 受け入れるが疑わしい扱い、多くは迷惑メールへ |
?all | Neutral | 記載のない送信者について主張しない | SPFポリシーなしとほぼ同じ扱い |
+all | Pass | すべてのサーバーを許可 | 使用厳禁。インターネット全体を許可してしまう |
ここからは、この結論の根拠を説明します。メールサーバーが各限定子を実際にどう解釈するか、転送でhard failが壊れる理由、DMARCで判断がどう根本から変わるかを見ていきます。
概要
要点
allメカニズムは必ずマッチするため、SPFレコードの末尾に置きます。-allは、それより前のメカニズムにマッチしなかったクライアントにfailを返し、受信側はそのまま拒否することがあります。~allはsoftfailを返します。受信側は詳しく調べることはあっても、それだけを理由に拒否すべきではありません。- DMARCはsoftfailとfailを区別しないため、DMARCでポリシーを強制していれば
~allで失うものはありません。 - hard failで正規のメールが失われ、softfailでは残る理由は転送にあります。
- 送信するドメインでは
~allが最終形で、-allへの途中段階ではありません。 - メールを送信しないドメインは、
v=spf1 -allとDMARCのp=rejectを公開します。
SPFレコードの~allと-allの意味とは?
allメカニズムはSPFレコードの末尾に置き、レコードの前の部分に記載のない送信者からのメールをどう扱うかを受信サーバーに伝えます。allの前の限定子が判定を決めます。
v=spf1 include:_spf.google.com ~allGoogleのサーバー以外から届いたメールはsoftfailになります。おそらく許可されていないが、すぐにはブロックしない、という意味です。
v=spf1 include:_spf.google.com -all同じメールはhard failです。許可がないので拒否、という意味です。
レコードのほかの部分の動作はまったく同じです。違うのは、記載のない送信者をどれだけ強く扱うよう外部に伝えるかだけです。メカニズムと限定子の詳しい解説は、SPFレコードの書き方ガイドと末尾のallメカニズムを参照してください。
softfailとhard failで受信側の扱いはどう違う?
SPFが出すのはシグナルで、結果を決めるのは受信サーバーです。RFC 7208は結果を次のように定めています。
- Fail(
-all)は、クライアントにそのアイデンティティを使う権限がないという明確な宣言です。受信側はSMTPのやり取りの中で、メッセージをそのまま拒否できます。 - Softfail(
~all)はneutralとfailの中間です。ドメイン側は、メールはおそらく許可されていないと考えているものの、確信はありません。RFCは、受信ソフトウェアがsoftfailだけを理由に拒否すべきではない(SHOULD NOT)としつつ、通常より厳しく確認してもよい(MAY)としています。実際には迷惑メールフォルダに入ることが多くなります。
-allは赤信号、~allは黄信号と考えてください。前者はメッセージを止め、後者は注意して進めと伝えます。
SPFが何を評価するかにも注意が必要です。SPFがチェックするのはSMTPのアイデンティティで、通常はエンベロープ送信者です。メールソフトで人が目にするアドレスではありません。このアイデンティティの決まり方はSPFの概要で解説しています。表示上のFromドメインを守るのはDMARCのアライメントで、通常はDKIMがもう一つの認証経路になります。
?allと+allの扱い
?allと+allは、SPFが定める残り2つの末尾の限定子です。どちらも本番の送信ドメインには向きません。
?all(neutral)は何も主張しません。記載のない送信者は許可も否定もされないため、受信側はSPFポリシーがない場合とほぼ同じように扱います。正当な用途は、送信元を棚卸しする間の短期間のテストだけです。+all(pass)は、インターネット上のすべてのサーバーに自社ドメインとしての送信を許可すると宣言します。なりすましを積極的に助けるうえ、多くのフィルターはこれ自体を迷惑メールのシグナルとして扱います。公開する理由はありません。
allメカニズムがなく、redirectもない場合、マッチしなかった送信者は既定でneutralになります。そのため、完全なレコードは必ず明示的な~allまたは-allで終えてください。
転送でSPFのhard failが壊れる理由
転送サーバーは自身のIPアドレスからメッセージを中継し、そのIPはSPFレコードに記載されていないため、SPFのhard failが壊れます。SPFはこの中継となりすましを区別できないので、正規に送信したメールでもfailになります。流れは次のとおりです。
- 受信者が、たとえば勤務先のアドレスからGmailへメールを自動転送すると、転送サーバーが新たな送信サーバーになります。
- その転送サーバーはSPFレコードにないため、SPFはfailになります。
-allの場合、受信側はSPFの結果だけで転送メッセージを拒否することがあります。正規のメールが失われます。~allの場合、メッセージは疑わしいものとして受け入れられ、DKIMとDMARCで正しく認証される機会が残ります。
DMARC導入済みなら~allは-allより弱い?
いいえ。DMARCでポリシーを強制していれば、softfailとhard failのなりすまし対策の効果は同じです。RFC 7489を廃止した現行のDMARC仕様であるRFC 9989は、SPFをPassかPass以外か、そして表示上のFromドメインとのアライメントで評価します。softfailとhard failは区別しません。
- SPFかDKIMがPassかつアライメント一致なら、DMARCにPassします。
- どちらでもなければ、DMARCポリシー(
p=quarantineまたはp=reject)が適用されます。
~allに該当したなりすましメッセージも、-allの場合とまったく同じようにDMARCで隔離または拒否されます。一方、正規の転送メールはDKIMでPassする機会を保てます。現代のメール認証の中心はDMARCとDKIMです。SPFは補助的なシグナルで、唯一の門番ではありません。
業界の推奨
メールを送信するドメインに対する業界の推奨は~allです。DMARCや到達率の分野はこの考え方に傾いており、公にもそう述べています。
- Google Workspaceははっきりsoftfailを推奨しています。そのSPFのドキュメントは、Workspaceだけで送信するドメインのレコードとして
v=spf1 include:_spf.google.com ~allを示し、hard failの限定子では「SPFチェックに失敗したメッセージは受信サーバーで拒否されやすくなり、そのメッセージをSPFレコードのトラブルシューティングに使えなくなる」と注意しています。 - Spam ResourceのAl Iverson氏は、この質問に直接答えています。基本の答えは
-allでしたが、DMARCを運用する人向けに追記しています。ポリシーがp=quarantineかp=rejectになったら「~all(チルダall)のほうがおそらく良い」というものです。DMARCより先に評価されたSPFのfailが、DMARCレポートにまったく現れない拒否を招くことがあるためです。 - RFC 7208は、softfailだけを理由に拒否しないよう受信側に求めています。そもそも2つの結果の動作が異なるのはこのためです。
注目すべき反対意見はMicrosoftです。同社のMicrosoft 365のSPFガイダンスは-allを推奨し、その根拠を「メッセージにDKIM署名もない場合、SPFの~allの失敗に対してDMARCポリシーは事実上無視される」としています。この条件はよく読んでください。議論のすべてがここにあります。対象はDKIM署名がまったくないメッセージです。DMARC仕様自体はsoftfailとfailを区別しないため、これは標準ではなく1つの受信側の動作です。すべての送信サービスにDKIMで署名させれば(いずれにせよ必要です)、この反論は自社のメールには当てはまらなくなります。
~allと-allの使い分け
~allと-allのどちらを使うかは、どちらが厳しく聞こえるかではなく、ドメインの用途で決まります。用途ごとに判断します。
- メールを送信するドメイン(メインのドメイン):
~allを使い、すべての送信サービスでDKIMを有効にし、DMARCをp=quarantine、続いてp=rejectへ強化します。転送メールを犠牲にせずになりすましを防げます。 - メールを送信しないドメイン(パーキングドメイン、Web専用ドメイン):
v=spf1 -allだけのレコードとDMARCのp=rejectを公開します。失われる正規のメールはなく、なりすましを完全に防げます。 - 送信元をまだ棚卸し中の場合:
~allを使います。送信ドメインはいずれにせよここに落ち着きます。棚卸しで変わるのはどの送信元を許可するかで、末尾の限定子ではありません。

~allから-allへ移行すべき業界の期限はなく、移行した先に到達率のボーナスがあるわけでもありません。メールを送信するドメインでは、~allは通過点ではなく最終形です。時間をかけて強化するのはDMARCポリシーで、SPFの限定子ではありません。何らかの理由でレコードを変更する場合は、元に戻せるよう以前の値とそのTTLを控えておいてください。
~allとDMARCを安全に設定する手順
~allとDMARCを安全に導入するには、まずsoftfailでSPFを公開し、すべての送信元にDKIMで署名させてから、DMARCポリシーを強化します。次の6つの手順を順番に進めてください。
- softfailでSPFを公開する。正規の送信サービスをすべて記載します。
v=spf1 include:_spf.google.com include:sendgrid.net ~allこのレコードは例です。例の値ではなく、自社の送信元が文書で示すメカニズムを公開してください。
- DKIM署名を有効にする。自社ドメインとして送信するすべてのサービスが対象です。これがsoftfailを安全にし、先ほどのMicrosoftの反論への答えにもなります。
- DMARCレコードを
p=noneで公開する。DMARCレコード生成ツールで正しく作成できます。 - 集計レポートを監視する。正規の送信元がすべてアライメント付きでPassするまで続けます。集計レポートが届くまでには一日以上かかります。1つの送信経路をすぐ確認したい場合は、メール到達率テストが送信したメッセージ一通を評価し、SPFとDKIMのアライメントを示します。
- DMARCを
p=quarantine、続いてp=rejectに移行する。ここで本格的ななりすまし対策が効きます。 - レコードを最新に保つ。新しいツールの追加ごとに更新し、SPFのDNS参照項目の上限10個を超えないようにします。

完成した設定は、SPFチェックツールでいつでも検証できます。SPFレコードが1つであること、構文が有効であること、allが最後にあること、評価が10項目の上限内に収まることを確認してください。
まず公開中のSPFポリシーをチェック
限定子を変える前に、PalisadeのSPFチェックツールでドメインを確認し、そのDNSの結果を、届いたメッセージで評価されたアイデンティティと接続元IPと比べてください。チェックツールが読むのは公開レコードで、受信側の非公開の処理までは再現できません。
送信元の変更が続いて棚卸しの維持が難しい場合は、PalisadeのDMARC Agentの修正ガイドで、レポートの検出結果が送信元ごとのSPF、DKIM、アライメントの作業になる流れを説明しています。残る課題がレポートに基づく送信元の継続的な監視なら、今すぐ始めましょう。
根拠
出典と参考資料
よくある質問
よくある質問
SPF softfailとは?
SPF softfailは~allの結果です。送信サーバーがドメインのSPFレコードに記載されていないため、ドメインはそのメールがおそらく許可されていないと伝えますが、受信側に拒否までは求めません。メッセージは届きますが、通常はより厳しく確認され、迷惑メールフォルダに入ることも多くなります。届けるが信用しない、というこの動作こそ、softfailがDMARCと相性の良い理由です。正規の転送メールは届き続け、強制はDMARCが担います。
メールヘッダーのspf=softfailの意味とは?
送信サーバーがドメインのSPFレコードに記載されておらず、そのレコードが~allで終わっていることを示します。受信側はメッセージを受け入れましたが、疑わしいとフラグを付けています。自社のメールであれば、その送信サービスをSPFレコードに追加してください。
~allは-allより到達率が下がりますか?
いいえ。メールボックスプロバイダーは、SPFレコードの末尾の限定子ではなく、認証結果、ドメインのレピュテーション、エンゲージメントでメールを評価します。Google自身のWorkspaceのガイダンスも、推奨レコードに~allを使っています。
-allで始めて、問題が出たら緩めてもよいですか?
可能ですが、順序が逆です。問題は正規のメールが知らないうちにバウンスする形で現れ、気づくのは被害が出た後です。しかもhard failによる拒否は、DMARCレポートにまったく届かないことも多くあります。~allで始めてDMARC側で強化していけば、同じ最終形に、各段階を把握しながら到達できます。
SPFを正しく設定していればDKIMは不要ですか?
いいえ、必要です。SPFだけでは転送で壊れ、メーリングリストにも弱いうえ、DMARCには少なくとも1つのアライメントの取れたPassが必要です。DKIM署名はメッセージと一緒に運ばれるため、2つのうちより壊れにくいのはDKIMです。両方を設定してください。
-allはDMARCのp=rejectと同じ?
いいえ。SPFの限定子は、SPFアイデンティティに対する許可を表します。表示上のFromドメインを管理するのはDMARCのポリシーとアライメントで、両者は別々に設定します。
送信しないドメインはv=spf1 -allを公開できますか?
はい、公開すべきです。このレコードは、そのドメインに許可されたSMTPクライアントが一つもないことを示します。DMARCのp=rejectと組み合わせて、表示上のFromドメインも保護してください。


執筆者
Samuel ChenardPalisade 共同創業者・CEO
Samuel ChenardはPalisade共同創業者兼CEO。Palisadeは1ドメインから数千まで対応する、IT部門・MSP向けのエージェント型DMARC。
Samuelの記事 →