SYN 攻击
SYN Flood 是当前最流行的DOS 与 Ddos (分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击资源耗尽(CPU负荷或内存不足)的攻击方式
原理
在TCP 连接的三次握手过程中,假设一个用户向服务器发送了SYN报文后突然死机后掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间长度称为SYN Timeout, 一般来说这个时间是分钟的数量级(大约为30秒-2分钟),如果有一个恶意的攻击存在,还要不断对这个列表中的IP进行SYN+ ACK 的重试,最后的结果往往是堆栈溢出奔溃
应对方法
缩短 SYN Timeout 时间:
由于 SYN Flood 攻击的效果取决于服务器上的保持的恶SYN半连接数, 这个值 = SYN 攻击的频度 * SYN Timeout, 所以通过缩短从接收到SYN报文到确定这个报文无效并丢弃改连接的时间,假设设置为20秒一下,(过低的SYN Timeout)设置可能会影响客户的正常访问, 可以成被的降低服务器的负荷(缩短SYN Timeout)时间仅在对方攻击频度不高的情况下生效
设置 SYN Cookie:
就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN 报文, 就认定是受到了攻击, 以后从这个IP 地址来的包会被丢弃(SYN Cookie依赖于对方使用的真实IP地址, 如果攻击者以数万/秒的速度发送SYN报文,同时利用 SOCK_RAW 随机改写 IP报文中的源地址该方法将失效)
多连接队列
为了应付这种攻击, 现代unix系统中普遍采用多连接队列的方式来缓冲这种攻击, 是用一个基本队列处理正常的完全连接应用,用另一个队列单独存放半打开连接, 这种双队列处理方式和其他一些系统内核措施(例如 Syn-Cookies/Caches)联合应用时,能够比较有效的缓解小规模的SYN Flood 攻击(事实证明< 1000p/s),加大SYN队列长度,可以容纳更多等待连接的网络连接数,所以对Server来说可以考虑增大该值,对于超过128Mb内存的系统, 默认值是1024, 低于128Mb的则是128