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 中协商的选项等。并且,对于没有受到攻击的高负载服务器,一般不建议启用该功能,因为可能会对正常的连接性能产生一定影响。