萬盛學電腦網

 萬盛學電腦網 >> 服務器教程 >> linux下防DDOS攻擊軟件及使用方法詳解

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

   互聯網如同現實社會一樣充滿鉤心斗角,網站被DDOS也成為站長最頭疼的事。在沒有硬防的情況下,尋找軟件代替是最直接的方法,比如用 iptables,但是iptables不能在自動屏蔽,只能手動屏蔽。

  一、什麼是DDOS攻擊?

  DDoS也就是分布式拒絕服務攻擊。它使用與普通的拒絕服務攻擊同樣的方法,但是發起攻擊的源是多個。通常攻擊者使用下載的工具滲透無保護的主機,當獲得該主機的適當的訪問權限後,攻擊者在主機中安裝軟件的服務或進程(以下簡侈怔理)。這些代理保持睡眠狀態,直到從它們的主控端得到指令,對指定的目標發起拒絕服務攻擊。

  二、如何確認自己受到DDOS攻擊?

  在系統上執行:

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

  執行後,將會顯示服務器上所有的每個IP多少個連接數。

  以下是我自己用VPS測試的結果:

  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

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

  三、防范DDOS攻擊的方法:

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

  1.增加硬件防火牆和增加硬件設備來承載和抵御DDOS攻擊,最基本的方法,但成本比較高。

  2.修改SYN設置抵御SYN攻擊:

  SYN攻擊是利用TCP/IP協議3次握手的原理,發送大量的建立連接的網絡包,但不實際建立連接,最終導致被攻擊服務器的網絡隊列被占滿,無法被正常用戶訪問。

  Linux內核提供了若干SYN相關設置,使用命令:

  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隊列的長度,tcp_syncookies是一個開關,是否打開SYN Cookie

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

  的重試次數。

  加大SYN隊列長度可以容納更多等待連接的網絡連接數,打開SYN Cookie功能可以阻止部分

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

  調整上述設置的方法是:

  增加SYN隊列長度到2048:

  sysctl -w net.ipv4.tcp_max_syn_backlog=2048

  打開SYN COOKIE功能:

  sysctl -w net.ipv4.tcp_syncookies=1

  降低重試次數:

  sysctl -w net.ipv4.tcp_synack_retries=3

  sysctl -w net.ipv4.tcp_syn_retries=3

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

  3.安裝iptables對特定ip進行屏蔽。

  A.安裝iptables和系統內核版本對應的內核模塊kernel-smp-modules-connlimit

  B. 配置相應的iptables規則

  示例如下:

  (1)控制單個IP的最大並發連接數

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

  #允許單個IP的最大連接數為 30

  (2)控制單個IP在一定的時間(比如60秒)內允許新建立的連接數

  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

  #單個IP在60秒內只允許最多新建30個連接

  (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

  指定端口的參數是--dport 80;多了--syn參數,可以自動檢測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. 驗證

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

  (2)查看效果:

  使用

  watch ‘netstat -an | grep:21 | grep< 模擬攻擊客戶機的IP>| wc -l’

  實時查看模擬攻擊客戶機建立起來的連接數,

  使用

  watch ‘iptables -L -n -v | grep< 模擬攻擊客戶機的IP>’

  查看模擬攻擊客戶機被 DROP 的數據包數。

  D.注意

  為了增強iptables防止CC攻擊的能力,最好調整一下ipt_recent的參數如下:

  #cat/etc/modprobe.conf

  options ipt_recent ip_list_tot=1000 ip_pkt_list_tot=60

  #記錄1000個IP地址,每個地址記錄60個數據包

  #modprobe ipt_recent

  E.可編寫腳本自動提娶攻擊ip然後自動屏蔽:

  */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 每幾分鐘執行一次,就可自動屏蔽那些不正常IP,相信大家都看的懂,下面是針對連接數屏蔽代碼

  #!/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

  說下,grep -v -E '192.168|127.0' 也就是排除內網IP,免得把自己給屏蔽了,當然還可以加些自己的IP。

  4.安裝DDoS deflate自動抵御DDOS攻擊:

  DDoS deflate是一款免費的用來防御和減輕DDoS攻擊的腳本。它通過netstat監測跟蹤創建大量網絡連接的IP地址,在檢測到某個結點超過預設的限制時,該程序會通過APF或IPTABLES禁止或阻擋這些IP.

  DDoS deflate官方網站:

  (1)安裝DDoS deflate

  wget

  chmod 0700 install.sh //添加權限

  ./install.sh //執行

  (2)配置DDoS deflate

  下面是DDoS deflate的默認配置位於/usr/local/ddos/ddos.conf ,內容如下:

  ##### Paths of the script and other files

  PROGDIR=”/usr/local/ddos”

  PROG=”/usr/local/ddos/ddos.sh”

  IGNORE_IP_LIST=”/usr/local/ddos/ignore.ip.list” //IP地址白名單

  CRON=”/etc/cron.d/ddos.cron” //定時執行程序

  APF=”/etc/apf/apf”

  IPT=”/sbin/iptables”

  ##### frequency in minutes for running the script

  ##### Caution: Every time this setting is changed run the script with –cron

  ##### option so that the new frequency takes effect

  FREQ=1 //檢查時間間隔,默認1分鐘

  ##### How many connections define a bad IP? Indicate that below.

  NO_OF_CONNECTIONS=150 //最大連接數,超過這個數IP就會被屏蔽,一般默認即可

  ##### APF_BAN=1 (Make sure your APF version is atleast 0.96)

  ##### APF_BAN=0 (Uses iptables for banning ips instead of APF)

  APF_BAN=1 //使用APF還是iptables,推薦使用iptables

  ##### KILL=0 (Bad IPs are’nt banned good for interactive execution of script)

  ##### KILL=1 (Recommended setting)

  KILL=1 //是否屏蔽IP,默認即可

  #### An email is sent to the following address when an IP is banned.

  ##### Blank would suppress sending of mails

  EMAIL_TO=”root” //當IP被屏蔽時給指定郵箱發送郵件,推薦使用,換成自己的郵箱即可

  ##### Number of seconds the banned ip should remain in blacklist.

  BAN_PERIOD=600 //禁用IP時間,默認600秒,可根據情況調整

  用戶可根據給默認配置文件加上的注釋提示內容,修崗?置文件。

copyright © 萬盛學電腦網 all rights reserved