本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
转发的 IP 地址
本节适用于使用 Web 请求的 IP 地址的规则语句。默认情况下,Amazon WAF使用 Web 请求源的 IP 地址。但是,如果 Web 请求通过一个或多个代理或负载均衡器,Web 请求源将包含最后一个代理的地址,而不是客户端的源地址。在这种情况下,原始客户端地址通常在另一个 HTTP 标头中转发。这个标头通常是X-Forwarded-For (XFF),但可以是不同的标头。
使用 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" } } } }