這篇文章主要介紹了linux 防御SYN攻擊步驟詳解,本文適用于懂些linux系統(tǒng)維護(hù)的朋友學(xué)習(xí),不適合新手。新手建議用百度云加速或者高防IP(需要的聯(lián)系主機(jī)吧)
今天早上一到公司登錄公司官網(wǎng)的時(shí)候感覺(jué)挺慢,登錄服務(wù)器查看官網(wǎng)訪問(wèn)情況:[aliyunzixun@xxx.com~]#netstat-anp|awk'{print$6}’|sort|uniq-c|sort-rn172ESTABLISHED59CONNECTED589SYN_RECV15STREAMSYN居然這么高,繼續(xù)追查是那些ip發(fā)出的SYN:[aliyunzixun@xxx.com~]#netstat-an|grepSYN|awk'{print$5}’|awk-F:'{p
今天早上一到公司登錄公司官網(wǎng)的時(shí)候感覺(jué)挺慢,登錄服務(wù)器查看官網(wǎng)訪問(wèn)情況:
[aliyunzixun@xxx.com ~]# netstat -anp |awk ‘{print $6}’|sort|uniq -c |sort -rn
172 ESTABLISHED
59 CONNECTED
589 SYN_RECV
15 STREAM
SYN居然這么高,繼續(xù)追查是那些ip發(fā)出的SYN:
[aliyunzixun@xxx.com ~]# netstat -an | grep SYN | awk ‘{print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -nr | more
570 x.x.x.x
(ip 就不寫出了,是山東棗莊聯(lián)通的一個(gè)ip),只是這一個(gè)ip就發(fā)出了這么多的syn請(qǐng)求連接,本來(lái)我們web服務(wù)器的并發(fā)數(shù)不是很高,這樣一來(lái)正常的用戶請(qǐng)求得不到相應(yīng),頁(yè)面無(wú)法打開(kāi)。因?yàn)橛布阑饓w集團(tuán)IT部管理,我沒(méi)有權(quán)限,所以只能在本地服務(wù)器上做些措施對(duì)SYN攻擊進(jìn)行部分減緩。
首先說(shuō)一下SYN的攻擊原理:
在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù),采用三次握手建立一個(gè)連接。
第一次握手:建立連接時(shí),客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);
第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。 完成三次握手,客戶端與服務(wù)器開(kāi)始傳送數(shù)據(jù).

查看linux默認(rèn)的syn配置:
[aliyunzixun@xxx.com ~]# 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隊(duì)列的長(zhǎng)度,加大SYN隊(duì)列長(zhǎng)度可以容納更多等待連接的網(wǎng)絡(luò)連接數(shù)。tcp_syncookies是一個(gè)開(kāi)關(guān),是否打開(kāi)SYN Cookie 功能,該功能可以防止部分SYN攻擊。tcp_synack_retries和tcp_syn_retries定義SYN 的重試連接次數(shù),將默認(rèn)的參數(shù)減小來(lái)控制SYN連接次數(shù)的盡量少。
以下是我修改后的參數(shù),可以根據(jù)自己服務(wù)器的實(shí)際情況進(jìn)行修改:
[aliyunzixun@xxx.com ~]# 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
為了不重啟服務(wù)器而使配置立即生效,可以執(zhí)行
#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
也有的人喜歡用訪問(wèn)控制列表來(lái)防止SYN的攻擊,在一定程度上減緩了syn的攻擊:
Syn 洪水攻擊
#iptables -A INPUT -p tcp –syn -m limit –limit 1/s -j ACCEPT
–limit 1/s 限制syn并發(fā)數(shù)每秒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
進(jìn)行查看,#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
再次進(jìn)行查看syn連接:
[aliyunzixun@xxx.com ~]# 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連接數(shù)已經(jīng)下來(lái)了。
-
- 以上是一次SYN攻擊之戰(zhàn)之Linux如何防SYN攻擊的內(nèi)容,更多的內(nèi)容,歡迎關(guān)注主機(jī)吧站長(zhǎng)教學(xué)網(wǎng)。