

**引入全新的主机体验 AWS WAF**

现在，您可以使用更新的体验访问控制台中任意位置的 AWS WAF 功能。有关更多详细信息，请参阅[使用控制台](https://docs.aws.amazon.com/waf/latest/developerguide/working-with-console.html)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在中使用转发的 IP 地址 AWS WAF
<a name="waf-rule-statement-forwarded-ip-address"></a>

本节适用于使用 web 请求的 IP 地址的规则语句。默认情况下， AWS WAF 使用来自 Web 请求来源的 IP 地址。但是，如果 web 请求通过一个或多个代理或负载均衡器，则 web 请求源将包含最后一个代理的地址，而不是客户端的源地址。在这种情况下，原始客户端地址通常在另一个 HTTP 标头中转发。此标头通常是 `X-Forwarded-For` (XFF)，但也可以是其他标头。

**使用 IP 地址的规则语句**  
使用 IP 地址的规则语句如下：
+ [IP 集匹配](waf-rule-statement-type-ipset-match.md)：检查 IP 地址是否与 IP 集中定义的地址相匹配。
+ [地理匹配](waf-rule-statement-type-geo-match.md) – 使用 IP 地址确定来源国和地区，并将来源国与国家列表进行匹配。
+ [ASN 匹配](waf-rule-statement-type-asn-match.md)-使用 IP 地址确定自治系统编号 (ASN)，并将 ASN 与列表进行匹配。 ASNs
+ [使用基于速率的规则语句](waf-rule-statement-type-rate-based.md)：可以按其 IP 地址聚合请求，以确保没有单个 IP 地址以过高速率发送请求。您可以单独使用 IP 地址聚合，也可以与其他聚合键结合使用。

您可以指示使用来自`X-Forwarded-For`标头或 AWS WAF 其他 HTTP 标头的转发 IP 地址来处理这些规则语句中的任何一个，而不是使用 Web 请求的来源。有关如何提供规范的详细信息，请参阅各个规则语句类型的指南。

**注意**  
如果缺少标头，则将使用该标头的任何语句 AWS WAF 评估为 “不匹配”。如果您使用结果为 “不匹配” 的 NOT 语句，则会将计算结果 AWS WAF 转换为 “匹配”。缺少标头不会触发回退行为，只有无效的标头值才会触发回退行为。

**回退行为**  
使用转发的 IP 地址时，如果请求的指定位置没有有效的 IP 地址，则需要指明 AWS WAF 要分配给 Web 请求的匹配状态：
+ **MATCH**-将 Web 请求视为与规则语句相匹配。 AWS WAF 将规则操作应用于请求。
+ **不匹配**：将 web 请求视为与规则语句不匹配。

**AWS WAF 机器人控制中使用的 IP 地址**  
Bot Control 托管规则组使用来自 AWS WAF的 IP 地址验证机器人。如果您使用机器人控制功能，并且已经验证了通过代理或负载均衡器进行路由的机器人，则需要使用自定义规则明确允许它们。例如，您可以配置自定义 IP 集匹配规则，该规则使用转发 IP 地址来检测和允许已验证机器人。您可以使用该规则通过多种方式自定义机器人管理。有关信息以及示例，请参阅 [AWS WAF 机器人控制](waf-bot-control.md)。

**使用转发 IP 地址的一般注意事项**  
在使用转发 IP 地址之前，请注意以下一般注意事项：
+ 在此过程中，代理可以修改标头，并代理可能会以不同的方式处理标头。
+ 攻击者可能会更改标头的内容以试图绕过 AWS WAF 检查。
+ 标头内的 IP 地址可能格式错误或无效。
+ 请求中可能根本不存在您指定的标头。

**使用转发的 IP 地址的注意事项 AWS WAF**  
以下列表描述了在中使用转发的 IP 地址的要求和注意事项： AWS WAF
+ 对于任何一条规则，您可以为转发 IP 地址指定一个标头。标头规范不区分大小写。
+ 对于基于速率的规则语句，任何嵌套的范围界定语句都不会继承转发的 IP 配置。为每条使用转发 IP 地址的语句指定配置。
+ 对于地理匹配、ASN 匹配和基于费率的规则， AWS WAF 使用标题中的第一个地址。例如，如果标题包含 us `10.1.1.1, 127.0.0.0, 10.10.10.10` AWS WAF es `10.1.1.1`
+ 对于 IP 集匹配，您可以指明是与标头中的第一个地址、最后一个地址还是任何地址进行匹配。如果指定，则 AWS WAF 检查标头中的所有地址是否匹配，最多 10 个地址。如果标头包含超过 10 个地址，则 AWS WAF 检查最后 10 个地址。
+ 包含多个地址的标头必须在地址之间使用逗号分隔符。如果请求使用逗号以外的分隔符，则 AWS WAF 会认为标头中的 IP 地址格式不正确。
+ 如果标头内的 IP 地址格式错误或无效，则 AWS WAF 根据您在转发的 IP 配置中指定的回退行为，将 web 请求指定为与规则匹配或不匹配。
+ 如果您指定的标头不存在于请求中，则 AWS WAF 根本不会将该规则应用于请求。这意味着 AWS WAF 它不应用规则操作，也不应用回退行为。
+ 使用转发 IP 标头作为 IP 地址的规则语句不会使用 web 请求来源报告的 IP 地址。

**使用转发的 IP 地址的最佳实践 AWS WAF**  
使用转发 IP 地址时，请使用以下最佳实践：
+ 在启用转发 IP 配置之前，请仔细考虑请求标头的所有可能状态。您可能需要使用多个规则来获得您想要的行为。
+ 要检查多个转发 IP 标头或检查 web 请求来源和转发 IP 标头，请对每个 IP 地址源使用一条规则。
+ 要阻止标头无效的 web 请求，请将规则操作设置为阻止，并将转发 IP 配置的回退行为设置为匹配。

**转发 IP 地址的 JSON 示例**  
只有当 `X-Forwarded-For` 标头包含来源国为 `US` 的 IP 时，以下地理匹配语句才会匹配：

```
{
  "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"
      }
    }
  }
}
```