地理比對規則陳述式 - AWS WAF、 AWS Firewall Manager、和 AWS Shield Advanced

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

地理比對規則陳述式

使用地理位置或地理位置比對陳述式,根據來源國家和地區來管理 Web 請求。地理匹配聲明會在 Web 請求中添加標籤,以指示原產國和原產地區。無論陳述式條件是否與要求相符,它都會新增這些標籤。geo match 陳述式也會針對要求的原始國家/地區執行比對。

如何使用地理匹配語句

您可以使用 geo match 陳述式進行國家或地區比對,如下所示:

  • 國家/地區 — 您可以單獨使用地理位置比對規則,僅根據其來源國來管理請求。規則陳述式會與國家/地區代碼相符。您也可以使用符合原產國標籤的標籤比對規則來遵循地理位置比對規則。

  • 區域 — 使用地理比對規則後跟標籤比對規則,根據其來源地區管理請求。您無法單獨使用地理比對規則來比對地區代碼。

若要取得有關使用標示相符規則的資訊,請參閱標籤比對規則陳述式AWS WAF 標籤, 上, 网, 請求

地理匹配語句的工作原理

使用 geo match 語句, AWS WAF 管理每個網絡請求,如下所示:

  1. 判斷請求的國家和地區代碼 — 根據要求的 IP 位址 AWS WAF 決定要求的國家和地區。依預設, AWS WAF 會使用 Web 要求來源的 IP 位址。您可以指示 AWS WAF 使用替代要求標頭的 IP 位址,例如X-Forwarded-For,在規則陳述式設定中啟用轉送的 IP 組態。

    AWS WAF 確定使用 MaxMind GeoIP 數據庫請求的位置。MaxMind 雖然準確性因國家/地區和 IP 類型等因素而異,但在國家/地區層面報告其數據的準確性非常高。如需有關的詳細資訊 MaxMind,請參閱 MaxMind IP 地理位置。如果您認為任何 GeoIP 數據不正確,可以通過「正確的 GeoIP2 數據」向 Maxmind 提交更MaxMind 正請求。

    AWS WAF 使用國際標準化組織 (ISO) 3166 標準中的英文字母 2 國家和地區代碼。您可以在以下位置找到代碼:

  2. 確定要新增到要求的國家/地區標籤 — 這些標籤會指出 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 位址,請XX在標籤中 AWS WAF 使用,取代值。例如,以下標籤適用於國家/地區代碼無法使用的用戶端 IP:awswaf:clientip:geo:country:XX以下標籤適用於轉送的 IP,其國家是美國,但其區域代碼不可用:awswaf:forwardedip:geo:region:US-XX

  3. 根據規則評估請求的國家/地區代碼

geo match 陳述式會將國家/地區標籤新增至檢查的所有請求,無論是否找到相符項目。

注意

AWS WAF 在規則的 Web 要求評估結束時新增任何標籤。因此,您針對 geo match 陳述式中標籤使用的任何標籤比對,都必須在與包含 geo match 陳述式的規則不同的規則中定義。

如果您只想檢查地區值,則可以使用Count動作和單一國家/地區代碼比對來撰寫地理比對規則,然後再加上區域標籤的標籤比對規則。您需要提供國家/地區代碼,以便進行評估,即使是這種方法也是如此。您可以指定不太可能成為網站流量來源的國家/地區,以減少記錄和計算指標。

CloudFront 分佈和地 CloudFront 理限制功能

對於 CloudFront 分發,如果您使用 CloudFront 地理限制功能,請注意該功能不會將被阻止的請求轉發給 AWS WAF。它會將允許的要求轉寄給 AWS WAF。如果您想要根據地理位置加上您可以在中指定的其他條件封鎖要求 AWS WAF,請使用 AWS WAF geo match 陳述式,而不要使用地理區域限制功能。 CloudFront

地理匹配語句特徵

嵌套-您可以嵌套此語句類型。

WCU — 1 WCU.

設定 — 此陳述式使用下列設定:

  • 國家/地區代碼 — 要比較地理位置比對的國家/地區代碼陣列。這些代碼必須是兩個字元的國家/地區代碼,來自 ISO 3166 國際標準的 2 個國家/地區代碼,例如,。["US","CN"]

  • (選擇性) 轉送的 IP 組態 — 依預設, AWS WAF 會使用 Web 請求來源中的 IP 位址來判斷來源國家/地區。或者,您可以將規則配置為在 HTTP 標頭中使用轉發的 IPX-Forwarded-For,例如。 AWS WAF 使用標頭中的第一個 IP 位址。透過此設定,您也可以指定後援行為,以套用至標頭中具有格式錯誤 IP 位址的 Web 要求。後援行為會設定要求的相符結果,以符合或不相符。如需詳細資訊,請參閱 轉送的 IP 位址

在哪裡可以找到這個規則聲明
  • 主控台上的規則產生器 — 對於「請求」選項,請選擇來自中的國家/地區

  • APIGeoMatchStatement

範例

您可以使用 geo match 聲明來管理來自特定國家或地區的請求。例如,如果您想要封鎖來自特定國家/地區的要求,但仍允許來自這些國家/地區的特定 IP 位址集的要求,您可以建立規則,將動作設為,Block並以虛擬程式碼顯示下列巢狀陳述式:

  • AND 陳述式

    • 列出您要封鎖的國家/地區的地理比對陳述式

    • NOT 陳述式

      • IP 集合陳述式,指定您要允許通過的 IP 地址

或者,如果您想要封鎖某些國家/地區的某些地區,但仍允許來自這些國家/地區其他地區的要求,您可以先定義地理比對規則,並將動作設為Count。然後,定義與新增的地理匹配標籤匹配標籤匹配的標籤匹配規則,並根據需要處理請求。

下列虛擬程式碼說明此方法的範例:

  1. Geo match 陳述式會列出您要封鎖地區的國家/地區,但動作設定為 [計數]。這會標記每個 Web 請求,而不論匹配狀態如何,它還為您提供了計算感興趣國家/地區的指標。

  2. 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" } }