在中使用转发的 IP 地址 AWS WAF - AWS WAFAWS Firewall Manager、和 AWS Shield Advanced

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

在中使用转发的 IP 地址 AWS WAF

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

使用 IP 地址的规则语句

使用 IP 地址的规则语句如下:

  • IP 集匹配 – 检查 IP 地址是否与 IP 集中定义的地址相匹配。

  • 地理匹配 – 使用 IP 地址确定来源国和地区,并将来源国与国家列表进行匹配。

  • 使用基于费率的规则语句 – 可以按其 IP 地址聚合请求,以确保没有单个 IP 地址以过高速率发送请求。您可以单独使用 IP 地址聚合,也可以与其他聚合键结合使用。

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

注意

如果请求中不存在您指定的标头, AWS WAF 根本不将该规则应用于 Web 请求。

回退行为

使用转发的 IP 地址时,可以指明匹配状态 AWS WAF 如果请求在指定位置没有有效 IP 地址,则将其分配给 Web 请求:

  • MATCH-将 Web 请求视为与规则语句相匹配。 AWS WAF 将规则操作应用于请求。

  • 否 MATCH-将 Web 请求视为与规则语句不匹配。

使用的 IP 地址 AWS WAF 机器人控制功能

Bot Control 托管规则组使用来自 IP 地址验证机器人 AWS WAF。 如果您使用 Bot Control,并且已经验证了通过代理或负载均衡器进行路由的机器人,则需要使用自定义规则明确允许它们。例如,您可以配置自定义 IP 集匹配规则,该规则使用转发 IP 地址来检测和允许已验证机器人。您可以使用该规则通过多种方式自定义机器人管理。有关信息以及示例,请参阅 通过以下方式保护您的应用程序免受机器人的侵害 AWS WAF 机器人控制功能

使用转发 IP 地址的一般注意事项

在使用转发 IP 地址之前,请注意以下一般注意事项:

  • 在此过程中,代理可以修改标头,并代理可能会以不同的方式处理标头。

  • 攻击者可能会更改标题的内容以试图绕过 AWS WAF 检查。

  • 标头内的 IP 地址可能格式错误或无效。

  • 请求中可能根本不存在您指定的标头。

使用转发的 IP 地址的注意事项 AWS WAF

以下列表描述了在中使用转发的 IP 地址的要求和注意事项 AWS WAF:

  • 对于任何一条规则,您可以为转发 IP 地址指定一个标头。标头规范不区分大小写。

  • 对于基于速率的规则语句,任何嵌套的范围界定语句都不会继承转发的 IP 配置。为每条使用转发 IP 地址的语句指定配置。

  • 对于地理位置匹配和基于费率的规则, 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 配置中指定的回退行为,将 Web 请求指定为与规则匹配或不匹配。

  • 如果您指定的标头不存在于请求中, AWS WAF 根本不将规则应用于请求。这意味着 AWS WAF 不应用规则操作,也不应用回退行为。

  • 使用转发 IP 标头作为 IP 地址的规则语句不会使用 Web 请求来源报告的 IP 地址。

使用转发的 IP 地址的最佳实践 AWS WAF

使用转发 IP 地址时,请使用以下最佳实践:

  • 在启用转发 IP 配置之前,请仔细考虑请求标头的所有可能状态。您可能需要使用多个规则来获得您想要的行为。

  • 要检查多个转发 IP 标头或检查 Web 请求来源和转发 IP 标头,请对每个 IP 地址源使用一条规则。

  • 要阻止标头无效的 Web 请求,请将规则操作设置为阻止,并将转发 IP 配置的回退行为设置为匹配。

转发JSON的 IP 地址示例

只有当 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" } } } }