SYN Flood 是最經典、最高發的 DDoS 攻擊之一(2000 年癱瘓 Yahoo)。利用 TCP 三次握手協議缺陷,成本低、效果劇烈。全面理解原理並部署多層防禦,方能有效緩解。
SYN=j → 客戶端進入 SYN_SENT。SYN=k, ACK=j+1(SYN+ACK) → 服務端在半連接佇列建立條目,狀態 SYN_RECV。ACK=k+1 → 雙方進入 ESTABLISHED,半連接佇列條目移除。關鍵參數:
net.ipv4.tcp_synack_retries(預設 5),每次等待時間指數增長(1s, 2s, 4s, 8s, 16s...),總等待時間約 63 秒。/etc/sysctl.conf
# 啟用 SYN Cookie(佇列滿時不建立條目,直接回攜帶加密 Cookie 的 SYN+ACK,合法客戶端回 ACK 含 Cookie 才建立連接)
net.ipv4.tcp_syncookies = 1
# 增大半連接佇列
net.ipv4.tcp_max_syn_backlog = 8192
# 減少 SYN+ACK 重傳次數(加速清理偽造連接)
net.ipv4.tcp_synack_retries = 3
# 啟用 TCP Fast Open(減少握手延遲,需客戶端支援)
net.ipv4.tcp_fastopen = 3
# 縮短 TIME_WAIT、擴大連接追蹤表
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
net.netfilter.nf_conntrack_max = 1000000
iptables -A INPUT -p tcp --syn -m limit --limit 25/s --limit-burst 50 -j ACCEPT(根據業務基線調整)。connlimit 模組限制單 IP 並發連接數。netstat -s | grep -i "embryonic\|SYN_RECV" 半連接數暴增。ss -s、watch -n1 'cat /proc/net/netstat' 觀察 TcpExtListenOverflows、TcpExtListenDrops、TcpExtTCPSynRetries。SYN_RECV、DROP 事件。SYN Flood 無法徹底根治(協議設計所限),但SYN Cookie + 速率限制 + SYN Proxy + 雲清洗 + 架構彈性組合拳,可將影響降至業務可接受範圍。