0

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

我的脚本使用简单的 TCP 套接字以及 WebSockets 相互通信。出于某种原因,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 配置如何,都会发生这种情况,停用 SYN-Cookie 会导致立即丢弃所有请求。

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

2年前我遇到了同样的问题,但不记得我是如何解决它的。

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

4

1 回答 1

0

问题(可能)是 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);
于 2020-01-18T00:00:24.980 回答