AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 67811
Accepted
Keith Palmer Jr.
Keith Palmer Jr.
Asked: 2009-09-23 11:51:59 +0800 CST2009-09-23 11:51:59 +0800 CST 2009-09-23 11:51:59 +0800 CST

防止对 MySQL 的暴力攻击?

  • 772

我需要为 MySQLd 打开网络,但每次我这样做时,服务器都会被强制遗忘。一些平均密码猜测脚本开始在服务器上敲击,在端口 3306 上打开连接并永远尝试随机密码。

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

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

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

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

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

mysql
  • 9 9 个回答
  • 8043 Views

9 个回答

  • Voted
  1. Best Answer
    Dave Drager
    2009-09-23T12:03:33+08:002009-09-23T12:03:33+08:00

    我不知道任何用于 MySQL 的类似拒绝主机的软件包,但我确实有几个解决方案:

    • 限制登录到特定的 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 地址。

    • 9
  2. MrCalvin
    2016-04-18T03:01:43+08:002016-04-18T03:01:43+08:00

    1:将端口从3306改为。不是为了更好的安全性,而是为了承担服务器的负载来应对虚假登录攻击

    2:创建 SSL 证书并在您的 MySQL 服务器上启用它(无论如何加密您的客户端-服务器连接是必须的)

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

    4:设置MySQL用户账户需要x509客户端证书,那么攻击者既需要登录凭据又需要客户端证书(你甚至可以在客户端证书上设置密码,那么攻击者也需要这个)。

    我使用本指南来制作证书和密钥文件,但那里有很多指南。

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

    • 2
  3. Oscar
    2009-09-24T06:46:46+08:002009-09-24T06:46:46+08:00

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

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

    总而言之,它在技术上是可行的,但我将采用其他建议,通过 SSH 或 VPN 将隧道连接到一个常见的、列入白名单(通过 FW 或其他方式)的 IP 范围。

    • 1
  4. quaie
    2009-09-23T11:57:18+08:002009-09-23T11:57:18+08:00

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

    • 0
  5. Sunny
    2009-09-23T11:59:50+08:002009-09-23T11:59:50+08:00

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

    你不能在那个盒子上启用 ssh,并使用隧道来访问数据库引擎吗?

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

    • 0
  6. Eric Petroelje
    2009-09-23T12:55:31+08:002009-09-23T12:55:31+08:00

    不是问题的真正解决方案,但如果您只是在不同的端口上运行服务器,它可能会有所帮助。大多数扫描机器人可能被编程为只检查 3306。它不会解决问题,但只需更改端口,您可能会获得更少的扫描。

    • 0
  7. kolypto
    2009-09-23T19:17:09+08:002009-09-23T19:17:09+08:00

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

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

    • 0
  8. Jure1873
    2009-09-24T07:00:26+08:002009-09-24T07:00:26+08:00

    将 ssh 用于隧道将是最好的,但您可以尝试使用 fail2ban 而不是denyhosts,因为我认为它旨在监控更多不同的应用程序,因此将 mysql 日志添加到其中应该不是问题。

    • 0
  9. Wilson Hauck
    2018-07-02T16:14:23+08:002018-07-02T16:14:23+08:00

    建议考虑您的 my.cnf-ini [mysqld] 部分

    max_connect_errors=10  # to limit hacker/cracker attempts to guess a password.
    

    避免在 90 秒内进行数百次尝试。在 10 次尝试时将它们切掉。

    考虑每天一次 FLUSH HOSTS 以清除试图使用您的系统但无法记住密码的合法人员。也许几天后,他们会得到它。

    • 0

相关问题

  • 开源与专有关系 db mgt 系统的优缺点是什么?

  • 在 solaris 10 上为 mysql 设置 max_allowed_pa​​cket

  • 如何移动 MySQL 的数据目录?

  • 通过 VPN 连接什么是远程服务器 IP?

  • mysql崩溃

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve