网络安全实入门| 剖析HTTP慢速攻击(Slowloris)与Nginx防护配置
一、HTTP慢速攻击的核心原理
HTTP慢速攻击(如Slowloris)是一种应用层拒绝服务攻击(DoS),其核心在于合法但缓慢地占用服务器资源,导致正常请求无法被处理。攻击者通过以下方式实现目标:
-
协议漏洞利用:利用HTTP协议对请求完整性的依赖,例如不发送完整的请求头(如缺少
\r\n\r\n
结尾标识),使服务器持续等待数据。 -
连接资源耗尽:通过建立大量半开连接(如设置
Keep-Alive
),占用服务器的并发连接上限(如Nginx的worker_connections
限制),导致新请求被阻塞。 -
低带宽消耗:每个连接仅以极低速率发送少量数据(如每10秒发送1字节),绕过传统流量型DDoS防御机制。
二、HTTP慢速攻击的三大类型及特点
-
Slow Headers(Slowloris)
-
攻击方式:持续发送未完成的HTTP头部(如缺少
\r\n\r\n
),占用服务器连接池。 -
关键特征:利用Web服务器必须接收完整头部才能处理请求的机制。
-
示例:攻击工具
slowhttptest
的-H
模式可模拟此类攻击。
-
-
Slow Body(HTTP POST攻击)
-
攻击方式:声明一个超大的
Content-Length
(如100MB),随后以极慢速度发送数据体(如每10秒发送1字节)。 -
防御难点:服务器需为每个连接分配内存缓冲区,长时间占用内存资源。
-
-
Slow Read攻击
-
攻击方式:通过调整TCP窗口大小(如设置为512字节),强制服务器将大文件拆分为多个小包发送,客户端以极低速率接收,导致响应数据长期滞留服务器内存。
-
三、Nginx防护配置的关键点
针对上述攻击,Nginx可通过以下配置增强防护:
-
超时时间控制
-
client_header_timeout
:设置接收完整HTTP头部的超时时间(如10秒),超时则断开连接。 -
client_body_timeout
:限制请求体的传输时间(如20秒),防止Slow Body攻击。
-
-
连接与请求限制
-
连接数限制:使用
limit_conn_zone
和limit_conn
模块,限制单个IP的并发连接数(如每个IP最多5个连接)。 -
请求速率限制:通过
limit_req_zone
和limit_req
限制请求频率(如每秒10次),结合burst
缓冲队列处理突发流量。
-
-
缓冲区优化
-
client_header_buffer_size
和large_client_header_buffers
:限制请求头大小(如1KB),防止超大头部耗尽内存。 -
client_max_body_size
:限制请求体大小(如2MB),拒绝异常大文件上传。
-
-
临时文件与内存管理
-
client_body_in_file_only clean
:将请求体写入临时文件而非内存,减少内存占用。 -
client_body_temp_path
:指定临时文件存储路径,避免磁盘I/O瓶颈。
-
四、综合防御策略
-
多层防护架构
-
结合反向代理(如Nginx)与负载均衡器分散压力,同时部署Web应用防火墙(WAF)识别异常连接模式。
-
-
自动化监控与黑名单
-
监控连接数和请求速率,自动封禁异常IP(如连续发送未完成头部的IP)。
-
-
协议层加固
-
禁用不必要的HTTP方法(如
TRACE
),升级至支持异步I/O的Web服务器(如Nginx的epoll
模型)。
-
🔥 下期预告:从防护到溯源:HTTP慢速攻击的深度对抗