SPF構文:完全ガイド
SPFの構文を理解しSPFエラーを防ぐ
2024年4月22日
著者: Yunes Tarada
翻訳: 永 香奈子
この記事はPowerDMARCのブログ記事 SPF Syntax: A Complete Guide の翻訳です。
Spelldataは、PowerDMARCの日本代理店です。
この記事は、PowerDMARCの許可を得て、翻訳しています。
SPFの概念を学び、それを実装することは、技術主導の企業にとって重要です。
これにより、フィッシング、スパム、BEC攻撃などの潜在的なリスクから保護できます。
SPF(Sender Policy Framework)は、SPF構文を含むSPFレコードを使用して機能します。
本ブログでは、SPF構文表、SPFメカニズム、SPFクオリファイア、SPFモディファイアについて広く取り上げています。
これらはすべて、技術的なプロトコルを用いたメール認証の概念を深く理解するために必要です。
主なポイント
- SPFを理解することは、フィッシングやメールのなりすましから保護するために、技術主導の企業にとって不可欠です。
- SPFレコードは重要なDNSエントリであり、どのIPアドレスがドメインの代わりにメールを送信できるかを指定します。
- SPFレコードを作成し、定期的に確認することは、メール攻撃におけるドメインの不正使用を防ぐために重要です。
- SPFのメカニズム、修飾子、および修正子は、受信サーバがSPFレコードをどのように解釈するかを決定する重要な要素です。
- 単一の正しくフォーマットされたSPFレコードを維持することは、最適なメールセキュリティと到達率を確保するために必要です。
初心者向けSPF構文
SPFレコードは、DNSレコードの一種であり、公式ドメイン名を使用してメールを送信できる許可済みのIPアドレスを一覧にしたものです。
リストに含まれていないサーバーがそのドメインを使用してメールを送信すると、そのメールは未承認として扱われます。
その結果、受信者のメールボックスによって拒否されます。
これにより、ハッカーによる悪意のある活動に組織の名前が悪用されることを防ぐことができます。
企業は、自社のドメイン名を悪用したフィッシング攻撃を回避するために、SPFレコードを作成し、定期的に確認する必要があります。
2022年の上半期だけで、2億5,500万件以上のフィッシング攻撃が記録されました!
SPFを実装し、SPFの構文を理解することが、いかに重要になっているかが分かります。
SPFレコードには、受信者のサーバーが自社ドメインから送信されたメールを確認・認証するための指示が記載されています。
また、認証に失敗したメールをどのように処理するかも指定されています。
これらの指示は、特定のコンポーネントによって表されます。
SPF レコードの各要素を詳しく見ていきましょう。
以下に、SPF 構文の例を示します。
v=spf1 ip4:123.1.5.0 ip4:100.5.2.1 include:exampledomain.com ~all
各要素の機能は以下のとおりです。
-
v=spf1
は、受信サーバーにSPFレコードであることを通知します。
すべてのSPFレコードは、この指定から始める必要があります。 -
SPF 構文の次のセクションでは、自社ドメインを使用してメールを送信できる許可済みのIPアドレスを指定します。
上記の例では、以下のIPアドレスが許可されています。ip4:123.1.5.0
とip4:100.5.2.1
です。 -
上記の例にある
include:exampledomain.com
セクションは、ドメインを使用してメールを送信できる第三者を指定します。
include
タグは、受信サーバーに対し、指定されたドメイン(例:exampledomain.com
)のSPFレコードを確認し、そこに記載されているIPアドレスも承認済みとして扱うよう指示します。
SPFレコード内には複数のドメインを追加できますが、それらは有効なドメインである必要があります。 -
-all
要素は、SPFレコードに指定されたリスト以外のドメイン、またはIPアドレスから送信されたメールについて、受信サーバが「PASSではない」と判断するよう指示します。
高度なSPF構文
SPFの構文表は、単一のテキスト文字列を含むDNS TXTレコードとして定義されます。
これは常に、使用されるSPFバージョンを指定するv=
要素から始まり、現在のところバージョンは1つだけです。
すべてのSPFレコードには、公式ドメインを使用してメッセージを送信できるホストを定義する特定のルールが含まれており、追加情報を表示することもあります。
高度なSPF構文では、次の3つの要素(SPFメカニズム、SPFクオリファイア、SPFモディファイア)に分解して説明します。
SPFメカニズム
- ALL
-
これは常に一致し、SPFレコードの末尾に追加される最後のメカニズムです。
一致しないIPアドレスに対して、-all
のようなデフォルトの結果を表示します。 - A
-
これは、AAAAまたはAレコードを持つドメイン名を一致対象として指定するメカニズムです。
送信者のアドレスを照合するために使用されます。
このDNS SPFレコードの構文でドメインが指定されていない場合は、現在のドメインが使用されます。 - ip4
-
SPFレコード内で指定されたIPv4アドレス範囲に送信者が接続されている場合、「正」となり一致します。
アドレス範囲を指定するプレフィックスとともに追加します。
プレフィックスが指定されていない場合、/32
が使用されます。 - ip6
-
指定されたIPv6アドレス範囲に送信者が関連付けられている場合、「正」となり一致します。
これはip4
メカニズムとともに追加され、アドレス範囲を示すプレフィックスを持ちます。 プレフィックスが指定されていない場合、/128
が使用されます。 - MX
-
指定されたMXレコードに含まれるIPアドレスと同じIPアドレスを持つ送信者を許可します。
MXレコードには、各サーバがメッセージを受け入れるためのIPアドレスと優先値が含まれます。 - PTR
-
IPアドレスをサブドメインまたはドメインに解決するために、認可されたドメインを指定します。
完全に一致するドメインやサブドメインに対して、正引きを行いIPアドレスを取得します。
尚、このメカニズムは複数のルックアップを必要とするため、時間がかかり信頼性が低いと考えられています。
RFC 7208のガイドラインによると、推奨されていません。 - EXISTS
-
入力されたドメインに対してDNS Aレコード検索を実行します。
有効なAレコードが見つかった場合、実際の検索結果に関係なく、一致したと見なされます。 - INCLUDE
-
第三者のメール送信者を、そのドメインを指定することで許可します。
送信者は、そのIPアドレスが、リストされたドメインのSPFレコードに記載されたIPアドレスまたはドメインと一致する場合にのみ許可されます。
SPFクオリファイア(修飾子)
メカニズムにクオリファイアが指定されていない場合、マッチが成功するとSPF認証は通過します。
8つのメカニズムのそれぞれには、以下の4つのクオリファイアのいずれかが付与されます。
SPFクオリファイア(修飾子) | 結果 | 受信サーバの対応 |
---|---|---|
+ | Pass |
メールがSPF認証に成功すると、サーバはメールの送受信を許可します。 メールは正当なものとしてマークされます。 これは、クオリファイアが指定されていない場合に適用されるデフォルトの動作です。 |
- | Fail |
メールは認証に失敗します。 送信サーバがリストに含まれていないためです。 メールは受信者のメールボックスによって拒否される可能性があります。 |
~ | SoftFail | 受信者のメールボックスはメッセージを受け入れますが、疑わしいものとしてマークされ、スパムフォルダに振り分けられます。 |
? | Neutral |
メールは認証に成功も失敗もせず、対応は未定義のままです。 メールは受信者によって受け入れられます。 |
SPFモディファイア(修飾子)
SPFモディファイアは、SPF構文の動作パラメータを決定する役割を持ちます。
これは、=
記号で区切られた名前と値のペアを含み、追加の詳細やルールの例外を指定することができます。
モディファイアはSPFレコードの最後のセクションに一度だけ記述されます。
未定義のモディファイアはすべて無視されます。
redirect
モディファイアは、他のSPFレコードを参照して認証を行うために使用されます。
これは、複数のドメインに同じSPFレコードの内容を適用したい場合に利用されます。
include
メカニズムは、第三者のドメインがあなたに代わって、またはあなたのビジネス名を使用してメールを送信することを許可するために使用されます。
exp
モディファイアは、あるメカニズムが一致した際に、受信サーバが「Fail」SPFクオリファイアを返した理由を指定します。
SPFレコード作成のガイドライン
SPF構文表を使用してSPFレコードを作成する際は、以下の点に留意してください。
- 1つのドメインに対して複数のSPFレコードを設定することはできません。
- SPFレコードには大文字を使用してはいけません。大文字を含むとエラーが発生します。
- SPFレコードの長さは255文字以内にする必要があります。これを超えると認証に失敗します。
- 同じドメインを参照するSPFメカニズムがある場合は削除してください。
- 使用していない
ip4
およびip6
SPFメカニズムを削除し、アドレス範囲を統合できるか確認してください。 - SPF情報を格納するサブドメインを作成できます。これは、
_spf.domain.com
を使用して実行できます。1つのSPFレコードに追加するIPアドレスが複数ある、大規模なIT企業に推奨されます。