TCP SYN攻击的防范技术 SYN攻击的防范技术,一类是通过防火墙,路由器等过滤网关防护,另一类是通过加固TCP/IP协议栈防范。其中过滤网关防护包括超时设置、SYN网关和SYN代理三种,而加固协议栈包括SYNcookies技术和增加最大半连接数。 1. 预防手段 从防御角度来说,有几种简单的解决方法,第一种是缩短SYNTimeout时间,由于SYNFlood攻击的效果取决于服务器上保持的SYN半连接数,这个值=SYN攻击的频度 x SYNTimeout,所以通过缩短从接收到SYN报文到确定这个报文无效并丢弃改连接的时间,例如设置为20秒以下(过低的SYNTimeout设置可能会影响客户的正常访问),可以成倍的降低服务器的负荷。 第二种方法是设置SYNCookie,就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被一概丢弃。
可是上述的两种方法只能对付比较原始的SYN Flood攻击,缩短SYNTimeout时间仅在对方攻击频度不高的情况下生效,SYNCookie更依赖于对方使用真实的IP地址,如果攻击者以数万/秒的速度发送SYN报文,同时利用SOCK_RAW随机改写IP报文中的源地址,以上的方法就没什么用了[10]。 2. SYN攻击防范技术介绍 关于SYN攻击防范技术,归纳起来,主要分为两类:一类是通过防火墙,路由器等过滤网关防护,另一类是通过加固TCP/IP协议栈防范,但是,SYN攻击时不能完全被阻止的,我们做的只是尽可能的减轻危害。 1)过滤网关防护 这里的过滤网关防护主要是指防火墙,当然路由器也能成为过滤网关。防火墙部署在不同网络之间,防范外来非法攻击和防止保密信息外泄,它处于客户端和服务器器之间,利用它来防护SYN攻击能起到很好的效果。过滤网关防护主要包括超时设置,SYN网关和SYN代理三种: 网关超时设置:防火墙设置SYN转发超时参数(状态检测的防火墙可在状态表里面设置),该参数远小于服务器的timeout时间。当客户端发送完SYN包,服务端发送确认包后(SYN+ACK),防火墙如果在计数器到期时还未收到客户端的确认包(ACK),则往服务器发送RST包,以使服务器从队列中删去该半连接。值得注意的是,网关超时参数设置不宜过小也不宜过大,超时参数设置过小会影响正常的通讯,设置太大,又会影响防范SYN攻击的效果,必须根据所处的网络应用环境来设置此参数。 SYN网关:SYN网关收到客户端的SYN包时,直接转发给服务器;SYN网关收到服务器的SYN/ACK包后,将该包转发给客户端,同时以客户端的名义给服务器发ACK确认包。此时服务器由半连接状态进入连接状态。当客户端确认包到达时,如果有数据则转发,否则丢弃。事实上,服务器除了维持半连接队列外,还要有一个连接队列,如果发生SYN攻击时,将使连接队列数目增加,但一般服务器所能承受的连接数量比半连接数量大得多,所以这种方法能有效地减轻对服务器的攻击[12]。 SYN代理:当客户端SYN包到达过滤网关时,SYN代理并不转发SYN包,而是以服务器的名义主动回复SYN/ACK包给客户,如果收到客户的ACK包,表明这是正常的访问,此时防火墙向服务器发送ACK包并完成三次握手。SYN代理事实上代替了服务器去处理SYN攻击,此时要求过滤网关自身具有很强的防范SYN攻击能力。 2)加固TCP/IP协议栈 防范SYN攻击的另一项主要技术是调整TCP/IP协议栈,修改TCP协议实现。主要方法有SYN cookies技术、增加最大半连接和缩短超时时间等。TCP/IP协议栈的调整可能会引起某些功能的受限,管理员应该在进行充分了解和测试的前提下进行此项工作。 ①SYN cookies技术:为使半连接队列被塞满的情况下,服务器仍能处理新到的SYN请求,SYNcookies技术被设计出来。它应用与linux,FreeBSD等操作系统,当半连接队列满时,SYN cookies并不丢弃SYN求求,而是通过加密技术来标识半连接状态 ②增加最大半连接数:大量的SYN请求导致未连接队列被塞满,使正常的TCP连接无法顺利完成三次握手,通过增大未连接队列空间可以缓解这种压力。当然backlog队列需要占用大量的内存资源,不能被无限的扩大。
联系我时,请说是在 挂海论坛 上看到的,谢谢! |