Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1483031
  • 博文数量: 297
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 3082
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 11:36
文章分类

全部博文(297)

文章存档

2011年(1)

2009年(45)

2008年(67)

2007年(184)

我的朋友

分类: LINUX

2007-07-18 16:59:07

曾几何时,系统还被追捧为性较好的系统,很多系统管理员为自己管理的服务器很少被攻击成功而感到自豪。但步入新的Internet年代,各种各样的攻击逐步盯上了,而TCP/IP固有的缺陷也被Cracker大肆利用。

  很不走运,手下管理的多台服务器也遭到了不同类型、不同程度的攻击,包括SYN攻击,CLOSE_WAIT攻击,抢占资源(如web的连接等)等等。如果是那些少量ip组成的大规模攻击,一般情况下封ip就能比较好的解决问题了。

  如果是就更难办了。这两天,有2台服务器遇到了大规模的SYN_RECV 攻击。主要是针对web的,导致了web访问缓慢并停止服务,甚至机器失去了响应。要对付SYN攻击,得从多个方面入手,如果是分布很广的攻击,还得从交换机、等更高一级的层次进行杜绝。

  下面是应付这几天攻击的基本方法:

  1)SYN cookie

  在linux下以root权限执行:

  echo 1 > /proc/sys/net/ipv4/tcp_syncookies

  这个方法打开了syncookie功能,但实际效果几乎感觉不到。

  2)增大backlog

  通过增加backlog的数值,可以一定程度减缓大量SYN请求导致TCP连接阻塞的状况,一般这个数值系统默认是1024,实验增加到1280~2048:

  echo "2048" > /proc/sys/net/ipv4/tcp_max_syn_backlog

  这样在强度不是很高的攻击下,系统响应能力提高了一点。

  3)缩短retries次数

  系统默认的tcp_synack_retries是5次,将这个数值减少可以提高系统响应能力,实验改为2次:

  echo "2" > /proc/sys/net/ipv4/tcp_synack_retries

  修改后,SYN_RECV的数量有了少量减少,系统响应也快了一些。

  4)限制SYN频率

  上述的几个方法实际效果并不理想,尤其是攻击基本无效,目前比较有效的是对SYN的频率和次数进行限制,这样最大限度的控制了单个IP地址发动攻击的能力。

  例如将SYN请求的次数限制在30次每分钟,系统默认是5次/秒,显然太高,同时将burst从默认的5个降低到2个。

  /sbin/iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST SYN -m \

  limit --limit 30/m --limit-burst 2 -j ACCEPT

  注意: 该命令在shell下输入,'\'符号表示续行。

  进行此操作后,对正常的用户而言无任何感觉上的差异,而并发的SYN请求量下降了不少,服务响应基本正常了。

5)封锁IP/IP段

  对于某些单独IP的DOS攻击,封ip简单有效,方法也非常容易:

  /sbin/iptables -A INPUT -s a.b.c.d -j REJECT

  为了大规模快速的封IP地址/段,我写个小脚本:

  #!/bin/sh

  IPSRC=`cat ip.txt`

  for i in $IPSRC;do

  /sbin/iptables -A INPUT -s $i -j REJECT

  done

  在ip.txt里保存如下格式的ip地址段:

  211.95.208.0/24

  219.78.190.0/24

  4.7.220.0/24

  68.163.195.0/24

  211.162.165.0/24

  ......

  结束语

  虽然采取了种种手段,但是攻击依然没停止过,上述的方法只是减弱了攻击的影响,但却不能彻底解决问题。除了利用IPTables外,还可在应用软件层做一定的连接频率,连接数等限制,例如Apache有一个mod_limitipconn模块就可以实现类似功能。

阅读(1051) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~