DDoS攻击现状
DDoS(Distributed Denial of Service,分布式拒绝服务)攻击是互联网上最常见也最具破坏力的攻击方式之一。Cloudflare的2025年DDoS威胁报告显示,全球DDoS攻击数量同比增长了65%,峰值攻击流量已突破5 Tbps。
2024年10月,一次针对某全球CDN提供商的DDoS攻击达到了创纪录的5.6 Tbps,持续了约80秒。虽然持续时间不长,但足以对未做防护的目标造成毁灭性打击。
DDoS攻击的三种主要类型
攻击类型对比
| 攻击类型 | 网络层 | 原理 | 典型代表 | 攻击强度 | 防御难度 |
|---|---|---|---|---|---|
| 流量型 | L3/L4 | 带宽耗尽 | UDP Flood, ICMP Flood | 极高 | 高 |
| 协议型 | L3/L4 | 资源耗尽 | SYN Flood, Ping of Death | 高 | 中 |
| 应用层 | L7 | 服务耗尽 | HTTP Flood, Slowloris | 中 | 极高 |
流量型攻击
通过发送大量数据包耗尽目标的网络带宽。常见的UDP Flood攻击利用UDP协议无需握手的特点,向目标发送大量UDP数据包。
协议型攻击
利用网络协议的设计缺陷耗尽服务器资源。SYN Flood是最经典的例子——攻击者发送大量SYN包但不完成三次握手,耗尽服务器的半开连接表。
应用层攻击
这是最难防御的类型。攻击者发送看似合法的HTTP请求,但请求量远超服务器处理能力。由于每个请求都看起来正常,传统防火墙难以区分攻击流量和正常流量。
基础防御:系统层面
Linux内核参数优化
# /etc/sysctl.d/anti-ddos.conf
# 启用SYN Cookie防御SYN Flood
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_synack_retries = 2
# 减少TIME_WAIT连接
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
# 增大连接跟踪表
net.netfilter.nf_conntrack_max = 1048576
# 禁用ICMP广播响应
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 丢弃无效包
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 应用配置
# sudo sysctl --system
iptables防护规则
# 限制每个IP的新连接速率
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP
iptables -A INPUT -p tcp --dport 443 -m connlimit --connlimit-above 50 -j DROP
# 限制SYN包速率
iptables -A INPUT -p tcp --syn -m limit --limit 100/s --limit-burst 200 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
# 丢弃无效包
iptables -A INPUT -m state --state INVALID -j DROP
# 防御UDP Flood
iptables -A INPUT -p udp -m limit --limit 50/s -j ACCEPT
iptables -A INPUT -p udp -j DROP
# 防御ICMP Flood
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
中级防御:Nginx配置
# /etc/nginx/conf.d/anti-ddos.conf
# 限制请求速率
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
server {
listen 80;
server_name example.com;
# 应用速率限制
limit_req zone=req_limit burst=20 nodelay;
limit_conn conn_limit 10;
# 限制请求体大小
client_body_buffer_size 1k;
client_header_buffer_size 1k;
client_max_body_size 1m;
large_client_header_buffers 2 1k;
# 超时设置
client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 5 5;
send_timeout 10;
# 屏蔽常见攻击User-Agent
if ($http_user_agent ~* (wget|curl|libwww|python|nikto|scan)) {
return 403;
}
}
高级防御:CDN与专业防护
对于面临严重DDoS威胁的网站,仅靠服务器层面的防御是不够的。需要使用CDN或专业DDoS防护服务在网络边缘过滤攻击流量。
Cloudflare配置
Cloudflare提供了免费的基础DDoS防护。通过将DNS指向Cloudflare,攻击流量会在到达你的服务器之前被过滤:
# 确保源站IP不泄露
# 1. 检查DNS历史记录
# 2. 确保邮件头不暴露源站IP
# 3. 使用Cloudflare的Full (Strict) SSL模式
# 配置防火墙规则只允许Cloudflare IP
# Cloudflare IPv4地址范围
iptables -A INPUT -p tcp --dport 443 -s 173.245.48.0/20 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -s 103.21.244.0/22 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -s 103.22.200.0/22 -j ACCEPT
# ... 添加所有Cloudflare IP段
iptables -A INPUT -p tcp --dport 443 -j DROP
应急响应流程
当遭遇DDoS攻击时,按以下步骤响应:
- 确认攻击 — 检查流量监控,区分是DDoS还是突发正常流量
- 启用防护 — 如果使用CDN,开启"Under Attack"模式
- 通知ISP — 联系上游网络提供商协助过滤流量
- 记录证据 — 保存日志和流量数据,用于后续分析和取证
- 分析改进 — 攻击结束后,分析攻击特征,改进防御策略
详细的日志分析方法可以参考服务器日志审计。如果你正在使用防火墙,确保其规则能应对当前的攻击模式。
总结
DDoS防御是一个多层次的体系。小型网站可以通过内核参数优化、iptables规则和Nginx配置获得基础防护;中大型网站应使用CDN和专业的DDoS防护服务。最重要的是,在攻击发生之前就做好准备,而不是等到被攻击时才手忙脚乱。