【网络】Linux 内核优化实战 - net.ipv4.tcp_syncookies

发布于:2025-07-08 ⋅ 阅读:(14) ⋅ 点赞:(0)

net.ipv4.tcp_syncookies是 Linux 系统中的一个内核参数,用于控制是否启用 SYN Cookies 功能,该功能主要用于防范 SYN Flood 攻击。以下是关于它的详细介绍:

功能作用

SYN Flood 攻击是一种常见的 DDoS 攻击方式,攻击者会短时间内伪造大量不同 IP 地址的 SYN 报文发送给服务端,导致服务端的半连接队列被占满,从而无法为正常用户提供服务。而启用 SYN Cookies 功能后,当服务端的 SYN 队列满了之后,后续收到的 SYN 包不会被丢弃,而是会根据算法计算出一个 Cookie 值,这个 Cookie 包含了一些与连接相关的信息,如初始序列号等,并且不会在服务器端保存连接状态。服务端将 Cookie 值放到第二次握手报文的「序列号」里回给客户端。当服务端接收到客户端的 ACK 报文时,通过将 ACK 报文减去 1 获取 Cookie,然后根据 Cookie 判断报文的合法性并重建连接状态,进而完成连接的建立,这样即使受到 SYN 攻击导致 SYN 队列满时,也能保证正常的连接可以成功建立。

取值及含义

该参数是一个布尔类型变量,通常有以下 3 个取值:

  • 0:表示关闭 SYN Cookies 功能,此时如果遇到 SYN Flood 攻击,服务端的 SYN 队列容易被填满,从而影响正常连接的建立。
  • 1:表示在新连接压力比较大时启用 SYN Cookies。当系统检测到 SYN 队列即将满或者已经满了等压力较大的情况时,就会启用该功能来应对可能的攻击。
  • 2:表示始终使用 SYN Cookies,无论系统是否处于高压力状态,都会启用该功能来处理 SYN 报文。

查看与修改方法

  • 查看:可以通过命令cat /proc/sys/net/ipv4/tcp_syncookies来查看当前该参数的值,命令执行后会显示出 0、1 或 2 中的一个数字,代表当前的设置状态。
  • 临时修改:使用sysctl -w命令可以临时修改该参数的值,使其立即生效,但系统重启后设置会失效。例如,要启用该功能(设置为 1),可以执行命令sudo sysctl -w net.ipv4.tcp_syncookies=1
  • 永久修改:若希望修改的设置在系统重启后依然有效,则需要编辑/etc/sysctl.conf文件,在文件中添加或修改net.ipv4.tcp_syncookies = 1(根据实际需求,值也可以是 0 或 2)这一行内容,保存文件后,执行sudo sysctl -p命令,使新的配置立即生效。

不过需要注意的是,虽然 SYN Cookies 能有效防范 SYN Flood 攻击,但它也有一定的局限性,比如可能会拒绝客户端 SYN 报文中的一些在 SYN 和 SYN+ACK 中协商的选项等。并且,对于没有受到攻击的高负载服务器,一般不建议启用该功能,因为可能会对正常的连接性能产生一定影响。


网站公告

今日签到

点亮在社区的每一天
去签到