本文へスキップ
学習センターに戻るメール認証

SPF softfail(~all)とhard fail(-all)の違いと使い分け

Samuel ChenardSamuel Chenard著2026年11月5日12分で読了

要旨

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

SPF softfail(~all)とhard fail(-all)の違いと使い分け

SPF softfail(~all)は実際にメールを送信するドメインで使い、hard fail(-all)はメールをまったく送信しないドメインでだけ使います。hard failのほうが安全に聞こえますが、DMARCでポリシーを強制していれば、softfailでもなりすましに対して同じ保護が得られ、正規の転送メールがバウンスすることもありません。

SPFのallの限定子を比べると次のとおりです。

限定子名称意味受信側の一般的な動作
-allHard fail記載のない送信者は許可されていない配信時にメッセージを拒否することがある
~allSoftfail記載のない送信者はおそらく許可されていない受け入れるが疑わしい扱い、多くは迷惑メールへ
?allNeutral記載のない送信者について主張しないSPFポリシーなしとほぼ同じ扱い
+allPassすべてのサーバーを許可使用厳禁。インターネット全体を許可してしまう

ここからは、この結論の根拠を説明します。メールサーバーが各限定子を実際にどう解釈するか、転送で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の前の限定子が判定を決めます。

技術的な例text
v=spf1 include:_spf.google.com ~all

Googleのサーバー以外から届いたメールはsoftfailになります。おそらく許可されていないが、すぐにはブロックしない、という意味です。

技術的な例text
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になります。流れは次のとおりです。

  1. 受信者が、たとえば勤務先のアドレスからGmailへメールを自動転送すると、転送サーバーが新たな送信サーバーになります。
  2. その転送サーバーはSPFレコードにないため、SPFはfailになります。
  3. -allの場合、受信側はSPFの結果だけで転送メッセージを拒否することがあります。正規のメールが失われます。
  4. ~allの場合、メッセージは疑わしいものとして受け入れられ、DKIMとDMARCで正しく認証される機会が残ります。
これは仮定の話ではありません。DMARCの処理より前にSPFのhard failで判断する受信側もあり、有効なDKIM署名でDMARCにPassできたはずのメッセージが拒否されることがあります。

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つの結果の動作が異なるのはこのためです。
運用担当者が軽視しがちなのは、この真ん中の点です。hard failによる拒否はSMTPのやり取りの中で起こるため、DMARCレポートに記録される前にメッセージが消えます。忘れていた送信元を見つけるのに必要な証拠そのものが失われます。

注目すべき反対意見は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を使います。送信ドメインはいずれにせよここに落ち着きます。棚卸しで変わるのはどの送信元を許可するかで、末尾の限定子ではありません。
SPFの末尾の限定子を選ぶ3つのケース:メールを送信するドメインはsoftfail、送信しないドメインはhard fail、送信元の棚卸し中も再びsoftfail。
出典: 結果の意味はRFC 7208、DMARCの評価はRFC 9989に基づきます。

~allから-allへ移行すべき業界の期限はなく、移行した先に到達率のボーナスがあるわけでもありません。メールを送信するドメインでは、~allは通過点ではなく最終形です。時間をかけて強化するのはDMARCポリシーで、SPFの限定子ではありません。何らかの理由でレコードを変更する場合は、元に戻せるよう以前の値とそのTTLを控えておいてください。

~allとDMARCを安全に設定する手順

~allとDMARCを安全に導入するには、まずsoftfailでSPFを公開し、すべての送信元にDKIMで署名させてから、DMARCポリシーを強化します。次の6つの手順を順番に進めてください。

  1. softfailでSPFを公開する。正規の送信サービスをすべて記載します。
技術的な例text
v=spf1 include:_spf.google.com include:sendgrid.net ~all

このレコードは例です。例の値ではなく、自社の送信元が文書で示すメカニズムを公開してください。

  1. DKIM署名を有効にする。自社ドメインとして送信するすべてのサービスが対象です。これがsoftfailを安全にし、先ほどのMicrosoftの反論への答えにもなります。
  2. DMARCレコードをp=noneで公開する。DMARCレコード生成ツールで正しく作成できます。
  3. 集計レポートを監視する。正規の送信元がすべてアライメント付きでPassするまで続けます。集計レポートが届くまでには一日以上かかります。1つの送信経路をすぐ確認したい場合は、メール到達率テストが送信したメッセージ一通を評価し、SPFとDKIMのアライメントを示します。
  4. DMARCをp=quarantine、続いてp=rejectに移行する。ここで本格的ななりすまし対策が効きます。
  5. レコードを最新に保つ。新しいツールの追加ごとに更新し、SPFのDNS参照項目の上限10個を超えないようにします。
正規の送信元を失わずにSPFの末尾の限定子を選ぶための確認チェックリスト。
出典: このチェックリストは、RFC 7208の許可、処理上限、受信側の証拠に関するルールを適用したものです。

完成した設定は、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ドメインも保護してください。

SPFの変更をPalisadeで管理

Palisadeで始める。

今すぐ開始
ホスト型SPFを有効にしたPalisadeのドメイン設定

この記事を共有

Samuel Chenard

執筆者

Samuel Chenard

Palisade 共同創業者・CEO

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

Samuelの記事 →

関連記事とツール