DDoS的监测及防御

当有一天你发现自己的网站已经无法正常访问,服务器远程连接不上,数据中心机房那边通知你服务器流量非常大,那你可要做好心理准备了。这会可能已经有人盯上你的服务器上的业务了,如:大型商业网站,游戏等。在你获得一定利润的时候,那些“黑客”也可能想从你那里捞一笔“保护费”。可能是你服务器被人 DoS/DDoS攻击了。

让我们先了解一下DoS和DdoS相关的知识吧。

一、DoS/DDoS的介绍

1、什么是拒绝服务攻击(DoS)

DoS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络带宽攻击和连通性攻击。带宽攻击指以极大的通信量冲击网络,使得所有可用网络资源都被消耗殆尽,最后导致合法的用户请求就无法通过。连通性攻击指用大量的连接请求冲击计算机,使得所有可用的操作系统资源都被消耗殆尽,最终计算机无法再处理合法用户的请求。

2、什么是分布式拒绝服务攻击(DDoS)

分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多台傀儡机联合起来作为攻击平台(傀儡机,一般为黑客所控制的“肉鸡”),对一个或多个目标发动DoS 攻击,从而成倍地提高拒绝服务攻击的威力。通常,攻击者通过入侵一台服务器,在得到该服务器一定的权限以后,将DDoS主控程序安装在这台服务器上,在一个设定的时间主控程序将与大量代理程序通讯,代理程序已经被安装在黑客所控制的许多服务器上(包括通过其他途径获取的大量个人PC)。代理程序收到指令时就发动攻击。利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行。

如上图:

黑客通过控制傀儡机中的某一台(或他自己的计算机,为安全起见,一般他会选择一台傀儡机来控制其他的傀儡机),再利用这台傀儡机来指挥其余的傀儡机向目标服务器发动攻击。当然,这只是一个简单的示意图,还可以把上图想得更加复杂:黑客控制手中的十台、二十台傀儡机,再分别通过被这十台、二十台中的傀儡机去控制成千、上万乃至数十万的傀儡机对目标发动毁灭性的攻击。

打个形象而又不太恰当的比喻:两个人打架,其中某一个人对付不了对方,于是他把他的朋友全都叫来,多个对付一个,一个人面对那么多个人,你怎么也对付不了。

拒绝服务就是用超出被攻击目标处理能力的海量数据包消耗可用系统,带宽资源,致使正常的网络服务瘫痪的一种攻击手段。拒绝服务攻击采用的是单一的一对一的攻击手段,当CPU处理速度低、内存小及网络带宽小等,拒绝服务攻击的效果就很明显。

但是,随着互联网技术及硬件技术的飞速发展,现在的带宽都是以百兆、千兆为单位来计算,CPU多数亦是双核或四核的,内存现在也可以说是白菜价了。在这种环境下,使得拒绝服务的攻击的困难程度就加大了。

这样,分布式拒绝服务(DDoS)攻击就出现了。如果你理解了拒绝服务(DoS)攻击的话,在它的基础上,分布式拒绝服务攻击就不难理解了。如果说计算机与网络的处理攻击的能力加大了10倍,用一台傀儡机来攻击不再能起作用的话,攻击者使用10台傀儡机同时攻击呢?用100台呢?DDoS就是利用更多的傀儡机来发起进攻,以比从前更大的规模来进攻受害者。

二、DoS/DDoS攻击的现象

那么,服务器被DoS/DDoS攻击会是怎样的现象呢?

1、被攻击主机上有大量等待的TCP连接;

2、网络中充斥着大量的无用的数据包,源地址为假地址或私网中才可能出现的地址;

3、制造高流量无用数据,造成网络拥塞,使受害主机无法正常和外界通讯;

4、利用受害主机提供的服务或传输协议上的缺陷,反复高速的发出特定的服务请求,使受害主机无法及时处理所有正常请求;

5、严重时会造成系统运行缓慢或假死、甚至死机;

三、DoS/DdoS攻击的类型:

1、Synflood:该攻击以多个随机的源主机地址向目的主机发送SYN包,而在收到目的主机的SYN ACK后并不回应,这样,目的主机就为这些源主机建立了大量的连接队列,而且由于没有收到ACK一直维护着这些队列,造成了资源的大量消耗而不能向正常请求提供服务。

2、Smurf:该攻击向一个子网的广播地址发一个带有特定请求(如ICMP回应请求)的包,并且将源地址伪装成想要攻击的主机地址。子网上所有主机都回应广播包请求而向被攻击主机发包,使该主机受到攻击。

3、Land-based:攻击者将一个包的源地址和目的地址都设置为目标主机的地址,然后将该包通过IP欺骗的方式发送给被攻击主机,这种包可以造成被攻击主机因试图与自己建立连接而陷入死循环,从而很大程度地降低了系统性能。

4、Ping of Death:根据TCP/IP的规范,一个包的长度最大为65536字节。尽管一个包的长度不能超过65536字节,但是一个包分成的多个片段的叠加却能做到。当一个主机收到了长度大于65536字节的包时,就是受到了Ping of Death攻击,该攻击会造成主机的宕机。

5、Teardrop:IP数据包在网络传递时,数据包可以分成更小的片段。攻击者可以通过发送两段(或者更多)数据包来实现TearDrop 攻击。第一个包的偏移量为0,长度为N,第二个包的偏移量小于N。为了合并这些数据段,TCP/IP堆栈会分配超乎寻常的巨大资源,从而造成系统资源的缺乏甚至机器的重新启动。

6、PingSweep:使用ICMP Echo轮询多个主机。

7、Pingflood:该攻击在短时间内向目的主机发送大量ping包,造成网络堵塞或主机资源耗尽。

四、如何防御DoS/DdoS攻击

当某一天,你登陆服务器时,感觉服务器运行缓慢,甚至是根本就远程连接不上,数据中心机房工作人员通知你服务器流量非常大。这时候,你得分析是不是一定是受到了DoS/DDoS攻击。

以上讲了很多理论性的东西,各位看官可能还不一定都“消化”了。

那么在此告诉你们一条简单且易懂的命令就可以判定服务器是否真的受到了DoS/DdoS攻击:

在命令提示符下执行netstat –an,查看当前服务器对外的所有连接,如果发现有大量的SYN_RECEIVED、TIME_WAIT、FIN_WAIT_1等状态存在,而ESTABLISHED很少,则可判定肯定是遭受了资源耗尽攻击。

如果你的服务器托管在一家比较有条件的数据中心机房里,同时这一家公司又有抗DoS/DdoS攻击设备,不过据我所知,目前市面上大部分数据中心机房里的抗DoS/DDoS攻击设备不是无偿使用的。

具体怎么得到抗DoS/DDoS攻击设备在此不详细描述,可能是用数据中心机房的设备,有条件的单位也可以自己购买设备。

这种方法只能够抵抗一小部分的攻击,由于DoS/DDoS攻击的类型很多,加上新的变种攻击手段也层出不穷。

当你的抗DoS/DDoS攻击设备无法识别那些新的DoS/DDoS攻击,或由于攻击力度太大,抗DoS/DdoS攻击设备自身已经无法正常影响了,甚至攻击的带宽已经远远超出数据中心机房出口的总带宽,这时候安装什么抗攻击设备都是无能为力的。

相信你理解了Dos/DDoS攻击的真正含义后,你应该会明白我说那句话的意思。

这个时候你得让数据中心机房通知上级ISP运营商,在他们上级路由上将你的服务器IP地址临时过滤掉。并且你需要与数据中心机房实时保持联系,让他们及时在上级ISP运营商那里得到最新的消息,以便第一时间内将你服务器IP地址予以解封。

最后,给大家一些比较好的建议:

1、采用高性能的网络设备

首先要保证网络设备不能成为瓶颈,因此选择路由器、交换机、硬件防火墙等设备的时候要尽量选用知名度高、口碑好的产品。再就是假如和网络提供商有特殊关系或协议的话就更好了,当大量攻击发生的时候请他们在网络接点处做一下流量限制来对抗某些种类的DDOS攻击是非常有效的。

2、尽量避免NAT的使用

无论是路由器还是硬件防护墙设备要尽量避免采用网络地址转换NAT的使用,因为采用此技术会较大降低网络通信能力,其实原因很简单,因为NAT 需要对地址来回转换,转换过程中需要对网络包的校验和进行计算,因此浪费了很多CPU的时间,但有些时候必须使用NAT,那就没有好办法了。

3、充足的网络带宽保证

网络带宽直接决定了能抗受攻击的能力,假若仅仅有10M带宽的话,无论采取什么措施都很难对抗现在的SYNFlood攻击,当前至少要选择 100M的共享带宽,最好的当然是挂在1000M的主干上了。但需要注意的是,主机上的网卡是1000M的并不意味着它的网络带宽就是千兆的,若把它接在 100M的交换机上,它的实际带宽不会超过100M,再就是接在100M的带宽上也不等于就有了百兆的带宽,因为网络服务商很可能会在交换机上限制实际带宽为10M,这点一定要搞清楚。

4、升级主机服务器硬件

在有网络带宽保证的前提下,请尽量提升硬件配置,要有效对抗每秒10万个SYN攻击包,服务器的配置至少应该为:P4 2.4G/DDR512M/SCSI-HD,起关键作用的主要是CPU和内存,若有志强双CPU的话就用它吧,内存一定要选择DDR的高速内存,硬盘要尽量选择SCSI的,别只贪IDE价格不贵量还足的便宜,否则会付出高昂的性能代价,再就是网卡一定要选用3COM或Intel等名牌的,若是 Realtek的还是用在自己的PC上吧。

5、把网站做成静态页面

大量事实证明,把网站尽可能做成静态页面,不仅能大大提高抗攻击能力,而且还给黑客入侵带来不少麻烦,至少到现在为止关于HTML的溢出还没出现,看看吧!新浪、搜狐、网易等门户网站主要都是静态页面,若你非需要动态脚本调用,那就把它弄到另外一台单独主机去,免的遭受攻击时连累主服务器,当然,适当放一些不做数据库调用脚本还是可以的,此外,最好在需要调用数据库的脚本中拒绝使用代理的访问,因为经验表明使用代理访问你网站的80%属于恶意行为。

在以上五点建议的基础上,同时建议各位服务器管理员朋友,经常检查一下你所管理的服务器运行状况,千万别让自己管理的服务器变成了黑客用来攻击别人的傀儡机,对自己不好,对别人也不好。