SPFレコードの ~all と -all の違いは?どっちを設定すべきか徹底解説

Google Workspace
スポンサーリンク

みなさん、こんにちは!業務ハックLabのようです。

前回、SPF、DKIM、DMARCの設定方法について解説しました。
その中でSPFレコードの設定で別記事で解説するよーといった部分があったと思います。

そう「~all」と「-all」の違いについてです。

最後の「all」で手が止まりませんか?

SPFレコードを書くとき、最後に ~all をつけるか -all をつけるか、地味に悩みますよね。
これ、見た目は似てますが、受信側のサーバーに対する「態度の厳しさ」が全く違います。

「セキュリティ的には厳しい方がいいんだろうけど、メールが届かなくなったら怖いし…」

今回はそんな迷いを解消するために、それぞれの違いと、僕がいつも実践している設定のステップを整理していきたいと思います。


そもそもSPFレコードって何してるの?

まずは前提の整理から。
SPFレコードは、「うちのドメイン(@example.com)のメールは、このIPアドレスから送りますよ」というリストを宣言するものです。

Microsoft Learnなどのドキュメントを見ると難しく書いてありますが、要は「メールサーバーの身分証明書リスト」ですね。


「~all」と「-all」の違い

では本題です。
リスト(SPFレコード)に書かれていないサーバーからメールが届いた時、どう扱うか?を決めるのが末尾の all の記述です。

-all (Hard Fail / ハードフェイル)

  • 意味: 「リストにないサーバーからのメールは、絶対に拒否してください!」
  • 挙動: 認証に失敗すると、受信側でバウンス(受信拒否)され、メール自体が消滅する可能性が高いです。
  • 僕の心の声: (セキュリティ的には最強。でも設定ミスったら社長からのメールも届かなくなる諸刃の剣…)

~all (Soft Fail / ソフトフェイル)

  • 意味: 「リストにないサーバーからのメールは、不合格だけど一旦受け取ってください(ただし不審な印をつけてね)」
  • 挙動: メールは届きますが、迷惑メールフォルダに入ったり、ヘッダーに「SoftFail」という記録が残ったりします。
  • 僕の心の声: (とりあえず届くから安心。でも、なりすましメールも「迷惑メール」扱いで届いちゃうってことだよね…)

表にまとめるとこんな感じです。

項目 ~all (Soft Fail) -all (Hard Fail)
意味 「不合格だが、受信してもよい」 「不合格。絶対に受信してはならない」
受信側の挙動 メールは届くが、迷惑メールフォルダに入ったり、「不審なメール」という警告が付いたりすることが多い。 サーバーレベルで受信拒否(バウンス)されたり、破棄されたりする可能性が高い。
厳格さ 緩い(誤送信のリスクが低い) 厳しい(なりすまし防止効果が高い)
主な用途 導入初期・テスト期間・転送対策 設定完了後・セキュリティ強化

結局、どう設定するのが正解?

結論から言うと、「最初は ~all でスタートし、最終的に -all を目指す」のが鉄板の運用です。

いきなり -all にするのは、個人的にはあまりお勧めしません。
なぜかというと、今の企業環境ってメールを送るシステムが多すぎるんですよね。

  • Microsoft 365 (Exchange Online)
  • Salesforce などのSFA
  • Mailchimp などのメルマガ配信ツール
  • 総務部が勝手に契約した採用管理システム (あるあるですねw)

これらを最初から完璧に網羅できている自信、ありますか?
僕は正直ないです(笑)

もし -all で設定していて記述漏れがあると、「採用システムから送った面接案内が候補者に届かない」なんて事故が起きます。

推奨する思考プロセスと手順

なので、僕はいつも以下のステップで進めています。

Step 1: まずは ~all で設定する
まずは正規のメールが届かなくなるリスクを回避します。
記述例:

v=spf1 include:spf.protection.outlook.com ~all

これで、「記述漏れのシステム」があっても、とりあえず迷惑メールフォルダには入るかもしれませんが、届かないという最悪の事態は防げます。

Step 2: ログを確認してリストを修正する
DMARCレポートなどを活用して、「どのIPアドレスからメールが送られているか」をモニタリングします。
「あ、経理部が請求書システムからも送ってるじゃん!」みたいな発見が必ずあります。それらをSPFレコードに include で追記していきます。

Step 3: 自信がついたら -all に変更する
全ての送信元を網羅できたと確信したら、最後に -all に書き換えます。
これで、なりすましメールをサーバーレベルで弾けるようになり、セキュリティ強度がMAXになります。


ちょっと待った!転送メールの罠

「よし、じゃあ最後は必ず -all にすればいいんですね!」

と言いたいところなんですが… 実は一点だけ注意点があります。
それは「メールの自動転送」です。

受信者がメールを別の個人アドレスなどに自動転送すると、送信元のIPが変わってしまうため、SPF認証に失敗することがあります。
この時、-all だと転送先でメールが拒否されてしまうんです。

解決策:DMARCとの併用

最近のトレンドとしては、DMARCという別の仕組みと併用することで、より柔軟な運用が可能になっています。

DMARCを使えば、「SPFがダメでもDKIM(電子署名)がOKなら通す」といった柔軟な判断ができます。

ただし、注意点があります。
~all の場合、DKIMがないメールに対してはDMARCポリシーが効果的に無視されてしまいます。
そのため、Microsoftは「DKIMとDMARCを併用する場合は -all を使用すること」を推奨しています。

ですので、もし転送メールの影響が心配な場合は:

  1. -all に設定
  2. DKIMを必ず設定
  3. DMARCで「SPFが失敗してもDKIMがOKなら通す」ように運用

というアプローチが最も安全です。


まとめ

はい、如何でしたでしょうか?

  • 立ち上げ初期: ~all 一択!
  • 運用安定後: 送信元を把握しきれたら -all に挑戦。
  • 迷ったら: 迷ったら: DKIMとDMARCを併用して -all で運用するのが最も安全。

メール設定は一度ミスると業務影響が大きいので、まずは「緩く」始めて、徐々に「締める」アプローチでいきましょう。

これでSPFの設定も怖くないですね!
それでは皆さん、良い業務ハックライフを~

コメント