每个 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 泛洪检测的主要内容,如果未能解决你的问题,请参考以下文章