本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
轉送的 IP 位址
本節適用於使用 Web 要求之 IP 位址的規則陳述式。依預設, AWS WAF 會使用來自 Web 請求來源的 IP 位址。但是,如果 Web 請求通過一個或多個代理或負載平衡器,則 Web 請求源將包含最後一個代理的地址,而不是客戶端的原始地址。在這種情況下,原始客戶端地址通常在另一個 HTTP 標頭轉發。這個標頭通常是X-Forwarded-For
(XFF),但它可以是不同的。
使用 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 use10.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" } } } }