why
- SYNC FLOOD
SYNC FLOOD 就是在 TCP 三次握手过程中,发送给服务器海量的 sync 包,不应答服务
器返回的 ACK。客户端可以简单的不发送对应的 ACK,也可以伪装 SYN 发送的 ip 地址,
将其设置为不存在的 ip,比如内网 ip,这样服务器发送的 SYN/ACK 永远都得不到回应。
这样服务器就需要维护海量的 半开连接 ,等待客户端的 ACK, 最终导致服务器资源耗
尽(sync queue 满)而丢弃新的连接。
实现
要创建一个新的 tcp 连接,client 端必须发送一个 TCP SYN 包给服务器,服务器返回一
个 TCP SYN/ACK 报文,这个报文中的一个参数是 序列号,用来重新拼接数据流。根据
TCP 协议,这个序列号可以由服务器端任意决定。 SYNC COOKIES 就是这个序列号的一
个特殊实现
* 初始 5 位: t mod 32,t 是时间戳
* 接下 3 位: mss 的编码值
* 最后 24 位: 服务器 Port/ip,客户端 Port/ip 值的 hash
客户端收到这个序列号 n 之后,发送 n + 1 给服务器,服务器通过 n 来比对 sync
cookie
在开启了 sync cookie 的情况下,sync queue 满了的时候,连接再也不被丢掉,而是直
接返回相应的 SYN/ACK 报文,看起来就像 sync queue 增大了一样。
sync cookie 防火墙
对于防火墙来说,它可以开启 sync cookie 的功能。此时 client 的三次握手是和防火墙
进行的,防火墙相当于起到了一个检验 client 的功能。client 通过验证之后,防火墙主
动和 server 端进行三次握手的连接的初始化过程。Junos 的相关文档在此
网友评论