Como permitir conexões remotas do MySQL e protegê-las no Ubuntu 16.04

O MySQL é o segundo sistema de gerenciamento de banco de dados mais popular do mundo! A razão pela qual é tão popular é que nos permite dimensionar nossas bases de dados de forma muito fácil e eficaz. Mais que isso, é open source (com nome “MariaDB”). Neste tutorial, mostrarei como você pode permitir e proteger conexões remotas do MySQL na máquina Ubuntu 16.04.

Existe apenas uma maneira de permitir conexões remotas no MySQL. Mas existem muitas maneiras de proteger conexões remotas com o seu servidor MySQL. Cada um tem suas próprias vantagens e complexidade. Neste caso, começaremos com uma máquina virtual limpa ou com um servidor virtual privado. No final deste tutorial, teremos um servidor MySQL que permite acesso remoto e é protegido por um firewall.

Para seguir este guia, você precisará de um servidor Ubuntu 16.04 limpo e acesso root. Nós precisaremos de acesso root ao servidor porque iremos instalar o MySQL e atualizar o arquivo de configuração para permitir conexões remotas.

Então, vamos começar com o tutorial real.

Instalar o MySQL Server

Basta um pequeno comando para instalar o servidor MySQL no seu VM / VPS. Vamos atualizar nossos repositórios e instalar o servidor MySQL em nossa máquina. Para concluir esta tarefa, execute os comandos dados abaixo como uma raiz:

sudo apt-get update
sudo apt-get install mysql-server mysql-client -y
sudo mysql_secure_installation

O primeiro comando atualizará todos os repositórios, o segundo instalará o verdadeiro servidor MySQL e o cliente MySQL para que possamos trabalhar em nossos bancos de dados. No terceiro comando, ele fará algumas perguntas, siga as instruções dadas abaixo para dar respostas em sim ou não.

Digite a senha para o usuário root: YOUR_PASSWORD
Pressione y / Y para Yes e outra para No: N
Altere a senha do root? N
Remover usuários anônimos? Y
não permitir conexão de raiz remotamente? Y
Remover banco de dados de teste e acesso a ele? Y
Recarrega as tabelas de privilégios agora? Y

Uma vez feito, nosso servidor MySQL é instalado e protegido localmente. Agora, precisamos ativar o acesso remoto atualizando nosso arquivo de configuração.

Permitir conexões remotas do MySQL

Finalmente, é hora de atualizar nosso arquivo de configuração do MySQL e ligar o servidor MySQL ao endereço IP público. Para completar esta tarefa, execute o seguinte comando no terminal para abrir o arquivo de configuração do MySQL para edição.

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Agora, você verá um arquivo de configuração com muitas diretivas. A única diretiva que estamos procurando é bind-address. Para encontrar uma linha contendo o texto desejado, pressione CTRL + W, anote bind-addresse pressione a tecla enter. Você navegará automaticamente para uma linha contendo o seguinte texto.

bind-address = 127.0.0.1

Substitua o endereço IP local pelo endereço IPv4 público do seu servidor. Por exemplo, digamos que é 1.2.3.4. Então, a configuração correta deve ficar assim:

bind-address = 1.2.3.4

Depois de atualizar o endereço IP nesta diretiva, pressione CTRL + X seguido de Y e Enter . Ele salvará o arquivo com alterações. No entanto, ainda precisamos reiniciar o servidor MySQL para aplicar as mudanças.

Para reiniciar o servidor MySQL, execute o seguinte comando.

sudo service mysql restart

Uma vez feito isso, temos que criar um usuário do MySQL que tenha acesso a partir do cliente MySQL do qual você deseja se conectar remotamente ao seu servidor MySQL.

Permitir conexões remotas do MySQL com usuários do MySQL

O MySQL é bastante seguro por padrão. É porque o MySQL não apenas verifica o nome de usuário e a senha para autenticar o usuário. Mas também verifica o host do usuário. O que significa, o endereço IP do cliente MySQL do qual um usuário está tentando se conectar.

Isso significa que, antes que um usuário possa se conectar ao nosso servidor MySQL, temos que definir um endereço IP de um usuário como host ao criar um usuário. Execute o seguinte comando para efetuar login na interface de linha de comando do MySQL.

mysql -uroot -p;

Ele pedirá a senha do root, Insira a senha do root que você definiu para poder acessar a interface de linha de comando do MySQL. Quando estiver, execute os seguintes comandos para criar um usuário com acesso a partir do host remoto.

CREATE USER ‘ USERNAME ‘ @ ‘ REMOTE_IP ‘ IDENTIFICADO POR ‘ PASSWORD ‘;
CREATE DATABASE ‘ EXAMPLE ‘;
CONCEDE TODOS NO EXEMPLO . * PARA ‘ USERNAME ‘ @ ‘ REMOTE_IP ‘;
PRIVILÉGIOS DE FLUSH;

Não esqueça de substituir as variáveis ​​por seus próprios valores. Você pode definir qualquer nome de usuário desejado, qualquer senha desejada, qualquer nome de banco de dados desejado e qualquer endereço IP remoto desejado.

Nós executamos esses comandos para criar um usuário com acesso a partir de um endereço IP específico e uma senha forte. Em seguida, criamos um banco de dados de exemplo e concedemos a todos os nossos privilégios no banco de dados de exemplo.

Parabéns! Agora, você pode acessar o servidor MySQL a partir do servidor remoto usando o seguinte comando somente a partir do IP remoto que você inseriu ao criar um usuário. Novamente, não esqueça de substituir o endereço IP pelo endereço IP do seu servidor MySQL.

mysql -uroot -p -h MYSQL_SERVER_IP ;

Ele pedirá uma senha. Com a combinação correta de seu IP, nome de usuário e senha, você poderá fazer o login.

Conexões remotas do MySQL seguro

Como sabemos, o MySQL já é um sistema seguro de gerenciamento de banco de dados. Mas também queremos protegê-lo usando o Firewall. O que significa que apenas o pedido do endereço IP confiável chegará ao MySQL. Outras solicitações serão negadas assim que chegarem ao servidor.

Assim, usaremos o UFW para negar pedidos vindos da porta do MySQL (3306), exceto do IP remoto em que confiamos. Portanto, toda vez que você criar um usuário com acesso a partir de um IP remoto diferente, será necessário adicionar uma regra à sua configuração de firewall UFW.

Primeiro de tudo, temos que permitir o acesso na porta SSH (22) para que possamos acessar o servidor via SSH. Então, temos que permitir o acesso à porta do MySQL (3306) apenas para endereços IP específicos. Isso significa que temos que negar todas as conexões de entrada primeiro e depois permitir as conexões conforme necessário.

Execute o seguinte comando para negar todas as solicitações recebidas, permitir todas as solicitações de saída e permitir solicitações na porta SSH (22).

sudo ufw padrão negar entrada
sudo ufw padrão permitir saída
sudo ufw permitir ssh

Agora, também temos que permitir solicitações recebidas de REMOTE_IP que inserimos ao criar um usuário no MySQL. Para permitir solicitações do REMOTE_IP , execute o seguinte comando.

sudo ufw insert 1 allow de REMOTE_IP para qualquer porta 3306

Não se esqueça de substituir o REMOTE_IP pelo endereço IP do qual você deseja acessar o servidor MySQL. Uma vez feito, execute o seguinte comando para habilitar o firewall.

sudo ufw enable

Ele mostrará que o firewall está ativo e ativado na inicialização do sistema. Isso significa que nossas conexões MySQL remotas estão seguras agora. Como o nosso servidor não aceitaria as solicitações, exceto que ele é enviado de um endereço IP confiável com nome de usuário e senha corretos.

Conclusão do Artigo

É assim que você pode permitir que as conexões remotas do MySQL sejam executadas com segurança. Usando esse método, você pode separar seu servidor host do WordPress e um servidor de banco de dados para que todas as solicitações e o processamento da Web sejam feitos no servidor de aplicativos e as consultas ao banco de dados sejam executadas no servidor de banco de dados.

Você também pode executar a replicação mestre-escravo no MySQL . Com a replicação, você pode fazer seu aplicativo usar dois servidores MySQL em vez de um para ler e gravar dados que podem dividir a carga entre dois servidores de banco de dados.

Se você estiver enfrentando algum problema seguindo este guia, entre em contato conosco através do nosso site: https://www.deltaservers.com.br/ e ficaremos felizes em ajudar.