防 SYN 攻擊之封鎖 SYN Recv 連線

5,303 0

今天早上一起床,就上伺服器看了下,猛然發現 CPU 飆升 99%。排查了一會,發現是被 CC 攻擊了。網路連線裡出現大量 SYN 連線,佔用了所有的資源,導致前端無法開啟網站。經過許久,我終於找到了解決方案:封鎖 SYN 的連線。這樣可以隔絕大部分攻擊。下面分享一下我的思路。

解決方案

SYN 攻擊是利用 TCP/IP 協定 3 次握手的原理,發送大量的建立連線的網路封包,但不實際建立連線,最終導致被攻擊伺服器的網路佇列被佔滿,無法被正常使用者存取。

在 SSH 中用命令 sysctl -a | grep syn 可以看到以下內容:

net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5
  • tcp_max_syn_backlog 是 SYN 佇列的長度。
  • tcp_syncookies 是一個開關,用於是否開啟 SYN Cookie 功能。該功能可以防止部分 SYN 攻擊。
  • tcp_synack_retriestcp_syn_retries 定義了 SYN 的重試次數。

加大 SYN 佇列長度可以容納更多等待連線的網路連線數;開啟 SYN Cookie 功能可以阻止部分 SYN 攻擊;降低重試次數也有一定效果。

推薦值:

net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_syn_retries = 3

設定完這些參數後,就能有效隔絕 SYN 連線帶來的 CC 攻擊了。

SYN 攻擊

評論

(0)

暫無評論,來說兩句吧

發佈評論

© 2026 一紙忘憂. 保留所有權利.

一紙忘憂的個人網站,關於技術探索與日常生活,記錄 Web 開發、後端與 DevOps 實踐,分享軟體工具、數位體驗,以及程式碼之外的見聞與思考。