

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为经典负载均衡器配置异步缓解模式
<a name="config-desync-mitigation-mode"></a>

异步缓解模式可以保护您的应用程序不受由于 HTTP 异步造成的问题的影响。负载均衡器根据每个请求的威胁级别对请求进行分类，允许安全请求，然后根据您指定的缓解模式来减轻风险。异步缓解模式包括“监控”、“防御”和“最严格”。默认情况下采用“防御”模式，该模式可在保持应用程序可用性的同时，针对 HTTP 异步提供持久的缓解作用。您可以切换到最严格模式，确保应用程序只接收符合 RFC 7230 标准的请求。

http\$1desync\$1guardian 库会分析 HTTP 请求，防止发生 HTTP 异步攻击。有关更多信息，请参阅 github 上的 [HTTP 异步监护](https://github.com/aws/http-desync-guardian)。

**Topics**
+ [分类](#desync-mitigation-classification)
+ [模式](#desync-mitigation-modes)
+ [修改异步缓解模式](#update-desync-mitigation-mode)

**提示**  
此配置仅适用于经典负载均衡器。有关适用于应用程序负载均衡器的信息，请参阅 [Desync mitigation mode for Application Load Balancers](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 请求，有一个值为 0 的 Content-Length 标头。
+ 请求 URI 包含一个未采用 URL 编码的空格。

**不明确**
+ 请求 URI 包含控制字符。
+ 请求同时包含 Transfer-Encoding 标头和 Content-Length 标头。
+ 存在多个具有相同值的 Content-Length 标头。
+ 标头是空的，或者有一行中只包含空格。
+ 有一个标头可以使用常见的文本规范化技术标准化为 Transfer-Encoding 或 Content-Length。
+ GET 或 HEAD 请求有 Content-Length 标头。
+ GET 或 HEAD 请求有 Transfer-Encoding 标头。

**严重**
+ 请求 URI 包含 Null 字符或回车符。
+ Content-Length 标头包含一个无法解析或不是有效数字的值。
+ 标头包含 Null 字符或回车符。
+ Transfer-Encoding 标头包含错误的值。
+ 请求方法格式不正确。
+ 请求版本格式不正确。
+ 存在多个具有不同值的 Content-Length 标头。
+ 存在多个 Transfer-Encoding: chunked 标头。

如果请求不符合 RFC 7230 标准，负载均衡器将递增 `DesyncMitigationMode_NonCompliant_Request_Count` 指标。有关更多信息，请参阅 [经典负载均衡器指标](elb-cloudwatch-metrics.md#loadbalancing-metrics-clb)。

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

下表描述经典负载均衡器如何根据模式和分类来处理请求。


| 分类。 | 监控模式 | 防御模式 | 最严格模式 | 
| --- | --- | --- | --- | 
| 合规 | 已允许 | 已允许 | 已允许 | 
| 可接受 | 已允许 | 已允许 | 阻止 | 
| 不明确 | 已允许 | 已允许¹ | 阻止 | 
| 严重 | 已允许 | 阻止 | 阻止 | 

¹ 系统将路由请求，但关闭客户端和目标连接。

## 修改异步缓解模式
<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 Balancers**（负载均衡器）。

1. 选择负载均衡器的名称以打开其详细信息页面。

1. 在**属性**选项卡上，选择**编辑**。

1. 在**编辑负载均衡器属性**页面的**流量配置**下，选择**防御 – 推荐**、**最严格** 或 **监控**。

1. 选择**保存更改**。

**要更新不同步缓解模式，请使用 AWS CLI**  
使用`elb.http.desyncmitigationmode`属性设置为`monitor``defensive`、或的[modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elb/modify-load-balancer-attributes.html)命令`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"
        }
    ]
}
```