轉送的 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 位址以過高的速率傳送要求。您可以單獨使用 IP 位址彙總,也可以與其他彙總金鑰結合使用。

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

注意

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

後援行為

當您使用轉寄的 IP 位址時,如果要求在指定位置沒有有效的 IP 位址,則指定要指派給 Web 要求的符合狀態: AWS WAF

  • 匹配-將 Web 請求視為規則語句匹配。 AWS WAF 將規則動作套用至請求。

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

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

機器人控制受管規則群組會使用來自的 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 use 10.1.1.1

  • 對於 IP 集匹配,您可以指出是否匹配標題中的第一個,最後一個還是任何地址。如果您指定任何位址,則會 AWS WAF 檢查標頭中的所有位址是否有相符項目,最多可檢查 10 個位址。如果標頭包含 10 個以上的位址,則 AWS WAF 會檢查最後 10 個位址。

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

  • 如果標頭內的 IP 位址格式錯誤或無效,請根據您在轉送的 IP 組態中 AWS WAF 指定的後援行為,將 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" } } } }