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攻击时,按以下步骤响应:

  1. 确认攻击 — 检查流量监控,区分是DDoS还是突发正常流量
  2. 启用防护 — 如果使用CDN,开启"Under Attack"模式
  3. 通知ISP — 联系上游网络提供商协助过滤流量
  4. 记录证据 — 保存日志和流量数据,用于后续分析和取证
  5. 分析改进 — 攻击结束后,分析攻击特征,改进防御策略

详细的日志分析方法可以参考服务器日志审计。如果你正在使用防火墙,确保其规则能应对当前的攻击模式。

总结

DDoS防御是一个多层次的体系。小型网站可以通过内核参数优化、iptables规则和Nginx配置获得基础防护;中大型网站应使用CDN和专业的DDoS防护服务。最重要的是,在攻击发生之前就做好准备,而不是等到被攻击时才手忙脚乱。