DDoS 攻击与防御详解
DDoS(分布式拒绝服务攻击)是目前网络安全领域最具破坏性的攻击方式之一,其核心是利用大规模分布式节点向目标发起流量冲击,耗尽目标资源(带宽、CPU、内存等),导致合法用户无法访问服务。本文将从攻击原理、常见类型到防御策略进行全面解析。
DDoS 攻击的核心原理
从 DoS 到 DDoS
- DoS(拒绝服务攻击):单一节点向目标发送大量请求,占用目标资源(如带宽、连接数),使目标无法响应合法请求(如早期的 “ping 洪水” 攻击)。但随着服务器性能提升(如千兆带宽、高并发处理),单一节点的 DoS 攻击效果已大幅减弱。
- DDoS(分布式拒绝服务攻击):攻击者通过控制大量 “肉鸡”(被入侵的计算机、物联网设备等)组成 “僵尸网络”,协同向目标发起攻击。由于攻击流量来自海量分布式节点,规模可达数百 Gbps 甚至 Tbps,远超单一服务器的承载能力,因此破坏力极强。
攻击目标
DDoS 攻击的核心目标是耗尽目标的关键资源,包括:
- 网络带宽(如通过海量数据包占满链路);
- 服务器连接数(如通过大量 TCP 连接耗尽系统的文件描述符);
- 计算资源(如通过复杂请求消耗 CPU / 内存);
- 应用层服务(如通过高频次业务请求拖垮数据库)。
常见 DDoS 攻击类型
网络层攻击:利用协议缺陷发起流量冲击
(1)SYN Flood(SYN 洪水攻击)
- 原理:利用 TCP 三次握手的缺陷,攻击者向目标发送大量伪造源 IP 的 SYN 请求(连接建立请求),目标服务器会为每个请求分配资源并返回 SYN-ACK,但攻击者不回复 ACK,导致目标的半连接队列被占满,无法处理合法连接。
- 特点:攻击流量以 TCP SYN 包为主,单包体积小但数量庞大,可快速耗尽服务器的连接资源。
(2)UDP Flood(UDP 洪水攻击)
- 原理:UDP 协议无连接验证机制,攻击者向目标的随机端口发送大量 UDP 数据包,目标收到后会因 “端口不可达” 返回 ICMP 错误包,形成双向流量冲击,消耗带宽资源。
- 变种:DNS Query Flood(向 DNS 服务器发送海量随机域名解析请求,利用 DNS 递归查询特性放大流量)、NTP Amplification(利用 NTP 服务器的 “monlist” 命令,将小请求放大为大量响应流量)。
应用层攻击:针对业务逻辑的精准打击
(1)CC 攻击(HTTP Flood)
- 原理:模拟正常用户发起大量 HTTP 请求(如访问动态页面、提交表单),但这些请求会触发目标的复杂业务逻辑(如多次数据库查询、大数据量计算),消耗服务器的 CPU、内存和数据库资源。
- 特点:攻击流量与正常请求相似(难以通过特征识别),专门绕过 CDN 和缓存,直接冲击后端业务系统(如电商的商品详情页、论坛的搜索功能)。
(2)Slowloris(慢 loris 攻击)
- 原理:向目标建立大量 HTTP 连接,但每次只发送少量数据(如每隔一段时间发送一个字节),保持连接不关闭,逐渐耗尽服务器的最大连接数,使新的合法请求无法建立连接。
- 特点:攻击流量小但持续时间长,针对 Web 服务器的连接数限制(如 Nginx 的
worker_connections)。
DDoS 防御策略:多层次协同防护
DDoS 防御需结合流量清洗、资源隔离、业务优化等多重手段,形成从网络层到应用层的完整防护体系。
网络层防御:过滤恶意流量
(1)流量清洗(Scrubbing)
- 原理:通过高防 IP 或流量清洗设备,将攻击流量引流至专用清洗中心,利用特征识别(如 SYN 包频率、UDP 端口分布)和行为分析(如异常源 IP 的请求模式),过滤恶意流量,仅将合法流量转发至目标服务器。
- 适用场景:防御 SYN Flood、UDP Flood 等大流量攻击,需依赖运营商级别的带宽和处理能力(如 T 级清洗中心)。
(2)协议优化与限制
- 针对 SYN Flood:启用 SYN Cookie(服务器不维护半连接队列,而是通过 Cookie 验证客户端的合法性)、调小半连接超时时间(如
net.ipv4.tcp_synack_retries=1)。 - 针对 UDP Flood:限制服务器对 “端口不可达” 的 ICMP 响应(如关闭
net.ipv4.icmp_echo_ignore_broadcasts)、禁止非必要 UDP 服务(如 NTP、SNMP)暴露在公网。
应用层防御:精准识别恶意请求
(1)CC 攻击防御
- CDN 与缓存加速:将静态资源(如图片、CSS)通过 CDN 分发,动态页面通过缓存(如 Redis)减少数据库查询,降低后端压力。
- 请求频率限制:通过 WAF(Web 应用防火墙)设置单 IP 的请求频率阈值(如每秒最多 10 次请求),超过阈值则临时封禁。
- 人机验证:对高频请求或异常行为(如短时间内访问大量页面)触发验证码(如滑块验证、短信验证),区分真人与机器人。
(2)Slowloris 防御
- 连接超时控制:在 Web 服务器中设置合理的超时时间(如 Nginx 的
client_body_timeout 10s、keepalive_timeout 30s),自动关闭长时间不活跃的连接。 - 并发连接限制:限制单 IP 的最大并发连接数(如 Nginx 的
limit_conn模块),防止单一来源占用过多连接。
基础设施与架构优化
(1)弹性扩容与负载均衡
- 采用云服务器或容器化部署(如 K8s),在攻击发生时快速扩容实例数量,分担流量压力。
- 通过负载均衡(如 LVS、HAProxy)将流量分发至多个后端节点,避免单点故障。
(2)隐藏真实 IP
- 利用 CDN、反向代理(如 Cloudflare)或高防 IP,使目标服务器的真实 IP 不直接暴露在公网,攻击者只能攻击代理节点,无法直接冲击源站。
(3)僵尸网络溯源与阻断
- 与安全厂商合作,通过威胁情报识别已知的 “肉鸡” IP 段,在防火墙或路由器中提前封禁。
- 对异常流量的源 IP 进行追踪(如通过 BGP 路由追踪),联动运营商封禁攻击源。
应急响应机制
- 提前演练:制定 DDoS 攻击应急预案,明确攻击发生时的流量切换(如从源站切换至高防 IP)、资源扩容、团队协作流程。
- 实时监控:通过流量监控工具(如 Zabbix、Prometheus)实时跟踪带宽使用率、连接数、CPU 负载等指标,设置异常告警(如带宽突增 10 倍)。
- 分级处置:根据攻击规模(如 10Gbps 以下、100Gbps 以上)启动不同级别的防御措施(如自动清洗、人工介入、临时下线非核心业务)