轉寄 IP 地址 - AWS WAF、AWS Firewall Manager 與 AWS Shield Advanced

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

轉寄 IP 地址

本節適用於使用 Web 要求之 IP 位址的規則陳述式。根據預設,AWS WAF會使用 Web 請求來源的 IP 位址。但是,如果 Web 請求通過一個或多個代理或負載平衡器,則 Web 請求源將包含最後一個代理的地址,而不是客戶端的原始地址。在這種情況下,原始用戶端位址通常會在另一個 HTTP 標頭中轉送。這個標頭通常是X-Forwarded-For(XFF),但它可以是不同的。

使用 IP 位址的規則陳述式

使用 IP 位址的規則陳述式如下:

  • IP 集合比對-檢查 IP 位址是否與 IP 組中定義的位址相符。

  • 地理比對-使用 IP 位址來判斷來源國家/地區,並將其與國家/地區清單進行比對。

  • 速率型-依其 IP 位址彙總要求,以確保沒有個別 IP 位址以過高的速率傳送要求。

您可以指示AWS WAF使用轉寄的 IP 位址來對這些規則陳述式中的任何一個,無論是從X-Forwarded-For標頭或其他 HTTP 標頭,而不是使用 Web 請求的來源。如需如何提供規格的詳細資訊,請參閱個別規則陳述式類型的指引。

用於的 IP 地址AWS WAF機器人控制

機器人控制管理的規則群組會使用來自AWS WAF。如果您使用 Bot Control,且已驗證透過 Proxy 或負載平衡器路由的機器人,則需要明確允許它們使用自訂規則。例如,您可以設定自訂 IP 集符合規則,該規則使用轉寄的 IP 位址來偵測並允許您驗證的 Bot。您可以使用此規則,以數種方式自訂 Bot Management。如需詳細資訊和範例,請參閱 AWS WAF機器人控制

使用轉送 IP 位址的一般考量

使用轉寄的 IP 位址之前,請注意下列一般警告:

  • 一個頭可以通過代理一路上修改,並且代理可能會以不同的方式處理頭。

  • 攻擊者可能會改變標頭的內容,以試圖繞過AWS WAF檢查。

  • 標頭內的 IP 位址格式不正確或無效。

  • 您指定的標頭可能根本不存在於請求中。

使用轉寄的 IP 位址搭配AWS WAF

下列清單說明使用轉寄 IP 位址的需求和警告AWS WAF:

  • 對於任何單一規則,您可以為轉寄的 IP 位址指定一個標頭。標頭規格不區分大小寫。

  • 對於以速率為基礎的規則陳述式,任何巢狀範圍陳述式都不會繼承轉送的 IP 組態。指定使用轉寄 IP 位址的每個陳述式的組態。

  • 對於地理比對和速率為基礎的規則,AWS WAF會使用標頭中的第一個位址。例如,如果標頭包含「10.1.1.1、127.0.0.0、10.10.10」,AWS WAF使用「10.1.1.1」。

  • 對於 IP 集比對,您指定是否要比對標頭中的第一個、最後一個或任何位址。如果您指定任何,AWS WAF會檢查標頭中的所有位址是否符合項目,最多可達 10 個位址。如果標頭包含 10 個以上的位址,請AWS WAF檢查過去 10 個。

  • 包含多個位址的標頭必須在位址之間使用逗號分隔符號。如果請求使用逗號以外的分隔符號,AWS WAF會考慮標頭中的 IP 位址格式不正確。

  • 如果標頭內的 IP 位址格式不正確或無效,AWS WAF會根據您在轉寄的 IP 組態中指定的後援行為,將 Web 要求指定為符合規則或不符合。

  • 如果您指定的標頭不存在於要求中,AWS WAF根本不會將規則應用於請求。這表示AWS WAF不會套用規則動作,也不會套用後援行為。

  • 使用轉寄 IP 標頭的 IP 位址的規則陳述式不會使用 Web 要求來源所報告的 IP 位址。

搭配使用轉送 IP 位址與AWS WAF

當您使用轉寄的 IP 位址時,請使用下列最佳實務:

  • 在啟用轉寄的 IP 設定之前,請仔細考慮要求標頭的所有可能狀態。您可能需要使用多個規則來取得您想要的行為。

  • 若要檢查多個轉寄的 IP 標頭,或檢查 Web 要求來源和轉寄的 IP 標頭,請針對每個 IP 位址來源使用一個規則。

  • 若要封鎖具有無效標頭的 Web 要求,請設定要封鎖的規則動作,並設定轉寄 IP 組態相符的後援行為。

轉送 IP 位址的 JSON 範例

下面的地理匹配語句僅匹配X-Forwarded-For標頭包含一個 IP,其原產國是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標頭。規則計數只會要求符合巢狀地理比對陳述式。巢狀的地理比對陳述式也會使用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" } } } }