防止对 MySQL 的暴力攻击?

防止对 MySQL 的暴力攻击?

我需要为 MySQLd 开启网络,但每次我这样做时,服务器都会被暴力破解。一些恶意的密码猜测脚本开始攻击服务器,在端口 3306 上打开连接并不断尝试随机密码。

我怎样才能阻止这种情况发生?

对于 SSH,我使用 Denyhosts,效果很好。有没有办法让 Denyhosts 与 MySQLd 一起工作?

我也考虑过更改 MySQL 正在运行的端口,但这不是最理想的,只是一个权宜之计(如果他们发现新的端口怎么办?)

有人还有其他想法吗?

如果有所不同,我在 FreeBSD 6.x 上运行 MySQL 5.x。

答案1

我不知道有任何适用于 MySQL 的类似 Denyhosts 的软件包,但是我有几个解决方案:

  • 将登录限制到特定 IP 地址。不要使用 % 允许所有主机连接到服务器。
  • 更加安全,设置 iptables 以仅允许从授权的 IP 地址访问 3306。
  • 使用 ssh 将流量隧道传输到盒子,然后通过 localhost 进行连接
  • 修改 Denyhosts 或 BFD 脚本以分析 mysql 访问日志并阻止任何针对防火墙的暴力破解尝试

编辑

为了回答你的评论,尝试这个

iptables -A INPUT -p tcp -s 202.54.1.50 --sport 1024:65535 -d 202.54.1.20 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 202.54.1.20 --sport 3306 -d 202.54.1.50 --dport 1024

其中.20 是您的 MySQL,.50 是远程连接 IP 地址。

答案2

1:将端口从 3306 改掉,不是为了更安全,而是为了减轻服务器的负担,应对虚假登录攻击

2:创建 SSL 证书并在您的 MySQL 服务器上启用它(无论如何,它对于加密您的客户端 - 服务器连接来说是必不可少的)

3:创建一个或多个客户端证书(所有客户端都需要有证书,并且需要配置客户端软件才能使用它)。如果您的客户端。网您需要将客户端证书转换为 pkcs12 格式,但这很容易做到,请参阅指导..

4:将 MySQL 用户帐户设置为需要 x509 客户端证书,然后攻击者既需要登录凭据也需要客户端证书(您甚至可以在客户端证书上设置密码,然后攻击者也需要要求该密码)。

我用了指南来制作证书和密钥文件,但是还有很多指南。

我只想使用我的 SSH 连接来访问我的 Linux 机器以进行管理,而不是用于客户端访问。

答案3

使用 MySQL Proxy,您可以编写一个小型 LUA 脚本,该脚本接受用户/密码组合,但如果连接请求来自未经批准的 IP 范围,则等待 X 秒来处理登录。

您还可以向 LUA 脚本添加一些额外的逻辑,以便在三次尝试失败后将 IP 范围列入黑名单。

总而言之,从技术上来说这是可行的,但我将遵循其他建议,通过 SSH 或 VPN 建立隧道连接到常见的、白名单(通过 FW 或其他方式)的 IP 范围。

答案4

虽然这不是一个“真正的”答案——但我不知道为什么你需要直接将它暴露给外界。

您不能在该盒子上启用 ssh,然后使用隧道来访问数据库引擎吗?

或者使用任何其他 VPN 解决方案来访问它(想到了 openvpn)。

相关内容