转发的 IP 地址 - Amazon WAF、Amazon Firewall Manager 和 Amazon Shield Advanced
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

转发的 IP 地址

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

使用 IP 地址的规则语句

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

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

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

  • 基于速率-按其 IP 地址聚合请求,确保没有单个 IP 地址以过高的速率发送请求。

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

Amazon WAF机器人控制中使用的 IP 地址

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

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

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

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

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

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

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

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

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

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

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

  • 对于地理匹配和基于费率的规则,Amazon WAF使用标题中的第一个地址。例如,如果标头包含 “10.1.1.1、127.0.0.0、10.10.10.10”,则Amazon WAF使用 “10.1.1.1”。

  • 对于 IP 集匹配,您可以指明是与标头中的第一个、最后一个或任何地址进行匹配。如果您指定任何地址,则Amazon WAF检查标题中的所有地址是否匹配,最多 10 个地址。如果标头中含有超过 10 个地址,Amazon WAF将会检查最后 10 个。

  • 包含多个地址的标头必须在地址之间使用逗号分隔符。如果请求使用逗号以外的分隔符,则Amazon WAF认为标头中的 IP 地址格式不正确。

  • 如果标头内的 IP 地址格式错误或无效,Amazon WAF则根据您在转发 IP 配置中指定的回退行为将 Web 请求指定为匹配规则或不匹配。

  • 如果您指定的标头不在请求中,则根本Amazon WAF不会将规则应用于请求。这意味着Amazon WAF它不应用规则操作,也不应用后备行为。

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

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

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

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

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

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

转发 IP 地址的 JSON 示例

仅当X-Forwarded-For标头包含来源国为 IP 时,以下 geo match 语句才会匹配US

{ "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 汇总请求。该规则仅计算与嵌套的 geo match 语句匹配的请求,并且仅阻止与 geo match 语句匹配的请求。嵌套的 geo match 语句还使用X-Forwarded-For标头来确定 IP 地址是否表示原产国US。如果是,或者标题存在但格式不正确,geo match 语句将返回匹配结果。

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