攻擊識別
netstat -an | grep :80 | wc -l 連接數異常暴增。
top 顯示 CPU/內存被佔滿,ksoftirqd 進程高。
- 日誌出現大量同源 IP 重複請求:
tail -f /var/log/nginx/access.log。
緊急封禁單 IP
# iptables 封禁
iptables -I INPUT -s 203.0.113.45 -j DROP
# 保存規則
service iptables save
自動化腳本:封禁高頻 IP
#!/bin/bash
# block_ddos.sh 每分鐘跑一次
LOG="/var/log/nginx/access.log"
THRESHOLD=200 # 每分鐘超過 200 次請求
awk '{print $1}' "$LOG" | sort | uniq -c | sort -nr |
while read count ip; do
if [ "$count" -gt "$THRESHOLD" ]; then
iptables -C INPUT -s "$ip" -j DROP 2>/dev/null || \
iptables -I INPUT -s "$ip" -j DROP
echo "$(date) Blocked $ip ($count req/min)" >> /var/log/ddos_block.log
fi
done
系統級加固
| 措施 | 命令/配置 | 說明 |
| 啟用 SYN Cookie | echo 1 > /proc/sys/net/ipv4/tcp_syncookies | 緩解 SYN Flood |
| 調大連接隊列 | echo 65535 > /proc/sys/net/core/somaxconn | 防止合法連接被丟棄 |
| 限制單 IP 並發 | Nginx: limit_conn_zone $binary_remote_addr zone=addr:10m; limit_conn addr 50; | 應用層限流 |
| 部署 WAF | ModSecurity + OWASP CRS | 攔截惡意載荷 |
| 接入高防 IP / CDN | 阿里云/騰訊雲/Cloudflare | 清洗流量在進入源站前 |
長期策略
- 架構無狀態化,橫向擴展前端節點。
- 關鍵接口加驗證碼、Token 桶限流。
- 建立流量基線,異常自動告警(Prometheus + Alertmanager)。
- 制定應急預案:切換高防、封禁段、熔斷降級。