SPF Includeとは?
SPFを正しく設定する方法を確認しよう
2022年10月5日
著者: Ahona Rudra
翻訳: 高峯 涼夏
この記事はPowerDMARCのブログ記事 What is SPF Include? の翻訳です。
Spelldataは、PowerDMARCの日本代理店です。
この記事は、PowerDMARCの許可を得て、翻訳しています。
メールの到達率を向上させるために特定のサーバが満たすべき基準や条件をSPFレコード内に保持するのがSPF「Include」メカニズムです。
もしSPFレコードにサードパーティベンダーのInclude文を誤って追加し損ねてしまった場合、受信者にメールが届かない等の問題を引き起こし、全体のバウンス率が急上昇してしまう可能性があります。
SPFレコードの「Include」メカニズムとは何か、また、SPF Include文をニーズに合わせて最適化する方法について解説します。
SPF Includeとは?
SPFレコードの構文では、「Include」メカニズムは「Include」行で指定されたドメインに対して一致するレコードをチェックするよう、メールサーバに伝えるレコードを示します。
「Include」は送信側のIPが許可されているかどうかを確認するときにSPFレコードが照会されるドメインを指します。
送信側のIPアドレスがSPFで定義された「Include」リストに含まれていれば、一致と見なされてSPFをパスします。
SPF Includeは重要です。なぜなら、
- 「Include」ブロックに記載されているドメインに対して、SPFレコードで保護することを指定する
- ドメインに固有のルールを追加する
- SPF Includeメカニズムを使用すると、同じクラス内のすべてのドメインに適用される一般的なフィルタリングルールをさらに組み込むことができる
つまり、アプリケーションがメールアドレスの複数のクラスをサポートしている場合、Include文を使用して、受信者のアドレスのクラスに基づいたより複雑なフィルタリングが可能になる
例えば、
SPFレコードに「include:_spf.google.com」を設定し、GoogleのIPアドレスからメールを送信すると、そのドメインのSPFレコードの「Include」メカニズム内に発信元IPが見つかるため、正規のメール送信者と見なされます。
この結果、メールはサーバを正常に通過し、目的の受信者まで到達することができます。
複数のSPFレコードは許可されない、でもなぜ?
複数のSPFレコードは許可されていません。
SPFレコードは v=spf1 という文字列で始まるTXTタイプのレコードで、受け取ったメールがスパムかどうかメールサーバが判断する際に従うべきルールを伝えます。
そのルールは以下の通りです。
- 受信側のメールサーバは、送信側のドメインがそのメッセージの承認された受信者であることを確認する必要があります。
この条件を満たした場合、メールサーバはそのメッセージを受け取り、ユーザに配信します。 - 受信側のメールサーバは、送信側ドメインのIPアドレスが、そのドメインの認証済みIPアドレスに一致すること、およびそのIPアドレスが認証済みの送信者であることを確認する必要があります。
これらの条件が満たされたとき、メッセージはユーザに配信されます。
したがって、サーバに2つの別々のSPF TXTレコードエントリがある場合、メールはSPF認証に失敗し、パームエラーが返されます。
これは、受信側のメールサーバがどちらのルールに従えばよいのかわからず、単に両方のTXTレコードを無視するためです。
複数のドメイン・ホスト・IPアドレスをSPFにIncludeする方法
複数のSPFレコードをIncludeしようとすると、メール配信の問題(メールがスパムとして拒否されるなど)に直面することがあります。
修正方法は、問題のあるSPFレコードを削除し、SPF Includeによってドメインまたはホストのエントリを1つのレコードまたは行に統合することです。
世界的に有名な家電メーカーであるLenovo.comが使用している、多数のホストとip4アドレスを持つSPFレコードの例を見てみましょう。
Lenovo.comのSPFレコード検索を行ったところ、4つのドメインが統合されていることがわかりました。
- spf.messagelabs.com
- _netblocks.eloqua.com
- spf.protection.outlook.com
- spf.pfpool.lenovo.com
更に5つのIP4アドレスがあります。
- 72.32.45.225
- 40.65.201.146
- 138.108.60.125
- 138.108.24.107
- 52.247.21.11
1つのレコードにまとめると、このようになります。
v=spf1 include:spf.messagelabs.com include:_netblocks.eloqua.com include:spf.protection.outlook.com include:spf.pfpool.lenovo.com ip4:72.32.45.225 ip4:40.65.201.146 ip4:138.108.60.125 ip4:138.108.24.107 ip4:52.247.21.11 ~all
SPFレコードのセマンティクスを理解する
上記の例から、多数のホストやIP4アドレスを1つのSPFレコードに統合する場合、以下のルールが適用されることがわかりました。
SPFレコードを有効にするためには3つのセクションを持つ必要があります。
宣言(start)、ドメインのIncludeメカニズムとIPアドレスのIP4タグ(center)、そして実施規則(end)です。
- 宣言
- レコードはv=spf1で始まります(この文字列をルール内で再び使用してはいけません)。
- 許可されたドメイン
- 各ドメインにIncludeを追加します(全てのドメインでSPFレコードに追加する際にSPF Includeメカニズムを使用する必要があります)。
- 許可されたIP
- 各IPアドレスにIP4タグを追加します(SPFレコードに追加する各IPアドレスの前にIP4タグを使用する必要があります)。
- 実施規則
- レコードの最後に1つの ~all 文を入れます(この文字列は最後に一度だけ使用します)。
SPF Includeに関する重要な注意事項
SPFレコードに他のドメインやホストを含めることができるため、SPF レコードに「Include」メカニズムを組み込むことは重要です。
これは、メッセージの信頼性を検証するのに役立ちます。
ただし、(RFC4408の10.1節にあるように)SPFレコードあたりのlookup回数には、以下のルールが適用されます。
SPF実装は、「Include」メカニズムや「Redirect」修飾子の使用によって引き起こされるあらゆる参照を含め、メカニズムや修飾子の数をSPFチェックあたり最大10個に制限しなければならない。
もしあなたがSPFを実装する際にメカニズムや修飾子の数を制限しなければ、到達不能なホストのチェックでスリープしてしまうでしょう。
これらのホストはチェックに含まれないため、クライアントからメールを受け取ることはありません。
これにより、メールの配信に深刻な問題を引き起こす可能性があります。
SPF Include と a の違い
- a
- IPアドレスをテストして、ドメインのAレコードに一致するかどうか確認します。
- Include
- あるドメインのSPFレコード全体をチェックし、それに対してIPを評価します。
もしPASSが見つかれば、それがテスト全体の結果として返されます。
aを使用する理由
- より実用的で複雑ではない
- 該当するドメインでSPFを有効にしていないから
- SPFが正しく設定されていなかったり、Aレコードにない他のサーバを誤って許可するから
Includeを使用する理由
- サイトのドメイン名が有効なSPFレコードを持っていることを信頼している
- 繰り返してはいけないという理由からtruthのソースを単一にしたい、そしてSPFドメインが複雑であるため
- SPFレコードを変更する際に自分のドメインを含む全てのドメインのDNSを必ずしも編集しなくてよいから
SPF Includeの自動最適化:複数ドメインとIPアドレスの場合
マルチホスト、マルチIPアドレスのSPFレコードは、目新しいものではありません。
しかし、この種のレコードをどのように構築するべきかは、SPF認証の失敗やPermErrorを避けるために、適切な専門知識を必要とします。