修改 /etc/sysctl.d/99-ddos-hardening.conf 並執行 sysctl --system 生效:
# 擴大半連接隊列容量 (預設 1024/128,視核心版本)
net.ipv4.tcp_max_syn_backlog = 8192
# 啟用 SYN Cookies (核心機制,不分配 socket 結構體即可驗證 ACK)
net.ipv4.tcp_syncookies = 1
# 減少 SYN+ACK 重試次數 (預設 5,加快釋放半連接)
net.ipv4.tcp_synack_retries = 2
# 減少主動發起連接的 SYN 重試 (客戶端行為,可選)
net.ipv4.tcp_syn_retries = 3
# 啟用 TCP Fast Open (TFO) 減少握手延遲 (核心 3.7+)
net.ipv4.tcp_fastopen = 3
# 防止 TCP 時間等待堆積
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
# 完全禁用 Ping 回應 (隱藏主機)
net.ipv4.icmp_echo_ignore_all = 1
# 或 僅限制速率 (推薦,保留診斷能力)
net.ipv4.icmp_ratelimit = 100 # 最小間隔 100ms (10pps)
net.ipv4.icmp_ratemask = 6168 # 僅限制 Echo Request (type 8) 等特定類型
# 允許每秒 6 個 ICMP Echo Request,突發 2 個,其餘拒絕
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 6/s --limit-burst 2 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-unreachable
# 保留必要的 ICMP 類型 (不可達、超時、參數問題) - PMTUD 依賴此類
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -A INPUT -p icmp --icmp-type parameter-problem -j ACCEPT
單純用 iptables 加成千上萬條 -s IP -j DROP 規則會嚴重拖慢封包處理 (O(N) 線性匹配)。ipset 使用哈希表/位圖實現 O(1) 查找。
# 1. 安裝
apt/dnf install ipset iptables
# 2. 建立集合 (hash:net 支援 CIDR 區段)
ipset create blacklist hash:net maxelem 1000000
# 3. 加入惡意 IP/網段
ipset add blacklist 192.168.1.100
ipset add blacklist 10.0.0.0/8
# 4. 掛載至 iptables (單條規則匹配整個集合)
iptables -I INPUT -m set --match-set blacklist src -j DROP
# 5. 持久化 (重啟後自動載入)
ipset save > /etc/ipset/blacklist.set
# 在啟動腳本/服務中執行: ipset restore < /etc/ipset/blacklist.set
# iptables 規則持久化: iptables-save > /etc/iptables/rules.v4
使用 iblocklist2ipset 等工具自動抓取公開威脅情報 (如 AbuseIPDB、Spamhaus、Emerging Threats) 並轉換為 ipset 格式:
pip install iblocklist2ipset
iblocklist2ipset generate --ipset blacklist "https://lists.blocklist.de/lists/all.txt" > blacklist.txt
ipset restore -f blacklist.txt
| 層級 | 技術 | 應對威脅 | 關鍵指標 |
|---|---|---|---|
| 核心網路堆疊 | sysctl TCP/ICMP 參數 | SYN Flood, ICMP Flood | 半連接隊列溢出率, CPU 使用率 |
| 主機防火牆 | iptables + ipset | 已知惡意 IP, 掃描器, 暴力破解 | 黑名單命中率, 規則匹配延遲 |
| 應用層 | Nginx/WAF/Rate Limit | CC 攻擊, API 濫用, 爬蟲 | QPS, 錯誤率, 延遲 P99 |
| 邊緣/雲端 | CDN/DDoS 防護服務 | 大流量體積型攻擊 (>10Gbps) | 清洗能力, 誤封率 |
原則:盡早攔截 (核心層 > 主機層 > 應用層 > 邊緣層),善用高效資料結構 (ipset),自動化威脅情報更新,建立監控告警閉環。