慢速攻击在低带宽下仍能造成瘫痪,核心原因是它不靠流量洪峰,而是用极低速、长时间的请求占满服务器并发连接资源,耗尽连接池后正常用户无法建立新连接。
慢速攻击为什么低带宽也能打瘫服务器
服务器处理请求时,每个连接都要占用独立资源:一个线程、一块内存、一个文件描述符,无论这个连接上有没有实际数据在传输,占用的资源都不会自动释放,直到连接关闭或超时。
传统DDoS攻击靠海量流量挤满带宽,让正常数据包进不来,慢速攻击走了另一条路它几乎不消耗带宽,每个攻击连接每秒只发送几个字节,甚至几十秒才发一个字符,但服务器必须为每个这样的连接保留完整处理能力,攻击者用一台普通家庭宽带或低配云服务器,就能同时维持数千个半开连接,等服务器的连接数达到上限,正常用户的请求只能排队或者直接被拒绝。
所以低带宽不但不影响慢速攻击效果,反而是它的天然伪装,流量监控看到的是“带宽占用很低”,业务侧却已经无法访问。
低带宽慢速攻击原理:一条线程耗死一个连接
慢速攻击的核心手法可以分成三类:慢速发送请求头、慢速发送请求体、慢速读取响应。
以最常见的Slowloris为例,攻击者向服务器发起HTTP连接后,只发送不完整的请求头,例如只发送“GET / HTTP/1.1\r\nHost: example.com\r\n”然后停住,始终不发送表示请求头结束的空行,服务器以为客户端还在发送,就一直等待,攻击者每隔一段时间补一个无关紧要的头部字段,X-Header: a”,让服务器重置读超时计时器,这样一个连接就能被无限期挂住。
Slow POST类似,只是针对请求体,攻击者声明一个很大的Content-Length,但每次只发送几个字节,服务器会持续等待剩余内容,Slow Read则是攻击者发送正常请求后,用极慢的速度读取响应,把服务器的发送缓冲区堵住。
这三种方式共同点是:单个连接的数据速率极低,占用带宽几乎可以忽略,但占用的服务器资源与正常请求完全一样,低带宽下发动攻击,服务器能力被慢慢放血,直到瘫痪。
慢速攻击和DDoS攻击的区别:流量不大但更隐蔽
很多运维人员第一次遇到慢速攻击时,会误以为是服务器配置变差或者代码性能下降,因为带宽和CPU占用看起来都不高,这正是慢速攻击和传统DDoS攻击最明显的区别。
| 对比项 | 传统DDoS攻击 | 慢速攻击 |
|---|---|---|
| 占用带宽 | 极高,容易触发流量清洗 | 极低,不触发带宽告警 |
| 攻击方式 | 发送大量数据包或请求 | 发送极少量数据,保持连接 |
| 资源消耗点 | 网络带宽、防火墙吞吐 | 服务器并发连接、线程池 |
| 检测难度 | 相对容易,流量异常明显 | 较难,需要分析连接特征 |
| 攻击成本 | 需要僵尸网络或高带宽服务器 | 一台低配VPS即可发起 |
表格里的对比能清楚说明:低带宽环境下,传统DDoS攻击很难奏效,因为攻击者没有足够带宽制造流量洪峰,但慢速攻击天然适合低带宽场景,它攻击的不是网络管道,而是服务器的连接管理能力,用高速网络防御设备去拦截慢速攻击,就像用防洪堤去挡渗水方向不对。
企业网站如何防御慢速攻击
防御慢速攻击需要从连接超时、并发限制和前置代理三个层面同时下手,行业共识认为,单纯增加带宽对慢速攻击几乎没有作用,必须调整服务器自身的连接管理策略。
调整服务器超时与连接数限制
Nginx可以通过以下配置缩短慢连接存活时间:
client_header_timeout 10s;
client_body_timeout 10s;
keepalive_timeout 30s;
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn perip 10;
client_header_timeout和client_body_timeout分别控制读取请求头和请求体的超时时间,攻击者如果在10秒内没有完成发送,连接会被强制关闭。limit_conn限制单个IP的并发连接数,即使攻击者发起大量慢连接,也只能占用有限资源。
Apache则需要启用mod_reqtimeout模块:
RequestReadTimeout header=5-10,MinRate=500 body=10,MinRate=500
这个配置的含义是:请求头初始超时5秒,之后如果数据接收速率低于每秒500字节,最多再给10秒缓冲,超时即断开,请求体同理,相比默认的长时间读超时,这类配置能显著降低慢速攻击的存活期。
部署反向代理与WAF检测慢速攻击
将Nginx、HAProxy或云WAF放在源站前面,是第一道防线,反向代理可以提前接收客户端连接,只有完整的请求才会转发给后端源站,反向代理本身设置较短的超时,就能把大量慢连接挡在源站之外。
比如HAProxy中的timeout http-request可以设置请求头阶段的最大等待时间,timeout client控制客户端连接总时长,WAF层面可以设置“慢请求”规则,检测数据速率低于阈值的连接并主动阻断。
很多企业网站采用CDN后,攻击流量会先打到CDN节点,CDN节点数量多、连接池大,慢速攻击很难全部占满,源站只处理经过CDN筛选的完整请求。
使用专门的慢速攻击防护模块
Apache有mod_qos和mod_evasive,能限制单个IP的连接速率和并发数,Nginx可以通过第三方模块如ngx_http_limit_req_module配合limit_conn实现类似效果,这些模块的配置思路一致:识别异常低速连接,用更积极的策略主动断开。
从架构上隔离与弹性扩容
对于核心业务,可以考虑源站只允许反向代理或负载均衡器的IP访问,客户端连接全部终止在代理层,即使慢速攻击打满代理层的连接池,源站也不受影响,配合自动扩容,代理层可以增加更多节点分担连接压力。
慢速攻击检测方法:如何在低带宽下发现攻击
慢速攻击最麻烦的地方在于,它不会触发流量告警,检测需要从连接状态和请求速率入手,而不是看带宽曲线。
监控连接状态与持续时间
在Linux服务器上,用以下命令可以查看当前ESTABLISHED状态的连接:
ss -tan state established '( dport = :80 or dport = :443 )'
慢速攻击发生时,会看到大量ESTABLISHED连接,而且这些连接的Recv-Q列长期不为零。Recv-Q表示内核接收缓冲区中未被应用读取的数据量,慢攻击连接往往堆积少量已接收但不完整的请求数据。
更直接的指标是连接的平均持续时间,正常HTTP请求通常在几百毫秒到几秒内完成,慢速攻击连接可能持续几十秒甚至几分钟,运维可以定期统计连接建立时间,发现大量“老连接”就值得警惕。
分析请求速率与包大小
业内专家指出,慢速攻击的检测重点在于连接持续时间和数据速率,用tcpdump抓包后,可以统计每个连接在单位时间内的数据包大小,正常连接的数据量通常呈现“快速交换后关闭”的特征,而慢速攻击连接是长时间的低速小包。
比如一个连接建立了60秒,总共只传输了200字节,这种特征就非常可疑,可以通过NetFlow或sFlow数据,按源IP聚合连接时长和传输字节数,筛选出“低速率长连接”的源IP。
结合日志与WAF告警
Web服务器访问日志里,慢速攻击留下的记录往往不完整,正常访问有完整的请求行、状态码和响应大小,慢速攻击的日志可能一直处于“等待请求头”状态,或者请求已开始但长时间没有结束。
WAF设置“慢请求”检测规则后,可以在攻击早期产生告警,关键是指标要合理:阈值设置太紧会误杀正常的大文件上传或慢速网络用户,太松则漏报,需要根据业务实际调整。
为什么低带宽攻击更难防御:隐蔽性与持久性
传统DDoS防护设备对慢速攻击不敏感
多数抗D设备基于流量阈值触发清洗,低带宽慢速攻击的流量可能只有几Mbps甚至更低,远低于清洗阈值,直接被当作正常流量放行,攻击者甚至不需要隐藏自己,因为防护设备根本不会看它一眼。
攻击成本极低,防御成本较高
发起慢速攻击只需要一台普通VPS,几行Python脚本,或者直接使用开源工具,防御方却需要持续调整超时参数、增加代理层、部署WAF规则、监控连接状态,攻防成本严重不对等,这也是慢速攻击在低带宽下依然泛滥的一个现实原因。
对业务造成的瘫痪表现更隐蔽
被慢速攻击的服务器通常不会完全断网,而是表现为网站打开极慢、API间歇性超时、部分用户能访问部分用户不能,业务方可能以为是代码性能问题或数据库查询变慢,排查方向完全错误,给了攻击者更长的持续攻击时间。
慢速攻击低带宽瘫痪常见问题解答
慢速攻击和DDoS攻击的区别是什么?
慢速攻击属于应用层拒绝服务攻击的一种,特征是用极低的带宽消耗占满服务器并发连接,DDoS攻击通常指利用大量流量或请求冲击网络和服务器,前者像一个人占着窗口不办事,后者像一群人把门口堵死,防御手段也不同:慢速攻击需要调整超时、限制并发、部署代理,DDoS更多依赖流量清洗和带宽扩容。
企业网站如何防御慢速攻击?
先调整服务器超时参数,缩短请求头和请求体的读取超时,限制单IP并发连接数,再在源站前面部署Nginx、HAProxy或CDN,把慢连接终止在代理层,最后配合WAF慢请求规则和连接状态监控,发现异常源IP及时封禁。
慢速攻击检测方法有哪些?
主要通过三个手段:监控服务器连接状态,看是否有大量长时间ESTABLISHED连接且Recv-Q堆积;分析请求速率和包大小,筛选低速率长连接的源IP;结合访问日志和WAF告警,发现不完整的请求记录,低带宽慢速攻击的检测不能依赖流量阈值,必须看连接行为。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/635644.html


