MySQL/MariaDB e PostgreSQL na VPS com acesso remoto seguro

João Guilherme

João Guilherme

Última atualização em Sep 29, 2026

Expor a porta 3306 ou 5432 para a internet é o erro mais comum, e em horas o banco recebe tentativas de senha. A regra: bind no IP certo, usuário restrito por origem e firewall só para o IP que precisa. Melhor ainda: acesso pela rede privada do Tailscale ou por túnel SSH.

MariaDB (Ubuntu/Debian)

sudo apt install -y mariadb-server
sudo mysql_secure_installation     # senha do root, remove testes e acesso anônimo

Crie o banco e um usuário que só pode conectar do seu IP:

sudo mysql
CREATE DATABASE app CHARACTER SET utf8mb4;
CREATE USER 'app'@'SEU-IP' IDENTIFIED BY 'SENHA-FORTE';
GRANT ALL PRIVILEGES ON app.* TO 'app'@'SEU-IP';
FLUSH PRIVILEGES;

Para aplicações na própria VPS use 'app'@'localhost' e não abra nada para fora.

Permitir conexão remota: em /etc/mysql/mariadb.conf.d/50-server.cnf, altere bind-address = 127.0.0.1 para bind-address = 0.0.0.0 (ou o IP do Tailscale, 100.x.x.x) e sudo systemctl restart mariadb.

Firewall (só o seu IP):

sudo ufw allow from SEU-IP to any port 3306

Teste do seu computador: mysql -h IP-DA-VPS -u app -p app.

PostgreSQL

sudo apt install -y postgresql
sudo -u postgres psql
CREATE USER app WITH PASSWORD 'SENHA-FORTE';
CREATE DATABASE app OWNER app;

Acesso remoto:

  1. /etc/postgresql/*/main/postgresql.conf: listen_addresses = '*' (ou o IP do Tailscale).
  2. /etc/postgresql/*/main/pg_hba.conf, adicione uma linha por origem permitida:
    host    app    app    SEU-IP/32    scram-sha-256
    
  3. sudo systemctl restart postgresql e sudo ufw allow from SEU-IP to any port 5432.

Teste: psql -h IP-DA-VPS -U app app.

Túnel SSH (sem abrir porta nenhuma)

Do seu computador:

ssh -L 3306:127.0.0.1:3306 root@IP-DA-VPS

Enquanto a sessão estiver aberta, localhost:3306 no seu computador é o banco da VPS. Funciona no DBeaver, Workbench, pgAdmin (opção "SSH tunnel").

Bancos em Docker

Publique a porta só localmente: -p 127.0.0.1:5432:5432. Aplicações na mesma rede Docker acessam pelo nome do serviço; você acessa por túnel SSH ou Tailscale.

Backup

mariadb-dump --all-databases -u root -p | gzip > /root/mysql-$(date +%F).sql.gz
sudo -u postgres pg_dumpall | gzip > /root/pg-$(date +%F).sql.gz

Automatize com o backup para o Object Storage.

Desempenho

Banco lento normalmente é falta de índice ou de RAM. Veja Meu servidor está lento; se o iostat mostrar disco saturado, o plano com mais RAM (cache) resolve mais que CPU.