本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为经典负载均衡器配置异步缓解模式
异步缓解模式可以保护您的应用程序不受由于 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
指标。有关更多信息,请参阅 经典负载均衡器指标。
模式
下表描述 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" } ] }