面對 CC 攻擊、惡意爬蟲,單一 IP 短時間內對 80 端口發起大量連接。本文提供一個可落地的 Bash 腳本,每分鐘掃描連接數,自動將超閾值 IP 丟入 iptables 黑名單。
#!/bin/bash
# 統計 80 端口連接數,提取 IP 並計數,門檻 100
netstat -an | grep :80 | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | awk '$1 > 100 {print $1,$2}' > /root/bad_ip.txt
cat /root/bad_ip.txt >> /root/back_bad.txt # 歷史歸檔
# 逐行讀取 IP 並封禁(示範前 3 個,實際建議全量迴圈)
for ip in $(awk '{print $2}' /root/bad_ip.txt); do
iptables -A INPUT -p tcp -s "$ip" -j REJECT
done
while read count ip; do ... done < /root/bad_ip.txt 處理所有超標 IP。ss -s 總連接數、帶寬使用率動態調整門檻。iptables -D 或 fail2ban 設定封禁時效 (如 1 小時)。/etc/cron.d/ 或 systemd timer,確保權限與環境變數正確。| 方案 | 優點 | 缺點 |
|---|---|---|
| 本腳本 | 零依賴、極輕量、透明可控 | 需自行處理邊界情況、無 Web UI |
| fail2ban | 成熟、支援多服務、正則靈活、自動解封 | Python 依賴、配置稍複雜 |
| CrowdSec | 眾源威脅情報、決策引擎、現代化架構 | 資源佔用較大、學習曲線 |
| WAF (ModSecurity/Nginx+Lua) | 應用層防護、精準語義分析 | 延遲略高、規則維護成本 |
腳本只是起點,完整防禦體系需「邊緣清洗 + 主機防護 + 威脅情報 + 應急響應」多層疊加。