SYNcookies介绍

SYNcookies介绍

   运维菜鸟     2020年1月10日 02:53     1827    

服务器的syslog里出现里大量以下警告。大概的意思就是说,服务器的80端口有大量的SYN请求并且超过了可分配的记忆领域容量,因此启用了SYN cookies功能。

kernel: possible SYN flooding on port 80. Sending cookies.

SYN cookies

SYN cookies是,为了防止TCP SYN flood攻击开发的对应方法之一。

SYN Flood攻击是在TCP连接开始之前服务器的记忆领域被客户端的SYN请求全部占领。通常这个记忆领域会存放客户端的IP地址、端口号、连接时的序列号及客户端指定的各种TCP选项(TCP Window)。而服务器端是在接收客户端的SYN请求之后,给客户端返回SYN ACK(这里包含TCP连接相关的TCP序列号)。服务器端和客户端在以后的TCP通信中使用这个TCP序列号。因此客户端在返回ACK时,会包含针对服务器端SYN ACK包的TCP序列号。

利用这个TCP三次握手的特性,如果服务器端能够把应该存储在记忆领域的信息,写入到SYN ACK包的序列号的话,服务器端在接收客户端的SYN请求之后无需消费记忆领域,这么做的好处是TCP三次握手完成之后分配记忆领域就可以了。

一般使用伪装IP进行大量SYN flood攻击的客户端无法接收这个序列号(服务器端SYN ACK的序列号),因此也无法返回给服务器端正确的ACK包。其结果是服务器端的记忆领域可用于正常主机的连接请求。

开启SYN cookies功能的服务器端在没有受到SYN flood攻击时,在接收客户端的SYN请求时会分配记忆领域给这个连接请求(和没有开启SYN cookies时一样)。但是当受到SYN flood攻击时(可分配的记忆领域不足),不再给客户端的SYN请求分配记忆领域,而是直接给客户端返回SYN ACK包。这时的SYN ACK包的序列号是用特殊的方法计算的。

用以下命令查看有没有SYN cookies功能有没有开启。0是无效,1是有效。

 # cat /proc/sys/net/ipv4/tcp_syncookies

修改内核参数

以下是相关的几个内核参数。

参数名

默认值

简介

tcp_max_syn_backlog

1024

服务器端在接受客户端的SYN请求之后,在记忆领域可存储的客户端SYN请求数

tcp_synack_retries

5

服务器端处于SYN_RECV状态之后,在一定时间没有收到客户端的SYN时,再次发送SYN ACK的次数

tcp_abort_on_overflow

0(无效)

当服务器端高负荷时,给客户端发送RST切断连接来保护服务器

可使用

 # sysctl -a | grep tcp_max_syn_backlog net.ipv4.tcp_max_syn_backlog = 1024

 # sysctl -a | grep tcp_synack_retries net.ipv4.tcp_synack_retries

 

文章评论

0

其他文章