服务器超时设置过长,等于主动帮慢速攻击续命:攻击者只需要占用极少的连接资源,就能让你的服务器在等待中慢慢耗尽并发容量。慢速攻击不靠高流量冲击,而是利用合法的HTTP请求“挂”在服务器上,超时时间越长,每一条攻击连接存活越久,服务器可服务的正常用户就越少,这不仅是技术问题,更是运维决策上的致命疏忽。
服务器超时设置多少合适:攻击者比你更懂你的等待上限
慢速攻击的精髓在于“慢”,攻击者把请求头或请求体拆分成极小的片段,每隔几十秒才发一个字节,让服务器误以为客户端还在传输数据,如果服务器愿意等待,攻击连接就不会中断。
你可能会问,默认超时时间不是已经有几十秒甚至几分钟吗? 恰好,很多主流Web服务器和中间件的默认超时配置,正好落在慢速攻击的舒适区内,比如Nginx的client_header_timeout默认60秒,Apache的Timeout默认60秒,某些云负载均衡的idle timeout甚至长达300秒,这些时间足够攻击者以极低频率维持大量并发连接。
行业共识认为,超时每延长10秒,攻击者维持连接的成本就降低一截,因为他不需要频繁重连,风险更小、效率更高,反过来,把超时压缩到合理的短值,攻击者必须加快发包速度,否则就会断连,而一旦要加快速度,攻击特征就暴露了。
默认超时下的典型攻击场景
假设你的业务服务器采用Apache默认60秒超时,攻击者使用Slowloris工具,建立1000条半开连接,每30秒发送一个不完整的请求头,服务器为每条连接分配一个工作线程或进程,这些资源在60秒内不会释放,当并发接近服务器上限时,正常用户发起请求,排队等待或直接被拒绝。
你观察到的现象往往是:服务器CPU和内存占用不高,网络带宽也没有跑满,但网站就是打不开,这就是慢速攻击最具欺骗性的地方。
不同业务场景下的超时参考区间
没有万能数值,但你的业务可以按特征选择区间:
- 静态资源为主的站点:
client_header_timeout可设为5-10秒,keepalive_timeout设为10秒左右,因为用户打开页面后短时间内就会发起后续请求。 - API服务、小程序后端:请求头和数据体通常较小,
client_body_timeout建议10-15秒,配合失败重试机制,不影响弱网环境下的正常客户端。 - 大文件上传、视频传输类场景:这类业务需要较长传输时间,但超时应该区分“空闲超时”和“总量超时”,比如上传时每15秒
必须收到至少一个数据包,而不是允许整体无限期等待。
nginx超时时间设置对慢速攻击的影响:三个参数决定生死
Nginx是目前使用最广的Web服务器之一,它的超时参数直接决定了慢速攻击能否得逞,很多运维只调过keepalive_timeout,却忽略了另外两个更关键的参数。
第一刀:client_header_timeout
这个参数控制Nginx等待接收客户端请求头的最长时间,默认60秒,对慢速攻击来说太长,攻击者可以每分钟只发送一行请求头,连接永远不会被断开。
推荐配置:
http {
client_header_timeout 10s;
}
设置后,Nginx会在10秒内没收到完整请求头时直接返回408并关闭连接,攻击者必须把发包间隔压缩到10秒以内,这会让他的“慢”优势荡然无存。
第二刀:client_body_timeout
请求体超时决定服务器等待两个相邻请求体数据块之间的最长时间,慢速POST攻击利用的就是这个参数攻击者发送Content-Length: 1000,然后每隔几十秒发一个字节,让服务器一直等待剩余数据。
推荐配置:
http {
client_body_timeout 10s;
}
注意,这个参数不是限制总传输时间,而是限制两个数据块之间的间隔,所以即使大文件上传场景,只要客户端持续有数据发送,就不会被误杀。
第三刀:keepalive_timeout
这个参数控制长连接的空闲超时,虽然它主要影响正常用户复用连接,但同样被慢速攻击利用,攻击者建立一个连接后不发任何请求,就占住连接资源等待超时。
推荐配置:
http {
keepalive_timeout 10s;
keepalive_requests 100;
}
同时建议在upstream后端配置中调整proxy_read_timeout和proxy_send_timeout,一般设置15秒比较稳妥,避免后端等待时间过长。
慢速攻击防御超时设置:从检测到落地的完整操作路径
光改超时还不够,你需要一套组合拳,以下按操作顺序列出防御步骤,可直接对照执行。
第一步:确认当前超时配置
先查看你的Web服务器实际生效的超时值,Nginx执行nginx -T,Apache执行apachectl -M或查看配置文件,重点检查以下几项:
- Nginx:
client_header_timeout、client_body_timeout、keepalive_timeout - Apache:
Timeout、RequestReadTimeout(模块mod_reqtimeout) - 云负载均衡:控制台上的“会话保持超时时间”或“空闲连接超时”
- CDN回源超时:源站侧的
fastcgi_read_timeout或proxy_read_timeout
第二步:按业务分层调整超时
不同层级超时需要联动,建议在源站Web服务器上做严格限制,在入口网关(如LVS、SLB)上做次严格限制。
- 源站Nginx:
client_header_timeout 5s、client_body_timeout 10s - 入口SLB:空闲超时设为15秒
- CDN回源超时:设为20秒,确保CDN节点有足够时间与源站交互
第三步:引入专门的慢速攻击检测模块
超时设置只能缩小攻击窗口,不能完全识别攻击,Nginx环境下推荐ngx_http_limit_conn_module和ngx_http_reqstat_module,配合limit_conn限制单IP并发连接数:
http {
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn perip 20;
}
mod_reqtimeout对Apache用户是必选项,在虚拟主机配置中启用:
RequestReadTimeout header=10-15,minrate=100 RequestReadTimeout body=10-20,minrate=200
minrate参数表示每秒至少需要达到的字节数,能有效过滤逐字节缓慢发送的行为。
第四步:用压力测试验证效果
调整后不要直接上线,推荐用工具模拟慢速攻击,开源工具slowloris、slowhttptest均可使用,以slowhttptest为例:
slowhttptest -c 1000 -H -g -o slowtest -i 30 -r 200 -t GET -u http://yourip -x 10
这条命令模拟1000条慢速连接,每30秒发送一次请求头,测试持续10秒,观察服务器是否返回408、连接是否被正确关闭,如果超时设置生效,攻击连接会在10秒内被清空。
网站被慢速攻击怎么办:先改超时再谈高防
有攻击者,就会有防御者,当你的网站已经出现慢速攻击症状时,第一件事不是买高防,而是先把超时时间压下来,业内专家指出,多数慢速攻击在源站调优后就能被挡掉大部分。
为什么高防不总能解决慢速攻击?
高防IP和CDN主要防御带宽型攻击(如CC、DDoS),对慢速攻击的处理逻辑比较尴尬,攻击流量看起来与正常请求无异,且速率极低,很多高防平台不识别或不愿处理,即使高防清了攻击流量,到源站的正常流量也会受超时过长影响,合理做法是:
- 先在源站完成超时调优,保留合理的重试机制
- 再在高防侧开启“HTTP连接空闲超时”或“慢连接检测”功能
- 最后考虑把源站防护交给云WAF,并开启低速攻击防护规则
攻击中和攻击后的处置清单
攻击发生时,按以下顺序操作:
- 临时将
client_header_timeout和client_body_timeout降到5秒和8秒 - 使用
ss -s或netstat查看当前连接数,统计处于SYN_RECV和ESTABLISHED状态的连接数量 - 用
iptables临时限制每个IP的并发连接数(例如-p tcp --dport 80 -m connlimit --connlimit-above 20 -j DROP) - 调整
keepalive_timeout至最低可接受值,观察正常用户是否受影响 - 攻击停止后,再根据业务形态恢复到一个安全且可用的值
长期运维建议
把超时优化写入你的服务器基线配置,新上线服务器时,不要使用系统默认配置,直接应用短超时模板,定期查看访问日志中408状态码的数量408出现频繁,说明超时策略正在生效,而不是故障。
常见慢速攻击与超时相关设问
服务器超时设置过短会影响正常用户吗?
会,但可控,正常浏览器的请求头通常一次性发送完,请求体发送间隔远小于1秒,只要超时值不低于5秒,基本不会误伤普通用户,真正需要担心的是弱网环境下的移动端用户,他们可能因网络抖动出现超过10秒的数据发送间隔,建议为这类场景单独设置proxy_read_timeout,而不影响全局超时。
慢速攻击防御超时设置为什么比流量清洗更关键?
因为慢速攻击不依赖流量大小,传统流量清洗以带宽阈值为触发条件,很难识别这种低速骗局,超时设置则是从连接生命周期入手,让攻击者的“慢”失效,没有短超时,清洗得再干净,攻击连接依然能长期霸占资源,先让连接快速释放,再谈分流和清洗,防御才有基础。
国内外主流云厂商对超时默认值有什么差异?
据业内公开资料,国内主流云厂商的SLB默认空闲超时多为15-60秒,Nginx官方默认值为60秒,Apache默认值也是60秒,近年来部分安全厂商推荐将入口超时统一压至10秒以下,并配合健康检查来淘汰异常连接,不同厂商对“空闲超时”和“请求超时”的计费与配置参数名称不同,你需要结合购买云服务时控制台上给出的说明逐项核对。
慢速攻击之所以难防,不是因为技术多高明,而是因为服务器给了它太多等待的时间,把超时设置调短,把连接生命周期压缩,攻击者连完成一次完整攻击的机会都凑不齐。等待是有成本的,而这个成本不应该由你的服务器独自承担。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/636419.html





