本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
地理比對規則陳述式
本節說明什麼是地理匹配語句以及它是如何工作的。
使用地理位置或地理位置比對陳述式,根據來源國家和地區來管理 Web 請求。地理匹配聲明會在 Web 請求中添加標籤,以指示原產國和原產地區。無論陳述式條件是否與要求相符,它都會新增這些標籤。geo match 陳述式也會針對要求的原始國家/地區執行比對。
如何使用地理匹配語句
您可以使用 geo match 陳述式進行國家或地區比對,如下所示:
-
國家/地區 — 您可以單獨使用地理位置比對規則,僅根據其來源國來管理請求。規則陳述式會與國家/地區代碼相符。您也可以使用符合原產國標籤的標籤比對規則來遵循地理位置比對規則。
-
區域 — 使用地理比對規則後跟標籤比對規則,根據其來源地區管理請求。您無法單獨使用地理比對規則來比對地區代碼。
若要取得有關使用標示相符規則的資訊,請參閱標籤比對規則陳述式和在網頁要求上使用標籤 AWS WAF。
地理匹配語句的工作原理
隨著地理匹配聲明, AWS WAF 管理每個 Web 請求,如下所示:
-
決定要求的國家和地區代碼 — AWS WAF 根據要求的 IP 位址判斷要求的國家和地區。默認情況下, AWS WAF 使用 Web 請求來源的 IP 地址。你可以指導 AWS WAF 使用來自備用要求標頭的 IP 位址
X-Forwarded-For
,例如在規則陳述式設定中啟用轉送的 IP 組態。AWS WAF 確定使用 MaxMind GeoIP 數據庫請求的位置。MaxMind 雖然準確性因國家/地區和 IP 類型等因素而異,但在國家/地區層面報告其數據的準確性非常高。如需相關資訊 MaxMind,請參閱 MaxMind IP 地理位置
。如果您認為任何 GeoIP 數據不正確,可以通過正確的地理IP2數據向 Maxmind 提交更MaxMind 正 請求。 AWS WAF 使用國際標準化組織 (ISO) 3166 標準中的英文字母 2 國家和地區代碼。您可以在以下位置找到代碼:
在ISO網站上,您可以在ISO網上瀏覽平台 (OBP)
搜尋國家代碼。 在維基百科上,國家/地區代碼列在 ISO3166-2
。 某個國家/地區的區域代碼會列在URL
https://en.wikipedia.org/wiki/ISO_3166-2:
。例如,對於美國的區域是在 ISO3166-2:美國,而對於烏克蘭,他們是在 3166-2:<ISO country code>
UA。ISO
-
確定要新增到要求的國家/地區標籤 — 這些標籤會指出 geo match 陳述式使用原始 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 位址, AWS WAF
XX
在標籤中使用,代替值。例如,以下標籤適用於國家/地區代碼無法使用的用戶端 IP:awswaf:clientip:geo:country:XX
以下標籤適用於轉送的 IP,其國家是美國,但其區域代碼不可用:awswaf:forwardedip:geo:region:US-XX
。 -
根據規則評估請求的國家/地區代碼
geo match 陳述式會將國家/地區標籤新增至檢查的所有請求,無論是否找到相符項目。
注意
AWS WAF 在規則的 Web 要求評估結束時新增任何標籤。因此,您針對 geo match 陳述式中標籤使用的任何標籤比對,都必須在與包含 geo match 陳述式的規則不同的規則中定義。
如果您只想檢查區域值,則可以使用編寫地理匹配規則 Count 動作和單一國家/地區代碼比對,後面接著區域標籤的標籤比對規則。您需要提供國家/地區代碼,以便進行評估,即使是這種方法也是如此。您可以指定不太可能成為網站流量來源的國家/地區,以減少記錄和計算指標。
CloudFront 分佈和地 CloudFront 理限制功能
對於 CloudFront 發行版,如果您使用 CloudFront 地理位置限制功能,請注意,該功能不會將封鎖的要求轉寄至 AWS WAF。 它確實將允許的請求轉發到 AWS WAF。 如果您要根據地理區域加上您可以在中指定的其他條件來封鎖請求 AWS WAF,使用 AWS WAF 地理匹配語句,並且不要使用 CloudFront 地理限制功能。
規則陳述式特性
嵌套-您可以嵌套此語句類型。
WCUs— 1WCU.
設定 — 此陳述式使用下列設定:
-
國家/地區代碼 — 要比較地理位置比對的國家/地區代碼陣列。這些國家代碼必須是來自 ISO 3166 國際標準的英文字母 2 國家/地區ISO代碼的兩個字元,例如,。
["US","CN"]
-
(選擇性) 轉送 IP 設定 — 依預設, AWS WAF 使用 Web 請求來源中的 IP 位址來判斷來源國家。或者,您可以將規則配置為在HTTP標題中使用轉發的 IP,
X-Forwarded-For
而不是。 AWS WAF 使用標頭中的第一個 IP 位址。透過此設定,您也可以指定後援行為,以套用至標頭中具有格式錯誤 IP 位址的 Web 要求。後援行為會設定要求的相符結果,以符合或不相符。如需詳細資訊,請參閱使用轉寄的 IP 位址。
在哪裡可以找到這個規則聲明
-
主控台上的規則產生器 — 對於「請求」選項,請選擇來自中的國家/地區。
-
API – GeoMatchStatement
範例
您可以使用 geo match 聲明來管理來自特定國家或地區的請求。例如,如果您想要封鎖來自特定國家/地區的要求,但仍允許來自這些國家/地區的特定 IP 位址集的要求,您可以建立規則,並將動作設為 Block 以及以下嵌套語句,以偽代碼顯示:
-
AND 陳述式
-
列出您要封鎖的國家/地區的地理比對陳述式
-
NOT 陳述式
-
IP 集合陳述式,指定您要允許通過的 IP 地址
-
-
或者,如果您想封鎖某些國家/地區的某些地區,但仍然允許來自這些國家/地區的其他地區的要求,您可以先定義地理比對規則,並將動作設為 Count。 然後,定義與新增的地理匹配標籤匹配標籤匹配的標籤匹配規則,並根據需要處理請求。
下列虛擬程式碼說明此方法的範例:
-
Geo match 陳述式會列出您要封鎖地區的國家/地區,但動作設定為 [計數]。這會標記每個 Web 請求,而不論匹配狀態如何,它還為您提供了計算感興趣國家/地區的指標。
-
AND
含封鎖動作的陳述式-
Label match 語句,用於指定要阻止的國家/地區的標籤
-
NOT
陳述式-
Label match 語句,用於指定您要允許通過的國家/地區中的地區的標籤
-
-
下列JSON清單顯示先前虛擬程式碼中描述的兩個規則的實作。這些規則會封鎖來自美國的所有流量,但來自俄勒岡州和華盛頓的流量除外。geo match 陳述式會在檢查的所有請求中新增國家和地區標籤。標籤比對規則會在地理比對規則之後執行,因此它可以與地理比對規則剛新增的國家和地區標籤進行比對。地理比對陳述式會使用轉送的 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" } }