在現代網路攻擊中,TCP SYN Flood 以低成本、高破壞力著稱。攻擊者利用 TCP 三向交握的設計缺陷,大量佔用伺服器資源,使合法用戶的連線請求石沉大海。
TCP 三向交握的致命弱點
正常的 TCP 連線需完成三個步驟:客戶端送出 SYN,伺服器回應 SYN-ACK,客戶端再送出 ACK 完成握手。問題在於伺服器送出 SYN-ACK 後,必須將此「半開連線(Half-Open Connection)」暫存於 Backlog Queue,並等待 ACK 回應(預設逾時約 75 秒)。攻擊者正是利用這個等待視窗,以偽造來源 IP 的 SYN 封包淹沒伺服器,讓 Backlog Queue 被大量半開連線塞滿,新的合法連線因此遭到拒絕。
主流防禦機制解析
目前最有效的防禦手段是 SYN Cookie。啟用後,伺服器在送出 SYN-ACK 時不再佔用 Backlog Queue,而是將連線狀態編碼成一個加密雜湊值嵌入序號中;只有收到合法 ACK 且驗證通過,才建立真實連線。Linux 核心可透過 net.ipv4.tcp_syncookies=1 啟用此功能。此外,縮短 SYN-ACK 逾時時間、擴大 Backlog Queue 容量,以及上游 ISP 的流量清洗(Scrubbing),皆是常見的補充防禦層。
# Linux 啟用 SYN Cookie 防禦(立即生效)
sysctl -w net.ipv4.tcp_syncookies=1
# 擴大半開連線佇列上限
sysctl -w net.ipv4.tcp_max_syn_backlog=4096
💡 重點整理
- 攻擊核心:偽造來源 IP 的 SYN 封包填滿 Backlog Queue,阻斷合法連線。
- SYN Cookie:將連線狀態移出佇列,從根本上化解 Queue 耗盡問題。
- 參數調整:縮短逾時時間與擴大佇列為快速緩解的輔助手段。
- DDoS 場景:大規模攻擊需仰賴上游流量清洗或 CDN 防護層攔截。
TCP SYN Flood 的危害源於協定設計的信任假設。理解其原理是部署有效防禦的第一步;在生產環境中,SYN Cookie 搭配流量清洗是目前最務實的組合策略。
📚 參考文獻
-
RFC 4987 – TCP SYN Flooding Attacks and Common Mitigations(IETF 官方文件)
https://datatracker.ietf.org/doc/html/rfc4987 -
Linux Kernel Documentation – ip-sysctl: tcp_syncookies
https://www.kernel.org/doc/html/latest/networking/ip-sysctl.html -
Cloudflare Learning – What is a SYN Flood DDoS Attack?