来自外部主机的 mysql 上的 TIME_WAIT 连接过多

来自外部主机的 mysql 上的 TIME_WAIT 连接过多

我的 netstat 显示有超过 2,000 个 mysql 连接处于 TIME_WAIT 状态,似乎卡住了,不会消失。这种情况已经持续了好几个小时,而且许多连接都来自对我的数据库服务器没有权限的 IP 地址。它似乎挂了,我该如何清除它?这是暴力攻击吗?我的所有用户权限都有特定的主机,我没有使用任何通配符。

以下是 netstat 的片段:

tcp        0      0 server:mysql       static.98.17.76.1:45222 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:34341 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:51888 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:54459 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:49599 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:50751 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:50731 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:54658 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:58974 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:33800 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:59840 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:53495 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:51561 TIME_WAIT 

另外,mysql 中的 PROCESSLIST 不显示这些连接,因此我假设它们会立即被删除,但不确定为什么它们不会消失。这会导致 mysql 的最大连接数出现问题吗?

答案1

如果您在状态netstat输出中发现一些连接TIME_WAIT,这可能是正常的。当您有太多短暂的连接时,您可能会得到太多这样的连接。

我甚至不需要提供任何用户名、密码或数据库名称就获得了其中一些。只需输入:

mysql -h your_server_ip
ERROR 1045 (28000): Access denied for user 'khaled'@'your_pc_ip' (using password: NO)

您将获得一个处于以下TIME_WAIT状态的连接:

sudo netstat -anp | grep 3306
tcp      0      0 server_ip:3306      your_pc_ip:50464      TIME_WAIT   -

但是,建议拒绝来自此 IP 的访问,特别是当您不认为此 IP 是合法客户端时。像这样的简单 iptables 规则可以拒绝来自此 IP 的进一步请求:

sudo iptables -A INPUT -s bad_ip -p tcp --dport 3306 -j DROP

您可能需要根据是否有其他规则-A进行更改。-I

相关内容