Mysql bind-address только локальная подсеть

Mysql bind-address только локальная подсеть

Я пытаюсь разрешить пользователям моей локальной подсети входить на мой сервер MySQL.

Сервер работает под управлением Ubuntu 23.10 и MySql версии 0.0.35-0ubuntu0.213.10.1.

Клиентами являются два iMac с MacOS Sonoma 14.2.1 и ПК с Windows 11.

Сервер 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но это дает мне то же самое сообщение об ошибке. Я был бы очень благодарен за любой совет о том, как ограничить bind-address только моей локальной подсетью или даже только моими тремя клиентами

решение1

Bind работает не так, как вы думаете.

Там написанокоторыйсетевой интерфейс для привязки. Это должен быть сетевой интерфейс, настроенный на машине.

0.0.0.0 — это особый случай, по сути говорявседоступные интерфейсы.

Он не ограничивает трафик никоим образом, любой IP может связаться с ним на интерфейсах, которые он прослушивает. Если вы хотите ограничить трафик, используйте брандмауэр.

Таким образом, в вашем сценарии привязка к 0.0.0.0 будет вполне приемлемой; она ничем не будет отличаться от привязки к конкретному интерфейсу, если у вас есть только один.

решение2

У меня похожая ситуация, в которой я добавил HAproxy "буфер". Не могу сказать, сработает ли это у вас, но должно сработать.

Я добавил HAproxy на тот же хост, что и mysqld, и создал прослушиватель в 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, и вы получаете дополнительную безопасность.

Связанный контент