早晨發現官網極慢,登入伺服器執行 netstat -anp | awk '{print $6}' | sort | uniq -c | sort -rn 發現 SYN_RECV 高達 589,單一 IP(山東棗莊聯通)發出 570 個 SYN 請求,導致正常用戶無法連線。無硬體防火牆權限,只能在本機緩解。
TCP 三次握手:Client 送 SYN → Server 回 SYN+ACK 進入 SYN_RECV → Client 送 ACK 進入 ESTABLISHED。攻擊者僅發 SYN 不回 ACK,佔滿半連接佇列,正常連線被擠出。
# 查看預設值
sysctl -a | grep _syn
net.ipv4.tcp_max_syn_backlog = 1024 # 半連接佇列長度
net.ipv4.tcp_syncookies = 1 # 啟用 SYN Cookie 防禦
net.ipv4.tcp_synack_retries = 5 # SYN+ACK 重試次數
net.ipv4.tcp_syn_retries = 5 # SYN 重試次數
sysctl -w net.ipv4.tcp_max_syn_backlog=2048 # 加大佇列
sysctl -w net.ipv4.tcp_syncookies=1 # 確保開啟
sysctl -w net.ipv4.tcp_synack_retries=3 # 減少重試,加速釋放
sysctl -w net.ipv4.tcp_syn_retries=3
立即生效:直接執行上述 sysctl -w 指令無需重啟。
# SYN Flood 限速:每秒 1 個 SYN
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
# 防埠掃描:限制 RST 回應
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
# 防 Ping of Death
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
# 保存規則
iptables-save > /etc/sysconfig/iptables
調整後再次檢查:SYN_RECV 從 589 降至 20 內,攻擊流量明顯被緩解。
核心參數調優(擴大佇列、啟用 SYN Cookie、降低重試)配合 iptables 限速,可在無硬體防火牆權限下有效緩解 SYN Flood。生產環境建議再加上專業 DDoS 清洗服務。