我需要为 MySQLd 打开网络,但每次我这样做时,服务器都会被强制遗忘。一些平均密码猜测脚本开始在服务器上敲击,在端口 3306 上打开连接并永远尝试随机密码。
我怎样才能阻止这种情况发生?
对于 SSH,我使用拒绝主机,效果很好。有没有办法让拒绝主机与 MySQLd 一起工作?
我也考虑过更改 MySQL 运行的端口,但这并不理想,只是一个权宜之计(如果他们发现新端口怎么办?)
有没有人有任何其他想法?
如果它有所不同,我在 FreeBSD 6.x 上运行 MySQL 5.x。
我需要为 MySQLd 打开网络,但每次我这样做时,服务器都会被强制遗忘。一些平均密码猜测脚本开始在服务器上敲击,在端口 3306 上打开连接并永远尝试随机密码。
我怎样才能阻止这种情况发生?
对于 SSH,我使用拒绝主机,效果很好。有没有办法让拒绝主机与 MySQLd 一起工作?
我也考虑过更改 MySQL 运行的端口,但这并不理想,只是一个权宜之计(如果他们发现新端口怎么办?)
有没有人有任何其他想法?
如果它有所不同,我在 FreeBSD 6.x 上运行 MySQL 5.x。
我不知道任何用于 MySQL 的类似拒绝主机的软件包,但我确实有几个解决方案:
编辑:
要回答您的评论,请尝试以下操作:
其中 .20 是您的 MySQL,而 .50 是远程连接 IP 地址。
1:将端口从3306改为。不是为了更好的安全性,而是为了承担服务器的负载来应对虚假登录攻击
2:创建 SSL 证书并在您的 MySQL 服务器上启用它(无论如何加密您的客户端-服务器连接是必须的)
3:创建一个或多个客户端证书(所有客户端都需要拥有证书,并且需要配置客户端软件才能使用它)。如果您的客户是.Net,您需要将客户证书转换为 pkcs12 格式,但这很容易完成,请参阅本指南。
4:设置MySQL用户账户需要x509客户端证书,那么攻击者既需要登录凭据又需要客户端证书(你甚至可以在客户端证书上设置密码,那么攻击者也需要这个)。
我使用本指南来制作证书和密钥文件,但那里有很多指南。
我更喜欢只使用我的 SSH 连接来访问我的 linux 机器以用于管理目的,而不是用于客户端访问。
使用 MySQL 代理,您可以编写一个小型 LUA 脚本,该脚本采用用户/密码组合,但如果连接请求来自未经批准的 IP 范围,则等待 X 秒来处理登录。
您还可以在 LUA 脚本中添加一些额外的逻辑,以便在尝试三次失败后将 IP 范围列入黑名单。
总而言之,它在技术上是可行的,但我将采用其他建议,通过 SSH 或 VPN 将隧道连接到一个常见的、列入白名单(通过 FW 或其他方式)的 IP 范围。
为什么不允许仅从安全主机访问 mysqld 端口?
虽然这不是一个“真实”的答案——我不知道你为什么需要将它直接暴露给外界。
你不能在那个盒子上启用 ssh,并使用隧道来访问数据库引擎吗?
或任何其他 VPN 解决方案来访问它(想到 openvpn)。
不是问题的真正解决方案,但如果您只是在不同的端口上运行服务器,它可能会有所帮助。大多数扫描机器人可能被编程为只检查 3306。它不会解决问题,但只需更改端口,您可能会获得更少的扫描。
我相信连接应该是防火墙:快速和好的。有很多关于 iptables 之类的教程 :)
您还可以在客户端的主机上安装一个 cronjob,它将在服务器上运行 smth,以防止防火墙阻止已知主机。
将 ssh 用于隧道将是最好的,但您可以尝试使用 fail2ban 而不是denyhosts,因为我认为它旨在监控更多不同的应用程序,因此将 mysql 日志添加到其中应该不是问题。
建议考虑您的 my.cnf-ini [mysqld] 部分
避免在 90 秒内进行数百次尝试。在 10 次尝试时将它们切掉。
考虑每天一次 FLUSH HOSTS 以清除试图使用您的系统但无法记住密码的合法人员。也许几天后,他们会得到它。