標籤:
netstat -anp |awk ‘{print $6}‘|sort|uniq -c |sort -rn
172 ESTABLISHED
59 CONNECTED
589 SYN_RECV
15 STREAM
SYN居然這麼高,繼續追查是那些ip發出的SYN:
[[email protected] ~]# netstat -an | grep SYN | awk ‘{print $5}‘ | awk -F: ‘{print $1}‘ | sort | uniq -c | sort -nr | more
首先說一下SYN的攻擊原理:
在TCP/IP協議中,TCP協議提供可靠的串連服務,採用三向交握建立一個串連。
第一次握手:建立串連時,用戶端發送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;
第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;
第三向交握:用戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此包發送完畢,用戶端和伺服器進入ESTABLISHED狀態,完成三向交握。 完成三向交握,用戶端與伺服器開始傳送資料.
如果使用者與伺服器發起串連請求只進行到第二次握手而不再響應伺服器,伺服器就會不停地等待使用者的確認,如果過多這樣的串連就會把伺服器端的串連隊列佔滿就會導致正常的使用者無法建立串連。所以我們直接從SYN的串連上進行如下改動:
查看linux預設的syn配置:
[[email protected] ~]# sysctl -a | grep _syn
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5
tcp_max_syn_backlog 是SYN隊列的長度,加大SYN隊列長度可以容納更多等待串連的網路連接數。tcp_syncookies是一個開關,是否開啟SYN Cookie 功能,該功能可以防止部分SYN攻擊。tcp_synack_retries和tcp_syn_retries定義SYN 的重試串連次數,將預設的參數減小來控制SYN串連次數的盡量少。
以下是我修改後的參數,可以根據自己伺服器的實際情況進行修改:
[[email protected] ~]# more /etc/rc.d/rc.local #!/bin/sh # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don‘t # want to do the full Sys V style init stuff. touch /var/lock/subsys/local ulimit -HSn 65535 /usr/local/apache2/bin/apachectl start ##### 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 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
也有的人喜歡用存取控制清單來防止SYN的攻擊,在一定程度上減緩了syn的攻擊:
Syn 洪水攻擊
#iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT --limit 1/s 限制syn並發數每秒1次
防連接埠掃描
# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
死亡之ping
# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT#>iptables-save >/etc/sysconfig/iptables
進行查看,#iptables -L
ACCEPT tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN limit: avg 1/sec burst 5
ACCEPT tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/RST limit: avg 1/sec burst 5
ACCEPT icmp -- anywhere anywhere icmp echo-request limit: avg 1/sec burst 5
再次進行查看syn串連:
[[email protected] ~]# netstat -an | grep SYN | awk ‘{print $5}‘ | awk -F: ‘{print $1}‘ | sort | uniq -c | sort -nr | more 20 10.92.10.220 1 125.43.36.199
明顯SYN串連數已經下來了
CentOS防SYN攻擊