Quão ruim é definir o endereço de ligação do MySQL para 0.0.0.0?

35

Estou tentando permitir que um servidor remoto acesse uma instância do MySQL que atualmente compartilhe um servidor Linux com um aplicativo da web. De acordo com a documentação, a única maneira de isso ser possível (a menos que eu não esteja entendendo corretamente) é se a diretiva de endereço de ligação estiver definida como 0.0.0.0 , o que resulta no MySQL permitindo o acesso de qualquer IP que possa produzir um usuário válido.

Então, duas perguntas:

  1. quão prejudicial isso seria para a segurança?
  2. existe uma abordagem melhor para permitir a interação local e remota com o MySQL?
jonathanatx
fonte

Respostas:

36

Acho que você está entendendo um pouco a configuração do endereço de ligação . Estes são os endereços locais que o MySQL escutará para conexões. O padrão é 0.0.0.0, que é todas as interfaces. Essa configuração não restringe quais IPs podem acessar o servidor, a menos que você tenha especificado 127.0.0.1 apenas para o host local.

Se você precisar restringir certos usuários de endereços IP específicos, utilize criar / conceder usuários como esteCREATE USER 'bobdole'@'192.168.10.221';

Doug Luxem
fonte
+1, mas apenas uma observação de que o endereço de escuta padrão varia dependendo de como o MySQL está instalado.
John Gardeniers
Obrigado Doug, acho que o padrão nesse caso foi meu host local, mas é bom saber que os usuários de um banco de dados específico ainda estão restritos por IP.
precisa
@jonathanatx O endereço de ligação padrão do MySQL (na versão 5.6 e até onde eu sei) é 0.0.0.0. Embora eu ache que, para muitas instalações, apenas a ligação local é a melhor opção. Não abra a porta se não quiser que ninguém a atravesse.
ebyrob
1

uma. É mau. Mesmo que você possa restringir o acesso do usuário por ip em cada banco de dados, acho mais seguro ter todas as conexões localmente. Nos meus servidores, permito que o MySQL aceite apenas conexões locais, 127.0.0.1, como é a configuração padrão. Para acessar o banco de dados remotamente, tudo o que você precisa fazer é criar um túnel ssh antes de conectar-se ao banco de dados e depois conectar-se localmente. Se você está codificando com php, é muito fácil fazer isso. Se você estiver usando um aplicativo de desktop, é fácil fazê-lo no Linux (consulte o túnel ssh). No Windows, normalmente uso um programa como o Putty para fazer o túnel para mim.

Jayson Just
fonte
7
Isso é muito insano. A maneira padrão de fazer isso é criar usuários que podem ser acessados ​​apenas a partir de certos nomes de host ou IPs. Forçar todos os servidores da Web a criar um túnel SSH para um banco de dados é muito mais trabalhoso do que precisa ser feito.
TheLQ
3
Seu servidor web e servidor de banco de dados nem sempre são o mesmo dispositivo. Não deixe que as conexões entrem na internet, certamente ... mas existem maneiras seguras de arquitetar soluções com acesso à rede MySQL.
Shane Madden
1
Para uma configuração pequena (um db, um www), você pode fazer o tunelamento ssh. Para uma configuração real, seus vpns e firewalls estariam protegendo você, portanto, você abriria via 0.0.0.0 para permitir acesso remoto.
Sonia Hamilton
2
Para todos que pensam que a idéia do túnel SSH é louca, considere que a maior parte do tráfego do MySQL é clara. Se, por algum motivo, você precisar se conectar através de uma rede não confiável (por exemplo, a Internet), considere o SSH ou faça isso através de uma VPN. Inicie o Wireshark ou outro farejador de pacotes, se você quiser ver do que estou falando.
23413 Brad
2
@Brad O MySQL suporta criptografia, então isso não está correto.
Marti Markov