为经典负载均衡器配置异步缓解模式 - Elastic Load Balancing
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

为经典负载均衡器配置异步缓解模式

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

http_desync_guardian 库会分析 HTTP 请求,防止发生 HTTP 异步攻击。有关更多信息,请参阅 github 上的 HTTP 异步监护

提示

此配置仅适用于经典负载均衡器。有关适用于 Application Load Balancer 的信息,请参阅取消 Application Load Balancers 的同步缓解模式

分类

下面列出了这些分类。

  • 合规 – 请求符合 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 指标。有关更多信息,请参阅经典负载均衡器指标

Modes

下表描述 Classic Load Balancers 如何根据模式和分类来处理请求。

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

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

修改异步缓解模式

New EC2 experience
使用控制台更新异步缓解模式
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的 Load Balancing(负载均衡)下,选择 Load Balancers(负载均衡器)。

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

  4. 属性选项卡上,选择编辑

  5. 编辑负载均衡器属性页面的流量配置下,选择防御 – 推荐最严格监控

  6. 选择保存更改

Old EC2 experience
使用控制台更新异步缓解模式
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的 Load Balancing(负载均衡)下,选择 Load Balancers(负载均衡器)。

  3. 选择负载均衡器。

  4. 描述选项卡上,选择配置异步缓解模式

  5. 配置异步缓解模式页上,选择监控防御最严格

  6. 选择 Save

使用 Amazon CLI 更新异步缓解模式

使用 modify-load-balancer-attributes 命令,并将 elb.http.desyncmitigationmode 属性设置为 monitordefensivestrictest

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