轉發 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。如果您使用機器人控制,並且已驗證通過代理或負載均衡器路由的機器人,則需要使用自定義規則顯式允許它們。例如,您可以配置自定義 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、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標頭。該規則只會計算符合嵌套 geo 匹配陳述式的請求。嵌套的地理匹配語句還使用X-Forwarded-For標頭來確定 IP 地址是否表示US。如果存在,或者如果標頭存在但格式錯誤,則 geo 匹配語句將返回匹配項。

{ "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" } } } }