Files
wiki/infrastructure/mail/security/spf.md
T
2026-09-22 16:11:58 +02:00

2.0 KiB
Raw Blame History

SPF(Sender Policy Framework)

SPFSender Policy Framework)は、送信ドメインがDNSのTXTレコードでメールの送信を許可するIPアドレスを公開し、受信側のSMTPサーバが送信元IPアドレスの正当性を検証する仕組み

検証の流れ

  1. メールの送信 ... 送信側のSMTPサーバが、受信側のSMTPサーバにメールを送信
  2. 送信元ドメインの取得 ... 受信側のSMTPサーバが、エンベロープFrom(MAIL FROM)から送信元ドメインを取得
  3. SPFレコードの取得 ... 送信元ドメインのDNSに問い合わせ、SPFレコード(TXTレコード)を取得
  4. IPアドレスの照合 ... 実際に接続してきた送信側SMTPサーバのIPアドレスが、SPFレコードで許可されているかを確認
  5. 検証結果の判定 ... 照合結果に応じて、pass(認証成功)やfail(認証失敗)などの結果を返す

SPFレコードの設定例

特定のIPv4アドレスのみ許可する:

v=spf1 ip4:192.0.2.1 -all
  • IPアドレスで指定する場合、ip4:もしくはip6:をプレフィックスに用いる

複数のIPv4アドレスを許可する:

v=spf1 ip4:192.0.2.1 ip4:192:.0.0.2 -all

Aレコードに登録されたIPアドレスを許可する:

v=spf1 a -all

v=spf1 a:mail.example.com -all

MXレコードが指すIPアドレスを許可する:

v=spf1 mx -all

外部のメール送信サービスを利用する場合:

v=spf1 include:_spf.example.com -all

補足:SPFレコードの識別

素朴な疑問:

SPFレコードってただのTXTレコードだから、複数のTXTレコードがあっても大丈夫なのだろうか

複数のTXTレコードが登録されている場合:

example.com. IN TXT "v=spf1 ip4:192.0.2.1 -all"
example.com. IN TXT "google-site-verification=xxxxxxxx"
example.com. IN TXT "example-verification=yyyyyyyy"
  • v=spf1で始まるレコードがSPFレコードとして識別される
  • SPFレコードが複数存在する場合はNG