使用轉寄的 IP 位址 AWS WAF - AWS WAFAWS Firewall Manager、 和 AWS Shield Advanced

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

使用轉寄的 IP 位址 AWS WAF

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

使用 IP 位址的規則陳述式

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

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

  • 地理比對-使用 IP 地址確定原產國家和地區,並與國家/地區列表匹配原產國。

  • 使用速率型規則陳述式-可以透過其 IP 位址彙總要求,以確保沒有個別 IP 位址以過高的速率傳送要求。您可以單獨使用 IP 位址彙總,也可以與其他彙總金鑰結合使用。

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

注意

如果您指定的標頭不存在於請求中, AWS WAF 根本不會將規則套用至 Web 要求。

後援行為

當您使用轉送的 IP 位址時,您會指出符合狀態 AWS WAF 如果請求在指定位置沒有有效的 IP 地址,則分配給 Web 請求:

  • MATCH-將 Web 要求視為符合規則陳述式。 AWS WAF 將規則動作套用至請求。

  • 否 MATCH-將 Web 請求視為與規則語句不匹配。

中使用的 IP 位址 AWS WAF 機器人控制

機器人控制受管規則群組會使用 IP 位址來驗證機器人 AWS WAF。 如果您使用 Bot Control,且已驗證透過 Proxy 或負載平衡器路由的機器人,則需要使用自訂規則明確允許這些機器人。例如,您可以設定自訂 IP 集比對規則,該規則使用轉寄的 IP 位址來偵測並允許已驗證的機器人。您可以透過多種方式使用此規則來自訂機器人管理。如需詳細資訊和範例,請參閱 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.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 時,才會符合下列 geo match 陳述式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" } } } }

下列以速率為基礎的規則會根據標頭中的第一個 IP 彙總要求。X-Forwarded-For此規則只會計算符合巢狀 geo match 陳述式的要求,而且只會封鎖符合 geo match 陳述式的要求。巢狀地理配對陳述式也會使用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" } } } }