技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機(jī)純凈版,64位旗艦版,綠色軟件,免費(fèi)軟件下載基地!

當(dāng)前位置:主頁(yè) > 教程 > 服務(wù)器類(lèi) >

linux下防DDOS攻擊軟件及使用方法詳解

來(lái)源:技術(shù)員聯(lián)盟┆發(fā)布時(shí)間:2019-03-29 06:08┆點(diǎn)擊:

  互聯(lián)網(wǎng)如同現(xiàn)實(shí)社會(huì)一樣充滿(mǎn)鉤心斗角,網(wǎng)站被DDOS也成為站長(zhǎng)最頭疼的事。在沒(méi)有硬防的情況下,尋找軟件代替是最直接的方法,比如用 iptables,但是iptables不能在自動(dòng)屏蔽,只能手動(dòng)屏蔽。

  一、什么是DDOS攻擊?

  DDoS也就是分布式拒絕服務(wù)攻擊。它使用與普通的拒絕服務(wù)攻擊同樣的方法,但是發(fā)起攻擊的源是多個(gè)。通常攻擊者使用下載的工具滲透無(wú)保護(hù)的主機(jī),當(dāng)獲得該主機(jī)的適當(dāng)?shù)脑L(fǎng)問(wèn)權(quán)限后,攻擊者在主機(jī)中安裝軟件的服務(wù)或進(jìn)程(以下簡(jiǎn)侈怔理)。這些代理保持睡眠狀態(tài),直到從它們的主控端得到指令,對(duì)指定的目標(biāo)發(fā)起拒絕服務(wù)攻擊。

  二、如何確認(rèn)自己受到DDOS攻擊?

  在系統(tǒng)上執(zhí)行:

  netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

  執(zhí)行后,將會(huì)顯示服務(wù)器上所有的每個(gè)IP多少個(gè)連接數(shù)。

  以下是我自己用VPS測(cè)試的結(jié)果:

  li88-99:~# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

  1 114.226.9.132

  1 174.129.237.157

  1 58.60.118.142

  1 Address

  1 servers)

  2 118.26.131.78

  3 123.125.1.202

  3 220.248.43.119

  4 117.36.231.253

  4 119.162.46.124

  6 219.140.232.128

  8 220.181.61.31

  2311 67.215.242.196

  每個(gè)IP幾個(gè)、十幾個(gè)或幾十個(gè)連接數(shù)都還算比較正常,如果像上面成百上千肯定就不正常了。

  三、防范DDOS攻擊的方法:

  一些常用的防DDOS攻擊的方法,羅列如下:

  1.增加硬件防火墻和增加硬件設(shè)備來(lái)承載和抵御DDOS攻擊,最基本的方法,但成本比較高。

  2.修改SYN設(shè)置抵御SYN攻擊:

  SYN攻擊是利用TCP/IP協(xié)議3次握手的原理,發(fā)送大量的建立連接的網(wǎng)絡(luò)包,但不實(shí)際建立連接,最終導(dǎo)致被攻擊服務(wù)器的網(wǎng)絡(luò)隊(duì)列被占滿(mǎn),無(wú)法被正常用戶(hù)訪(fǎng)問(wèn)。

  Linux內(nèi)核提供了若干SYN相關(guān)設(shè)置,使用命令:

  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隊(duì)列的長(zhǎng)度,tcp_syncookies是一個(gè)開(kāi)關(guān),是否打開(kāi)SYN Cookie

  功能,該功能可以防止部分SYN攻擊。tcp_synack_retries和tcp_syn_retries定義SYN

  的重試次數(shù)。

  加大SYN隊(duì)列長(zhǎng)度可以容納更多等待連接的網(wǎng)絡(luò)連接數(shù),打開(kāi)SYN Cookie功能可以阻止部分

  SYN攻擊,降低重試次數(shù)也有一定效果。

  調(diào)整上述設(shè)置的方法是:

  增加SYN隊(duì)列長(zhǎng)度到2048:

  sysctl -w net.ipv4.tcp_max_syn_backlog=2048

  打開(kāi)SYN COOKIE功能:

  sysctl -w net.ipv4.tcp_syncookies=1

  降低重試次數(shù):

  sysctl -w net.ipv4.tcp_synack_retries=3

  sysctl -w net.ipv4.tcp_syn_retries=3

  為了系統(tǒng)重啟動(dòng)時(shí)保持上述配置,可將上述命令加入到/etc/rc.d/rc.local文件中。

  3.安裝iptables對(duì)特定ip進(jìn)行屏蔽。

  A.安裝iptables和系統(tǒng)內(nèi)核版本對(duì)應(yīng)的內(nèi)核模塊kernel-smp-modules-connlimit

  B. 配置相應(yīng)的iptables規(guī)則

  示例如下:

  (1)控制單個(gè)IP的最大并發(fā)連接數(shù)

  iptables -I INPUT -p tcp –dport 80 -m connlimit –connlimit-above 50 -j REJECT

  #允許單個(gè)IP的最大連接數(shù)為 30

  (2)控制單個(gè)IP在一定的時(shí)間(比如60秒)內(nèi)允許新建立的連接數(shù)

  iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –update –seconds 60

  –hitcount 30 -j REJECT

  iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –set -j ACCEPT

  #單個(gè)IP在60秒內(nèi)只允許最多新建30個(gè)連接

  (3)用iptables屏蔽IP

  iptables -I RH-Lokkit-0-50-INPUT 1 -p tcp -m tcp -s 213.8.166.227 --dport 80 --syn -j REJECT

  指定端口的參數(shù)是--dport 80;多了--syn參數(shù),可以自動(dòng)檢測(cè)sync攻擊

  (4)使用iptables禁止ping:

  iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 2 -j ACCEPT-A INPUT -p icmp -m icmp --icmp-type 8 -j REJECT --reject-with icmp-port-unreachable

  (5)允許某ip連接

  iptables -I RH-Firewall-1-INPUT 1 -p tcp -m tcp -s 192.168.0.51 --syn -j ACCEPT

  C. 驗(yàn)證

  (1)工具:flood_connect.c(用來(lái)模擬攻擊)

  (2)查看效果:

  使用

  watch ‘netstat -an | grep:21 | grep< 模擬攻擊客戶(hù)機(jī)的IP>| wc -l’

  實(shí)時(shí)查看模擬攻擊客戶(hù)機(jī)建立起來(lái)的連接數(shù),

  使用

  watch ‘iptables -L -n -v | grep< 模擬攻擊客戶(hù)機(jī)的IP>’

  查看模擬攻擊客戶(hù)機(jī)被 DROP 的數(shù)據(jù)包數(shù)。

  D.注意

  為了增強(qiáng)iptables防止CC攻擊的能力,最好調(diào)整一下ipt_recent的參數(shù)如下:

  #cat/etc/modprobe.conf

  options ipt_recent ip_list_tot=1000 ip_pkt_list_tot=60

  #記錄1000個(gè)IP地址,每個(gè)地址記錄60個(gè)數(shù)據(jù)包

  #modprobe ipt_recent

  E.可編寫(xiě)腳本自動(dòng)提娶攻擊ip然后自動(dòng)屏蔽:

  */2 * * * * /usr/local/nginx/var/log/drop.sh

  #!/bin/sh

  cd /usr/local/nginx/var/log

  tail access.log -n 1000 |grep vote.php | |sort |uniq -c |sort -nr |awk '{if ($2!=null && $1>50)}' > drop_ip.txt

  for i in `cat drop_ip.txt`

  do

  /sbin/iptables -I INPUT -s $i -j DROP;

  done

  這shell 每幾分鐘執(zhí)行一次,就可自動(dòng)屏蔽那些不正常IP,相信大家都看的懂,下面是針對(duì)連接數(shù)屏蔽代碼

  #!/bin/sh

  /bin/netstat -ant |grep 80 |awk '{print $5}' |awk -F : '{print $1}' |sort |uniq -c |sort -rn |grep -v -E '192.168|127.0' |awk '{if ($2!=null && $1>50)}' > drop_ip.txt

  for i in `cat drop_ip.txt`

  do

  /sbin/iptables -I INPUT -s $i -j DROP;

  done

  說(shuō)下,grep -v -E '192.168|127.0' 也就是排除內(nèi)網(wǎng)IP,免得把自己給屏蔽了,當(dāng)然還可以加些自己的IP。

  4.安裝DDoS deflate自動(dòng)抵御DDOS攻擊: