本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
地理匹配规则语句
使用地理或地理匹配声明根据来源国家和地区管理网络请求。
注意
对于 CloudFront 发行版,如果您使用 CloudFront 地理限制功能,则该功能不会将被阻止的请求转发给Amazon WAF。该功能会将允许的请求转发到Amazon WAF。如果您想根据地理位置和其他Amazon WAF标准阻止请求,请使用Amazon WAF地理匹配声明,不要使用 CloudFront 地理限制功能。
您可以使用地理匹配语句进行国家和地区匹配,如下所示:
使用 geo match 语句,按如下方式Amazon WAF管理每个 Web 请求:
-
确定请求的国家和地区代码 — 根据请求的 IP 地址Amazon WAF确定请求的国家和地区。默认情况下,Amazon WAF使用 Web 请求来源的 IP 地址。您可以指示使用备Amazon WAF用请求标头中的 IP 地址,例如
X-Forwarded-For在规则语句设置中启用转发 IP 配置。Amazon WAF使用国际标准化组织 (ISO) 3166 标准中的 alpha-2 国家和地区代码。您可以在以下位置找到代码:
在 ISO 网站上,您可以在 ISO 在线浏览平台 (OBP)
上搜索国家/地区代码。 在维基百科上,国家代码列在 ISO 3166-2
中。 URL 中列出了国家/地区的区域代码
https://en.wikipedia.org/wiki/ISO_3166-2:。例如,美国的区域为 ISO 3166-2: US<ISO country code>,乌克兰的区域为 ISO 3166-2: UA 。
-
确定要添加到请求中的国家/地区标签和区域标签-标签表明地理匹配声明使用的是原始 IP 还是转发的 IP 配置。
原产地 IP
国家标签是
awswaf:clientip:geo:country:。以美国为例:<ISO country code>awswaf:clientip:geo:country:US.区域标签是
awswaf:clientip:geo:region:。以美国俄勒冈州为例:<ISO country code>-<ISO region code>awswaf:clientip:geo:region:US-OR.转发的 IP
国家标签是
awswaf:forwardedip:geo:country:。以美国为例:<ISO country code>awswaf:forwardedip:geo:country:US.区域标签是
awswaf:forwardedip:geo:region:。以美国俄勒冈州为例:<ISO country code>-<ISO region code>awswaf:forwardedip:geo:region:US-OR.
如果国家或地区代码不适用于请求的指定 IP 地址,则在标签
XX中Amazon WAF使用该值来代替该值。例如,以下标签适用于国家/地区代码不可用的客户端 IP:awswaf:clientip:geo:country:XX以下标签适用于国家/地区为美国但区域代码不可用的转发 IP:awswaf:forwardedip:geo:region:US-XX。 -
根据规则标准评估请求的国家/地区代码
无论是否找到匹配项,地理匹配语句都会对其检查的所有请求进行标记。
注意
Amazon WAF在规则的 Web 请求评估结束时添加任何标签。因此,您对地理匹配语句中的标签使用的任何标签匹配都必须在与地理匹配语句规则不同的规则中定义。
如果您只想检查区域值,则可以使用 Count 操作和单个国家/地区代码匹配编写地理匹配规则,然后为区域标签编写标签匹配规则。即使采用这种方法,您也需要提供国家/地区代码以供评估地理匹配规则。您可以通过指定极不可能成为您网站流量来源的国家/地区,来减少日志记录和统计指标。
可@@ 嵌套 — 您可以嵌套此语句类型。
WCU — 1 WCU。
设置-此语句使用以下设置:
-
国家/地区代码-用于比较地理匹配的国家/地区代码数组。例如,它们必须是 ISO 3166 国际标准的 alpha-2 国家/地区 ISO 代码中的双字符国家/地区代码
["US","CN"]。 -
(可选)转发 IP 配置-默认情况下,Amazon WAF使用 Web 请求来源中的 IP 地址来确定来源国家。或者,您可以将规则配置为在 HTTP 标头中
X-Forwarded-For改用转发 IP。 Amazon WAF使用标头中的第一个 IP 地址。使用此配置,您还可以指定后备行为,以应用于指定标头中格式错误的 IP 地址的 Web 请求。备用行为将请求的匹配结果设置为匹配或不匹配。有关更多信息,请参阅转发的 IP 地址:
在何处查找此规则声明
-
控制台上的@@ 规则生成器-对于请求选项,选择 “源自所在国家”。
-
API — GeoMatchStatement
示例
您可以使用地理匹配声明来管理来自特定国家或地区的请求。例如,如果您想阻止来自某些国家/地区的请求,但仍允许来自这些国家/地区的一组特定 IP 地址的请求,则可以创建一个规则,将操作设置为,Block并使用以下嵌套语句,以伪代码显示:
-
AND statement
-
地理匹配声明,列出您要屏蔽的国家
-
NOT statement
-
IP set 语句,用于指定您要允许通过的 IP 地址
-
-
或者,如果您想屏蔽某些国家/地区的某些区域,但仍允许来自这些国家/地区的其他地区的请求,则可以先定义地理匹配规则,将操作设置为Count。然后,定义与添加的地理匹配标签的标签匹配规则,并根据需要处理请求。
以下伪代码描述了这种方法的示例:
-
Geo match 语句列出了您想要封锁的区域但操作设置为 Count 的国家/地区。无论匹配状态如何,这都会标记每个网络请求,还会为您提供感兴趣的国家/地区的计数指标。
-
AND带有屏蔽操作的声明-
标签匹配声明,用于指定要屏蔽的国家/地区的标签
-
NOTstatement-
标签匹配声明,用于指定您希望允许通过的国家/地区的标签
-
-
以下 JSON 列表显示了前面伪代码中描述的两条规则的实现。这些规定禁止来自美国的所有流量,但来自俄勒冈州和华盛顿州的流量除外。地理匹配声明在其检查的所有请求中添加了国家和地区标签。标签匹配规则在地理匹配规则之后运行,因此它可以与地理匹配规则刚刚添加的国家和地区标签进行匹配。地理匹配语句使用转发的 IP 地址,因此标签匹配还指定了转发的 IP 标签。
{ "Name": "geoMatchForLabels", "Priority": 10, "Statement": { "GeoMatchStatement": { "CountryCodes": [ "US" ], "ForwardedIPConfig": { "HeaderName": "X-Forwarded-For", "FallbackBehavior": "MATCH" } } }, "Action": { "Count": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "geoMatchForLabels" } }, { "Name": "blockUSButNotOROrWA", "Priority": 11, "Statement": { "AndStatement": { "Statements": [ { "LabelMatchStatement": { "Scope": "LABEL", "Key": "awswaf:forwardedip:geo:country:US" } }, { "NotStatement": { "Statement": { "OrStatement": { "Statements": [ { "LabelMatchStatement": { "Scope": "LABEL", "Key": "awswaf:forwardedip:geo:region:US-OR" } }, { "LabelMatchStatement": { "Scope": "LABEL", "Key": "awswaf:forwardedip:geo:region:US-WA" } } ] } } } } ] } }, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "blockUSButNotOROrWA" } }
再举一个例子,您可以将地理匹配与基于费率的规则相结合,为特定国家或地区的用户设置资源优先级。您可以为每个用于区分用户的地理匹配或标签匹配语句创建不同的基于费率的声明。为首选国家或地区的用户设置更高的速率限制,为其他用户设置较低的速率限制。
以下 JSON 列表显示了地理匹配规则,其次是限制来自美国的流量速率的基于速率的规则。这些规定允许来自俄勒冈州的流量比来自该国其他任何地方的流量更高的速度进入。
{ "Name": "geoMatchForLabels", "Priority": 190, "Statement": { "GeoMatchStatement": { "CountryCodes": [ "US" ] } }, "Action": { "Count": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "geoMatchForLabels" } }, { "Name": "rateLimitOregon", "Priority": 195, "Statement": { "RateBasedStatement": { "Limit": 3000, "AggregateKeyType": "IP", "ScopeDownStatement": { "LabelMatchStatement": { "Scope": "LABEL", "Key": "awswaf:clientip:geo:region:US-OR" } } } }, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "rateLimitOregon" } }, { "Name": "rateLimitUSNotOR", "Priority": 200, "Statement": { "RateBasedStatement": { "Limit": 100, "AggregateKeyType": "IP", "ScopeDownStatement": { "AndStatement": { "Statements": [ { "LabelMatchStatement": { "Scope": "LABEL", "Key": "awswaf:clientip:geo:country:US" } }, { "NotStatement": { "Statement": { "LabelMatchStatement": { "Scope": "LABEL", "Key": "awswaf:clientip:geo:region:US-OR" } } } } ] } } } }, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "rateLimitUSNotOR" } }