

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

# 為 Classic Load Balancer 設定非同步緩和模式
<a name="config-desync-mitigation-mode"></a>

非同步緩和模式可保護您的應用程式免於因 HTTP 非同步而發生問題。負載平衡器會根據其威脅層級對每個要求進行分類，允許安全要求，然後根據您指定的緩和模式來降低風險。非同步緩和模式分為監控、防禦性和最嚴格。預設值為防禦模式，可針對 HTTP 非同步提供持久的緩和措施，同時維持應用程式的可用性。您可以切換至最嚴格模式，以確保應用程式只接收符合 RFC 7230 的請求。

http\$1desync\$1guardian 程式庫會分析 HTTP 要求，以防止 HTTP 非同步攻擊。如需詳細資訊，請參閱 github 上的 [HTTP Desync Guardian](https://github.com/aws/http-desync-guardian)。

**Topics**
+ [分類](#desync-mitigation-classification)
+ [模式](#desync-mitigation-modes)
+ [修改非同步緩和模式](#update-desync-mitigation-mode)

**提示**  
此組態僅適用於 Classic Load Balancer。如需適用於 Application Load Balancer 的資訊，請參閱 [Application Load Balancer 的非同步緩和模式](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/application-load-balancers.html#desync-mitigation-mode)。

## 分類
<a name="desync-mitigation-classification"></a>

分類如下。
+ 合規 — 要求符合 RFC 7230，不會造成任何已知的安全威脅。
+ 可接受 — 要求不符合 RFC 7230，但不會造成已知的安全威脅。
+ 不明確 — 要求不符合 RFC 7230，但造成風險，因為各種 Web 伺服器和代理的處理方式不同。
+ 嚴重 — 要求造成高安全性風險。負載平衡器會封鎖要求，傳送提供 400 回應至用戶端，並關閉用戶端連線。

下列清單說明每個分類的問題。

**可接受**
+ 標頭包含非 ASCII 或控制字元。
+ 要求版本包含錯誤的值。
+ GET 或 HEAD 要求的 Content-Length 標頭值為 0。
+ 要求 URI 包含非 URL 編碼的空格。

**不明確**
+ 要求 URI 包含控制字元。
+ 要求同時包含 Transfer-Encoding 標頭和 Content-Length 標頭。
+ 多個 Content-Length 標頭的值相同。
+ 標頭空白或標頭列僅含空格。
+ 可使用通用文字正規化技術將標頭正規化為 Transfer-Encoding 或 Content-Length。
+ GET 或 HEAD 要求有 Content-Length 標頭。
+ GET 或 HEAD 要求有 Transfer-Encoding 標頭。

**嚴重**
+ 要求 URI 包含空值字元或歸位字元。
+ Content-Length 標頭包含無法剖析或非有效數字的值。
+ 標頭包含空值字元或歸位字元。
+ Transfer-Encoding 標頭包含錯誤的值。
+ 要求方法格式不正確。
+ 要求版本格式不正確。
+ 多個 Content-Length 標頭的值不同。
+ 有多個 Transfer-Encoding：區塊標頭。

如果要求不符合 RFC 7230，負載平衡器會增加 `DesyncMitigationMode_NonCompliant_Request_Count` 指標。如需詳細資訊，請參閱[Classic Load Balancer 指標](elb-cloudwatch-metrics.md#loadbalancing-metrics-clb)。

## 模式
<a name="desync-mitigation-modes"></a>

下表說明 Classic Load Balancers 如何根據模式和分類處理要求。


| 分類 | 監控模式 | 防禦性模式 | 最嚴格模式 | 
| --- | --- | --- | --- | 
| 合規 | 允許 | 已允許 | 允許 | 
| 可接受 | 允許 | 允許 | 封鎖 | 
| 不明確 | 允許 | 允許¹ | 封鎖 | 
| 嚴重 | 允許 | 封鎖 | 封鎖 | 

¹ 路由傳送要求，但關閉用戶端和目標連接。

## 修改非同步緩和模式
<a name="update-desync-mitigation-mode"></a>

**使用主控台更新非同步緩和模式**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格的 **Load Balancing (負載平衡器)**，選擇 **Load Balancer (負載平衡器)**。

1. 選擇負載平衡器的名稱來開啟其詳細資訊頁面。

1. 在**屬性**索引標籤中，選擇**編輯**。

1. 在**編輯負載平衡器屬性**頁面的**流量組態**下方，選擇**防禦性 - 建議**、**最嚴格**或**監控**。

1. 選擇**儲存變更**。

**使用 更新非同步緩解模式 AWS CLI**  
使用 [modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elb/modify-load-balancer-attributes.html) 命令，同時將 `elb.http.desyncmitigationmode` 屬性設為 `monitor`、`defensive` 或 `strictest`。

```
aws elb modify-load-balancer-attributes --load-balancer-name my-load-balancer --load-balancer-attributes file://attribute.json
```

`attribute.json` 內容如下。

```
{
    "AdditionalAttributes": [
        {
            "Key": "elb.http.desyncmitigationmode",
            "Value": "strictest"
        }
    ]
}
```