« Webdav - ideal share protocol - Webdav简介 | Main | SELinux Introduce - SELinux技术简介 »

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。
本文网址:http://www.hzqbbc.com/blog/arch/2005/07/syn_attack_eesy.html
 

July 18, 2005

SYN attack - 遭遇SYN攻击

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

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

如果是DDOS就更难办了。这两天,有2台服务器遇到了大规模的SYN_RECV DDOS攻击。主要是针对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次数
Linux系统默认的tcp_synack_retries是5次,将这个数值减少可以提高系统响应能力,实验改为2次:

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

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

4)限制SYN频率
上述的几个方法实际效果并不理想,尤其是DDOS攻击基本无效,目前比较有效的是对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模块就可以实现类似功能。

Module Limit connection

Posted by hzqbbc at July 18, 2005 12:46 AM

Comments

用iptables是比较好的方法,但是靠手动添加,太费时费力,所以,更好的方法是写一个自动化的脚本,用netstat -an|grep sys_recv,然后根据单个IP地址的连接频率来决定是否要封锁IP,再定时释放此IP。

Posted by: geminis at July 20, 2005 01:47 PM

Post a comment




Remember Me?

(you may use HTML tags for style)