Cisco路由器如何防止DDoS*** 1、使用 ip verfy unicast reverse-path 网络接口命令 这个功能检查每一个经过路由器的数据包。在路由器的CEF(Cisco Express Forwarding)表该数据包所到达网络接口的所有路由项中,如果没有该数据包源IP地址的路由,路由器将丢弃该数据包。例如,路由器接收到一个源IP地址为1.2.3.4的数据包,如果CEF路由表中没有为IP地址1.2.3.4提供任何路由(即反向数据包传输时所需的路由),则路由器会丢弃它。 单一地址反向传输路径转发(Unicast Reverse Path Forwarding)在ISP(局端)实现阻止SMURF***和其它基于IP地址伪装的***。这能够保护网络和客户免受来自互联网其它地方的侵扰。使用Unicast RPF 需要打开路由器的"CEF swithing"或"CEF distributed switching"选项。不需要将输入接口配置为CEF交换(switching)。只要该路由器打开了CEF功能,所有独立的网络接口都可以配置为其它交换(switching)模式。RPF(反向传输路径转发)属于在一个网络接口或子接口上激活的输入端功能,处理路由器接收的数据包。 在路由器上打开CEF功能是非常重要的,因为RPF必须依靠CEF。Unicast RPF包含在支持CEF的Cisco IOS 12.0 及以上版本中,但不支持Cisco IOS 11.2或11.3版本。 2、使用访问控制列表(ACL)过滤RFC 1918中列出的所有地址 参考以下例子: interface xy ip access-group 101 in access-list 101 deny ip 10.0.0.0 0.255.255.255 any access-list 101 deny ip 192.168.0.0 0.0.255.255 any access-list 101 deny ip 172.16.0.0 0.15.255.255 any access-list 101 permit ip any any 3、参照RFC 2267,使用访问控制列表(ACL)过滤进出报文 参考以下例子: {ISP中心} -- ISP端边界路由器 -- 客户端边界路由器 -- {客户端网络} ISP端边界路由器应该只接受源地址属于客户端网络的通信,而客户端网络则应该只接受源地址未被客户端网络过滤的通信。以下是ISP端边界路由器的访问控制列表(ACL)例子: access-list 190 permit ip {客户端网络} {客户端网络掩码} any access-list 190 deny ip any any [log] interface {内部网络接口} {网络接口号} ip access-group 190 in 以下是客户端边界路由器的ACL例子: access-list 187 deny ip {客户端网络} {客户端网络掩码} any access-list 187 permit ip any any access-list 188 permit ip {客户端网络} {客户端网络掩码} any access-list 188 deny ip any any interface {外部网络接口} {网络接口号} ip access-group 187 in ip access-group 188 out 如果打开了CEF功能,通过使用单一地址反向路径转发(Unicast RPF),能够充分地缩短访问控制列表(ACL)的长度以提高路由器性能。为了支持Unicast RPF,只需在路由器完全打开CEF;打开这个功能的网络接口并不需要是CEF交换接口。 4、使用CAR(Control Access Rate)限制ICMP数据包流量速率 参考以下例子: interface xy rate-limit output access-group 2020 3000000 512000 786000 conform-action transmit exceed-action drop access-list 2020 permit icmp any any echo-reply 请参阅IOS Essential Features 获取更详细资料。 5、设置SYN数据包流量速率 interface {int} rate-limit output access-group 153 45000000 100000 100000 conform-action transmit exceed-action drop rate-limit output access-group 152 1000000 100000 100000 conform-action transmit exceed-action drop access-list 152 permit tcp any host eq www access-list 153 permit tcp any host eq www established 在实现应用中需要进行必要的修改,替换: 45000000为最大连接带宽 1000000为SYN flood流量速率的30%到50%之间的数值。 burst normal(正常突变)和 burst max(最大突变)两个速率为正确的数值。 注意,如果突变速率设置超过30%,可能会丢失许多合法的SYN数据包。使用"show interfaces rate-limit"命令查看该网络接口的正常和过度速率,能够帮助确定合适的突变速率。这个SYN速率限制数值设置标准是保证正常通信的基础上尽可能地小。 警告:一般推荐在网络正常工作时测量SYN数据包流量速率,以此基准数值加以调整。必须在进行测量时确保网络的正常工作以避免出现较大误差。 另外,建议考虑在可能成为SYN***的主机上安装IP Filter等IP过滤工具包。 6、搜集证据并联系网络安全部门或机构 如果可能,捕获***数据包用于分析。建议使用SUN工作站或Linux等高速计算机捕获数据包。常用的数据包捕获工具包括TCPDump和snoop等。基本语法为: tcpdump -i interface -s 1500 -w capture_file snoop -d interface -o capture_file -s 1500 本例中假定MTU大小为1500。如果MTU大于1500,则需要修改相应参数。将这些捕获的数据包和日志作为证据提供给有关网络安全部门或机构。 |
DDoS***概念
DoS的***方式有很多种,最基本的DoS***就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。
DDoS***手段是在传统的DoS***基础之上产生的一类***方式。单一的DoS***一般是采用一对一方式的,当***目标CPU速度低、内存小或者网络带宽小等等各项性能指标不高它的效果是明显的。随着计算机与网络技术的发展,计算机的处理能力迅速增长,内存大大增加,同时也出现了千兆级别的网络,这使得DoS***的困难程度加大了 - 目标对恶意***包的"消化能力"加强了不少,例如你的***软件每秒钟可以发送3,000个***包,但我的主机与网络带宽每秒钟可以处理10,000个***包,这样一来***就不会产生什么效果。
这时侯分布式的拒绝服务***手段(DDoS)就应运而生了。你理解了DoS***的话,它的原理就很简单。如果说计算机与网络的处理能力加大了10倍,用一台***机来***不再能起作用的话,***者使用10台***机同时***呢?用100台呢?DDoS就是利用更多的傀儡机来发起进攻,以比从前更大的规模来进攻受害者。
高速广泛连接的网络给大家带来了方便,也为DDoS***创造了极为有利的条件。在低速网络时代时,***占领***用的傀儡机时,总是会优先考虑离目标网络距离近的机器,因为经过路由器的跳数少,效果好。而现在电信骨干节点之间的连接都是以G为级别的,大城市之间更可以达到2.5G的连接,这使得***可以从更远的地方或者其他城市发起,***者的傀儡机位置可以在分布在更大的范围,选择起来更灵活了。
被DDoS***时的现象
- 被***主机上有大量等待的TCP连接
- 网络中充斥着大量的无用的数据包,源地址为假
- 制造高流量无用数据,造成网络拥塞,使受害主机无法正常和外界通讯
- 利用受害主机提供的服务或传输协议上的缺陷,反复高速的发出特定的服务请求,使受害主机无法及时处理所有正常请求
- 严重时会造成系统死机
***运行原理
如图一,一个比较完善的DDoS***体系分成四大部分,先来看一下最重要的第2和第3部分:它们分别用做控制和实际发起***。请注意控制机与***机的区别,对第4部分的受害者来说,DDoS的实际***包是从第3部分***傀儡机上发出的,第2部分的控制机只发布命令而不参与实际的***。对第2和第3部分计算机,***有控制权或者是部分的控制权,并把相应的DDoS程序上传到这些平台上,这些程序与正常的程序一样运行并等待来自***的指令,通常它还会利用各种手段隐藏自己不被别人发现。在平时,这些傀儡机器并没有什么异常,只是一旦***连接到它们进行控制,并发出指令的时候,***傀儡机就成为害人者去发起***了。
有的朋友也许会问道:"为什么***不直接去控制***傀儡机,而要从控制傀儡机上转一下呢?"。这就是导致DDoS***难以追查的原因之一了。做为***者的角度来说,肯定不愿意被捉到(我在小时候向别人家的鸡窝扔石头的时候也晓得在第一时间逃掉,呵呵),而***者使用的傀儡机越多,他实际上提供给受害者的分析依据就越多。在占领一台机器后,高水平的***者会首先做两件事:1. 考虑如何留好后门(我以后还要回来的哦)!2. 如何清理日志。这就是擦掉脚印,不让自己做的事被别人查觉到。比较不敬业的***会不管三七二十一把日志全都删掉,但这样的话网管员发现日志都没了就会知道有人干了坏事了,顶多无法再从日志发现是谁干的而已。相反,真正的好手会挑有关自己的日志项目删掉,让人看不到异常的情况。这样可以长时间地利用傀儡机。
但是在第3部分***傀儡机上清理日志实在是一项庞大的工程,即使在有很好的日志清理工具的帮助下,***也是对这个任务很头痛的。这就导致了有些***机弄得不是很干净,通过它上面的线索找到了控制它的上一级计算机,这上级的计算机如果是***自己的机器,那么他就会被揪出来了。但如果这是控制用的傀儡机的话,***自身还是安全的。控制傀儡机的数目相对很少,一般一台就可以控制几十台***机,清理一台计算机的日志对***来讲就轻松多了,这样从控制机再找到***的可能性也大大降低。
***是如何组织一次DDoS***的?
这里用"组织"这个词,是因为DDoS并不象***一台主机那样简单。一般来说,***进行DDoS***时会经过这样的步骤:
1. 搜集了解目标的情况
下列情况是***非常关心的情报:
有的朋友也许会问道:"为什么***不直接去控制***傀儡机,而要从控制傀儡机上转一下呢?"。这就是导致DDoS***难以追查的原因之一了。做为***者的角度来说,肯定不愿意被捉到(我在小时候向别人家的鸡窝扔石头的时候也晓得在第一时间逃掉,呵呵),而***者使用的傀儡机越多,他实际上提供给受害者的分析依据就越多。在占领一台机器后,高水平的***者会首先做两件事:1. 考虑如何留好后门(我以后还要回来的哦)!2. 如何清理日志。这就是擦掉脚印,不让自己做的事被别人查觉到。比较不敬业的***会不管三七二十一把日志全都删掉,但这样的话网管员发现日志都没了就会知道有人干了坏事了,顶多无法再从日志发现是谁干的而已。相反,真正的好手会挑有关自己的日志项目删掉,让人看不到异常的情况。这样可以长时间地利用傀儡机。
但是在第3部分***傀儡机上清理日志实在是一项庞大的工程,即使在有很好的日志清理工具的帮助下,***也是对这个任务很头痛的。这就导致了有些***机弄得不是很干净,通过它上面的线索找到了控制它的上一级计算机,这上级的计算机如果是***自己的机器,那么他就会被揪出来了。但如果这是控制用的傀儡机的话,***自身还是安全的。控制傀儡机的数目相对很少,一般一台就可以控制几十台***机,清理一台计算机的日志对***来讲就轻松多了,这样从控制机再找到***的可能性也大大降低。
***是如何组织一次DDoS***的?
这里用"组织"这个词,是因为DDoS并不象***一台主机那样简单。一般来说,***进行DDoS***时会经过这样的步骤:
1. 搜集了解目标的情况
下列情况是***非常关心的情报:
- 被***目标主机数目、地址情况
- 目标主机的配置、性能
- 目标的带宽
对于DDoS***者来说,***互联网上的某个站点,如[url]http://www.mytarget.com[/url],有一个重点就是确定到底有多少台主机在支持这个站点,一个大的网站可能有很多台主机利用负载均衡技术提供同一个网站的www服务。以yahoo为例,一般会有下列地址都是提供[url]http://www.yahoo.com[/url]服务的:
66.218.71.87
66.218.71.88
66.218.71.89
66.218.71.80
66.218.71.81
66.218.71.83
66.218.71.84
66.218.71.86
如果要进行DDoS***的话,应该***哪一个地址呢?使66.218.71.87这台机器瘫掉,但其他的主机还是能向外提供www服务,所以想让别人访问不到[url]http://www.yahoo.com[/url]的话,要所有这些IP地址的机器都瘫掉才行。在实际的应用中,一个IP地址往往还代表着数台机器:网站维护者使用了四层或七层交换机来做负载均衡,把对一个IP地址的访问以特定的算法分配到下属的每个主机上去。这时对于DDoS***者来说情况就更复杂了,他面对的任务可能是让几十台主机的服务都不正常。
所以说事先搜集情报对DDoS***者来说是非常重要的,这关系到使用多少台傀儡机才能达到效果的问题。简单地考虑一下,在相同的条件下,***同一站点的2台主机需要2台傀儡机的话,***5台主机可能就需要5台以上的傀儡机。有人说做***的傀儡机越多越好,不管你有多少台主机我都用尽量多的傀儡机来攻就是了,反正傀儡机超过了时候效果更好。
但在实际过程中,有很多***并不进行情报的搜集而直接进行DDoS的***,这时候***的盲目性就很大了,效果如何也要靠运气。其实做***也象网管员一样,是不能偷懒的。一件事做得好与坏,态度最重要,水平还在其次。
2. 占领傀儡机
***最感兴趣的是有下列情况的主机:
66.218.71.87
66.218.71.88
66.218.71.89
66.218.71.80
66.218.71.81
66.218.71.83
66.218.71.84
66.218.71.86
如果要进行DDoS***的话,应该***哪一个地址呢?使66.218.71.87这台机器瘫掉,但其他的主机还是能向外提供www服务,所以想让别人访问不到[url]http://www.yahoo.com[/url]的话,要所有这些IP地址的机器都瘫掉才行。在实际的应用中,一个IP地址往往还代表着数台机器:网站维护者使用了四层或七层交换机来做负载均衡,把对一个IP地址的访问以特定的算法分配到下属的每个主机上去。这时对于DDoS***者来说情况就更复杂了,他面对的任务可能是让几十台主机的服务都不正常。
所以说事先搜集情报对DDoS***者来说是非常重要的,这关系到使用多少台傀儡机才能达到效果的问题。简单地考虑一下,在相同的条件下,***同一站点的2台主机需要2台傀儡机的话,***5台主机可能就需要5台以上的傀儡机。有人说做***的傀儡机越多越好,不管你有多少台主机我都用尽量多的傀儡机来攻就是了,反正傀儡机超过了时候效果更好。
但在实际过程中,有很多***并不进行情报的搜集而直接进行DDoS的***,这时候***的盲目性就很大了,效果如何也要靠运气。其实做***也象网管员一样,是不能偷懒的。一件事做得好与坏,态度最重要,水平还在其次。
2. 占领傀儡机
***最感兴趣的是有下列情况的主机:
- 链路状态好的主机
- 性能好的主机
- 安全管理水平差的主机
这一部分实际上是使用了另一大类的***手段:利用形***。这是和DDoS并列的***方式。简单地说,就是占领和控制被***的主机。取得最高的管理权限,或者至少得到一个有权限完成DDoS***任务的帐号。对于一个DDoS***者来说,准备好一定数量的傀儡机是一个必要的条件,下面说一下他是如何***并占领它们的。
首先,***做的工作一般是扫描,随机地或者是有针对性地利用扫描器去发现互联网上那些有漏洞的机器,象程序的溢出漏洞、cgi、Unicode、ftp、数据库漏洞…(简直举不胜举啊),都是***希望看到的扫描结果。随后就是尝试***了,具体的手段就不在这里多说了,感兴趣的话网上有很多关于这些内容的文章。
总之***现在占领了一台傀儡机了!然后他做什么呢?除了上面说过留后门擦脚印这些基本工作之外,他会把DDoS***用的程序上载过去,一般是利用ftp。在***机上,会有一个DDoS的发包程序,***就是利用它来向受害目标发送恶意***包的。
3. 实际***
经过前2个阶段的精心准备之后,***就开始瞄准目标准备发射了。前面的准备做得好的话,实际***过程反而是比较简单的。就象图示里的那样,***登录到做为控制台的傀儡机,向所有的***机发出命令:"预备~ ,瞄准~,开火!"。这时候埋伏在***机中的DDoS***程序就会响应控制台的命令,一起向受害主机以高速度发送大量的数据包,导致它死机或是无法响应正常的请求。***一般会以远远超出受害方处理能力的速度进行***,他们不会"怜香惜玉"。
老到的***者一边***,还会用各种手段来监视***的效果,在需要的时候进行一些调整。简单些就是开个窗口不断地ping目标主机,在能接到回应的时候就再加大一些流量或是再命令更多的傀儡机来加入***。
DDoS***实例 - SYN Flood***
SYN-Flood是目前最流行的DDoS***手段,早先的DoS的手段在向分布式这一阶段发展的时候也经历了浪里淘沙的过程。SYN-Flood的***效果最好,应该是众***不约而同选择它的原因吧。那么我们一起来看看SYN-Flood的详细情况。
Syn Flood原理 - 三次握手
Syn Flood利用了TCP/IP协议的固有漏洞。面向连接的TCP三次握手是Syn Flood存在的基础。
TCP连接的三次握手
图二 TCP三次握手 如图二,在第一步中,客户端向服务端提出连接请求。这时TCP SYN标志置位。客户端告诉服务端序列号区域合法,需要检查。客户端在TCP报头的序列号区中插入自己的ISN。服务端收到该TCP分段后,在第二步以自己的ISN回应(SYN标志置位),同时确认收到客户端的第一个TCP分段(ACK标志置位)。在第三步中,客户端确认收到服务端的ISN(ACK标志置位)。到此为止建立完整的TCP连接,开始全双工模式的数据传输过程。
Syn Flood***者不会完成三次握手
图三 Syn Flood恶意地不完成三次握手 假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的***者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃---即使服务器端的系统足够强大,服务器端也将忙于处理***者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来,服务器失去响应,这种情况我们称做:服务器端受到了SYN Flood***(SYN洪水***)。
下面是我在实验室中模拟的一次Syn Flood***的实际过程
这一个局域网环境,只有一台***机(PIII667/128/mandrake),被***的是一台Solaris 8.0 (spark)的主机,网络设备是Cisco的百兆交换机。这是在***并未进行之前,在Solaris上进行snoop的记录,snoop与tcpdump等网络监听工具一样,也是一个很好的网络抓包与分析的工具。可以看到***之前,目标主机上接到的基本上都是一些普通的网络包。
接着,***机开始发包,DDoS开始了…,突然间sun主机上的snoop窗口开始飞速地翻屏,显示出接到数量巨大的Syn请求。这时的屏幕就好象是时速300公里的列车上的一扇车窗。这是在Syn Flood***时的snoop输出结果:
这时候内容完全不同了,再也收不到刚才那些正常的网络包,只有DDoS包。大家注意一下,这里所有的Syn Flood***包的源地址都是伪造的,给追查工作带来很大困难。这时在被***主机上积累了多少Syn的半连接呢?我们用netstat来看一下:
# netstat -an | grep SYN
其中SYN_RCVD表示当前未完成的TCP SYN队列,统计一下:
# netstat -an | grep SYN | wc -l
5273
# netstat -an | grep SYN | wc -l
5154
# netstat -an | grep SYN | wc -l
5267
…..
共有五千多个Syn的半连接存储在内存中。这时候被***机已经不能响应新的服务请求了,系统运行非常慢,也无法ping通。
这是在***发起后仅仅70秒钟左右时的情况。
DDoS的防范
到目前为止,进行DDoS***的防御还是比较困难的。首先,这种***的特点是它利用了TCP/IP协议的漏洞,除非你不用TCP/IP,才有可能完全抵御住DDoS***。一位资深的安全专家给了个形象的比喻:DDoS就好象有1,000个人同时给你家里打电话,这时候你的朋友还打得进来吗?
不过即使它难于防范,也不是说我们就应该逆来顺受,实际上防止DDoS并不是绝对不可行的事情。互联网的使用者是各种各样的,与DDoS做斗争,不同的角色有不同的任务。我们以下面几种角色为例:
首先,***做的工作一般是扫描,随机地或者是有针对性地利用扫描器去发现互联网上那些有漏洞的机器,象程序的溢出漏洞、cgi、Unicode、ftp、数据库漏洞…(简直举不胜举啊),都是***希望看到的扫描结果。随后就是尝试***了,具体的手段就不在这里多说了,感兴趣的话网上有很多关于这些内容的文章。
总之***现在占领了一台傀儡机了!然后他做什么呢?除了上面说过留后门擦脚印这些基本工作之外,他会把DDoS***用的程序上载过去,一般是利用ftp。在***机上,会有一个DDoS的发包程序,***就是利用它来向受害目标发送恶意***包的。
3. 实际***
经过前2个阶段的精心准备之后,***就开始瞄准目标准备发射了。前面的准备做得好的话,实际***过程反而是比较简单的。就象图示里的那样,***登录到做为控制台的傀儡机,向所有的***机发出命令:"预备~ ,瞄准~,开火!"。这时候埋伏在***机中的DDoS***程序就会响应控制台的命令,一起向受害主机以高速度发送大量的数据包,导致它死机或是无法响应正常的请求。***一般会以远远超出受害方处理能力的速度进行***,他们不会"怜香惜玉"。
老到的***者一边***,还会用各种手段来监视***的效果,在需要的时候进行一些调整。简单些就是开个窗口不断地ping目标主机,在能接到回应的时候就再加大一些流量或是再命令更多的傀儡机来加入***。
DDoS***实例 - SYN Flood***
SYN-Flood是目前最流行的DDoS***手段,早先的DoS的手段在向分布式这一阶段发展的时候也经历了浪里淘沙的过程。SYN-Flood的***效果最好,应该是众***不约而同选择它的原因吧。那么我们一起来看看SYN-Flood的详细情况。
Syn Flood原理 - 三次握手
Syn Flood利用了TCP/IP协议的固有漏洞。面向连接的TCP三次握手是Syn Flood存在的基础。
TCP连接的三次握手
图二 TCP三次握手 如图二,在第一步中,客户端向服务端提出连接请求。这时TCP SYN标志置位。客户端告诉服务端序列号区域合法,需要检查。客户端在TCP报头的序列号区中插入自己的ISN。服务端收到该TCP分段后,在第二步以自己的ISN回应(SYN标志置位),同时确认收到客户端的第一个TCP分段(ACK标志置位)。在第三步中,客户端确认收到服务端的ISN(ACK标志置位)。到此为止建立完整的TCP连接,开始全双工模式的数据传输过程。
Syn Flood***者不会完成三次握手
图三 Syn Flood恶意地不完成三次握手 假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的***者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃---即使服务器端的系统足够强大,服务器端也将忙于处理***者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来,服务器失去响应,这种情况我们称做:服务器端受到了SYN Flood***(SYN洪水***)。
下面是我在实验室中模拟的一次Syn Flood***的实际过程
这一个局域网环境,只有一台***机(PIII667/128/mandrake),被***的是一台Solaris 8.0 (spark)的主机,网络设备是Cisco的百兆交换机。这是在***并未进行之前,在Solaris上进行snoop的记录,snoop与tcpdump等网络监听工具一样,也是一个很好的网络抓包与分析的工具。可以看到***之前,目标主机上接到的基本上都是一些普通的网络包。
…… ? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes ? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes ? -> (multicast) ETHER Type=0000 (LLC/802.3), size = 52 bytes ? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes192.168.0.66 -> 192.168.0.255 NBT Datagram Service Type=17 Source=GU[0]192.168.0.210 -> 192.168.0.255 NBT Datagram Service Type=17 Source=ROOTDC[20]192.168.0.247 -> 192.168.0.255 NBT Datagram Service Type=17 Source=TSC[0] ? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes192.168.0.200 -> (broadcast) ARP C Who is 192.168.0.102, 192.168.0.102 ? ? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes ? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes192.168.0.66 -> 192.168.0.255 NBT Datagram Service Type=17 Source=GU[0]192.168.0.66 -> 192.168.0.255 NBT Datagram Service Type=17 Source=GU[0]192.168.0.210 -> 192.168.0.255 NBT Datagram Service Type=17 Source=ROOTDC[20] ? -> (multicast) ETHER Type=0000 (LLC/802.3), size = 52 bytes ? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes ? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes……
|
…… 127.0.0.178 -> lab183.lab.net AUTH C port=1352 127.0.0.178 -> lab183.lab.net TCP D=114 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=115 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net UUCP-PATH C port=1352 127.0.0.178 -> lab183.lab.net TCP D=118 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net NNTP C port=1352 127.0.0.178 -> lab183.lab.net TCP D=121 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=122 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=124 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=125 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=126 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=128 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=130 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=131 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=133 S=1352 Syn Seq=674711609 Len=0 Win=65535 127.0.0.178 -> lab183.lab.net TCP D=135 S=1352 Syn Seq=674711609 Len=0 Win=65535……
|
# netstat -an | grep SYN
……192.168.0.183.9 127.0.0.79.1801 0 0 24656 0 SYN_RCVD192.168.0.183.13 127.0.0.79.1801 0 0 24656 0 SYN_RCVD192.168.0.183.19 127.0.0.79.1801 0 0 24656 0 SYN_RCVD192.168.0.183.21 127.0.0.79.1801 0 0 24656 0 SYN_RCVD192.168.0.183.22 127.0.0.79.1801 0 0 24656 0 SYN_RCVD192.168.0.183.23 127.0.0.79.1801 0 0 24656 0 SYN_RCVD192.168.0.183.25 127.0.0.79.1801 0 0 24656 0 SYN_RCVD192.168.0.183.37 127.0.0.79.1801 0 0 24656 0 SYN_RCVD192.168.0.183.53 127.0.0.79.1801 0 0 24656 0 SYN_RCVD…… |
# netstat -an | grep SYN | wc -l
5273
# netstat -an | grep SYN | wc -l
5154
# netstat -an | grep SYN | wc -l
5267
…..
共有五千多个Syn的半连接存储在内存中。这时候被***机已经不能响应新的服务请求了,系统运行非常慢,也无法ping通。
这是在***发起后仅仅70秒钟左右时的情况。
DDoS的防范
到目前为止,进行DDoS***的防御还是比较困难的。首先,这种***的特点是它利用了TCP/IP协议的漏洞,除非你不用TCP/IP,才有可能完全抵御住DDoS***。一位资深的安全专家给了个形象的比喻:DDoS就好象有1,000个人同时给你家里打电话,这时候你的朋友还打得进来吗?
不过即使它难于防范,也不是说我们就应该逆来顺受,实际上防止DDoS并不是绝对不可行的事情。互联网的使用者是各种各样的,与DDoS做斗争,不同的角色有不同的任务。我们以下面几种角色为例:
- 企业网管理员
- ISP、ICP管理员
- 骨干网络运营商
企业网管理员
网管员做为一个企业内部网的管理者,往往也是安全员、守护神。在他维护的网络中有一些服务器需要向外提供WWW服务,因而不可避免地成为DDoS的***目标,他该如何做呢?可以从主机与网络设备两个角度去考虑。
主机上的设置
几乎所有的主机平台都有抵御DoS的设置,总结一下,基本的有几种:
网管员做为一个企业内部网的管理者,往往也是安全员、守护神。在他维护的网络中有一些服务器需要向外提供WWW服务,因而不可避免地成为DDoS的***目标,他该如何做呢?可以从主机与网络设备两个角度去考虑。
主机上的设置
几乎所有的主机平台都有抵御DoS的设置,总结一下,基本的有几种:
- 关闭不必要的服务
- 限制同时打开的Syn半连接数目
- 缩短Syn半连接的time out 时间
- 及时更新系统补丁
网络设备上的设置
企业网的网络设备可以从防火墙与路由器上考虑。这两个设备是到外界的接口设备,在进行防DDoS设置的同时,要注意一下这是以多大的效率牺牲为代价的,对你来说是否值得。
1.防火墙
企业网的网络设备可以从防火墙与路由器上考虑。这两个设备是到外界的接口设备,在进行防DDoS设置的同时,要注意一下这是以多大的效率牺牲为代价的,对你来说是否值得。
1.防火墙
- 禁止对主机的非开放服务的访问
- 限制同时打开的SYN最大连接数
- 限制特定IP地址的访问
- 启用防火墙的防DDoS的属性
- 严格限制对外开放的服务器的向外访问
第五项主要是防止自己的服务器被当做工具去害人。
2.路由器
以Cisco路由器为例
2.路由器
以Cisco路由器为例
- Cisco Express Forwarding(CEF)
- 使用 unicast reverse-path
- 访问控制列表(ACL)过滤
- 设置SYN数据包流量速率
- 升级版本过低的ISO
- 为路由器建立log server
其中使用CEF和Unicast设置时要特别注意,使用不当会造成路由器工作效率严重下降,升级IOS也应谨慎。路由器是网络的核心设备,与大家分享一下进行设置修改时的小经验,就是先不保存。Cisco路由器有两份配置startup config和running config,修改的时候改变的是running config,可以让这个配置先跑一段时间(三五天的就随意啦),觉得可行后再保存配置到startup config;而如果不满意想恢复原来的配置,用copy start run就行了。
ISP / ICP管理员
ISP / ICP为很多中小型企业提供了各种规模的主机托管业务,所以在防DDoS时,除了与企业网管理员一样的手段外,还要特别注意自己管理范围内的客户托管主机不要成为傀儡机。客观上说,这些托管主机的安全性普遍是很差的,有的连基本的补丁都没有打就赤膊上阵了,成为***最喜欢的"肉鸡",因为不管这台机器***怎么用都不会有被发现的危险,它的安全管理太差了;还不必说托管的主机都是高性能、高带宽的-简直就是为DDoS定制的。而做为ISP的管理员,对托管主机是没有直接管理的权力的,只能通知让客户来处理。在实际情况时,有很多客户与自己的托管主机服务商配合得不是很好,造成ISP管理员明知自己负责的一台托管主机成为了傀儡机,却没有什么办法的局面。而托管业务又是买方市场,ISP还不敢得罪客户,怎么办?咱们管理员和客户搞好关系吧,没办法,谁让人家是上帝呢?呵呵,客户多配合一些,ISP的主机更安全一些,被别人告状的可能性也小一些。
骨干网络运营商
他们提供了互联网存在的物理基础。如果骨干网络运营商可以很好地合作的话,DDoS***可以很好地被预防。在2000年yahoo等知名网站被***后,美国的网络安全研究机构提出了骨干运营商联手来解决DDoS***的方案。其实方法很简单,就是每家运营商在自己的出口路由器上进行源IP地址的验证,如果在自己的路由表中没有到这个数据包源IP的路由,就丢掉这个包。这种方法可以阻止***利用伪造的源IP来进行DDoS***。不过同样,这样做会降低路由器的效率,这也是骨干运营商非常关注的问题,所以这种做法真正采用起来还很困难。
对DDoS的原理与应付方法的研究一直在进行中,找到一个既有效又切实可行的方案不是一朝一夕的事情。但目前我们至少可以做到把自己的网络与主机维护好,首先让自己的主机不成为别人利用的对象去***别人;其次,在受到***的时候,要尽量地保存证据,以便事后追查,一个良好的网络和日志系统是必要的。无论DDoS的防御向何处发展,这都将是一个社会工程,需要IT界的同行们来一起关注,通力合作。
参考资料
ISP / ICP管理员
ISP / ICP为很多中小型企业提供了各种规模的主机托管业务,所以在防DDoS时,除了与企业网管理员一样的手段外,还要特别注意自己管理范围内的客户托管主机不要成为傀儡机。客观上说,这些托管主机的安全性普遍是很差的,有的连基本的补丁都没有打就赤膊上阵了,成为***最喜欢的"肉鸡",因为不管这台机器***怎么用都不会有被发现的危险,它的安全管理太差了;还不必说托管的主机都是高性能、高带宽的-简直就是为DDoS定制的。而做为ISP的管理员,对托管主机是没有直接管理的权力的,只能通知让客户来处理。在实际情况时,有很多客户与自己的托管主机服务商配合得不是很好,造成ISP管理员明知自己负责的一台托管主机成为了傀儡机,却没有什么办法的局面。而托管业务又是买方市场,ISP还不敢得罪客户,怎么办?咱们管理员和客户搞好关系吧,没办法,谁让人家是上帝呢?呵呵,客户多配合一些,ISP的主机更安全一些,被别人告状的可能性也小一些。
骨干网络运营商
他们提供了互联网存在的物理基础。如果骨干网络运营商可以很好地合作的话,DDoS***可以很好地被预防。在2000年yahoo等知名网站被***后,美国的网络安全研究机构提出了骨干运营商联手来解决DDoS***的方案。其实方法很简单,就是每家运营商在自己的出口路由器上进行源IP地址的验证,如果在自己的路由表中没有到这个数据包源IP的路由,就丢掉这个包。这种方法可以阻止***利用伪造的源IP来进行DDoS***。不过同样,这样做会降低路由器的效率,这也是骨干运营商非常关注的问题,所以这种做法真正采用起来还很困难。
对DDoS的原理与应付方法的研究一直在进行中,找到一个既有效又切实可行的方案不是一朝一夕的事情。但目前我们至少可以做到把自己的网络与主机维护好,首先让自己的主机不成为别人利用的对象去***别人;其次,在受到***的时候,要尽量地保存证据,以便事后追查,一个良好的网络和日志系统是必要的。无论DDoS的防御向何处发展,这都将是一个社会工程,需要IT界的同行们来一起关注,通力合作。
参考资料
关于作者 徐一丁,北京玛赛网络系统有限公司方案设计部高级工程师,从事IT工作多年。目前主要进行国内外安全产品评测与******的研究。有丰富的网络安全设计与实施经验,并给各大电信公司如中国电信、吉通公司、联通公司等进行过系列安全培训。 |
DDOS***:DDOS***防御简析
DoS***防御简析
分布式拒绝服务***(DDoS)是一种特殊形式的拒绝服务***。它是利用多台已经被***者所控制的机器对某一台单机发起***,在带宽相对的情况下,被***的主机很容易失去反应能力。
分布式拒绝服务***(DDoS)是一种特殊形式的拒绝服务***。它是利用多台已经被***者所控制的机器对某一台单机发起***,在带宽相对的情况下,被***的主机很容易失去反应能力。作为一种分布、协作的大规模***方式,分布式拒绝服务***(DDoS)主要瞄准比较大的站点,像商业公司,搜索引擎和政府部门的站点。由于它通过利用一批受控制的机器向一台机器发起***,来势迅猛,而且往往令人难以防备,具有极大的破坏性。
对于此类隐蔽性极好的DDoS***的防范,更重要的是用户要加强安全防范意识,提高网络系统的安全性。专家建议可以采取的安全防御措施有以下几种。
1.及早发现系统存在的***漏洞,及时安装系统补丁程序。对一些重要的信息(例如系统配置信息)建立和完善备份机制。对一些特权账号(例如管理员账号)的密码设置要谨慎。通过这样一系列的举措可以把***者的可乘之机降低到最校。
2.在网络管理方面,要经常检查系统的物理环境,禁止那些不必要的网络服务。建立边界安全界限,确保输出的包受到正确限制。经常检测系统配置信息,并注意查看每天的安全日志。
3.利用网络安全设备(例如:防火墙)来加固网络的安全性,配置好这些设备的安全规则,过滤掉所有可能的伪造数据包。
4.与网络服务提供商协调工作,让网络服务提供商帮助实现路由的访问控制和对带宽总量的限制。
5.当用户发现自己正在遭受DDoS***时,应当启动自己的应付策略,尽可能快地追踪***包,并且及时联系ISP和有关应急组织,分析受影响的系统,确定涉及的其他节点,从而阻挡从已知***节点的流量。
6.如果用户是潜在的DDoS***受害者,并且用户发现自己的计算机被***者用作主控端和代理端时,用户不能因为自己的系统暂时没有受到损害而掉以轻心。***者一旦发现用户系统的漏洞,这对用户的系统是一个很大的威胁。所以用户只要发现系统中存在DDoS***的工具软件要及时把它清除,以免留下后患。
被DDoS***时的现象
● 被***主机上有大量等待的TCP连接;
● 网络中充斥着大量的无用的数据包,源地址为假;
● 制造高流量无用数据,造成网络拥塞,使受害主机无法正常和外界通讯;
● 利用受害主机提供的服务或传输协议上的缺陷,反复高速的发出特定的服务请求,使受害主机无法及时处理所有正常请求;
● 严重时会造成系统死机;
……
DDOS的表现形式主要有两种,一种为流量***,主要是针对网络带宽的***,即大量***包导致网络带宽被阻塞,合法网络包被虚假的***包淹没而无法到达主机;另一种为资源耗尽***,主要是针对服务器主机的***,即通过大量***包导致主机的内存被耗尽或CPU被内核及应用程序占完而造成无法提供网络服务。
如何判断网站是否遭受了流量***呢?可通过Ping命令来测试,若发现Ping超时或丢包严重(假定平时是正常的),则可能遭受了流量***,此时若发现和你的主机接在同一交换机上的服务器也访问不了了,基本可以确定是遭受了流量***。当然,这样测试的前提是你到服务器主机之间的 ICMP协议没有被路由器和防火墙等设备屏蔽,否则可采取Telnet主机服务器的网络服务端口来测试,效果是一样的。不过有一点可以肯定,假如平时 Ping你的主机服务器和接在同一交换机上的主机服务器都是正常的,突然都Ping不通了或者是严重丢包,那么假如可以排除网络故障因素的话则肯定是遭受了流量***,再一个流量***的典型现象是,一旦遭受流量***,会发现用远程终端连接网站服务器会失败。
相对于流量***而言,资源耗尽***要容易判断一些,假如平时Ping网站主机和访问网站都是正常的,发现突然网站访问非常缓慢或无法访问了,而Ping还可以Ping通,则很可能遭受了资源耗尽***,此时若在服务器上用Netstat -na命令观察到有大量的SYN_RECEIVED、TIME_WAIT、FIN_WAIT_1等状态存在,而ESTABLISHED很少,则可判定肯定是遭受了资源耗尽***。还有一种属于资源耗尽***的现象是,Ping自己的网站主机Ping不通或者是丢包严重,而Ping与自己的主机在同一交换机上的服务器则正常,造成这种原因是网站主机遭受***后导致系统内核或某些应用程序CPU利用率达到100%无法回应Ping命令,其实带宽还是有的,否则就 Ping不通接在同一交换机上的主机了。
当前主要有三种流行的DDoS***:
1、SYN/ACK Flood***:这种***方法是经典最有效的DDOS方法,可通杀各种系统的网络服务,主要是通过向受害主机发送大量伪造源IP和源端口的SYN或ACK包,导致主机的缓存资源被耗尽或忙于发送回应包而造成拒绝服务,由于源都是伪造的故追踪起来比较困难,缺点是实施起来有一定难度,需要高带宽的僵尸主机支持。少量的这种***会导致主机服务器无法访问,但却可以Ping的通,在服务器上用Netstat -na命令会观察到存在大量的SYN_RECEIVED状态,大量的这种***会导致Ping失败、TCP/IP栈失效,并会出现系统凝固现象,即不响应键盘和鼠标。普通防火墙大多无法抵御此种***。
2、TCP全连接***:这种***是为了绕过常规防火墙的检查而设计的,一般情况下,常规防火墙大多具备过滤TearDrop、Land等DOS***的能力,但对于正常的TCP连接是放过的,殊不知很多网络服务程序(如:IIS、Apache等Web服务器)能接受的TCP连接数是有限的,一旦有大量的TCP连接,即便是正常的,也会导致网站访问非常缓慢甚至无法访问,TCP全连接***就是通过许多僵尸主机不断地与受害服务器建立大量的TCP连接,直到服务器的内存等资源被耗尽而被拖跨,从而造成拒绝服务,这种***的特点是可绕过一般防火墙的防护而达到***目的,缺点是需要找很多僵尸主机,并且由于僵尸主机的IP是暴露的,因此容易被追踪。
3、刷.脚本***:这种***主要是针对存在ASP、JSP、PHP、CGI等脚本程序,并调用MSSQLServer、MySQLServer、Oracle等数据库的网站系统而设计的,特征是和服务器建立正常的TCP连接,并不断的向脚本程序提交查询、列表等大量耗费数据库资源的调用,典型的以小博大的***方法。一般来说,提交一个GET或POST指令对客户端的耗费和带宽的占用是几乎可以忽略的,而服务器为处理此请求却可能要从上万条记录中去查出某个记录,这种处理过程对资源的耗费是很大的,常见的数据库服务器很少能支持数百个查询指令同时执行,而这对于客户端来说却是轻而易举的,因此***者只需通过Proxy代理向主机服务器大量递交查询指令,只需数分钟就会把服务器资源消耗掉而导致拒绝服务,常见的现象就是网站慢如蜗牛、ASP程序失效、PHP连接数据库失败、数据库主程序占用CPU偏高。这种***的特点是可以完全绕过普通的防火墙防护,轻松找一些Proxy代理就可实施***,缺点是对付只有静态页面的网站效果会大打折扣,并且有些Proxy会暴露***者的IP地址。
四、怎么抵御DDOS?
对付DDOS是一个系统工程,想仅仅依靠某种系统或产品防住DDOS是不现实的,可以肯定的是,完全杜绝DDOS目前是不可能的,但通过适当的措施抵御 90%的DDoS***是可以做到的,基于***和防御都有成本开销的缘故,若通过适当的办法增强了抵御DDOS的能力,也就意味着加大了***者的***成本,那么绝大多数***者将无法继续下去而放弃,也就相当于成功的抵御了DDoS***。以下为笔者多年以来抵御DDOS的经验和建议,和大家分享!
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%属于恶意行为。
6、增强操作系统的TCP/IP栈
Win2000和Win2003作为服务器操作系统,本身就具备一定的抵抗DDoS***的能力,只是默认状态下没有开启而已,若开启的话可抵挡约 10000个SYN***包,若没有开启则仅能抵御数百个,具体怎么开启,自己去看微软的文章吧!《强化 TCP/IP 堆栈安全》- [url]http://www.microsoft.com/china/technet/security/[/url]
guidance/secmod109.mspx
也许有的人会问,那我用的是Linux和FreeBSD怎么办?很简单,按照这篇文章去做吧!《SYN Cookies》- [url]http://cr.yp.to/syncookies.html[/url]
7、安装专业抗DDOS防火墙
8、其他防御措施
以上的七条对抗DDOS建议,适合绝大多数拥有自己主机的用户,但假如采取以上措施后仍然不能解决DDOS问题,就有些麻烦了,可能需要更多投资,增加服务器数量并采用DNS轮巡或负载均衡技术,甚至需要购买七层交换机设备,从而使得抗DDoS***能力成倍提高,只要投资足够深入,总有***者会放弃的时候,那时候你就成功了!:)
DoS***防御简析
分布式拒绝服务***(DDoS)是一种特殊形式的拒绝服务***。它是利用多台已经被***者所控制的机器对某一台单机发起***,在带宽相对的情况下,被***的主机很容易失去反应能力。
分布式拒绝服务***(DDoS)是一种特殊形式的拒绝服务***。它是利用多台已经被***者所控制的机器对某一台单机发起***,在带宽相对的情况下,被***的主机很容易失去反应能力。作为一种分布、协作的大规模***方式,分布式拒绝服务***(DDoS)主要瞄准比较大的站点,像商业公司,搜索引擎和政府部门的站点。由于它通过利用一批受控制的机器向一台机器发起***,来势迅猛,而且往往令人难以防备,具有极大的破坏性。
对于此类隐蔽性极好的DDoS***的防范,更重要的是用户要加强安全防范意识,提高网络系统的安全性。专家建议可以采取的安全防御措施有以下几种。
1.及早发现系统存在的***漏洞,及时安装系统补丁程序。对一些重要的信息(例如系统配置信息)建立和完善备份机制。对一些特权账号(例如管理员账号)的密码设置要谨慎。通过这样一系列的举措可以把***者的可乘之机降低到最校。
2.在网络管理方面,要经常检查系统的物理环境,禁止那些不必要的网络服务。建立边界安全界限,确保输出的包受到正确限制。经常检测系统配置信息,并注意查看每天的安全日志。
3.利用网络安全设备(例如:防火墙)来加固网络的安全性,配置好这些设备的安全规则,过滤掉所有可能的伪造数据包。
4.与网络服务提供商协调工作,让网络服务提供商帮助实现路由的访问控制和对带宽总量的限制。
5.当用户发现自己正在遭受DDoS***时,应当启动自己的应付策略,尽可能快地追踪***包,并且及时联系ISP和有关应急组织,分析受影响的系统,确定涉及的其他节点,从而阻挡从已知***节点的流量。
6.如果用户是潜在的DDoS***受害者,并且用户发现自己的计算机被***者用作主控端和代理端时,用户不能因为自己的系统暂时没有受到损害而掉以轻心。***者一旦发现用户系统的漏洞,这对用户的系统是一个很大的威胁。所以用户只要发现系统中存在DDoS***的工具软件要及时把它清除,以免留下后患。
被DDoS***时的现象
● 被***主机上有大量等待的TCP连接;
● 网络中充斥着大量的无用的数据包,源地址为假;
● 制造高流量无用数据,造成网络拥塞,使受害主机无法正常和外界通讯;
● 利用受害主机提供的服务或传输协议上的缺陷,反复高速的发出特定的服务请求,使受害主机无法及时处理所有正常请求;
● 严重时会造成系统死机;
……
DDOS的表现形式主要有两种,一种为流量***,主要是针对网络带宽的***,即大量***包导致网络带宽被阻塞,合法网络包被虚假的***包淹没而无法到达主机;另一种为资源耗尽***,主要是针对服务器主机的***,即通过大量***包导致主机的内存被耗尽或CPU被内核及应用程序占完而造成无法提供网络服务。
如何判断网站是否遭受了流量***呢?可通过Ping命令来测试,若发现Ping超时或丢包严重(假定平时是正常的),则可能遭受了流量***,此时若发现和你的主机接在同一交换机上的服务器也访问不了了,基本可以确定是遭受了流量***。当然,这样测试的前提是你到服务器主机之间的 ICMP协议没有被路由器和防火墙等设备屏蔽,否则可采取Telnet主机服务器的网络服务端口来测试,效果是一样的。不过有一点可以肯定,假如平时 Ping你的主机服务器和接在同一交换机上的主机服务器都是正常的,突然都Ping不通了或者是严重丢包,那么假如可以排除网络故障因素的话则肯定是遭受了流量***,再一个流量***的典型现象是,一旦遭受流量***,会发现用远程终端连接网站服务器会失败。
相对于流量***而言,资源耗尽***要容易判断一些,假如平时Ping网站主机和访问网站都是正常的,发现突然网站访问非常缓慢或无法访问了,而Ping还可以Ping通,则很可能遭受了资源耗尽***,此时若在服务器上用Netstat -na命令观察到有大量的SYN_RECEIVED、TIME_WAIT、FIN_WAIT_1等状态存在,而ESTABLISHED很少,则可判定肯定是遭受了资源耗尽***。还有一种属于资源耗尽***的现象是,Ping自己的网站主机Ping不通或者是丢包严重,而Ping与自己的主机在同一交换机上的服务器则正常,造成这种原因是网站主机遭受***后导致系统内核或某些应用程序CPU利用率达到100%无法回应Ping命令,其实带宽还是有的,否则就 Ping不通接在同一交换机上的主机了。
当前主要有三种流行的DDoS***:
1、SYN/ACK Flood***:这种***方法是经典最有效的DDOS方法,可通杀各种系统的网络服务,主要是通过向受害主机发送大量伪造源IP和源端口的SYN或ACK包,导致主机的缓存资源被耗尽或忙于发送回应包而造成拒绝服务,由于源都是伪造的故追踪起来比较困难,缺点是实施起来有一定难度,需要高带宽的僵尸主机支持。少量的这种***会导致主机服务器无法访问,但却可以Ping的通,在服务器上用Netstat -na命令会观察到存在大量的SYN_RECEIVED状态,大量的这种***会导致Ping失败、TCP/IP栈失效,并会出现系统凝固现象,即不响应键盘和鼠标。普通防火墙大多无法抵御此种***。
2、TCP全连接***:这种***是为了绕过常规防火墙的检查而设计的,一般情况下,常规防火墙大多具备过滤TearDrop、Land等DOS***的能力,但对于正常的TCP连接是放过的,殊不知很多网络服务程序(如:IIS、Apache等Web服务器)能接受的TCP连接数是有限的,一旦有大量的TCP连接,即便是正常的,也会导致网站访问非常缓慢甚至无法访问,TCP全连接***就是通过许多僵尸主机不断地与受害服务器建立大量的TCP连接,直到服务器的内存等资源被耗尽而被拖跨,从而造成拒绝服务,这种***的特点是可绕过一般防火墙的防护而达到***目的,缺点是需要找很多僵尸主机,并且由于僵尸主机的IP是暴露的,因此容易被追踪。
3、刷.脚本***:这种***主要是针对存在ASP、JSP、PHP、CGI等脚本程序,并调用MSSQLServer、MySQLServer、Oracle等数据库的网站系统而设计的,特征是和服务器建立正常的TCP连接,并不断的向脚本程序提交查询、列表等大量耗费数据库资源的调用,典型的以小博大的***方法。一般来说,提交一个GET或POST指令对客户端的耗费和带宽的占用是几乎可以忽略的,而服务器为处理此请求却可能要从上万条记录中去查出某个记录,这种处理过程对资源的耗费是很大的,常见的数据库服务器很少能支持数百个查询指令同时执行,而这对于客户端来说却是轻而易举的,因此***者只需通过Proxy代理向主机服务器大量递交查询指令,只需数分钟就会把服务器资源消耗掉而导致拒绝服务,常见的现象就是网站慢如蜗牛、ASP程序失效、PHP连接数据库失败、数据库主程序占用CPU偏高。这种***的特点是可以完全绕过普通的防火墙防护,轻松找一些Proxy代理就可实施***,缺点是对付只有静态页面的网站效果会大打折扣,并且有些Proxy会暴露***者的IP地址。
四、怎么抵御DDOS?
对付DDOS是一个系统工程,想仅仅依靠某种系统或产品防住DDOS是不现实的,可以肯定的是,完全杜绝DDOS目前是不可能的,但通过适当的措施抵御 90%的DDoS***是可以做到的,基于***和防御都有成本开销的缘故,若通过适当的办法增强了抵御DDOS的能力,也就意味着加大了***者的***成本,那么绝大多数***者将无法继续下去而放弃,也就相当于成功的抵御了DDoS***。以下为笔者多年以来抵御DDOS的经验和建议,和大家分享!
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%属于恶意行为。
6、增强操作系统的TCP/IP栈
Win2000和Win2003作为服务器操作系统,本身就具备一定的抵抗DDoS***的能力,只是默认状态下没有开启而已,若开启的话可抵挡约 10000个SYN***包,若没有开启则仅能抵御数百个,具体怎么开启,自己去看微软的文章吧!《强化 TCP/IP 堆栈安全》- [url]http://www.microsoft.com/china/technet/security/[/url]
guidance/secmod109.mspx
也许有的人会问,那我用的是Linux和FreeBSD怎么办?很简单,按照这篇文章去做吧!《SYN Cookies》- [url]http://cr.yp.to/syncookies.html[/url]
7、安装专业抗DDOS防火墙
8、其他防御措施
以上的七条对抗DDOS建议,适合绝大多数拥有自己主机的用户,但假如采取以上措施后仍然不能解决DDOS问题,就有些麻烦了,可能需要更多投资,增加服务器数量并采用DNS轮巡或负载均衡技术,甚至需要购买七层交换机设备,从而使得抗DDoS***能力成倍提高,只要投资足够深入,总有***者会放弃的时候,那时候你就成功了!:)
转载于:https://blog.51cto.com/gaojianyun/127004