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