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

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

转发的 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 请求的来源。有关如何提供规范的详细信息,请参阅各个规则语句类型的指南。

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

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

以下 geo match 语句仅在以下条件下匹配X-Forwarded-For标头包含原产国为 IPUS

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

以下基于速率的规则根据中的第一个 IP 聚合请求X-Forwarded-For标头。该规则仅计算与嵌套地理匹配语句匹配的请求。嵌套的地理匹配语句还使用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" } } } }