我刚刚检查了我的系统日志文件,发现其中有大量以下条目:
8 月 25 日 13:06:17 ssrv001 mysqld:150825 13:06:17 [警告] 拒绝用户“root”@“61.160.232.48”访问(使用密码:是)
该 IP 是恶意的,因为除了我之外没有人拥有该服务器的 root 访问权限。我将删除 root mysqld 用户的远程访问权限,但这足以阻止此类事情发生吗?
我也在考虑实施某种措施,禁止多次发出无效请求的 IP 地址的连接。
答案1
首先,我建议您仅允许从 localhost 以 root 身份登录 mysql。如果您必须从另一台服务器连接到 mysql - 请创建新用户并仅授予其所需的权限。
此外,您可以使用 fail2ban 或类似程序在多次连接尝试失败后将黑客 IP 添加到黑名单。
最后,您可以更改您的 mysql 端口以避免愚蠢的暴力攻击。
在这里了解有关在 Linux 上保护 MySQL 数据库的更多信息:如何在 Linux VPS 中保护 MySQL 和 MariaDB 数据库
更新: 我忘了 MySQL 有自己的工具可以在登录尝试失败后阻止 IP。你可以在 mysql 配置文件中使用它:
最大连接错误=5;
但默认情况下,mysqld 会在 10 次连接错误后阻止主机。
在这里阅读更多内容:服务器系统变量 #sysvar_max_connect_errors和这里:主机“host_name”已被阻止
答案2
我同意 Maxim 和 knowhy 的观点,只允许从本地主机以 root 身份登录 MySQL。我甚至会进一步允许所有用户从本地主机或特定 ip 登录。
您可以通过 ssh 隧道以本地用户身份连接到远程 MySQL 服务器。
类似这样的代码应该适用于 UNIX 系统:
ssh -fNg -L 9999:127.0.0.1:3306 [email protected]
这将启用客户端端口 9999 作为到远程 yourhost.com:3306 端口的“隧道”。
对于 Windows 系统,也许 Putty 应该可以解决问题。看一下这个:
http://www.ytechie.com/2008/05/set-up-a-windows-ssh-tunnel-in-10-minutes-or-less/
目前大多数 MySQL 图形客户端都允许隧道连接,例如 MySQL Workbench 就运行良好:
答案3
你应该用 iptables 来阻止 mysql。此代码片段将阻止来自 localhost 以外的任何主机的 mysql:
iptables -A INPUT -i lo -p tcp --dport mysql -j ACCEPT
iptables -A INPUT -p tcp --dport mysql -j DROP
请注意,iptables 中的这些设置不会持久。根据您的发行版,您应该编辑 iptables 配置。/etc/sysconfig/iptables
例如,对于基于 Redhat6 的系统,您应该编辑。
您还应该使用以下 SQL 查询禁用 mysql 中的远程 root 登录:
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
您还可以考虑实施 fail2ban 来阻止登录失败次数过多的 IP。这个 serverfault 问题应该可以帮助你。