每个 TCP 连接上的误报 SYN 泛洪检测

Posted

技术标签:

【中文标题】每个 TCP 连接上的误报 SYN 泛洪检测【英文标题】:False positive SYN flood detection on every TCP connection 【发布时间】:2020-05-04 14:01:55 【问题描述】:

我在 (Raspbian) Debian Linux 系统 (4.19.75) 上使用了几个 php 脚本(主要通过 CLI,一些通过 nginx / php-fpm)。

我的脚本使用简单的 TCP 套接字以及 WebSocket 来相互通信。出于某种原因,Linux 内核认为我正在尝试对自己的机器进行洪水/DoS。

Jan 17 02:07:26 luna kernel: [10617.487372] TCP: request_sock_TCP: Possible SYN flooding on port 1337. Sending cookies.  Check SNMP counters.
Jan 17 14:31:22 luna kernel: [55253.978408] TCP: request_sock_TCP: Possible SYN flooding on port 1337. Sending cookies.  Check SNMP counters.
Jan 17 14:31:23 luna kernel: [55254.164176] TCP: request_sock_TCP: Possible SYN flooding on port 2346. Sending cookies.  Check SNMP counters.
Jan 17 17:24:09 luna kernel: [65620.070514] TCP: request_sock_TCP: Possible SYN flooding on port 1337. Dropping request.  Check SNMP counters.

无论 sysctl-Config 为何,都会发生这种情况,停用 SYN-Cookie 会导致立即丢弃所有请求。

更改 net.ipv4.tcp_max_syn_backlog = 65535 也不起作用。

两年前我也遇到过同样的问题,但不记得我是如何解决的。

有没有办法将至少所有来自本地主机的连接列入白名单?还是停用整个系统? (我知道这使它容易受到 SYN-Flood-Attacks 的攻击,但在这一点上,我宁愿拥有一个不安全但可以正常工作的系统......)

【问题讨论】:

【参考方案1】:

问题(可能)是 PHPs TCP/listen backlog 的新默认值。 不知何故,它似​​乎有一个新的默认值零。

$this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($this->socket, SOL_SOCKET, SO_REUSEADDR, 1);

socket_bind($this->socket, TCP_HOST, TCP_PORT);
socket_listen($this->socket, 128);    // SETTING BACKLOG = 128
socket_set_nonblock($this->socket);

【讨论】:

以上是关于每个 TCP 连接上的误报 SYN 泛洪检测的主要内容,如果未能解决你的问题,请参考以下文章

每天学习一点新知识网络安全--拒绝服务攻击

GooglePlay 对 AdMob 检测的误报

fast-rcnn 对象检测中的误报

“每个窗口的误报”的含义

[na]TCP的三次握手四次挥手/SYN泛洪

关于syn/ack攻击,如何消除阿?!