1. DDoS攻击概述:从一次真实故障说起
2018年夏天,我接手了一个紧急工单。某电商平台在促销活动前夜,核心业务突然全部瘫痪。登录超时、下单失败、连后台管理页面都打不开。运维团队以为是数据库挂了,重启了三次都没用。我登录防火墙一看——每秒80万条SYN包,全是伪造源IP。这就是典型的DDoS攻击。
说实话,那晚我熬到凌晨四点才把流量清洗干净。从那以后,我对DDoS攻击的理解就不再只是书本上的概念了。今天这一章,咱们就从头捋一捋:DDoS到底是什么?攻击者是怎么做到的?常见的攻击类型有哪些?
一句话总结:DDoS攻击就是攻击者控制大量“肉鸡”(被感染的设备),同时向目标服务器发送海量请求,导致服务器资源耗尽,无法服务正常用户。
1.1 什么是DDoS攻击
DDoS的全称是Distributed Denial of Service,翻译过来就是“分布式拒绝服务”。
拆开来看:
- Denial of Service(拒绝服务)——让服务器没法正常提供服务。比如你开了一家奶茶店,有人故意堵在门口不让顾客进去。
- Distributed(分布式)——不是一个人堵门,而是叫了几百号人从四面八方涌过来,把店门口围得水泄不通。
攻击者通常利用僵尸网络(Botnet)来发起攻击。这些“僵尸”可能是你家里的路由器、办公室的摄像头,甚至是某台忘了关的打印机。它们被植入恶意程序后,攻击者一声令下,所有设备同时向目标发起请求。
我个人的习惯:在分析DDoS事件时,第一件事不是看攻击流量有多大,而是先确认攻击类型。不同类型的攻击,防御策略完全不同。SYN Flood和HTTP Flood的应对方案,差了十万八千里。
1.2 攻击原理:为什么DDoS这么难防?
要理解DDoS的原理,得先明白一个核心问题:服务器的资源是有限的。
每台服务器能同时处理的连接数、CPU计算能力、网络带宽,都有上限。攻击者就是冲着这个上限来的。他们用远超服务器处理能力的流量,把资源全部占满,正常用户的请求自然就被拒之门外了。
我画了一张图,帮你直观理解DDoS的攻击链路:
你看,攻击者躲在幕后,通过控制服务器指挥僵尸网络。所有攻击流量像洪水一样涌向目标服务器,而正常用户被挡在外面。这就是DDoS最核心的运作模式。
我曾经踩过一个坑:有一次分析攻击日志,发现源IP分布在全球各地,我以为是高级分布式攻击。后来仔细一查,其实是某个云厂商的NAT网关出了问题,把几千个用户的流量都映射成了同一个出口IP。所以,不要只看IP分布就下结论,要结合流量特征综合判断。
1.3 常见攻击类型
DDoS攻击花样很多,但万变不离其宗。我根据攻击目标的不同,把它们分成三大类:网络层攻击、传输层攻击和应用层攻击。下面这张表帮你快速区分:
| 攻击类型 | 攻击目标 | 典型代表 | 攻击效果 |
|---|---|---|---|
| 网络层攻击 | 带宽资源 | UDP Flood、ICMP Flood | 占满出口带宽,导致正常流量无法进出 |
| 传输层攻击 | 连接资源 | SYN Flood、ACK Flood | 耗尽服务器连接表,新连接无法建立 |
| 应用层攻击 | 应用资源 | HTTP Flood、DNS Query Flood | 拖垮CPU/数据库,页面响应极慢或直接502 |
下面咱们逐个拆解,重点讲三个最经典的攻击类型。
1.3.1 SYN Flood:最经典的“半连接”攻击
SYN Flood是我在实战中遇到最多的攻击类型,没有之一。它的原理其实很简单,但杀伤力极大。
先回顾一下TCP三次握手:
- 客户端发送SYN包,请求建立连接。
- 服务器回复SYN+ACK包,表示“收到,我准备好了”。
- 客户端再回复ACK包,连接正式建立。
SYN Flood攻击就是利用了这个过程。攻击者发送大量SYN包,但源IP地址全是伪造的。服务器回复SYN+ACK后,等不到客户端的ACK确认。这些“半连接”会一直占用服务器的连接表资源,直到超时。
你想想看,如果每秒涌入几十万个伪造SYN包,服务器的连接表瞬间就被填满了。新的正常连接请求进来,直接就被丢弃了。
关键数据:Linux系统默认的SYN队列长度(tcp_max_syn_backlog)通常是1024或2048。也就是说,只要同时有2000个半连接未完成,新用户就再也连不上了。而攻击者每秒可以轻松发送几十万个SYN包。
我记得有一次,客户说他们的防火墙显示攻击流量只有200Mbps,但服务器已经彻底瘫痪了。我一看,原来是SYN Flood。200Mbps的流量虽然不大,但每秒的包数量(PPS)极高,直接把服务器的连接表打爆了。所以,评估DDoS攻击时,不能只看带宽,更要看PPS。
1.3.2 UDP Flood:简单粗暴的带宽消耗战
UDP Flood就没什么技术含量了,纯粹是“大力出奇迹”。攻击者向目标服务器的随机端口发送大量UDP包。服务器收到后,发现端口上没有应用在监听,就会回复ICMP“端口不可达”消息。
这个过程本身消耗的服务器资源并不多,但问题是:UDP包不需要建立连接,攻击者可以全速发送。如果攻击带宽超过了服务器的出口带宽,那不管服务器性能多强,流量都出不去。正常用户的请求自然也就进不来了。
我见过最夸张的一次UDP Flood,攻击流量达到了1.2Tbps。客户的100Gbps链路直接被撑爆,连运维人员远程登录都做不到。最后只能联系上游ISP在骨干网层面进行流量清洗。
我的经验:UDP Flood防御的关键在于“近源清洗”。越靠近攻击源进行流量过滤,效果越好。如果等到流量到了服务器门口再处理,带宽早就被占满了。所以,一定要和ISP或CDN厂商配合,在骨干网层面做流量调度。
1.3.3 HTTP Flood:最“聪明”的应用层攻击
HTTP Flood跟前面两种完全不同。它不伪造IP,也不发垃圾包,而是模拟正常用户的HTTP请求。攻击者控制大量肉鸡,向目标网站的URL(比如首页、登录接口、搜索接口)发送看似正常的GET或POST请求。
为什么说它“聪明”?因为这种攻击最难防御。流量特征和正常用户几乎一模一样:同样的User-Agent、同样的请求间隔、同样的Cookie。传统的基于IP或流量特征的清洗方案,很容易误伤正常用户。
我处理过一个案例:某在线教育平台在开学季遭到HTTP Flood攻击。攻击者专门刷“选课”接口,每个请求都带着合法的Session ID。我们的WAF一开始完全没识别出来,以为是正常的高并发。后来通过分析请求的行为模式才发现——正常用户选课前会先浏览课程详情,而攻击请求直接跳过了这个步骤,直奔提交接口。
避坑指南:我曾经天真地以为,只要把访问频率限制到每秒10次,就能防住HTTP Flood。结果攻击者控制了5000台肉鸡,每台每秒只发2个请求,总QPS轻松破万。所以,单靠限速是不够的,必须结合行为分析、JS挑战、CAPTCHA等多种手段。
1.4 三种攻击类型对比总结
为了方便你快速回顾,我把三种攻击类型的关键差异整理成了一张表:
| 对比维度 | SYN Flood | UDP Flood | HTTP Flood |
|---|---|---|---|
| 攻击层面 | 传输层(L4) | 网络层(L3) | 应用层(L7) |
| 消耗资源 | 连接表、CPU | 带宽 | CPU、数据库、应用线程 |
| 是否伪造IP | 是 | 通常伪造 | 一般不伪造 |
| 防御难度 | 中等 | 较低 | 较高 |
| 典型防御手段 | SYN Cookie、缩短超时 | 流量清洗、近源过滤 | WAF、行为分析、限速 |
嗯,到这里,DDoS攻击的基本概念和常见类型就讲完了。你可能会问:知道了这些,该怎么防呢?别急,后面的章节会一步步展开。从限速策略到流量清洗,从WAF配置到CDN调度,咱们一个一个来啃。
记住一句话:知己知彼,百战不殆。搞清楚了攻击者是怎么打的,你才能知道怎么防。这一章的内容,就是你的“知彼”第一步。