Appendix A. Extended Examples (拡張例)
Appendix A. Extended Examples (拡張例)
この付録は、さまざまな設定シナリオとベストプラクティスを示すSPFレコードの拡張例を提供します。
A.1 Simple Examples (簡単な例)
A.1.1 単一のIPアドレスのみを許可
example.com. IN TXT "v=spf1 ip4:192.0.2.1 -all"
説明: IPアドレス192.0.2.1のみがexample.comを代表してメールを送信することが許可されます。他のすべてのIPアドレスは"fail"結果になります。
A.1.2 MXレコードの使用
example.com. IN TXT "v=spf1 mx -all"
説明: example.comのMXレコードにリストされているメールサーバーがメールを送信することを許可します。これはMXレコードの変更に自動的に適応するため、一般的な設定です。
A.1.3 Aレコードの使用
example.com. IN TXT "v=spf1 a -all"
説明: example.comのAレコード(またはIPv6の場合はAAAAレコード)内のIPアドレスがメールを送信することを許可します。
A.1.4 複数のメカニズムの組み合わせ
example.com. IN TXT "v=spf1 mx a:mail.example.com ip4:192.0.2.0/24 -all"
説明: 次のソースからのメールを許可します:
- example.comのMXサーバー
- mail.example.comのAレコード
- 192.0.2.0/24ネットワーク内の任意のIP
A.1.5 ソフトフェイルポリシー
example.com. IN TXT "v=spf1 mx a ~all"
説明: ハードフェイル(-all)の代わりにソフトフェイル(~all)を使用します。これはテストまたは移行フェーズで役立ちます。受信者はメールを受け入れますが、疑わしいものとしてマークする可能性があります。
A.2 Multiple Domain Example (複数ドメイン例)
同じメールインフラストラクチャを使用する複数のドメインを持つ組織の場合:
example.com. IN TXT "v=spf1 mx -all"
example.org. IN TXT "v=spf1 redirect=_spf.example.com"
example.net. IN TXT "v=spf1 redirect=_spf.example.com"
_spf.example.com. IN TXT "v=spf1 mx:example.com -all"
説明:
- example.comには独自のSPFレコードがあります
- example.orgとexample.netは共有SPFレコードにリダイレクトします
- _spf.example.comには実際のポリシーが含まれています
利点:
- メールサーバー設定の集中管理
- 1回の更新で複数のドメインに影響します
- DNSメンテナンスの削減
A.3 DNS Blacklist (DNSBL) Style Example (DNSブラックリストスタイル例)
existsメカニズムを使用してDNSBL類似の機能を実装:
example.com. IN TXT "v=spf1 exists:%\{ir}.%\{l1r+-}._spf.%\{d} -all"
説明:
%\{ir}: 反転したIPアドレス(例: 192.0.2.1が1.2.0.192になる)%\{l1r+-}: 送信者のlocal-partの最初の部分、反転、"."と"+"が"-"に置き換えられる%\{d}: ドメイン名
展開例:
送信者が192.0.2.1から[email protected]を送信する場合:
- マクロは次のように展開されます:
1.2.0.192.user._spf.example.com
次に、このドメイン名のAレコードがクエリされます。存在する場合、SPFチェックは成功します。
使用例:
- ユーザーベースのきめ細かい制御
- データベースまたはカスタムシステムとの統合
- 動的な認証決定
A.4 Multiple Requirements Example (複数要件例)
複数のメカニズムと修飾子を組み合わせた複雑な設定:
example.com. IN TXT "v=spf1 ip4:192.0.2.0/24 ip4:198.51.100.0/24 include:_spf-servers.example.com include:_spf.google.com a:outbound.example.com mx ~all"
説明:
ip4:192.0.2.0/24: 内部メールサーバーネットワークip4:198.51.100.0/24: バックアップデータセンターネットワークinclude:_spf-servers.example.com: 追加サーバーリストを含めるinclude:_spf.google.com: Google Workspaceを使用a:outbound.example.com: 特定のアウトバウンドサーバーmx: MXレコードサーバーを含める~all: 他のすべての場合にソフトフェイル
階層設計:
_spf-servers.example.com. IN TXT "v=spf1 ip4:203.0.113.0/24 ip4:198.51.100.128/25 -all"
これにより、大きなSPFレコードをより管理しやすい部分に分割できます。
A.5 サブドメイン設定例
A.5.1 異なるポリシーを持つサブドメイン
example.com. IN TXT "v=spf1 mx -all"
mail.example.com. IN TXT "v=spf1 a -all"
shop.example.com. IN TXT "v=spf1 include:shopify.com -all"
説明:
- メインドメインはMXレコードを使用
- mailサブドメインはAレコードのみを使用
- shopサブドメインはサードパーティサービス(Shopify)を使用
A.5.2 メールを送信しないサブドメイン
noreply.example.com. IN TXT "v=spf1 -all"
static.example.com. IN TXT "v=spf1 -all"
説明: これらのサブドメインがメールを送信しないことを明示的に宣言し、偽造を防ぎます。
A.6 サードパーティサービス統合例
A.6.1 複数のメールサービスプロバイダーの使用
example.com. IN TXT "v=spf1 include:_spf.google.com include:spf.protection.outlook.com include:sendgrid.net -all"
説明:
- 従業員メール用のGoogle Workspace
- パートナー用のMicrosoft 365
- マーケティングメール用のSendGrid
A.6.2 DNSクエリ制限の確認
上記の例は3つのincludeを使用しており、それぞれが追加のクエリをトリガーする可能性があります。クエリの合計数が10を超えないことを確認する必要があります。
検証方法:
# GoogleのSPFを確認
dig _spf.google.com TXT
# MicrosoftのSPFを確認
dig spf.protection.outlook.com TXT
# SendGridのSPFを確認
dig sendgrid.net TXT
各includeのメカニズム数を計算し、合計が≤10であることを確認します。
A.7 誤設定例(回避すべき)
A.7.1 ❌ 複数のSPFレコード(エラー)
example.com. IN TXT "v=spf1 mx -all"
example.com. IN TXT "v=spf1 a -all"
問題: これは"permerror"になります。ドメインには1つのSPFレコードしか持てません。
正しい方法:
example.com. IN TXT "v=spf1 mx a -all"
A.7.2 ❌ -allの欠落(安全でない)
example.com. IN TXT "v=spf1 mx"
問題: 明示的なデフォルトポリシーがなく、?all(neutral)と同等で、どのIPも失敗しません。
正しい方法:
example.com. IN TXT "v=spf1 mx -all"
A.7.3 ❌ DNSクエリ制限の超過
example.com. IN TXT "v=spf1 include:a include:b include:c include:d include:e include:f include:g include:h include:i include:j include:k -all"
問題: 11個のincludeは10クエリ制限を超え、"permerror"になります。
解決策: SPFフラット化を使用するか、ip4メカニズムを直接使用します。
A.8 IPv6設定例
example.com. IN TXT "v=spf1 ip6:2001:db8::/32 ip4:192.0.2.0/24 mx -all"
説明: IPv6とIPv4ネットワークの両方をサポートします。
A.9 説明文字列の例
example.com. IN TXT "v=spf1 mx -all exp=explain._spf.%\{d}"
explain._spf.example.com. IN TXT "%\{i}からのメールですが、このIPは%\{d}によって承認されていません。postmaster@%\{d}に連絡してください。"
説明: SPFチェックが失敗した場合、受信者は説明文字列をクエリしてユーザーに表示できます。
マクロ展開後(192.0.2.99から送信と仮定):
"192.0.2.99からのメールですが、このIPはexample.comによって承認されていません。[email protected]に連絡してください。"
A.10 テストと移行戦略
フェーズ1: 監視モード(2-4週間)
example.com. IN TXT "v=spf1 ?all"
フェーズ2: 実際の送信元を記録(2-4週間)
example.com. IN TXT "v=spf1 ip4:192.0.2.0/24 include:provider.com ?all"
フェーズ3: ソフトフェイル(4-8週間)
example.com. IN TXT "v=spf1 ip4:192.0.2.0/24 include:provider.com ~all"
フェーズ4: 厳格モード(本番環境)
example.com. IN TXT "v=spf1 ip4:192.0.2.0/24 include:provider.com -all"
推奨: 各フェーズでSPFチェック結果を監視し、正当なメールがブロックされていないことを確認します。