我刚刚检查了我的系统日志文件,并注意到以下条目的TON:
Aug 25 13:06:17 ssrv001 mysqld:150825 13:06:17 [Warning]访问被拒绝,用户'root'@61.160.232.48'(使用密码:YES)
IP是恶意的,但我自己有根访问这台服务器。 我将删除root mysqld用户的远程访问权限,但这是否足以阻止这种事情发生?
我也在考虑实施一些能够解除多次发出无效请求的IP地址的连接。
首先,我会build议你只允许从本地login到mysql。 如果您必须从另一台服务器连接到MySQL,请创build新用户并仅授予所需的权限。
此外,你可以使用fail2ban或类似的黑客IP黑名单后,连接尝试失败。
最后,你可以改变你的mysql端口,以避免愚蠢的暴力攻击。
详细了解如何在Linux上保护MySQL数据库 : 如何在Linux VPS中保护MySQL和MariaDB数据库
更新:我忘记了MySQL有自己的工具来阻止login尝试失败后的IP地址。 你可以在你的mysqlconfiguration文件中使用这个:
max_connect_errors = 5;
但默认情况下,10次连接错误后,mysqld阻止主机。
在这里阅读更多关于它: 服务器系统variables#sysvar_max_connect_errors和在这里: 主机'host_name'被阻止
我与Maxim和知道,只允许从本地login到MySQL的MySQL。 我甚至会进一步允许login本地主机或所有用户的特定ips。
你可以做的事情来连接到你的远程MySQL服务器作为本地用户是SSH隧道。
像这样的东西应该适用于UNIX系统:
ssh -fNg -L 9999:127.0.0.1:3306 [email protected]
这将使客户端端口9999成为远程yourhost.com:3306端口的“隧道”。
对于Windows系统,也许腻子应该做的伎俩。 看看这个:
http://www.ytechie.com/2008/05/set-up-a-windows-ssh-tunnel-in-10-minutes-or-less/
目前大多数MySQLgraphics客户端允许隧道连接,例如MySQL Workbench,效果很好:
你应该用你的iptables阻塞mysql。 这段代码将阻止任何主机以外的本地主机的mysql:
iptables -A INPUT -i lo -p tcp --dport mysql -j ACCEPT iptables -A INPUT -p tcp --dport mysql -j DROP
请注意,您的iptables中的这些设置不会持久。 根据你的发行版,你应该编辑你的iptablesconfiguration。 对于基于Redhat6的系统,您应该编辑/etc/sysconfig/iptables 。
你还应该禁用MySQL的远程rootlogin与以下sql查询:
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
你也可以考虑使用fail2ban来阻塞login失败的IP地址。 这个服务器故障的问题应该帮助你。