Linux内核中TCP SYN Flooding检测方法

Kyl*_*ndt 6 networking linux kernel tcp

当 Linux 内核检测到 SYN Flooding 时,它会记录如下消息:

possible SYN flooding on port 80. Sending cookies

有谁知道内核用来检测这个的确切方法?

jj3*_*j33 6

如果我正确读取了 sysctl/tcp 的内容,当未确认的 Syn 请求的数量超过 net.ipv4.tcp_max_syn_backlog 的值时,它就会跳闸。具体来说:

tcp_max_syn_backlog 变量告诉你的盒子有多少 SYN 请求要保留在内存中,我们还没有从 3 次握手中获取第三个数据包。tcp_max_syn_backlog 变量被 tcp_syncookies 变量覆盖,需要打开该变量才能生效。如果服务器在高峰时间出现过载,您可能需要稍微增加此值。

我认为如此简单的原因是来自 tcp_syncookies 的文本:

当特定套接字的内核同步积压队列溢出时,tcp_syncookies 变量用于向主机发送所谓的同步饼干。这意味着如果我们的主机被来自不同主机的多个 SYN 数据包淹没,syn 积压队列可能会溢出,因此该函数开始发送 cookie 以查看 SYN 数据包是否真的合法。

对我来说,这听起来就像具有 > tcp_max_syn_backlog 未完成连接的 syn 队列一样简单。