本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为经典负载均衡器配置异步缓解模式
不同步缓解模式可保护您的应用程序免受因不同步而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 如何根据模式和分类来处理请求。
分类。 | 监控模式 | 防御模式 | 最严格模式 |
---|---|---|---|
合规 | 已允许 | 已允许 | 已允许 |
可接受 | 已允许 | 已允许 | 阻止 |
不明确 | 已允许 | 已允许¹ | 阻止 |
严重 | 已允许 | 阻止 | 阻止 |
¹ 系统将路由请求,但关闭客户端和目标连接。
修改异步缓解模式
使用控制台更新异步缓解模式
打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/
。 -
在导航窗格上的负载均衡下,选择负载均衡器。
-
选择负载均衡器的名称以打开其详细信息页面。
-
在属性选项卡上,选择编辑。
-
在编辑负载均衡器属性页面的流量配置下,选择防御 – 推荐、最严格 或 监控。
-
选择 Save changes(保存更改)。
要更新不同步缓解模式,请使用 AWS CLI
使用elb.http.desyncmitigationmode
属性设置为monitor
defensive
、或的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" } ] }