传输层防护处理长连接攻击的核心逻辑,是在TCP握手、会话保活和连接释放三个阶段同时设置阈值与超时机制,把慢速耗尽连接资源的恶意流量挡在应用层之前。
长连接攻击为什么能穿透普通防护
长连接攻击通常利用TCP连接建立后长时间占用会话资源,攻击者以较低速率发送数据,让连接一直处于活跃状态,逐步耗尽服务器的连接表、内存和文件描述符,与瞬时洪水攻击不同,这类攻击的单个连接看起来并不异常,但整体连接数会持续攀升。
传输层防护之所以关键,是因为攻击流量在到达应用层之前,TCP状态机已经暴露了异常特征,应用层防火墙很难识别一个“看似正常”的慢速连接,而传输层的握手行为、保活间隔、单连接吞吐速率等指标更容易暴露攻击意图。
长连接攻击怎么防御?传输层先做这三件事
第一步:收紧握手阶段的门槛
- 开启SYN Cookie:
sysctl -w net.ipv4.tcp_syncookies=1,防止半连接队列被打满。 - 降低SYN重试次数:
sysctl -w net.ipv4.tcp_synack_retries=3,快速释放未完成的握手。 - 扩大半连接队列:
sysctl -w net.ipv4.tcp_max_syn_backlog=8192,让正常用户有足够空间。 - 使用首包丢弃策略:对同时到达的大量SYN包进行随机丢弃,迫使攻击端消耗更多资源重传。
这些操作直接作用于TCP三次握手阶段,能过滤掉相当一部分基于脚本发起的慢速连接。
第二步:控制会话保活参数
长连接攻击的核心动作是“占着连接不干活”,传输层可以通过保活探测识别这类空闲连接。
sysctl -w net.ipv4.tcp_keepalive_time=600:连接空闲600秒后开始探测。sysctl -w net.ipv4.tcp_keepalive_intvl=30:探测间隔30秒。sysctl -w net.ipv4.tcp_keepalive_probes=3:连续3次探测失败后断开。- 在Nginx中设置
keepalive_timeout 30;和keepalive_requests 100;,限制单个TCP连接最多处理100个请求后强制关闭。
通过缩短空闲超时和限制请求数,攻击者无法用少量连接长期霸占资源。
第三步:对单IP实施连接速率限制
传输层无法识别应用层内容,但可以从IP维度限制连接数和新建速率。
- 使用iptables限制SYN速率:
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT - 在Nginx中配置
limit_conn_zone和limit_req_zone,例如每个IP最多20个并发连接,每秒最多10个请求。 - 在HAProxy中使用
maxconn和rate-limit sessions参数,按源IP限制会话建立速度。
这些规则直接作用于TCP连接表,让攻击者的连接请求在传输层就被丢弃,不进入应用层。
TCP长连接攻击防护方案对比:内核参数、代理层与硬件清洗
| 方案 | 生效位置 | 优势 | 局限 | 适用场景 |
|---|---|---|---|---|
| 内核参数调优 | 操作系统TCP栈 | 零成本、部署快 | 单机防护有限 | 中小型Web服务 |
| 代理层限制 | Nginx/HAProxy | 灵活、可写规则 | 消耗CPU和内存 | 中型业务 |
| 硬件清洗设备 | 机房入口 | 处理性能高 | 价格昂贵 | 大型企业 |
业内专家指出,多数长连接攻击在传输层使用内核参数和代理层规则就能缓解,只有面临大规模混合攻击时才需要考虑硬件清洗设备。
内核参数调优的典型配置
以Linux为例,在/etc/sysctl.conf中添加:
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_synack_retries=2
net.ipv4.tcp_keepalive_time=600
net.ipv4.tcp_keepalive_intvl=30
net.ipv4.tcp_keepalive_probes=3
net.ipv4.tcp_max_syn_backlog=16384
net.core.somaxconn=8192
执行sysctl -p生效,这套配置能同时应对SYN洪水、慢速连接和空闲连接占用。
代理层限制的典型配置
Nginx配置示例:
limit_conn_zone $binary_remote_addr zone=conn_per_ip:10m; limit_req_zone $binary_remote_addr zone=req_per_ip:10m rate=5r/s; server { listen 80; keepalive_timeout 30; keepalive_requests 100; limit_conn conn_per_ip 10; limit_req zone=req_per_ip burst=10 nodelay; }
这套规则将每个IP的并发连接限制为10,每秒请求限制为5,超过限制的请求直接返回503,对于游戏服务器长连接攻击防护这类场景,还需要进一步降低keepalive_timeout,因为游戏客户端通常使用独立的长连接,但攻击者也会模仿这种连接行为,所以必须配合心跳包检测。
服务器长连接被攻击怎么办?应急响应别急着重启
当服务器出现连接数异常升高、正常用户无法建立新连接、CPU使用率居高不下时,按以下顺序排查:
- 登录服务器查看TCP连接状态:
netstat -antp | grep ESTABLISHED | wc -l - 统计每个源IP的连接数:
netstat -antp | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head - 查看半连接队列是否溢出:
ss -s查看synrecv数量 - 临时封禁攻击源IP:
iptables -I INPUT -s 攻击IP -j DROP - 立即调低
keepalive_timeout并重启代理服务,快速释放积压连接 - 如果攻击源IP不断变化,启用上述内核参数和代理层速率限制
注意不要直接重启服务器,重启会清空排查线索,且重启后如果防护策略未调整,攻击会立刻重新发起。
长连接攻击防护价格:从零成本到专业设备怎么选
长连接攻击防护的成本差异很大,内核参数调优完全免费,只需运维人员熟悉sysctl命令,代理层使用开源Nginx或HAProxy也无软件费用,但需要一定的人力配置成本,云厂商的WAF或DDoS防护服务通常按年订阅,价格根据防护带宽和连接数浮动,多数情况下中小企业可以承受基础套餐,硬件清洗设备价格较高,一般面向金融、游戏等对可用性要求极高的行业。
如果业务部署在北京机房,选择云防护节点时建议优先考虑同地域节点,降低正常流量的额外延迟,北京地区的防护服务资源相对丰富,但价格比二三线城市略高,主要贵在带宽成本,实际采购前可以先评估当前业务的平均并发连接数和单IP高峰连接数,再决定是买基础版还是专业版。
传输层防护的局限与补充措施
传输层防护不能解决所有长连接攻击变种,例如攻击者使用真实浏览器发起慢速HTTP请求,每个连接都完成了三次握手,传输层只能通过请求速率限制缓解,无法完全识别应用层语义,因此完整的防护体系需要传输层和应用层配合。
- 传输层负责:连接建立速率、并发连接数、空闲超时、单IP会话限制
- 应用层负责:请求头超时、请求体超时、慢速读写阈值
在Nginx中补充应用层超时配置:
client_header_timeout 10s;
client_body_timeout 10s;
send_timeout 30s;
这些参数能识别发送一个请求头都要花十几秒的慢速攻击,行业共识认为,传输层做好连接生命周期管理,应用层做好请求内容超时管理,两者叠加才能有效压制长连接攻击。
长连接攻击传输层防护常见问题
长连接攻击和普通DDoS攻击有什么区别?
普通DDoS攻击通常依靠高流量带宽或大量数据包打满链路,而长连接攻击的流量强度较低,核心目标是耗尽服务器的连接表、内存等状态资源,传输层防护对普通DDoS的SYN Flood有效,但对慢速长连接需要结合保活探测和速率限制。
服务器长连接被攻击时,传输层能完全阻断吗?
不能完全阻断,传输层可以显著减少攻击连接进入应用层的数量,但如果攻击者使用真实分布式IP、每个IP只建立少量连接,传输层无法仅凭IP维度识别,此时需要应用层行为分析或专业清洗设备。
部署长连接攻击防护需要多少成本?
零成本起步方案是Linux内核参数调优和Nginx开源模块,适合个人站长和小型服务,中等规模业务使用云WAF基础套餐,年费通常在数百到数千元区间,具体看带宽,大型企业或高价值游戏业务部署硬件清洗设备,投入相对较高,但多数情况下优先考虑云清洗服务更灵活。
传输层防护的核心不是追求单点拦截,而是通过多层超时和速率阈值压缩攻击者的连接存活空间,让正常长连接不受影响,恶意长连接快速失效。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/655203.html





