服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-08-23 简米科技 2,906 字 7 分钟阅读

Slowloris攻击如何长期霸占服务器线程?线程耗尽怎么办

导读Slowloris攻击通过缓慢发送不完整的HTTP请求头,持续占用服务器连接线程,直至线程池枯竭,导致合法用户无法访问,而防御的核心在于缩短超时、启用反向代理和部署专业WAF,Slowloris攻击原理与线程占用机制Slowloris是一种典型的慢速HTTP攻击,由名为Slowloris的Perl脚本实现,攻击……

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 5KeepAlive OffKeepAliveTimeout 2

    Slowloris攻击如何长期霸占服务器线程?线程耗尽怎么办

  • 启用mod_reqtimeout模块,设置RequestReadTimeout header=5-10,minrate=500

Nginx服务器:

  • 设置client_header_timeout 5sclient_body_timeout 5ssend_timeout 5s
  • 使用limit_conn模块限制单个IP连接数。

实践表明,将超时缩短到5秒以内能有效减少攻击窗口。

使用反向代理和负载均衡

在服务器前部署Nginx或HAProxy作为反向代理,它们可以缓存响应并管理连接,减少后端服务器直接面对攻击,Nginx的事件驱动模型本身对慢速攻击有较强抵抗力,配合proxy_read_timeout等参数,能进一步遏制慢速连接。

部署Web应用防火墙(WAF)

专业WAF(如ModSecurity、Cloudflare、简米云WAF等)可以识别并拦截慢速攻击流量,它们通过分析请求速率、头部完整性、连接持续时间等特征,自动阻断异常连接,对于国内用户,选择合适的慢速HTTP攻击防御价格方案时,应考虑云WAF的按量付费模式,成本较低。

操作系统层面调优

调整内核参数,如net.ipv4.tcp_keepalive_timenet.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

Slowloris攻击如何长期霸占服务器线程?线程耗尽怎么办

统计连接数,如果发现大量ESTABLISHED连接长时间存在,且发送数据量极小,则可能是慢速攻击,进一步用netstat -an | grep :80 | awk '{print $5}' | sort | uniq -c | sort -rn查看连接IP分布,若出现大量不同IP的低频连接,需要警惕。

日志分析

在Apache日志中,正常请求通常很快完成,而慢速攻击的请求日志可能显示状态码200但传输时间极长,使用grep结合awk过滤出持续时间超过30秒的请求,可辅助定位。

使用监控工具

开源工具如ngxtopgoaccess可以实时分析访问日志,识别异常行为,商业监控平台如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加速。
  • Slowloris攻击如何长期霸占服务器线程?线程耗尽怎么办

  • 对于API接口,适当放宽超时但配合速率限制。
  • 使用WAF的URL白名单功能,避免误杀。

行业共识认为,防御慢速攻击需要综合运用服务器配置、代理和WAF,单一措施难以完全防御。

Slowloris攻击利用HTTP协议特性,以极低带宽长期占用线程,是资源耗尽型攻击的典型,通过缩短超时、使用反向代理和部署WAF,可以有效降低风险,定期检查服务器连接状态,及时调整配置,是保持网站稳定的关键。

Slowloris攻击常见问题解答

问:Slowloris攻击会影响哪些类型的服务器?

答:Slowloris对基于线程/进程模型的服务器,如Apache、IIS,影响较大;对事件驱动模型如Nginx、Lighttpd,影响较小,但不当配置仍可能被利用,从根本上说,任何需保持连接状态的服务器都可能受影响。

问:防御Slowloris攻击需要多少成本?

答:成本取决于防御方案,对于个人站长,通过修改服务器配置的成本为零;使用开源WAF如ModSecurity,仅有部署维护成本;采用云WAF,价格因流量和防护级别而异,通常按QPS或带宽计费,从每月几十元到数千元不等,具体可咨询服务商,选择方案时应根据网站规模和业务重要性决定。

问:如何判断服务器是否正在遭受Slowloris攻击?

答:观察服务器连接数是否异常升高,且大量连接处于ESTABLISHED状态,持续时间长但几乎无数据传输,使用netstat命令可快速查看,结合日志分析请求耗时,若发现大量长时间未完成的请求,则高度疑似攻击,进一步可尝试手动模拟慢速连接,对比正常情况。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱