在中国,每年DDOS的数量数不胜数,针对vps的攻击时无刻不在发生。身在江湖之中,我们不得不有一些防身之法。


第一篇,脚本篇


DDoS deflate是一款Linux/centos减轻/防止ddos攻击的一个小程序,相当于软件防火墙。注意,此程序仅仅能抵御较低流量的攻击,大流量攻击连用了上百台高档服务器做了负载均衡的新浪都扛不住,何况一个小小的普通服务器或vps。对此程序不要期望过高。这里仅仅介绍一下,对于一些简单的软件攻击可能还有点作用。 


CTOHOM制作的DDoS deflate一键安装脚本: 

wget http://www.ctohome.com/linux-vps-pack/soft/ddos/ddos.sh; 
sh ddos.sh; 

netstat -ntu | awk '{print }' | cut -d: -f1 | sort | uniq -c | sort -n 
ddosdeflate提供了以上查看当前连接数的shell 

脚本做了什么? 

默认将iptables防火墙作为拦截工具,并将并发数改成了60/秒就触发屏蔽IP 
将本机IP都加入了IP白名单,然后强行不允许自动更新白名单列表。如果你需要修改IP白名单列表,请先执行 chattr -i /usr/local/ddos/ignore.ip.list   然后再vi进行修改 
卸载:wget http://www.ctohome.com/linux-vps-pack/soft/ddos/uninstall.ddos;sh uninstall.ddos; 
安装后,可以手工运行脚本 

/usr/local/ddos/ddos.sh -k 30 强行屏蔽连接数大于30的IP 
更多使用说明,请直接 more /usr/local/ddos/ddos.sh 查看 

DDoS deflate介绍 

DDoS deflate是一款免费的用来防御和减轻DDoS攻击的脚本。它通过netstat监测跟踪创建大量网络连接的IP地址,在检测到某个结点超过预设的限 制时,该程序会通过APF或IPTABLES禁止或阻挡这些IP. 

DDoS deflate官方网站:http://deflate.medialayer.com/ 

如何确认是否受到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几个、十几个或几十个连接数都还算比较正常,如果像上面成百上千肯定就不正常了。 


1、安装DDoS deflate 

wget http://www.inetbase.com/scripts/ddos/install.sh   //下载DDoS  deflate 
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,将APF_BAN的值改为0即可。 

##### 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秒,可根据情况调整 
用户可根据给默认配置文件加上的注释提示内容,修改配置文件。 



卸载 

wget http://www.inetbase.com/scripts/ddos/uninstall.ddos 
chmod 0700 uninstall.ddos 
./uninstall.ddos 


白名单设置: 

有时候默认的白名单经常有失误,为了避免这个情况,我们可以手工设置白名单的ip,然后强制不允许修改 

vi /usr/local/ddos/ignore.ip.list 

手工设置白名单IP 


chattr +i /usr/local/ddos/ignore.ip.list 

强制不允许修改 



chattr -i /usr/local/ddos/ignore.ip.list 

解除不允许修改 


手工用iptables屏蔽IP: 


单个IP的命令是 
iptables -I INPUT -s 124.115.0.199 -j DROP 

恢复单个IP: 

iptables -D INPUT -s 124.115.0.199 -j DROP 


封IP段的命令是 
iptables -I INPUT -s 124.115.0.0/16 -j DROP 
iptables -I INPUT -s 124.115.3.0/16 -j DROP 
iptables -I INPUT -s 124.115.4.0/16 -j DROP 

封整个段的命令是 
iptables -I INPUT -s 124.115.0.0/8 -j DROP 

封几个段的命令是 
iptables -I INPUT -s 61.37.80.0/24 -j DROP 
iptables -I INPUT -s 61.37.81.0/24 -j DROP 

原文地址:http://www.ctohome.com/FuWuQi/df/318.html 

或许可以试试其它的呢。 

1.wget http://blogimg.chinaunix.net/blog/upfile2/071213142033.gz 

tar zxvf mod_evasive_1.10.1.tar.gz 

2.安装 

cd mod_evasive 

/usr/local/apache2/bin/apxs -i -a -c mod_dosevasive20.c 

3.配置 
vi /usr/local/apache2/conf/httpd.conf 

添加下面内容 

LoadModule dosevasive20_module libexec/apache22/mod_dosevasive20.so 

<IfModule> 
DOSHashTableSize 3097 
DOSPageCount 5 
DOSSiteCount 100 
DOSPageInterval 2 
DOSSiteInterval 2 
DOSBlockingPeriod 600 
DOSEmailNotify 111@111.com 
DOSLogDir "/var/log/mod_evasive" 
</IfModule> 

有时候,得配置成以下,可能和apache的版本有关系吧 
<IfModule mod_evasive20.c> 
DOSHashTableSize 3097 
DOSPageCount 5 
DOSSiteCount 50 
DOSPageInterval 2 
DOSSiteInterval 2 
DOSBlockingPeriod 600 
DOSEmailNotify 111@111.com 
DOSLogDir "/var/log/mod_evasive" 
</IfModule> 
以上配置为每两秒一个ip只能刷新一个页面5次,每两秒一个ip只能打开一个网站总页面为50 
4.重新启动apache2,配置完毕。 
DOSEmailNotify 111@111.com 
#设置受到攻击时接收攻击信息提示的邮箱地址。 
DOSLogDir "/var/log/mod_evasive"#攻击日志存放目录,注意这个目录的权限,是运行apache程序的用户。 
5.测试 

打开IE ,访问网站http://test.com 不断快速刷新网页就会出现错误提示,说明防泛有效,查看/tmp目录会dow.ip 日志文件。 

说明: 

DOSHashTableSize 3097 记录和存放黑名单的哈西表大小,如果服务器访问量很大,可以加大该值 
DOSPageCount 5 同一个页面在同一时间内可以被统一个用户访问的次数,超过该数字就会被列为攻击,同一时间的数值可以在DosPageInterval参数中设置。 
DOSSiteCount 50 同一个用户在同一个网站内可以同时打开的访问数,同一个时间的数值在DOSSiteInterval中设置。 
DOSPageInterval 2 设置DOSPageCount中时间长度标准,默认值为1。 
DOSSiteInterval 2 设置DOSSiteCount中时间长度标准。 

DOSBlockingPeriod 10 被封时间间隔秒,这中间会收到 403 (Forbidden) 的返回。

当然追踪的时候需要隐藏自己的IP,很多网站主会选择用一个VPN来达到自目的,如Nydus, Astrill, 等很容易买到。


第二章 追踪篇

  TTL,或者 time-to-live,所有网络中的数据包中都用这个字段来表示数据包经过了几跳。每一次路由器将一个数据包发出去的时候,就会将这个字段减一。当这个字段为零的时候,数据包将会被丢弃。以防止路由器无限制发送数据包造成死循环。
很多操作系统发送数据包的时候默认 TTL 值是64,因此,当一个数据包到达的时候,如果 TTL 值为46,我们便会知道这个数据包在你的机器和发送数据包的机器之间经过了18个节点(64-18=46)。
netresec 所发现的结果正如下图中所示,下图显示了客户端和服务器之间的一些数据包,我机器发送给百度服务器的数据包 TTL 起始值是64,第一个响应包的 TTL 值是46,因为百度发送的数据包起始值为64,期间经过18次路由跳转才到达我的电脑。当我发起 web 请求之后,我收到的数据包中的 TTL 值很奇怪,TTL 值分别是98和99。这表明数据包明显不是来自最初的服务器,而是一些中间设备。
  traceroute 是一个很棒的工具。它可以发送 TTL 为任意值的数据包,比如1,2,3.。。等等。因为有如此低的 TTL,这些数据包无法到达目标机器,当这些数据包的 TTL 值为0的时候,路由器就会丢掉这个包,并且路由器会返回一个用于通知的数据包,叫做Time-Exceeded message,地址是路由器的地址。因此,我可以收集到我喝目标服务器之间的所有路由器。
  那么中间人劫持的设备到底在哪里?为了回答这个问题,我需要写代码,我自己写了一个小的 traceroute 工具,它并不是只发送一个数据包,而是首先建立一个有正常TTL 值的链接,所以,无论如何数据包都可以到达目标机器,然后,使用发起一个 http 请求,携带的包得 TTL 值是比较小的,所以这个数据包在到达目标前就会被丢弃掉,但是,当中间人劫持设备受到这个数据包的时候,会更新 TTL 的值,这样,我就可以发现中间人设备在什么地方了。
我发现中间人设备潜伏在11和12跳之间。web请求中 TTL 值为11的时候数据包没有响应,而 TTL 值为12的时候,返回了正常响应

第三章 防御篇

从拒绝服务攻击诞生到现在已经有了很多的发展,从最初的简单Dos到现在的DdoS。那么什么是Dos和DdoS呢?DoS是一种利用单台计算机的攻击方式。而DdoS(Distributed Denial of Service,分布式拒绝服务)是一种基于DoS的特殊形式的拒绝服务攻击,是一种分布、协作的大规模攻击方式,主要瞄准比较大的站点,比如一些商业公司、搜索引擎和政府部门的站点。DdoS攻击是利用一批受控制的机器向一台机器发起攻击,这样来势迅猛的攻击令人难以防备,因此具有较大的破坏性。如果说以前网络管理员对抗Dos可以采取过滤IP地址方法的话,那么面对当前DdoS众多伪造出来的地址则显得没有办法。所以说防范DdoS攻击变得更加困难,如何采取措施有效的应对呢?下面我们从两个方面进行介绍。
二、预防为主保证安全
DdoS攻击是黑客最常用的攻击手段,下面列出了对付它的一些常规方法。
 (1)定期扫描
要定期扫描现有的网络主节点,清查可能存在的安全漏洞,对新出现的漏洞及时进行清理。骨干节点的计算机因为具有较高的带宽,是黑客利用的最佳位置,因此对这些主机本身加强主机安全是非常重要的。而且连接到网络主节点的都是服务器级别的计算机,所以定期扫描漏洞就变得更加重要了。
 (2)在骨干节点配置专业的抗拒绝服务设备
抗拒绝服务设备针对目前广泛存在的DOS、DDOS等攻击而设计,为您的网站、信息平台、基于Internet的服务等提供完善的保护,使其免受别有用心之人的攻击、破坏。这类产品在国内应用较为广泛的有绿盟、中新金盾。
 (3)用足够的机器承受黑客攻击
这是一种较为理想的应对策略。如果用户拥有足够的容量和足够的资源给黑客攻击,在它不断访问用户、夺取用户资源之时,自己的能量也在逐渐耗失,或许未等用户被攻死,黑客已无力支招儿了。不过此方法需要投入的资金比较多,平时大多数设备处于空闲状态,和目前中小企业网络实际运行情况不相符。
 (4)充分利用网络设备保护网络资源
所谓网络设备是指路由器、防火墙等负载均衡设备,它们可将网络有效地保护起来。当网络被攻击时最先死掉的是路由器,但其他机器没有死。死掉的路由器经重启后会恢复正常,而且启动起来还很快,没有什么损失。若其他服务器死掉,其中的数据会丢失,而且重启服务器又是一个漫长的过程。特别是一个公司使用了负载均衡设备,这样当一台路由器被攻击死机时,另一台将马上工作。从而最大程度的削减了DdoS的攻击。
 (5)过滤不必要的服务和端口
可以使用Inexpress、Express、Forwarding等工具来过滤不必要的服务和端口,即在路由器上过滤假IP。比如Cisco公司的CEF(Cisco Express Forwarding)可以针对封包Source IP和Routing Table做比较,并加以过滤。只开放服务端口成为目前很多服务器的流行做法,例如WWW服务器那么只开放80而将其他所有端口关闭或在防火墙上做阻止策略。
 (6)检查访问者的来源
使用Unicast Reverse Path Forwarding等通过反向路由器查询的方法检查访问者的IP地址是否是真,如果是假的,它将予以屏蔽。许多黑客攻击常采用假IP地址方式迷惑用户,很难查出它来自何处。因此,利用Unicast Reverse Path Forwarding可减少假IP地址的出现,有助于提高网络安全性。
 (7)过滤所有RFC1918 IP地址
RFC1918 IP地址是内部网的IP地址,像10.0.0.0、192.168.0.0 和172.16......


Logo

更多推荐