SPF (Sender Policy Framework) とは何か?
SPF (Sender Policy Framework) はメール認証方法で、ドメイン所有者がドメイン向けに電子メール送信が権限を持つメールサーバーを指定することを可能にします。受信メールサーバーはドメイン向けのSPFレコードをチェックして、受信メールが権限を持つソースから来たことを確認します。
SPFが重要である理由
SPFなしで、誰でも自分のドメインから来たかのようなメールを送信できます (スプーフィング)。SPFはこれを防ぎ、以下を支援します:
- フィッシング防止: 攻撃者はドメインを簡単にいんなりすまします
- 送信可能性改善: メールプロバイダーは認証されたメッセージを信頼
- 評判保護: スプーフィングされたスパムはドメイン評判にダメージを与えません
- DMARC有効化: SPFはDMARCポリシー向けのビルディングブロック
SPFの動作方式
1. ドメイン所有者は公開 SPFレコード (TXT) DNSで
2. 送信者のメールサーバーが送信 @example.com からのメールが主張します
3. 受信メールサーバーは見上げ example.com 向けのSPFレコード
4. サーバーが確認 送信IPが権限を持つかどうか
5. 結果が適用: Pass、fail、softfail、または neutral
SPFレコード構文
SPFレコードは特定の形式でのTXTレコードです:
v=spf1 [mechanisms] [qualifier]all
SPFレコード例
基本 (単一メールサーバー):v=spf1 ip4:203.0.113.50 -all
Google Workspace:
v=spf1 include:_spf.google.com ~all
複数サービス:
v=spf1 include:_spf.google.com include:sendgrid.net ip4:203.0.113.50 -all
SPFメカニズム
| メカニズム | 説明 | 例 |
|---|---|---|
| ip4 | IPv4アドレスまたは範囲 | ip4:203.0.113.0/24 |
| ip6 | IPv6アドレスまたは範囲 | ip6:2001:db8::/32 |
| include | 別のドメインのSPFを含める | include:_spf.google.com |
| a | ドメインのAレコードIP | a:mail.example.com |
| mx | ドメインのMXサーバーIP | mx |
| all | すべてに一致 (通常は最後) | -all、~all、?all |
修飾子
| 修飾子 | 結果 | 意味 |
|---|---|---|
| + (デフォルト) | Pass | 権限を持つ送信者 |
| - | Fail | 権限なし、拒否 |
| ~ | SoftFail | おそらく権限なし、受け付けますが フラグ |
| ? | Neutral | ポリシーアサーションなし |
SPF実装ベストプラクティス
SoftFail で開始
SPFを最初に実装する場合、~all を使用して、正当なメール拒否を避けます:
v=spf1 include:_spf.google.com ~all
Fail に移行
これが機能することを確認したら、厳格に実装向けに -all に切り替えます:
v=spf1 include:_spf.google.com -all
DNS ルックアップを10未満に保つ
SPF は最大10DNS ルックアップ (include、a、mx、redirect、exists)を許可します。これを超過するとSPF失敗の原因になります。
# DNS ルックアップとしてカウント:
include:_spf.google.com # 1 (ネストされた include を加える)
a:mail.example.com # 1
mx # 1
# カウント内ではありません:
ip4:203.0.113.50 # 0
ip6:2001:db8::1 # 0
1つのSPFレコードのみ
複数のSPFレコードは検証失敗を引き起こします。すべてのメカニズムを1つのレコード内に組み合わせます:
# 不正 - 2つのSPFレコード
v=spf1 include:_spf.google.com ~all
v=spf1 include:sendgrid.net ~all
# 正しい - 組み合わせ
v=spf1 include:_spf.google.com include:sendgrid.net ~all
SPFレコードの確認
dig を使用:dig example.com TXT | grep spf
DomScanを使用:
curl "https://domscan.net/v1/health?domain=example.com"
# hasSPF ステータスを返す
オンライン検証ツール: MXToolbox、mail-tester.com
一般的なSPF問題
DNS ルックアップが多すぎます
症状: SPF permerror
解決: include をフラットにするか、より少ないサービスを使用
サードパーティサービス欠落
症状: 正当なメールがSPFに失敗
解決: すべての送信サービス (マーケティングツール、CRM など)向けに include/ip4 を追加
許容性が高すぎるSPF
症状: スプーフィングされたメールがSPFをパス
問題: +all の使用またはサービスを含みすぎ
解決: 監査および権限を持つ送信者を制限
SPFはメール認証向けに不可欠ですが、DKIM および DMARC と組み合わせるときに最適に機能します。