1. 什么是SYN攻击
- 服务端的资源分配时在第二次握手时分配的,而客户端资源时在完成第三次握手时分配的。所以服务端容易收到SYN泛洪攻击。
- 假设攻击这段时间内伪造不同的IP地址的SYN报文,服务端每接受到一个SYN报文,就进入SYN_RCVD状态。但服务端发送出去的ACK+SYN报文又无法的得到ACK应答。从而会导致占满服务端的SYN接收队列。使得服务器不能为正常用户服务。
2. 如何检测SYN攻击:
- 查看服务器上是否能看到大量的半连接状态时,特别时源IP地址时随机的,基本可以断定这是一次SYN攻击
netstat -ntp | grep SYN_RECV
3. 服务端正常建立连接的流程
-
当服务端接收到客户端的SYN报文时,会将其加入到内核的SYN队列中
-
接着发送SYN+ACK给客户端,等待客户端回应ACK报文
-
服务端接收到ACK报文后,从SYN队列移除放入到Accept队列
-
应用通过调用accept() socket接口,从Accept队列中取出连接
4. 常见的防御SYN攻击方法
- 缩短超时(SYN Timeout) 时间
- 增加最大半连接数(SYN队列)
- 过滤网关防护
- SYN cookies技术
- 减少syn+ack重传次数