防止对MySQL的powershell攻击?

我需要打开MySQLd的networking连接,但是每当我这样做的时候,服务器就会被强行遗忘。 一些意味着密码猜测脚本开始在服务器上敲击,在端口3306上打开连接,并永久尝试随机密码。

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

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

我也考虑过改变MySQL运行的端口,但这不是理想的,只是一个解决scheme(如果他们发现新的端口呢?)

有没有人有任何其他的想法?

如果它变得不同,我在FreeBSD 6.x上运行MySQL 5.x。

我不知道MySQL的任何denyhosts-like软件包,但我有几个解决scheme:

  • 限制login到特定的IP地址。 不要使用%来允许所有主机连接到服务器。
  • 更安全的是,设置iptables只允许从授权的IP地址访问3306。
  • 通过ssh隧道将您的stream量隧道,然后通过本地连接
  • 修改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地址。

使用MySQL代理,你可以编写一个小的LUA脚本,它接受用户/传递组合,但是如果连接请求来自未经批准的IP范围,则等待X秒来处理login。

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

总而言之,这在技术上是可行的,但是我正在和其他build议一起通过SSH或VPN隧道到公共白名单(通过FW或其他方式)的IP范围。

为什么不允许只从安全主机访问mysqld端口?

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

你不能在该框上启用SSH,并使用隧道来访问数据库引擎?

或者任何其他的VPN解决scheme来访问它(openvpn浮现在脑海)。

这个问题并不是一个真正的解决scheme,但是如果您只是在不同的端口上运行服务器,这可能会有所帮助。 大多数这些扫描机器人可能被编程为只检查3306.它不会解决问题,但通过更改端口,您可能会扫描很less的扫描。

我相信连接应该是防火墙:快速和好。 有很多的iptables教程和什么:)

你也可以在客户端的主机上安装一个cronjob,在服务器上运行smth,防止防火墙阻止已知的主机。

使用SSH隧道将是最好的,但你可以尝试使用fail2ban而不是denyhosts,因为我认为它的目的是监测更多不同的应用程序,所以它不应该是一个问题,添加到MySQL日志。

1:从3306更改端口。不是为了更好的安全性,而是要承担服务器的负载来处理虚假的login攻击

2:创buildSSL证书并在您的MySQL服务器上启用它(无论如何,这是必须encryption您的客户端 – 服务器连接)

3:创build一个或多个客户端证书(所有客户端都需要configuration证书,客户端软件需要configuration使用)。 如果您的客户端是.Net ,则需要将客户端证书转换为pkcs12格式,但这很容易完成,请参阅本指南。

4:设置MySQL用户帐户需要x509客户端证书,然后攻击者都需要login凭证和客户端证书(甚至可以在客户端证书上input密码,那么攻击者也需要这样做)。

我使用这个指南来制作证书和密钥文件,但是那里有manu指南。

我更喜欢只使用我的SSH连接来访问我的Linux机器,用于pipe理目的,而不是客户端访问。