DDoS攻击处置之所以频繁出现“越清洗越卡顿”的情况,根本原因在于把攻击流量和正常业务流量混在一起处理。很多运营者在遭受攻击后第一反应是提升带宽、上高防IP或者直接封禁来源IP,但如果没有先判断攻击流量类型,这些动作往往适得其反。比如一个以UDP反射放大为主的攻击,单纯扩容带宽并不能解决连接表耗尽的问题;而一个以慢速连接耗尽为主的CC攻击,封禁来源IP又可能误伤大量真实用户。所以防御DDoS的第一步不是“清洗”,而是“分清流量类型再处置”。

先看流量基线,才能识别异常

任何有效的DDoS防御都建立在流量基线之上。所谓基线,就是正常情况下业务系统在特定时间段的流量模型,包括每秒请求数、并发连接数、新建连接速率、入站与出站带宽比例、协议分布、源IP地理分布、请求URL集中度等指标。没有基线,就无法判断当前流量是否异常,更无法判断异常属于哪一类攻击。建议至少保存30天的流量采样数据,按分钟粒度记录核心指标,并区分工作日、节假日、业务高峰时段。当告警触发时,先对比基线数据,确认偏离幅度和偏离维度。比如带宽突增但请求数变化不大,可能是UDP洪水或ICMP洪水;带宽变化不大但新建连接速率暴增,可能是TCP SYN Flood或TLS握手耗尽;请求数暴增但带宽平稳,可能是HTTP Flood或慢速CC攻击。

按协议层划分攻击类型

DDoS攻击从协议层角度可以划分为网络层攻击、传输层攻击和应用层攻击三大类。网络层攻击主要包括ICMP Flood、IP分片攻击、伪造源地址的垃圾流量等,特点是数据包小、包速率高、目标在于耗尽网络设备处理能力。传输层攻击以TCP SYN Flood、UDP Flood、ACK Flood、RST Flood为代表,目标是消耗服务器连接表、防火墙会话表或负载均衡器的并发处理能力。应用层攻击则集中在HTTP、HTTPS、DNS、游戏协议等业务协议上,常见的有HTTP Flood、Slowloris慢速连接、DNS Query Flood、TLS握手耗尽等,特点是单个请求看起来正常,但整体请求逻辑异常,目标在于耗尽应用进程、数据库连接池或后端API资源。不同类型的攻击需要完全不同的处置策略,如果误判类型,清洗策略就会失效。

UDP与ICMP类攻击的识别与处置

UDP Flood和ICMP Flood是最常见的网络层攻击形式。识别特征非常明显:入站带宽在短时间内急剧上升,包速率可能达到数百万PPS以上,但正常业务如果是基于TCP的Web服务,UDP流量占比通常极低。此时可以先检查流量中UDP包的目的端口分布,如果目的端口随机分散,或者集中在NTP、DNS、SSDP、Memcached等易被利用的反射端口上,基本可以判定为UDP反射放大攻击。处置方法上,如果业务本身不依赖UDP,最直接有效的做法是在上游运营商或高防节点直接丢弃所有UDP流量,而不是等到流量进入源站再处理。如果业务依赖部分UDP服务,例如DNS或WebRTC,则需要基于目的端口和包大小做精细化过滤。对于ICMP Flood,绝大多数Web业务可以直接在边界设备上丢弃所有入站ICMP包,仅保留必要的PMTU发现功能。需要注意的是,UDP和ICMP攻击往往伴随源IP伪造,因此基于源IP的封禁几乎无效,必须依赖基于目的端口、包长度、TTL值、载荷特征等维度的过滤规则。

TCP SYN Flood的识别与处置

TCP SYN Flood攻击的目标是耗尽服务器的半连接队列。识别方法是观察TCP握手成功率,正常情况下SYN包与ACK包的比例接近1:1,而在SYN Flood攻击期间,SYN包数量远大于ACK包数量,同时服务器上会出现大量处于SYN_RECV状态的连接。此时如果直接封禁源IP,攻击者很容易通过伪造源IP绕过限制。更有效的做法是启用SYN Cookie机制,让服务器在收到SYN包时不立即分配连接资源,而是通过计算Cookie验证客户端真实性。对于无法启用SYN Cookie的旧系统,可以缩短SYN超时时间、增大半连接队列长度,并在前置防火墙或负载均衡器上部署SYN代理,由代理设备完成三次握手后再将合法连接转发到后端。此外,针对固定源IP的SYN Flood,可以结合速率限制和连接频率限制进行压制,但要注意阈值设置不能过低,否则会误伤NAT出口下的正常用户。

HTTP Flood与CC攻击的识别与处置

HTTP Flood和CC攻击是目前对Web业务威胁最大的应用层攻击类型。这类攻击的难点在于每个请求本身都是合法的HTTP请求,无法通过简单的协议特征过滤。识别方法需要结合业务逻辑和流量行为分析。例如正常用户的访问路径通常具有多样性,而CC攻击往往集中在少数几个URL上;正常用户的请求间隔呈现随机分布,而攻击工具的请求间隔高度规律;正常用户的User-Agent、Referer、Cookie等头字段具有多样性,而攻击流量往往使用固定或极少数的头字段组合。此外,可以观察请求是否携带完整的浏览器指纹,例如是否执行JavaScript、是否支持Cookie回传、是否加载了页面中的静态资源。很多CC攻击工具只发送裸HTTP请求,不会执行JS也不会加载图片,因此可以通过JS挑战或Cookie验证来区分真人浏览器和攻击脚本。对于动态API接口的CC攻击,可以结合业务限流、验证码、行为分析模型进行人机识别。处置时优先在WAF或高防节点上进行,避免攻击流量到达源站消耗应用资源。

慢速攻击的识别与处置

Slowloris、Slow POST、Slow Read等慢速攻击比高速洪水更隐蔽,它们通过建立大量连接后以极慢的速度发送请求或读取响应,长时间占用服务器的连接资源和线程资源。识别这类攻击需要关注连接的平均存活时间、单位时间内的数据发送速率、以及连接中处于活跃状态的线程占比。正常HTTP请求通常在几秒内完成,而慢速攻击的连接可能持续数十秒甚至数分钟,并且每个连接的数据传输速率极低。处置方法包括设置最小传输速率阈值,对低于阈值的连接强制断开;限制单个IP的并发连接数和连接存活时间;在Web服务器层面配置请求体超时和响应超时参数。对于Nginx,可以通过client_body_timeout、client_header_timeout、send_timeout等参数限制慢速连接;对于Apache,可以启用mod_reqtimeout模块设置请求接收超时。需要注意的是,慢速攻击的源IP通常是真实的,因此基于源IP的封禁有一定效果,但攻击者仍可能通过代理池轮换IP,所以更稳妥的方式是基于连接行为进行动态识别和阻断。

DNS类攻击的识别与处置

DNS服务遭受DDoS攻击时,情况比Web服务更复杂,因为DNS同时使用TCP和UDP协议,且UDP 53端口是业务必需端口,不能简单丢弃。DNS Query Flood的识别特征是查询速率异常升高,查询域名随机化或集中针对某个特定域名,查询类型异常,例如大量TXT、ANY、DNSSEC查询。DNS反射放大攻击则表现为大量来自公共DNS服务器的响应包涌入,源端口为53,目的端口为随机高端口,响应包远大于请求包。处置DNS Query Flood时,可以启用DNS Rate Limiting,对超过阈值的查询进行丢弃或返回REFUSED响应;对随机域名查询,可以启用域名白名单机制,仅对已备案域名进行递归解析;对ANY查询可以直接拒绝。针对DNS反射放大攻击,由于攻击流量来自被利用的公共DNS服务器,封禁源IP会误伤正常DNS解析,因此更有效的做法是在上游运营商部署基于响应包大小和源端口的过滤规则,或者使用DNS防护服务进行流量清洗。如果业务DNS服务仅面向固定用户群体,可以考虑使用Anycast架构分散攻击流量,并在各节点启用本地限速。

TLS握手耗尽攻击的识别与处置

TLS握手耗尽攻击利用的是TLS握手阶段非对称加密计算开销远大于普通TCP连接的特性。攻击者发送大量TLS ClientHello报文,但不完成后续握手,或者反复发起握手请求,消耗服务器的CPU资源。识别特征是服务器CPU使用率升高但业务请求量没有明显增加,同时存在大量处于握手状态的TLS连接。处置方法包括启用TLS会话复用,减少完整握手次数;在负载均衡器或反向代理层部署TLS卸载,将握手计算压力前移;限制单个IP的TLS握手频率和并发握手数;启用TLS 1.3的0-RTT机制降低握手成本。对于大规模的TLS握手耗尽攻击,可以在高防节点上部署握手代理,由代理完成握手验证后再将连接转发到源站,源站只处理已完成握手的连接。此外,可以结合客户端指纹识别,对不支持正常TLS扩展或指纹异常的客户端进行限制。

混合型攻击的处置顺序

现实中的DDoS攻击往往是混合型的,同时包含网络层洪水、传输层耗尽和应用层CC攻击。处置混合型攻击时,必须按照“先网络层、再传输层、后应用层”的顺序进行清洗。如果网络层流量没有先清理干净,传输层和应用层的防护设备会被海量垃圾流量淹没,无法正常工作。网络层清洗的核心是在上游运营商或高防节点完成,通过BGP牵引将流量引入清洗中心,基于目的端口、协议类型、包大小、TTL等特征丢弃明显的垃圾流量。传输层清洗重点处理SYN Flood、UDP Flood和连接表耗尽问题,启用SYN Cookie、连接速率限制和会话表保护机制。应用层清洗放在最后,针对HTTP Flood、CC攻击、慢速攻击等进行人机识别和行为分析。每一层清洗完成后都要验证清洗效果,确认正常业务流量没有受到明显影响,再进入下一层处置。很多防护失败案例都是因为跳过网络层直接处理应用层,导致WAF和源站被底层流量打挂。

处置后的复盘与策略优化

每次DDoS攻击处置结束后,都需要对攻击事件进行复盘,分析攻击流量的具体特征、清洗策略的有效性、误伤情况以及源站的实际承载表现。复盘的重点不是简单记录攻击峰值带宽,而是分析攻击流量与正常流量的差异维度,找出最具区分度的特征,将这些特征固化为后续的防护规则。例如某次攻击中攻击流量的TTL值集中在固定范围,而正常流量的TTL分布更广,那么后续就可以将TTL异常作为快速过滤条件。同时要评估清洗过程中是否误伤了正常用户,误伤率是多少,误伤主要集中在哪些地区或哪些运营商,后续如何调整阈值和策略来降低误伤。DDoS防御不是一次性的对抗,而是一个持续优化的过程,攻击者的手法在不断变化,防护策略也需要根据每次攻击的特征进行迭代更新。