地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【メール】SPFのsoft failとhard fail

この記事は「エンジニアが知っておくべき メール送信・運用ノウハウ、メールの認証技術やセキュリティについて投稿しよう! by blastengine Advent Calendar 2024」の19日目の記事です

この違いをずっと調べていてどう設定しようかを他社のレコードを引きながら考えている。とりあえず調べた結果などをまとめた記事です。


メールの送信元を検証するための仕組みである SPF(Sender Policy Framework) は、メールスプーフィングやフィッシング攻撃を防ぐ重要なセキュリティ対策です。 SPFには、メールサーバが検証結果をどう処理するかを示すポリシーが含まれています。その中でも「Soft Fail」と「Hard Fail」はよく混同されがちな概念です。この記事では、この2つの違いを解説します。

SPFとは

SPFは、送信元のIPアドレスが正当なメール送信者であるかを確認するための仕組みです。DNSに「SPFレコード」という形式で、どのサーバがそのドメインからメールを送信できるかを定義します。

v=spf1 ip4:192.0.2.1 -all

このレコードは、「192.0.2.1」から送信されるメールのみが正当で、それ以外は拒否するべきだと定義しています。

www.cloudflare.com

soft failとhard fail

SPFのFailは、送信元IPが許可されていない場合の動作を指します。Failには以下の2種類があります。

    1. Soft Fail(~all)
    2. 意味: 送信元IPがSPFレコードに記載されていない場合、「失敗」とみなすが、厳格に拒否はしない。
    3. 記述例: ~all
    4. 動作
      • 検証が失敗しても、そのメールを拒否せず受け入れるか、あるいはスパムとして分類するようにメールサーバに指示します。
      • 例外的なメール送信や設定移行中の段階で利用されることが多いです。
    5. 用途
      • SPFの設定を初めて導入する際に利用
      • ドメイン所有者が設定に問題がないことを確認するためのテスト運用
    1. Hard Fail(-all)
    2. 意味: 送信元IPがSPFレコードに記載されていない場合、「失敗」とみなし、メールを拒否する。
    3. 記述例: -all
    4. 動作
      • 検証が失敗した場合、メールを拒否します
      • 正規の送信者以外のメールを確実にブロックしたい場合に使用されます
    5. 用途
      • SPFレコードの設定が確定しており、不正な送信元を明確に拒否したい場合

あるあるなのが「SPFの設定を初めて導入する際に利用」とは言いつつもずっとそのまま運用してしているパターン。私もこれまで何個か設定を見てますがずっとSoft Failから変えずに設定しているのがほとんでした。

SPFレコード例

Soft Fail: v=spf1 ip4:192.0.2.1 ~all
Hard Fail: v=spf1 ip4:192.0.2.1 -all

結局どっちが良いのか

DMARCレポートをきちんと見て設定不備がないことを確認次第-allを設定すべきだと思います。~allはあくまでも検証目的の設定であって常用すべきではなさそうです。仮に自分たちが-allで運用していてもinclude先が~allだとsoft failになるのもあるのでやはりhard failに設定を変えていく必要があります。

今も結構な数のドメインを見ていたりするのでこの辺は少しずつやっていきます。(とりあえず影響範囲が少ないドメインを一つ-allに変えました)