Mysql 绑定地址仅限本地子网

Mysql 绑定地址仅限本地子网

我正在尝试允许本地子网上的用户登录我的 MySQL 服务器。

该服务器运行的是 Ubuntu 23.10 和 MySql 版本 0.0.35-0ubuntu0.213.10.1

客户端是 2 台搭载 macos Sonoma 14.2.1 的 iMac 和一台 Windows 11 PC。

ubuntu 服务器位于我的本地子网 (192.168.1.0) 上,但也可以通过公共固定 IP 地址访问。所有客户端都使用 MYSQL Workbench 8.0

我已经通过防火墙阻止了对服务器的公共访问(HTTP 除外)。但我的问题是允许本地客户端访问 MySQL 服务器。

我已经修改了/etc/mysql/mysql.conf.d/mysqld.cnf并更改了bind-address = 127.00.0.1 to 0.0.0.0让 Mysqld 监听任何子网。但这似乎非常安全,而且确实有效。

我尝试使用,bind-address = 192.168.1.xxx, 192.168.1.yyy, 192.1658.1.zzz但是当我尝试重新启动 MySQL 服务时出现错误消息。

 **Job for mysql.service failed because the control process exited with error code.**
 **See "systemctl status mysql.service" and "journalctl -xeu mysql.service" for details** With an exit code of 1.

我也试过了bind-address = 192.168.1.0,但还是出现了同样的错误信息。如果能提供任何建议,让我知道如何将绑定地址限制在我的本地子网或甚至我的三个客户端上,我将不胜感激。

答案1

Bind 并不像您想象的那样工作。

它说哪个要绑定到的网络接口。它必须是机器上配置的网络接口。

0.0.0.0 是一个特例,本质上说全部可用的接口。

它不会以任何方式限制流量,任何 IP 都可以在其监听的接口上联系它。如果您想限制流量,请使用防火墙。

因此,在您的场景中绑定到 0.0.0.0 就可以了;如果您只有一个接口,它与绑定到特定接口没有什么不同。

答案2

我遇到过类似的情况,我添加了 HAproxy“缓冲区”。我不能说这是否对你有用,但它应该有用。

我在与 mysqld 相同的主机上添加了 HAproxy,并在 HAproxy 中的端口 33061(而不是默认的 3306)上创建了一个监听器

ss -antlp;
#LISTEN    0         128          <PUBLIC_IP>:33061            0.0.0.0:*       users:(("haproxy",pid=32645,fd=12))

配置是这样的...

listen mysql
  bind        <PUBLIC_IP>:33061
  mode        tcp
  option      tcplog
  acl         mysql_ip_OK src -f /etc/haproxy/whitelist.IPs
  tcp-request connection reject if !mysql_ip_OK
  server      mysql1 127.0.0.1:3306

而“过滤器”是这样的......

cat <<EOF> /etc/haproxy/whitelist.IPs`
192.168.1.xxx
192.168.1.yyy
192.168.1.zzz
EOF

如果 /etc/haproxy/whitelist.IPs 中未明确列出任何连接尝试,理论上都会被阻止。然后客户端会连接到 <PUBLIC_IP>:33061 而不是 <PUBLIC_IP>:3306,这样你就获得了额外的安全性

相关内容