SPF レコードの書き方

SPF は、自分のドメインからメールを送ってよいサーバーを宣言するレコードです。受信側はこれと実際の送信元を照合し、なりすましメールを見分けます。

メールを送ってよいサーバーを並べ、最後に all を付けた 1 行を TXT に登録します。

名前種別値TTL
@ (空欄)TXTv=spf1 include:_spf.example.net ~all3600

1 つのドメインに SPF は 1 本だけです。

こう書く

送信のしかた値
メール送信サービスを 1 つ使うv=spf1 include:_spf.example.net ~all
送信サービスを 2 つ使うv=spf1 include:_spf.example.net include:spf.example.org ~all
受信サーバー (MX) から送るv=spf1 mx ~all
送信サービス + 自社の固定 IPv=spf1 include:_spf.example.net ip4:203.0.113.10 ~all
メールを送らないドメインv=spf1 -all

include の値は送信サービスが指定します。例: Google Workspace / Microsoft 365

各タグの意味

書き方意味参照回数
v=spf1SPF の始まり。必ず先頭に 1 つ0
aこのドメインの A / AAAA レコードのサーバーを許可1
mxこのドメインの MX (受信サーバー) を許可1
include:ドメインそのドメインの SPF に書かれたサーバーを許可1 + 先の分
ip4: / ip6:IP アドレス (範囲は /24 などで指定) を許可0
redirect=ドメインこのドメインの SPF として、別のドメインの SPF を使う1 + 先の分
-allそれ以外は認めない (fail)0
~allそれ以外は疑わしい扱い (softfail)0
?allそれ以外は判定しない (neutral)0

参照回数は合計 10 回までです (RFC 7208 §4.6.4)。+all はすべてのサーバーを許可するので使いません。

よくある間違い

  • ✕SPF を 2 本登録するv=spf1 の TXT が 2 本あると、両方とも無効になります。送信元が増えたら 1 本に include を足します。
  • ✕参照回数が 10 を超えるinclude の先の include も数に入ります。超えると SPF 全体が無効です。使っていないサービスの include は消します。
  • ✕all を途中に書くall より後ろは評価されません。~all などは必ず末尾に 1 つだけ書きます。

作る・確かめる

根拠: RFC 7208 (SPF)

よくある質問

~all と -all のどちらにしますか?

送信元をすべて洗い出せているなら -all です。漏れがありそうなら ~all から始め、確認できてから -all にします。

SPF だけでなりすましは防げますか?

SPF だけでは不十分です。DKIM と DMARC をあわせて設定すると、受信側がなりすましメールを隔離・拒否できるようになります。