昨天我在日志中看到,在1分钟的时间跨度内,有很多mysql错误,连接失败太多。我正在运行默认设置:151用于max_connections,以前从未经历过这种情况。
当检查当前状态时,我的线程连接只有1个,最多3个
我应该增加我的最大连接数还是暂时受到DDoS攻击?
注意:它自己解决了,并在那一分钟后立即起作用。
更新2:这又发生了。在错误日志中,我可以在几秒钟内看到多个错误。为什么会发生这种情况?
将max_connect_errors
降低到100。这是一个针对黑客的小保护。
Threads_running
总是至少为1
,因为它包括您的SHOW
。
对于max_connections = 151
,Max_used_connections = 152
意味着进入了151个用户连接,再加上一个"额外"的连接被允许和使用。因此,请不要以root
(或任何其他SUPER
用户)的身份运行应用程序。
GRANT ... ON your_database.* ...
,而不是用于任何应用程序登录的... ON *.* ...
。这严重减缓了黑客进入mysql
数据库的速度。
root
应该只允许来自localhost
。这是另一项安全措施。
如果你的网络服务器有一个"访问"日志,看看它。你可能会连续看到数百次类似的黑客攻击。你可能会经常看到类似的一组。
请确保转义来自html表单的任何数据。在构建INSERTs
时执行此操作。没有这一点,你就很容易受到攻击。
附录
SELECT user, host FROM mysql.user WHERE Super_priv = 'Y';
将显示谁患有SUPER
。作为第一个剪切,它应该只包括localhost
、127.0.0.1
或::1
的host
值,所有这些值实际上都是localhost。这并不能阻止黑客首先攻击客户端,客户端也可能位于本地主机上。
这可能会列出那些以另一种方式进入的:
SELECT user, host FROM mysql.user WHERE Grant_priv = 'Y';
返回问题
Web服务器(nginx?)对连接数量的限制应该小于MySQL的max_connections
。这将阻止黑客(和用户)进入,而不是让他们阻塞web服务器和MySQL。
即使在运行良好的系统上,20也是一个合理的最大值,可以同时允许多少人进入web服务器。如果有更多,那么他们可能会互相绊倒;最好让少数人获得他们需要的所有资源,而不是因为争夺资源而花费更长的时间。