

**推出 的新主控台體驗 AWS WAF**

您現在可以使用更新後的體驗，在主控台的任何位置存取 AWS WAF 功能。如需詳細資訊，請參閱[使用 主控台](https://docs.aws.amazon.com/waf/latest/developerguide/working-with-console.html)。

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

# 在 中使用轉送的 IP 地址 AWS WAF
<a name="waf-rule-statement-forwarded-ip-address"></a>

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

**使用 IP 地址的規則陳述式**  
使用 IP 地址的規則陳述式如下：
+ [IP 集合比對](waf-rule-statement-type-ipset-match.md) - 檢查 IP 地址是否與 IP 集中定義的地址相符。
+ [地理比對](waf-rule-statement-type-geo-match.md) - 使用 IP 地址來判斷原始國家/地區和區域，並將原始國家/地區與國家/地區清單比對。
+ [ASN 比對](waf-rule-statement-type-asn-match.md) - 使用 IP 地址來判斷自治系統編號 (ASN)，並將 ASN 與 ASNs清單比對。
+ [使用以速率為基礎的規則陳述式](waf-rule-statement-type-rate-based.md) - 可以依其 IP 地址彙總請求，以確保個別 IP 地址不會以過高的速率傳送請求。您可以單獨使用 IP 地址彙總，或與其他彙總金鑰結合使用。

您可以指示 從 `X-Forwarded-For`標頭或另一個 HTTP 標頭使用任何這些規則陳述式的 AWS WAF 轉送 IP 地址，而不是使用 Web 請求的原始伺服器。如需如何提供規格的詳細資訊，請參閱個別規則陳述式類型的指引。

**注意**  
如果缺少標頭， 會 AWS WAF 評估使用該標頭的任何陳述式為「不相符」。如果您使用 NOT 陳述式搭配 "No match" 結果， 會將評估 AWS WAF 轉換為 "Match"。缺少標頭不會觸發備用行為 - 只有無效的標頭值才會觸發。

**備用行為**  
當您使用轉送的 IP 地址時，如果請求在指定位置沒有有效的 IP 地址，您會指出 AWS WAF 要指派給 Web 請求的比對狀態：
+ **MATCH** - 將 Web 請求視為符合規則陳述式。 會將規則動作 AWS WAF 套用至請求。
+ **NO MATCH** - 將 Web 請求視為不符合規則陳述式。

**機器人 AWS WAF 控制中使用的 IP 地址**  
Bot Control 受管規則群組會使用來自 的 IP 地址來驗證機器人 AWS WAF。如果您使用 Bot Control，而且已驗證透過代理或負載平衡器路由的機器人，則需要使用自訂規則明確允許它們。例如，您可以設定自訂 IP 集比對規則，使用轉送的 IP 地址來偵測和允許已驗證的機器人。您可以使用 規則，以多種方式自訂機器人管理。如需詳細資訊和範例，請參閱 [AWS WAF 機器人控制](waf-bot-control.md)。

**使用轉送 IP 地址的一般考量**  
在使用轉送的 IP 地址之前，請注意下列一般注意事項：
+ 代理可以沿途修改標頭，代理可能會以不同的方式處理標頭。
+ 攻擊者可能會更改 標頭的內容，以嘗試繞過 AWS WAF 檢查。
+ 標頭內的 IP 地址可能格式錯誤或無效。
+ 您指定的標頭可能完全不存在於請求中。

**搭配 使用轉送 IP 地址的考量 AWS WAF**  
下列清單說明在 中使用轉送 IP 地址的要求和注意事項 AWS WAF：
+ 對於任何單一規則，您可以為轉送的 IP 地址指定一個標頭。標頭規格不區分大小寫。
+ 對於以速率為基礎的規則陳述式，任何巢狀範圍陳述式都不會繼承轉送的 IP 組態。為使用轉送 IP 地址的每個陳述式指定組態。
+ 對於地理比對、ASN 比對和以速率為基礎的規則， 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 原始國家/地區為 時才會相符`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`標頭中的第一個 IP 彙總請求。規則只會計算符合巢狀地理比對陳述式的請求，而且只會封鎖符合地理比對陳述式的請求。巢狀地理比對陳述式也會使用 `X-Forwarded-For`標頭來判斷 IP 地址是否指出 的原始國家/地區`US`。如果存在，或者如果標頭存在但格式不正確，則地理比對陳述式會傳回相符項目。

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