AWS WAF で転送された IP アドレスの使用 - AWS WAF、AWS Firewall Manager、および AWS Shield Advanced

AWS WAF で転送された IP アドレスの使用

このセクションは、ウェブリクエストの IP アドレスを使用するルールステートメントに適用されます。デフォルトでは、AWS WAF は、ウェブリクエストの発信元からの IP アドレスを使用します。ただし、ウェブリクエストが 1 つ以上のプロキシまたはロードバランサーを通過する場合、ウェブリクエストの発信元には、クライアントの発信アドレスではなく、最後のプロキシのアドレスが含まれます。この場合、通常、発信元のクライアントアドレスは別の HTTP ヘッダーに転送されます。このヘッダーは通常 X-Forwarded-For (XFF) ですが、別のヘッダーにすることもできます。

IP アドレスを使用するルールステートメント

IP アドレスを使用するルールステートメントは次のとおりです。

  • IP セット一致 - IP セットで定義されているアドレスと一致する IP アドレスを検査します。

  • 地理的一致 - IP アドレスを使用して発信元の国と地域を特定し、それを国のリストと照合します。

  • レートベースのルールステートメントの使用 - IP アドレスでリクエストを集約して、個々の IP アドレスがリクエストを過度に高いレートで送信しないようにできます。IP アドレスの集約は、単独で使用することも、他の集約キーと組み合わせて使用することもできます。

ウェブリクエストのオリジンを使用する代わりに、X-Forwarded-For ヘッダーまたは別の HTTP ヘッダーのいずれかから、これらのルールステートメントのいずれかのために、転送された IP アドレスを使用するように AWS WAF に指示できます。仕様を指定する方法の詳細については、個別のルールステートメントタイプのガイダンスを参照してください。

注記

指定したヘッダーがリクエストに存在しない場合、AWS WAF はウェブリクエストにルールを一切適用しません。

フォールバック動作

転送された IP アドレスを使用する際に、リクエストが指定された位置で有効な IP アドレスを持たない場合、ウェブリクエストに割り当てるAWS WAF の一致ステータスを指定します。

  • 一致 - ウェブリクエストをルールステートメントと一致するものとして扱います。AWS WAF はルールアクションをリクエストに適用します。

  • 一致なし - ウェブリクエストをルールステートメントと一致しないものとして処理します。

AWS WAF Bot Control で使用される IP アドレス

Bot Control マネージドルールグループは、AWS WAF からの IP アドレスを使用してボットを検証します。Bot Control を使用し、プロキシまたはロードバランサーを介してルーティングするボットを検証した場合は、カスタムルールを使用して明示的に許可する必要があります。例えば、転送された IP アドレスを使用して検証済みボットを検出および許可するカスタム IP セット一致ルールを設定できます。ルールを使用して、さまざまな方法でボット管理をカスタマイズできます。説明と例については、「AWS WAF Bot Control によるボットからアプリケーションを守る」を参照してください。

転送された IP アドレスの使用に関する一般的な考慮事項

転送された IP アドレスを使用する前に、次の一般的な注意事項に留意してください。

  • ヘッダーは途中でプロキシによって変更でき、プロキシはヘッダーをさまざまな方法で処理することがあります。

  • 攻撃者は、AWS WAF 検査をバイパスしようとしてヘッダーの内容を変更する可能性があります。

  • ヘッダー内の IP アドレスは、形式が正しくないか、無効である可能性があります。

  • 指定したヘッダーは、リクエストにまったく存在しない可能性があります。

AWS WAF で転送された IP アドレスを使用する際の考慮事項

次のリストでは、転送された IP アドレスを AWS WAF で使用するための要件と注意事項について説明します。

  • 単一のルールでは、転送された IP アドレス用に 1 つのヘッダーを指定できます。ヘッダーの仕様では、大文字と小文字は区別されません。

  • レートベースのルールステートメントでは、ネストされたスコープステートメントは、転送された IP 設定を継承しません。転送された IP アドレスを使用する各ステートメントの設定を指定します。

  • geo 一致およびレートベースのルールの場合、AWS WAF はヘッダーの最初のアドレスを使用します。例えば、ヘッダーに 10.1.1.1, 127.0.0.0, 10.10.10.10 が含まれている場合、AWS WAF は 10.1.1.1 を使用します

  • IP セットの一致では、ヘッダーの最初のアドレス、最後のアドレス、または任意のアドレスのいずれと照合するかを指定します。いずれかを指定すると、AWS WAF は、ヘッダー内のすべてのアドレス (最大 10 個) が一致するかどうかを検査します。ヘッダーに 10 個を超えるアドレスが含まれている場合、AWS WAF は最後の 10 個を検査します。

  • 複数のアドレスを含むヘッダーでは、アドレスの間にカンマ区切り文字を使用する必要があります。リクエストでカンマ以外の区切り文字が使用されている場合、AWS WAF はヘッダーの IP アドレスの形式が正しくないとみなします。

  • ヘッダー内の IP アドレスが不正な形式であるか、または無効である場合、AWS WAF は、転送された IP 設定で指定したフォールバック動作に従って、ウェブリクエストをルールに一致するか一致しないかを指定します。

  • 指定したヘッダーがリクエストに存在しない場合、AWS WAF は、ルールをリクエストにまったく適用しません。これは、AWS WAF がルールアクションを適用せず、フォールバック動作を適用しないことを意味します。

  • IP アドレス用に転送された IP ヘッダーを使用するルールステートメントでは、ウェブリクエストの発信元によって報告された IP アドレスは使用されません。

AWS WAF で転送された IP アドレスの使用に関するベストプラクティス

転送された IP アドレスを使用する場合は、次のベストプラクティスを使用します。

  • 転送された IP 設定を有効にする前に、リクエストヘッダーの可能な状態をすべて慎重に検討してください。目的の動作を実現するには、複数のルールを使用する必要がある場合があります。

  • 複数の転送された IP ヘッダーを検査したり、ウェブリクエストの発信元と転送された IP ヘッダーを検査したりするには、IP アドレスのソースごとに 1 つのルールを使用します。

  • 無効なヘッダーを持つウェブリクエストをブロックするには、ブロックするようにルールアクションを設定し、転送された IP 設定のフォールバック動作を一致するように設定します。

転送された IP アドレスの JSON の例

次の地理一致ステートメントは、発信元の国が US である IP が X-Forwarded-For ヘッダーに含まれている場合にのみ一致します。

{ "Name": "XFFTestGeo", "Priority": 0, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "XFFTestGeo" }, "Statement": { "GeoMatchStatement": { "CountryCodes": [ "US" ], "ForwardedIPConfig": { "HeaderName": "x-forwarded-for", "FallbackBehavior": "MATCH" } } } }

次のレートベースのルールは、X-Forwarded-For ヘッダーの最初の IP に基づいてリクエストを集約します。ルールは、ネストされた地理一致ステートメントに一致するリクエストのみをカウントし、地理一致ステートメントに一致するリクエストのみをブロックします。ネストされた地理一致ステートメントは、X-Forwarded-For ヘッダーを使用して、IP アドレスが US の発信元の国を示しているかどうかも判断します。示している場合、またはヘッダーが存在していても形式が間違っている場合、地理一致ステートメントは一致を返します。

{ "Name": "XFFTestRateGeo", "Priority": 0, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "XFFTestRateGeo" }, "Statement": { "RateBasedStatement": { "Limit": "100", "AggregateKeyType": "FORWARDED_IP", "ScopeDownStatement": { "GeoMatchStatement": { "CountryCodes": [ "US" ], "ForwardedIPConfig": { "HeaderName": "x-forwarded-for", "FallbackBehavior": "MATCH" } } }, "ForwardedIPConfig": { "HeaderName": "x-forwarded-for", "FallbackBehavior": "MATCH" } } } }