当服务器出现连接数飙升、响应变慢或新用户无法建立会话时,问题不一定来自应用代码,也可能是大量异常TCP连接挤占了带宽、内核队列和应用线程。有效的TCP流量清洗不是简单地“封几个地址”,而是按照流量进入顺序,在边缘、网络、主机和应用入口分别处理。下面介绍5种可落地的方法。
一、在网络边缘过滤明显异常流量
第一道防线应尽量靠近公网入口。具备DDoS防护能力的云网络、运营商清洗中心或边缘防火墙,可以先处理大规模流量,再把相对干净的连接转发给源站。这样能减少源站出口带宽和网卡中断压力。
实施步骤
- 梳理对外开放的TCP端口,只保留业务确实使用的端口,例如HTTPS通常使用443端口。
- 为管理端口设置固定来源、专用网络或VPN入口,避免与公众服务共用同一暴露面。
- 配置攻击触发条件,例如新建连接异常增长、单一端口连接速率突增或丢包率持续升高。
- 启用清洗后观察正常连接成功率、源站带宽和延迟,再逐步调整策略,避免误伤移动网络用户。
这种TCP流量清洗适合带宽型攻击和来源分散的异常流量,但通常会增加网络服务费用,并可能引入额外转发延迟。清洗中心不能替代主机侧的精细规则,源站仍应限制真实可访问的端口。
二、利用SYN保护机制降低半连接消耗
SYN Flood利用TCP三次握手中的半连接状态消耗资源。Linux系统可启用tcp_syncookies,并合理检查SYN队列和连接跟踪表;网络设备也常见SYN代理或握手验证功能。其核心是:在确认对端具备完成握手的能力前,不要过早为每个请求分配大量状态。

建议操作
- 先确认操作系统和负载均衡器当前的SYN队列、监听队列及连接跟踪容量。
- 在业务低峰期启用tcp_syncookies或设备侧SYN防护,并通过压测或灰度方式观察正常长连接是否受影响。
- 检查反向代理到后端的连接复用设置,避免前端大量短连接直接放大后端连接压力。
- 记录半连接数量、握手失败率和应用端建立连接耗时,攻击结束后复核是否恢复正常。
这类TCP流量清洗主要解决握手阶段的资源消耗,对已经完成握手、持续发送大量请求的攻击效果有限。因此,不能只依赖内核参数,还要配合后续的连接限速与应用保护。
三、按来源和端口实施连接速率控制
连接限速的重点不是设置一个对所有人都相同的数字,而是区分端口、路径和业务角色。Nginx、HAProxy以及Linux nftables都能在不同层面完成限制。对于公开服务,可按来源地址、网段、端口和时间窗口设置新建连接速率;对于内部服务,则应采用更严格的允许列表。
例如,图片或文档下载端口可以承受较多并发,但数据库端口、缓存端口和远程管理端口不应直接暴露公网。限制时要同时观察正常峰值、重试行为和长连接占用,避免客户端不断重连,反而形成新的流量高峰。
- 优点:部署相对直接,能够快速压低突发连接量。
- 缺点:共享出口、移动网络和企业代理可能让多个正常用户表现为同一来源。
- 适用条件:适合有明确端口边界、流量峰值可观察的Web、API和文件服务。
四、识别协议行为并阻断非必要连接
仅看来源并不足够。TCP流量清洗还应检查目标端口、握手完成情况、连接持续时间、上下行字节比例和协议是否符合服务预期。比如只提供HTTPS的服务器,不应接受发往未使用端口的连接;邮件服务、数据库服务和远程桌面也应限制在各自需要的网络范围。
可执行检查流程
- 列出每个监听端口对应的服务、负责人和允许来源。
- 在防火墙或负载均衡器上拒绝未登记端口,并优先采用默认拒绝策略。
- 对短时间内反复建立、立即断开的大量连接设置临时惩罚规则。
- 将误拦截记录单独保存,按地区、运营商和客户端类型复核后再扩大规则范围。
这种方法的优点是规则更贴近业务,误伤通常低于单纯封禁来源;缺点是需要持续维护端口清单和日志分析能力。规则过于复杂时,设备本身也可能成为性能瓶颈。
五、把关键服务分层并准备降级方案
当入口仍承受压力时,应避免所有服务共用同一组连接资源。可以将公开内容、认证接口、管理接口和内部数据服务分配到不同的负载均衡器、进程池或主机组中。这样,即使公共入口受到攻击,内部管理和核心交易链路仍有机会保持运行。
降级方案应提前写成操作清单:先暂停非必要接口,再降低高成本请求的并发,随后切换只读页面,最后根据监控决定是否暂时收紧访问范围。恢复时反向执行,并确认连接数、错误率和队列长度已经稳定,而不是看到带宽下降就立即全部放开。
分层会增加部署和运维复杂度,但它能把故障范围限制在局部。对于需要持续在线的API、在线课堂、支付前端或企业协作系统,分层隔离通常比单纯扩大服务器规格更有长期价值。
监控与复盘:判断清洗是否真的有效
TCP流量清洗的效果不能只看总流量。至少应同时记录新建连接速率、已建立连接数、SYN重传、握手成功率、源站CPU、网络丢包和业务错误率。监控周期可按分钟观察突发变化,再按小时比较攻击前后的基线;具体阈值要结合服务器规格、运营商线路和正常访问峰值确定。
每次事件结束后,保留触发规则、误拦截样本和恢复时间,区分是带宽耗尽、连接队列耗尽还是应用处理能力不足。只有找到瓶颈位置,下一次TCP流量清洗才能更快、更准确。
常见问题
1. 只开启防火墙就够了吗?
通常不够。防火墙适合端口和来源控制,但大规模流量可能先耗尽线路或设备资源,还需要边缘防护、握手保护和主机监控配合。
2. 连接限速会不会影响正常用户?
会有可能,尤其是共享出口用户。应先观察正常峰值,采用分端口、分角色和临时规则,并保留误拦截日志。
3. tcp_syncookies能解决所有TCP攻击吗?
不能。它主要针对半连接资源消耗,对完成握手后的高频请求、长连接占用和带宽型攻击仍需其他措施。
4. 什么时候应引入外部清洗服务?
当攻击流量超过本地线路、边缘设备或机房出口承载能力时,应考虑运营商或云端清洗,并提前确认回源、切换和恢复流程。
总体而言,TCP流量清洗应形成“边缘过滤、握手保护、速率控制、协议识别、分层隔离”的组合,而不是依赖单一规则。按照流量进入路径逐层削减压力,才能在攻击发生时保持更多关键服务可用,并缩短后续恢复时间。


