防 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_retries和tcp_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 攻擊了。

評論
(0)暫無評論,來說兩句吧