TCP/IP详解 第十二章(6) 如何防御 SYN 攻击?

时间:2024-04-09 12:57:27

如何防御 SYN 攻击?

这里给出几种防御 SYN 攻击的方法:

  • 增大半连接队列;

  • 开启 tcp_syncookies 功能

  • 减少 SYN+ACK 重传次数

方式一:增大半连接队列

在前面源码和实验中,得知要想增大半连接队列,我们得知不能只单纯增大 tcp_max_syn_backlog 的值,还需一同增大 somaxconn 和 backlog,也就是增大全连接队列。否则,只单纯增大 tcp_max_syn_backlog 是无效的。

增大 tcp_max_syn_backlog 和 somaxconn 的方法是修改 Linux 内核参数:

TCP/IP详解 第十二章(6) 如何防御 SYN 攻击?

 

增大 backlog 的方式,每个 Web 服务都不同,比如 Nginx 增大 backlog 的方法如下:

TCP/IP详解 第十二章(6) 如何防御 SYN 攻击?

最后,改变了如上这些参数后,要重启 Nginx 服务,因为半连接队列和全连接队列都是在 listen() 初始化的。

方式二:开启 tcp_syncookies 功能

开启 tcp_syncookies 功能的方式也很简单,修改 Linux 内核参数:

TCP/IP详解 第十二章(6) 如何防御 SYN 攻击?

方式三:减少 SYN+ACK 重传次数

当服务端受到 SYN 攻击时,就会有大量处于 SYN_REVC 状态的 TCP 连接,处于这个状态的 TCP 会重传 SYN+ACK ,当重传超过次数达到上限后,就会断开连接。

那么针对 SYN 攻击的场景,我们可以减少 SYN+ACK 的重传次数,以加快处于 SYN_REVC 状态的 TCP 连接断开。

TCP/IP详解 第十二章(6) 如何防御 SYN 攻击?

方式四:使用iptables 防止syn泛洪攻击

问题1:iptables 限制的syn洪水攻击是不是就不会让syn进入半链接队列了?

回复:是的

问题2:如果已经用iptables 限制的syn洪水攻击,syn洪水攻击的时候仍然会使服务器的cpu占用率升高吗?我实际测试是升上去的,但是没有使用hping3测试,只是使用jmeter测试的

回复:

       那你的这测试结果,跟hping3应该没什么差别,有大量的网络包进入系统,虽然能阻止SYN攻击进入半连接队列,但是大量的流量是会导致CPU过高,大量有网络包进入系统可能会一直触发中断信号。

        这个iptables软件防火墙理论上只要有大量包过来,即使执行过滤判断也会消耗CPU。如果是硬件级别的防火墙就不用占用主机的CPU了,自己里面有芯片进行运算

             

[1] 系统性能调优必知必会.陶辉.极客时间.

[2] https://blog.cloudflare.com/syn-packet-handling-in-the-wild

TCP/IP详解 第十二章(6) 如何防御 SYN 攻击?