SPFレコード -- メール送信者認証
SPF(Sender Policy Framework)TXTレコードを作成して、ドメインのメール送信者を認証する方法を解説します。メカニズム、修飾子、ルックアップ制限を理解しましょう。
TXTSecurity
Zone File Entry
example.com. IN TXT "v=spf1 include:_spf.google.com include:spf.protection.outlook.com ip4:203.0.113.0/24 -all"
詳細な説明
SPFレコードとは?
SPF(Sender Policy Framework)は、DNS TXTレコードとして公開されるメール認証メカニズムです。ドメインに代わってメールを送信することが許可されているメールサーバーを指定し、受信サーバーが偽造された送信者アドレスを検出できるようにします。
BINDゾーンファイルの構文
; Google Workspace用の基本的なSPF
example.com. 3600 IN TXT "v=spf1 include:_spf.google.com ~all"
; Microsoft 365用のSPF
example.com. 3600 IN TXT "v=spf1 include:spf.protection.outlook.com -all"
; 複数の送信者を含む複合SPF
example.com. 3600 IN TXT "v=spf1 include:_spf.google.com include:sendgrid.net ip4:203.0.113.50 -all"
SPFメカニズム
SPFレコードは、許可された送信者を定義する一連のメカニズムを使用します:
| メカニズム | 説明 |
|---|---|
ip4:x.x.x.x |
特定のIPv4アドレスまたは範囲を許可 |
ip6:xxxx::xxxx |
特定のIPv6アドレスまたは範囲を許可 |
include:domain |
別ドメインのSPFレコードを含める |
a |
ドメイン自身のAレコードのIPを許可 |
mx |
ドメインのMXレコードのIPを許可 |
all |
すべてにマッチ(最終的なキャッチオールとして使用) |
修飾子
各メカニズムには修飾子を前置できます:
+(Pass、デフォルト)-- 送信者を許可-(Fail)-- 未許可の送信者を拒否(ハードフェイル)~(SoftFail)-- 受け入れるが疑わしいとマーク?(Neutral)-- ポリシー表明なし
末尾の-allは「明示的に許可されていないものはすべて拒否」を意味し、最も厳格で安全な設定です。
10ルックアップ制限
SPFには重要な制限があります:評価時に最大10回のDNSルックアップしかできません。各include:、a、mx、redirectメカニズムは1回のルックアップとしてカウントされます。含まれるドメイン内のネストされたincludeもこの制限にカウントされます。
制限を超えるとPermErrorが発生し、一部の受信者はこれを失敗として扱います。制限内に収めるには:
- 可能な場合は
aやmxの代わりにip4:とip6:を使用 - 送信者を統合し、未使用の
include:エントリを削除 - サードパーティの送信者が多い場合はSPFフラット化ツールを使用
ベストプラクティス
- まず**
~all**(SoftFail)で開始して監視し、すべての正当な送信者がリストされていることを確認してから-allに切り替える - ドメインごとにSPFレコードは1つだけ -- 複数のSPFレコードは評価エラーの原因になる
- すべてのメカニズムを単一のTXTレコードにまとめる
- どのサービスがドメインに代わってメールを送信しているか定期的に監査する
ユースケース
SPFレコードを追加して、メール送信サービス(Google Workspace、Microsoft 365、トランザクションメールプロバイダー)を認証し、未許可の送信者によるドメインのなりすましを防止します。