彩票查询_2021美洲杯决赛:阿根廷vs巴西回放_2025世俱杯参赛球队有哪些_英格兰乙级联赛 - 竞彩足球500

快壓

當(dāng)前位置:首頁 > 電腦技巧 > 正文

liux防御-和SYS攻擊者過招實(shí)錄

瀏覽次數(shù):|更新日期:2014年09月22日

  今天早上一到公司登錄公司官網(wǎng)的時(shí)候感覺挺慢,登錄服務(wù)器查看官網(wǎng)訪問情況:
  [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就不寫出了,是山東棗莊聯(lián)通的一個(gè)ip),只是這一個(gè)ip就發(fā)出了這么多的syn請(qǐng)求連接,本來我們web服務(wù)器的并發(fā)數(shù)不是很高,這樣一來正常的用戶請(qǐng)求得不到相應(yīng),頁面無法打開。因?yàn)橛布阑饓w集團(tuán)IT部管理,我沒有權(quán)限,所以只能在本地服務(wù)器上做些措施對(duì)SYN攻擊進(jìn)行部分減緩。
  首先說一下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ù)器開始傳送數(shù)據(jù).
  
  如果用戶與服務(wù)器發(fā)起連接請(qǐng)求只進(jìn)行到第二次握手而不再響應(yīng)服務(wù)器,服務(wù)器就會(huì)不停地等待用戶的確認(rèn),如果過多這樣的連接就會(huì)把服務(wù)器端的連接隊(duì)列占滿就會(huì)導(dǎo)致正常的用戶無法建立連接。所以我們直接從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ì)列的長度(計(jì)算機(jī)基礎(chǔ)知識(shí)),加大SYN隊(duì)列長度可以容納更多等待連接的網(wǎng)絡(luò)連接數(shù)。tcp_syncookies是一個(gè)開關(guān),是否打開SYN Cookie 功能,該功能可以防止部分SYN攻擊。tcp_synack_retries和tcp_syn_retries定義SYN 的重試連接次數(shù),將默認(rèn)的參數(shù)減小來控制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 dont
  # 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
  也有的人喜歡用訪問控制列表來防止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 anywheretcp flags:FIN,SYN,RST,ACK/SYN limit: avg 1/sec burst 5
  ACCEPT tcp–anywhere anywheretcp flags:FIN,SYN,RST,ACK/RST limit: avg 1/sec burst 5
  ACCEPT icmp –anywhere anywhereicmp 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
  明顯SYN連接數(shù)已經(jīng)下來了。