SYN FLOOD是一种比较常见的DoS攻击手段,它的特点就是防不胜防。
TCP握手要经过3种状态的迁移才能完成,SYN
FLOOD的策略就是发出SYN后对这个套接字置之不理,服务器的这个套接字就只能苦苦等待最后一个永远不会到来的ACK。服务器上这样的套接字就是所谓
的“半连接”套接字。由于服务器的半连接数量有限,如果一个恶意的客户机不停地在服务器上制造半连接,就会把服务器的TCP资源耗尽。
由此可见,SYN FLOOD的一些特性:
1 源地址的不确定性。因为客户机根本就不想创建连接,也就根本没必要在源IP字段写上真实的地址,甚至可以为每一个包随机生成一个IP,所以使用任何包过滤手段都没有效果,除非攻击者比较笨。
2 序列号的不确定性。同样因为客户机根本就不想创建连接,也就根本没必要使用真实的序列号,根据TCP序列号判断数据包是否来自同一个TCP层也是不可靠的,除非攻击者比较笨。
3 攻击行为的隐蔽性。SYN FLOOD攻击实际上就是TCP的第一次握手,从这一个数据包上根本无法看出它是合法还是非法。
那么我们应该怎么办呢?我们的策略只能是在目标机上抵抗DoS,防止服务器当机,但是,我们并不能预先阻止SYN FLOOD的DoS。
对于Linux来讲,方法还是挺多的:
1) echo 1 >; /proc/sys/net/ipv4/tcp_syncoocies
这是Linux上最基本的抵抗方法。很简单,但是很有效。
2) 改变TCP参数,缩短TCP半连接的保留时间,也就是说对于最后一个ACK不要等待太久。
google似乎就是这么处理的。他的缺点就是重载时可能会影响连通率。
3) 限制SYN数据包的进入速率。
Linux有很强大的流量控制机制,而且可以控制数据包进入网络接口的速率,我们只要限制一下网卡的ingress qdisc就可以了。
……
n) 最后也是最重要的就是:非技术手段。抵抗DDoS不是一个人的事情,俗话说一个巴掌拍不响,我们应该尽自己所能把自己的网络保护好,不要让自己成为别人攻击的跳板。网管们(尤其是骨干网的网管们)要团结起来,不给网络上的小流氓们可乘之机。
详细资料可以参考:
(Linux的高级路由和流量控制)
(对于/proc/sys/*的详细解释)
阅读(1159) | 评论(0) | 转发(0) |