Apenas sub-rede local de endereço de ligação do MySQL

Apenas sub-rede local de endereço de ligação do MySQL

Estou tentando permitir que usuários da minha sub-rede local façam login no meu servidor MySQL.

O servidor está executando Ubuntu 23.10 e MySql versão 0.0.35-0ubuntu0.213.10.1

Os Clientes são 2 iMacs com macos Sonoma 14.2.1 e um PC com Windows 11.

O servidor Ubuntu está na minha sub-rede local (192.168.1.0), mas também está disponível através de um endereço IP público fixo. Todos os clientes estão usando MYSQL Workbench 8.0

Bloqueei o acesso público ao servidor (além do HTTP) através do meu firewall. Mas meu problema é dar acesso ao servidor MySQL aos meus clientes locais.

eu alterei/etc/mysql/mysql.conf.d/mysqld.cnfe mudei bind-address = 127.00.0.1 to 0.0.0.0fazendo o Mysqld escutar em qualquer sub-rede. Mas isso parece muito seguro, mas funciona.

Eu tentei usar, bind-address = 192.168.1.xxx, 192.168.1.yyy, 192.1658.1.zzzmas quando tento reiniciar o serviço MySQL recebo a mensagem de erro.

 **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.

Também tentei, bind-address = 192.168.1.0mas isso me dá a mesma mensagem de erro. Eu ficaria muito grato por qualquer conselho sobre como limitar o endereço de ligação apenas à minha sub-rede local ou mesmo apenas aos meus três clientes

Responder1

O Bind não funciona da maneira que você pensa.

Dizqualinterface de rede à qual vincular. Tem que ser uma interface de rede configurada na máquina.

0.0.0.0 é um caso especial, essencialmente dizendotodosinterfaces disponíveis.

Não restringe o tráfego de forma alguma, qualquer IP pode contatá-lo nas interfaces que está escutando. Se você quiser limitar o tráfego, use um firewall.

Assim, no seu cenário, vincular a 0.0.0.0 ficará bem; não será diferente da ligação à interface específica se você tiver apenas uma.

Responder2

Eu tenho uma situação semelhante, na qual adicionei um "buffer" HAproxy. Não posso dizer se isso funcionará para você, mas deve funcionar.

Adicionei o HAproxy no mesmo host do mysqld e criei um ouvinte no HAproxy na porta 33061 (em vez do padrão 3306)

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

A configuração é assim...

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

e o "filtro" é assim...

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

Qualquer tentativa de conexão seria teoricamente bloqueada se não estivesse especificamente listada em /etc/haproxy/whitelist.IPs Os clientes então se conectam a <PUBLIC_IP>:33061 em vez de <PUBLIC_IP>:3306 e você ganha segurança adicional

informação relacionada