遭遇同步(SYN)攻击的基本解决方法
很不走运,手下管理的多台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请求量下降了不少,服务响应基本正常了。


















文章评论
共有 位CH网友发表了评论 查看完整内容