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

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

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

不同步缓解模式可保护您的应用程序免受因不同步而HTTP出现的问题。负载均衡器根据每个请求的威胁级别对请求进行分类,允许安全请求,然后根据您指定的缓解模式来减轻风险。异步缓解模式包括“监控”、“防御”和“最严格”。默认设置为防御模式,可在保持应用程序可用性的同时,提供持久的HTTP不同步缓解措施。您可以切换到最严格的模式,以确保您的应用程序仅接收符合 RFC 7230 的请求。

http_desync_guardian 库会分析请求以防止不同步攻击。HTTP HTTP有关更多信息,请参阅 github 上的 HTTPDesync Guardian

提示

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

分类

下面列出了这些分类。

  • 合规 — 请求符合 RFC 7230 标准,不构成任何已知的安全威胁。

  • 可接受-请求不符合 RFC 7230,但不构成已知的安全威胁。

  • 模棱两可 — Request 不符合 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请求有一个内容长度标头。

  • GET或HEAD请求有一个传输编码标头。

严重
  • 该请求URI包含空字符或回车符。

  • Content-Length 标头包含一个无法解析或不是有效数字的值。

  • 标头包含 Null 字符或回车符。

  • Transfer-Encoding 标头包含错误的值。

  • 请求方法格式不正确。

  • 请求版本格式不正确。

  • 存在多个具有不同值的 Content-Length 标头。

  • 存在多个 Transfer-Encoding: chunked 标头。

如果请求不符合 RFC 7230,则负载均衡器会增加该DesyncMitigationMode_NonCompliant_Request_Count指标。有关更多信息,请参阅 经典负载均衡器指标

模式

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

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

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

修改异步缓解模式

使用控制台更新异步缓解模式
  1. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的负载均衡下,选择负载均衡器

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

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

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

  6. 选择 Save changes(保存更改)

要更新不同步缓解模式,请使用 AWS CLI

使用elb.http.desyncmitigationmode属性设置为monitordefensive、或的modify-load-balancer-attributes命令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" } ] }