如果你正在处理CDN POST,先别急着照搬网上的参数。很多站长都有过这样的经历:网站突然变慢,CPU和内存飙高,重启服务器后一切恢复正常,但找不到明显的原因。检查访问日志,发现大量来自不同IP的“半开”连接,每个连接只发了一点点数据,却迟迟不结束。这很可能就是慢速攻击——一种专门消耗服务器资源的隐形DDoS。
传统的DDoS防护主要针对大流量洪水,但慢速攻击(包括慢速POST和Slowloris)恰恰相反:它用极低的速度发送数据,让服务器长时间维持连接,从而耗尽连接池和线程池。更棘手的是,这种攻击流量看起来和普通用户请求几乎一样,传统的WAF往往无力拦截。
CDN边缘节点由于位于用户和源站之间,天然拥有提前终止异常连接的能力。通过合理配置连接超时策略,CDN可以“切断”那些拖沓的恶意连接,保护源站不被拖垮。本文会从攻击原理讲起,逐步拆解CDN的超时管控机制,并给出具体配置建议。
一、慢速攻击的两张面孔:慢速POST与Slowloris与CDN POST
要理解CDN如何防御,首先得知道攻击长什么样。
1.1 慢速POST攻击
HTTP POST请求用于向服务器提交数据(比如表单、上传文件)。正常情况下,客户端会一次性或分块快速发送完整个请求体。慢速POST攻击故意将请求内容分成极小的分块,每发送一个分块后等待很长时间(比如每秒1字节),同时告诉服务器“我还没发完”。服务器必须一直保持连接等待剩余数据,直到超时。如果同时发起数百个这样的连接,服务器的连接池和内存很快就会被耗尽。
1.2 Slowloris攻击
Slowloris是更经典的一种慢速攻击,它利用HTTP头部发送缓慢的特性。攻击者先发送一个请求行(如GET / HTTP/1.1),然后每隔几十秒才发送一个额外的头部(如X-a: b),但不发送结束头部所需的空行。服务器会认为请求还没有完成,于是维持连接等待更多头部。同样,大量这样的半连接会快速填满服务器的最大并发连接数。
两者区别:慢速POST攻击的是请求体(body),Slowloris攻击的是请求头(headers)。但它们的目标一致:让服务器长时间占用连接资源,形成拒绝服务。
相关阅读:此处可内链到“CDN POST常见问题”专题。
二、为什么传统防护对慢速攻击“免疫”?
容易忽略的细节
很多人会问:防火墙、WAF不能直接拦截这些连接吗?
问题的核心在于:攻击连接在初始阶段看起来完全合法。慢速POST发送的是标准的POST请求,只是数据传输的速率远低于正常人类行为;Slowloris发送的HTTP头部虽然慢,但格式正确。传统WAF基于请求内容特征进行匹配,很难区分正常用户(比如使用慢速网络的真实用户)和攻击者。
另外,连接还没有完成就被截断,WAF在请求结束前可能根本无法分析完整的内容。而源站服务器又无法区分连接来源——它只能被动等待接收数据。这就是慢速攻击隐蔽高效的原因。
进阶阅读:此处可内链到“CDN POST性能优化”指南。
三、CDN边缘节点如何通过连接超时管控防御?
CDN边缘节点相当于一个反向代理,所有用户请求先到达CDN节点,再由节点转发给源站。这就给了CDN在“中间”进行超时控制的机会。CDN可以独立于源站设置三种超时参数:连接超时、请求超时和空闲超时。
3.1 连接超时(Connection Timeout)
指从客户端连接到CDN节点开始,到节点接收完整个HTTP请求头(或开始处理请求)之前,允许等待的最长时间。如果在这个时间内客户端没有发送足够的有效数据(比如Slowloris一直不发完头部),CDN节点会主动断开连接。通常情况下,正常浏览器建立连接后会在几百毫秒内完成请求头传输,而攻击者可能需要几十秒。CDN可以将连接超时设置为10~30秒,有效阻止Slowloris。
3.2 请求超时(Request Timeout)
指从CDN节点开始接收到请求体到接收完毕的最长等待时间。对于POST请求,如果客户端发送数据的速度极慢,超过请求超时时间仍未发完,CDN会终止连接。慢速POST攻击正是利用了低速率卡住连接,请求超时可以直接“切断”这种拖沓行为。通常建议设置为30~60秒,因为正常的上传操作(哪怕是大文件)在拨号网络时代也很少超过这个时间。
3.3 空闲超时(Idle Timeout)
指在一次连接中,如果客户端在指定时间内没有发送任何新数据(TCP层面上没有收到新报文),CDN节点会认为连接已死亡,主动断开。空闲超时比连接超时和请求超时更严格,它不关心请求是否完成,只关注是否有实际数据传输。对于慢速攻击,攻击者虽然每间隔一段时间发送少量数据,但间隔时间往往较长(比如几十秒)。CDN可以将空闲超时设为10~20秒,使得攻击者必须更频繁地发送数据,大大增加攻击成本。
三重超时的协同效应:连接超时拦截不发送完整头部的攻击,请求超时拦截缓慢发送请求体的攻击,空闲超时则补漏那些“装死”的连接。三者结合,几乎可以覆盖所有常见的慢速攻击变种。
四、小白也能操作的配置建议
验证与回滚
大多数CDN服务商(包括GoEdge、Cloudflare、Akamai等)在后台都提供超时参数配置。如果你使用的是GoEdge CDN,可以在“域名管理-高级设置-超时配置”中找到。以下是一个面向普通网站的推荐初始值:
- 连接超时(Client Header Timeout): 15秒
- 请求超时(Client Body Timeout): 30秒
- 空闲超时(Keep-Alive Timeout / Idle Timeout): 20秒
这些值对正常用户几乎没有影响——正常浏览器完成请求头只需几百毫秒,POST上传一个10MB的图片在4G网络下通常不会超过10秒,空闲超时20秒也远大于正常用户两次请求之间的间隙(通常小于1秒)。但对攻击者而言,这些限制迫使他们必须在短时间内发送完整数据,否则连接就会被CDN杀死。
小心API接口:如果你的站点有长时间拉取的API(如WebSocket、SSE),要注意空闲超时不能设置得太短,否则会切断正常长连接。对于这类场景,建议单独为API域名关闭空闲超时或设置更长的值。
想继续深入:此处可内链到“CDN POST优化清单”文章。
延伸阅读:此处可内链到“CDN POST配置案例”相关文章。
CDN POST:五、验证与监控
配置前的检查
设置完超时后,如何知道它生效了?
最简单的方法:使用工具(如slowhttptest)从客户端发起慢速攻击测试。你可以在CDN节点日志中看到大量“connection timed out”的记录,而源站侧的攻击痕迹会显著减少。日常监控中,应关注CDN节点的平均连接时长和前1%连接耗时:如果攻击发生,连接时长曲线会明显右移;配置超时后,超时记录数会增加,但源站负载会恢复正常。
同样重要的是,不要随意将超时值设置得太低(比如低于5秒),否则可能误伤真实用户——比如在移动弱网环境下,用户可能需要几秒才能完成一次普通GET请求的头部传输。
六、总结
验证与回滚
慢速攻击之所以能够屡屡得手,是因为它利用了服务器“必须等待数据”这一本质弱点。CDN边缘节点通过设置合理的连接超时、请求超时和空闲超时,从网络中层切断攻击连接,使得恶意流量永远无法抵达源站。这种防御完全不依赖签名或行为分析,而是基于最底层的超时逻辑,因此对各类慢速攻击变种都有效。
对于运维小白来说,不需要理解复杂的TCP/IP协议栈,只需要在CDN面板中打开超时配置,按照上述建议值调整,就能显著提升网站的防御能力。当然,超时并不是唯一的防线,建议同时开启CDN的速率限制(Rate Limiting)和WAF规则,形成纵深防御。
最后记住:攻击者总是寻找最省力的路径。当你把CDN的超时管控设置得足够严格时,你的站点就已经从90%的慢速攻击中隐身了。把这些步骤跑通后,CDN POST基本就能稳定落地。
延伸阅读
