Slowloris攻击通过缓慢发送不完整的HTTP请求头,持续占用服务器连接线程,直至线程池枯竭,导致合法用户无法访问,而防御的核心在于缩短超时、启用反向代理和部署专业WAF。
Slowloris攻击原理与线程占用机制
Slowloris是一种典型的慢速HTTP攻击,由名为Slowloris的Perl脚本实现,攻击者与服务器建立TCP连接后,不立即发送完整的HTTP请求,而是分多次发送头部字段,每次发送后暂停一段时间,让服务器误以为网络延迟,从而保持连接。
服务器通常为每个连接分配一个线程或进程,处理请求,当攻击者建立大量这样的半连接时,服务器线程池被逐渐占满,无法再处理新连接,行业共识认为,这种攻击对Apache等基于进程/线程的服务器效果显著,而对Nginx等事件驱动架构影响较小。
攻击如何保持连接长期存活
攻击者通过以下策略使连接长期存活:
- 发送部分HTTP头部后,每隔几秒发送一个额外的头部行,如
X-a: b,以防止超时。 - 调整发送间隔,使其略低于服务器超时阈值,确保连接不被关闭。
- 使用多个源IP地址,避免单IP被限流,同时增加检测难度。
这种攻击的隐蔽性在于它看起来像正常的连接,只是流量特征异常缓慢,据统计,一台普通PC就能耗尽中型Web服务器的线程池。
实用防御方法:从配置到架构
针对Slowloris攻击,可以从多个层面进行防御,以下为经过验证的实操步骤。
缩短服务器超时配置
Apache服务器:
- 修改
httpd.conf,设置Timeout 5,KeepAlive Off或KeepAliveTimeout 2
。
- 启用
mod_reqtimeout模块,设置RequestReadTimeout header=5-10,minrate=500。
Nginx服务器:
- 设置
client_header_timeout 5s,client_body_timeout 5s,send_timeout 5s。 - 使用
limit_conn模块限制单个IP连接数。
实践表明,将超时缩短到5秒以内能有效减少攻击窗口。
使用反向代理和负载均衡
在服务器前部署Nginx或HAProxy作为反向代理,它们可以缓存响应并管理连接,减少后端服务器直接面对攻击,Nginx的事件驱动模型本身对慢速攻击有较强抵抗力,配合proxy_read_timeout等参数,能进一步遏制慢速连接。
部署Web应用防火墙(WAF)
专业WAF(如ModSecurity、Cloudflare、简米云WAF等)可以识别并拦截慢速攻击流量,它们通过分析请求速率、头部完整性、连接持续时间等特征,自动阻断异常连接,对于国内用户,选择合适的慢速HTTP攻击防御价格方案时,应考虑云WAF的按量付费模式,成本较低。
操作系统层面调优
调整内核参数,如net.ipv4.tcp_keepalive_time、net.ipv4.tcp_syn_retries等,缩短半连接存活时间,同时可以使用iptables限制单IP并发连接数,
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j REJECT
但需注意,攻击者可能使用大量IP,该方式作为辅助手段。
如何识别和检测Slowloris攻击
快速识别攻击对及时防御至关重要,以下是一些实用的检测方法。
查看服务器连接状态
使用netstat -an | grep :80 | wc -l

统计连接数,如果发现大量ESTABLISHED连接长时间存在,且发送数据量极小,则可能是慢速攻击,进一步用netstat -an | grep :80 | awk '{print $5}' | sort | uniq -c | sort -rn查看连接IP分布,若出现大量不同IP的低频连接,需要警惕。
日志分析
在Apache日志中,正常请求通常很快完成,而慢速攻击的请求日志可能显示状态码200但传输时间极长,使用grep结合awk过滤出持续时间超过30秒的请求,可辅助定位。
使用监控工具
开源工具如ngxtop、goaccess可以实时分析访问日志,识别异常行为,商业监控平台如Datadog、Prometheus,通过设置连接数、请求速率等告警,快速响应。
对比其他慢速攻击:Slowloris vs RUDY
除了Slowloris,常见的慢速攻击还有RUDY(慢速POST攻击),两者原理相似,但攻击方式不同。
| 攻击类型 | 攻击方式 | 目标协议 | 防御难点 |
|---|---|---|---|
| Slowloris | 缓慢发送HTTP头部 | HTTP GET | 头部不完整,部分WAF难以识别 |
| RUDY | 缓慢发送POST请求体 | HTTP POST | 请求体可以很大,超时设置需更严格 |
两者都需要服务器保持连接,但RUDY通过Content-Length声明大请求体,然后缓慢发送,占用连接时间更长,防御RUDY需要设置client_body_timeout和请求体大小限制。
防御部署的常见问题与解决方案
在实际部署中,运维人员常遇到一些问题,比如调整超时后影响正常用户下载大文件,或者出现误拦截,以下是一些建议:
- 对大型文件下载,可单独设置长超时,或使用CDN加速。
- 对于API接口,适当放宽超时但配合速率限制。
- 使用WAF的URL白名单功能,避免误杀。

行业共识认为,防御慢速攻击需要综合运用服务器配置、代理和WAF,单一措施难以完全防御。
Slowloris攻击利用HTTP协议特性,以极低带宽长期占用线程,是资源耗尽型攻击的典型,通过缩短超时、使用反向代理和部署WAF,可以有效降低风险,定期检查服务器连接状态,及时调整配置,是保持网站稳定的关键。
Slowloris攻击常见问题解答
问:Slowloris攻击会影响哪些类型的服务器?
答:Slowloris对基于线程/进程模型的服务器,如Apache、IIS,影响较大;对事件驱动模型如Nginx、Lighttpd,影响较小,但不当配置仍可能被利用,从根本上说,任何需保持连接状态的服务器都可能受影响。
问:防御Slowloris攻击需要多少成本?
答:成本取决于防御方案,对于个人站长,通过修改服务器配置的成本为零;使用开源WAF如ModSecurity,仅有部署维护成本;采用云WAF,价格因流量和防护级别而异,通常按QPS或带宽计费,从每月几十元到数千元不等,具体可咨询服务商,选择方案时应根据网站规模和业务重要性决定。
问:如何判断服务器是否正在遭受Slowloris攻击?
答:观察服务器连接数是否异常升高,且大量连接处于ESTABLISHED状态,持续时间长但几乎无数据传输,使用netstat命令可快速查看,结合日志分析请求耗时,若发现大量长时间未完成的请求,则高度疑似攻击,进一步可尝试手动模拟慢速连接,对比正常情况。