打印本文 打印本文  关闭窗口 关闭窗口  
不用防火墙手动对付SYN攻击的办法
作者:陈鹏  文章来源:eNet  点击数  更新时间:2009/9/11 23:23:46  文章录入:陈鹏  责任编辑:陈鹏

SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。SYN攻击除了能影响主机外,还可以危害路由器、防火墙等网络系统,事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施。服务器接收到连接请求(syn=j),将此信息加入未连接队列,并发送请求包给客户(syn=k,ack=j+1),此时进入SYN_RECV状态。当服务器未收到客户端的确认包时,重发请求包,一直到超时,才将此条目从未连接队列删除。配合IP欺骗,SYN攻击能达到很好的效果,通常,客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。

一般的SYN Food攻击是利用特殊的程序,设置TCP的Header,向服务器端不断地成倍发送只有SYN标志的TCP连接请求。当服务器接收的时候,都认为是没有建立起来的连接请求,于是为这些请求建立会话,排到缓冲区队列中。如果你的SYN请求超过了服务器能容纳的限度,缓冲区队列满,那么服务器就不再接收新的请求了。其他合法用户的连接都被拒绝掉。此时,服务器已经无法再提供正常的服务了,所以SYN Food攻击是拒绝服务攻击。

检测SYN攻击:

  检测SYN攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击。我们使用系统自带的netstat 工具来检测SYN攻击:

  # netstat -n -p TCP
  tcp 0  0 10.11.11.11:23  124.173.152.8:25882  SYN_RECV -
  tcp 0  0 10.11.11.11:23  236.15.133.204:2577  SYN_RECV -
  tcp 0  0 10.11.11.11:23  127.160.6.129:51748  SYN_RECV -
  tcp 0  0 10.11.11.11:23  222.220.13.25:47393  SYN_RECV -
  tcp 0  0 10.11.11.11:23  212.200.204.182:60427 SYN_RECV -
  tcp 0  0 10.11.11.11:23  232.115.18.38:278   SYN_RECV -
  tcp 0  0 10.11.11.11:23  239.116.95.96:5122  SYN_RECV -
  tcp 0  0 10.11.11.11:23  236.219.139.207:49162 SYN_RECV -
  ...

  上面是在LINUX系统中看到的,很多连接处于SYN_RECV状态(在WINDOWS系统中是SYN_RECEIVED状态),源IP地址都是随机的,表明这是一种带有IP欺骗的SYN攻击。

  我们也可以通过下面的命令直接查看在LINUX环境下某个端囗的未连接队列的条目数:

  #netstat -n -p TCP   grep SYN_RECV   grep :22   wc -l
  324

  显示TCP端囗22的未连接数有324个,虽然还远达不到系统极限,但应该引起管理员的注意。

  如何做好设置:

对于SYN Flood攻击,目前尚没有很好的监测和防御方法,不过如果系统管理员熟悉攻击方法和系统架构,通过一系列的设定,也能从一定程度上降低被攻击系统的负荷,减轻负面的影响。

对于WindowsNT/2000而言,它的SYN攻击保护机制可以这样考虑:正常情况下,OS对TCP连接的一些重要参数有一个常规的设置:SYN Timeout时间、SYN-ACK的重试次数、SYN报文从路由器到系统再到Winsock的延时等等。这个常规设置针对系统优化,可以给用户提供方便快捷的服务;一旦服务器受到攻击,SYN Half link 的数量超过系统中TCP活动 Half Connction最大连接数的设置,系统将会认为自己受到了SYN Flood攻击,并将根据攻击的判断情况作出反应:减短SYN Timeout时间、减少SYN-ACK的重试次数、自动对缓冲区中的报文进行延时等等措施,力图将攻击危害减到最低。如果攻击继续,超过了系统允许的最大Half Connection 值,系统已经不能提供正常的服务了,为了保证系统不崩溃,可以将任何超出最大Half Connection 值范围的SYN报文随机丢弃,保证系统的稳定性。

  被攻击时如何手动防御:

一般服务器被SYN Flood攻击时,通过上面所说的 netstat 命令可以看到攻击者的IP记录,确定被攻击以后采取的对应办法:

以75.156.25.192这个IP为例子,我们用封IP段来对付攻击:

打开本地安全设置,点“IP安全策略,在本地机器”—>创建IP安全策略—>下一步—>名称随便写,如输入阻止,然后一直点下一步,出现提示点是,一直到完成,这个时候就创建了一个名为“阻止”的策略了。

下面点“IP安全策略,在本地机器”—>管理IP筛选器表和筛选器操作—>点添加—>名称添75.156.25(为了识别最好填写对应的IP段)—>点添加—>下一步—>源地址选择一个特定的IP子网,IP输入75.156.25.0 子网掩码改为255.255.255.0—>下一步—>目标地址选择我的IP地址—>下一步—>协议类型为任意—>下一步—>完成,全部关闭。

下面点我们开始建立的名为“阻止”的策略,点属性—>填加—>下一步—>下一步网络类型选择所有网络连接—>下一步—>出现提示点是—>到IP筛选列表,点中我们刚才创建的名为75.156.25的选项—>下一步—>选择阻止—>下一步到完成、关闭。

最后点“阻止”这个策略,右键,指派,到这里为止我们就已经阻止了75.156.25开头的网段了,当然也阻止了75.156.25.192这个IP的攻击了,如还要封其他IP的攻击同样操作即可。

用这个方法可以完全阻止SYN Flood攻击,麻烦的一点就是要自己手动查看攻击的代理IP和填加IP策略。

热门推荐 经典:CSS应用常见问题大总结 网页设计中实用的制作技巧十三个


【责任编辑 彭凡】

打印本文 打印本文  关闭窗口 关闭窗口