VPS 突然带宽跑满、CPU 100%,SSH 都连不上。服务商发邮件说疑似遭受 DDoS 攻击,如果不处理就要封机。今天分享 DDoS 攻击的识别方法和应急防护手段,关键时刻能救服务器一命。
一、识别攻击类型
- 带宽耗尽型(Volumetric)
- UDP Flood、ICMP Flood、DNS Amplification
- 特征:入站带宽突然飙满,正常流量被挤掉
- 连接耗尽型(Protocol)
- SYN Flood、ACK Flood、Ping of Death
- 特征:大量半开连接,
netstat看到大量SYN_RECV
- 应用层攻击(Application Layer)
- HTTP Flood、Slowloris、CC 攻击
- 特征:带宽不高,但 Web 服务响应极慢或崩溃
二、快速诊断命令
# 查看当前连接数
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
# 查看 SYN_RECV 数量(SYN Flood 特征)
netstat -n -p | grep SYN_RECV | wc -l
# 查看当前带宽使用
iftop -i eth0
# 查看连接来源 IP
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -20
三、iptables 应急防护
防 SYN Flood:
# 启用 SYN Cookie
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# 限制 SYN 连接速率
iptables -A INPUT -p tcp --syn -m limit --limit 1/second --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
防 UDP Flood:
# 丢弃非必要的 UDP
iptables -A INPUT -p udp --dport 53 -m limit --limit 10/second -j ACCEPT
iptables -A INPUT -p udp -j DROP
防特定 IP:
# 封禁攻击源(根据 netstat 结果)
iptables -A INPUT -s 1.2.3.4 -j DROP
四、Nginx 层 CC 防护
# 限制单 IP 连接数
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 10;
# 限制请求速率
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
limit_req zone=one burst=20 nodelay;
# 屏蔽空 User-Agent
if ($http_user_agent ~ "^$") {
return 403;
}
五、应急流程
1. 发现异常 → 2. 确认攻击类型 → 3. 临时封禁 → 4. 启用防护 → 5. 联系服务商 → 6. 溯源分析 


