CentOS防SYN攻擊

[root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn

172?ESTABLISHED

59?CONNECTED

589?SYN_RECV

15?STREAM

SYN居然這么高,繼續(xù)追查是那些ip發(fā)出的SYN:

[root@tweb?~]#netstat?-an?|?grep?SYN?|?awk?'{print?$5}'?|?awk?-F:?'{print?$1}'?|?sort?|?uniq?-c?|?sort?-nr?|?more

570?x.x.x.x

(ip?就不寫(xiě)出了,是山東棗莊聯(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ù).

如果用戶與服務(wù)器發(fā)起連接請(qǐng)求只進(jìn)行到第二次握手而不再響應(yīng)服務(wù)器,服務(wù)器就會(huì)不停地等待用戶的確認(rèn),如果過(guò)多這樣的連接就會(huì)把服務(wù)器端的連接隊(duì)列占滿就會(huì)導(dǎo)致正常的用戶無(wú)法建立連接。所以我們直接從SYN的連接上進(jìn)行如下改動(dòng):

查看linux默認(rèn)的syn配置:

[root@web?~]#?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)行修改:

[root@web?~]#?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連接:

[root@web?~]#?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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容