本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
地理匹配规则语句
使用地理或地理匹配语句根据来源国家和地区管理网络请求。地理匹配规则会为网络请求添加标明来源国和原产地的标签。地理匹配规则还会根据请求的原产国进行匹配。
如何使用地理匹配语句
您可以使用地理匹配语句进行国家或地区匹配,如下所示:
-
国家-您可以单独使用地理匹配规则来管理仅基于其来源国的请求。规则语句与国家/地区代码相匹配。您也可以使用与原产国标签相匹配的标签匹配规则来遵循地理匹配规则。
-
区域-使用地理匹配规则和标签匹配规则,根据请求的来源区域管理请求。您不能单独使用地理匹配规则来匹配区域代码。
有关使用标签匹配规则的信息,请参阅标签匹配规则声明和Amazon WAF网络请求上的标签。
地理匹配语句的工作原理
使用地理匹配语句,按如下方式Amazon WAF管理每个 Web 请求:
-
确定请求的国家和地区代码 — 根据请求的 IP 地址Amazon WAF确定请求的国家和地区。默认情况下,Amazon WAF使用 Web 请求来源的 IP 地址。您可以指示使用备Amazon WAF用请求标头中的 IP 地址
X-Forwarded-For
,例如在规则语句设置中启用转发的 IP 配置。Amazon WAF使用 MaxMind GeoIP 数据库确定请求的位置。MaxMind 尽管准确性因国家和知识产权类型等因素而异,但它们在国家一级的数据的准确性非常高。有关的更多信息 MaxMind,请参阅 MaxMind IP 地理定位
。如果您认为任何 GeoIP 数据不正确,可以通过 “更正 GeoIP2 数据” 向 Maxmind 提交更MaxMind 正 请求。 Amazon WAF使用国际标准化组织 (ISO) 3166 标准中的 alpha-2 国家和地区代码。你可以在以下位置找到代码:
在 ISO 网站上,您可以在 ISO 在线浏览平台 (OBP)
上搜索国家/地区代码。 在维基百科上,国家/地区代码按照 ISO 316
6-2 列出。 URL 中列出了某个国家/地区的地区代码
https://en.wikipedia.org/wiki/ISO_3166-2:
。例如,美国的地区为ISO 3166-2:US,乌克兰的地区为 ISO 3166-2:U<ISO country code>
A。
-
确定要添加到请求中的国家/地区标签和地区标签-标签表示地理匹配语句是使用源 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操作和单个国家/地区代码匹配的地理匹配规则,然后是区域标签的标签匹配规则。即使采用这种方法,您也需要提供国家/地区代码以供地理匹配规则进行评估。您可以通过指定一个不太可能成为您网站流量来源的国家/地区来减少日志记录和统计指标。
CloudFront 分布和 CloudFront 地理限制功能
对于 CloudFront 分发,如果您使用 CloudFront 地理限制功能,请注意该功能不会将被屏蔽的请求转发到Amazon WAF。它确实会将允许的请求转发到Amazon WAF。如果您想根据地理位置以及可以在中指定的其他条件来阻止请求Amazon WAF,请使用Amazon WAF地理匹配语句,不要使用 CloudFront 地理限制功能。
地理匹配声明特征
嵌套-您可以嵌套此语句类型。
WCU — 1 WCU。
设置-此语句使用以下设置:
-
国家/地区代码-用于比较地理匹配的一系列国家/地区代码。例如,这些代码必须是来自 ISO 3166 国际标准的 alpha-2 国家 ISO 代码中的双字符国家代码。
["US","CN"]
-
(可选)转发 IP 配置-默认情况下,Amazon WAF使用 Web 请求来源中的 IP 地址来确定来源国。或者,您可以将规则配置为在 HTTP 标头中使用转发的 IP,如下所
X-Forwarded-For
示。 Amazon WAF使用标头中的第一个 IP 地址。使用此配置,您还可以指定一种回退行为,以应用于标头中包含格式错误的 IP 地址的 Web 请求。回退行为将请求的匹配结果设置为匹配或不匹配。有关更多信息,请参阅转发的 IP 地址:
在哪里可以找到此规则声明
-
控制台上的@@ 规则生成器-在 “请求” 选项中,选择 “来源于中的国家/地区”。
-
API — GeoMatchStatement
示例
您可以使用地理匹配语句来管理来自特定国家或地区的请求。例如,如果您想阻止来自某些国家/地区的请求,但仍允许来自这些国家/地区的一组特定 IP 地址的请求,则可以创建一个规则,将操作设置为,Block并使用以下嵌套语句(以伪代码显示):
-
AND statement
-
地理匹配声明,列出您要屏蔽的国家/地区
-
NOT statement
-
IP set 语句,用于指定要允许通过的 IP 地址
-
-
或者,如果您想屏蔽某些国家/地区的某些区域,但仍允许来自这些国家/地区其他地区的请求,则可以先定义地理匹配规则,并将操作设置为Count。然后,定义与添加的地理匹配标签匹配的标签匹配规则,并根据需要处理请求。
以下伪代码描述了这种方法的示例:
-
Geo match 语句列出了您想要屏蔽但操作设置为 Count 的国家/地区。无论匹配状态如何,这都会对每个网络请求进行标记,还可以为您提供感兴趣的国家/地区的计数指标。
-
AND
带有 “屏蔽” 操作的声明-
Label match 语句,用于指定要屏蔽的国家/地区的标签
-
NOT
statement-
Label match 语句,用于指定您想要允许通过的国家/地区的标签
-
-
以下 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" } }