Por padrão o PostgreSQL só escuta em 127.0.0.1. Para aceitar conexões de fora, são três ajustes: dizer-lhe em que endereço escutar (listen_addresses), dizer-lhe quem pode entrar (pg_hba.conf) e abrir a porta 5432 só para esse endereço na firewall. Pressupõe um VPS com root, de preferência com Ubuntu 22.04 LTS, e a configuração e a segurança são suas.
|
Antes de abrir seja o que for, pergunte-se se um túnel SSH não chega. Com o túnel não se abre porta nenhuma e a base continua invisível para a internet. Veja o túnel SSH. Só siga os passos abaixo se uma aplicação em outro servidor tem mesmo de falar diretamente com a base.
|
Passo a passo
| 1 |
Escutar em outro endereço. Edite /etc/postgresql/<versão>/main/postgresql.conf e mude listen_addresses = 'localhost' para listen_addresses = 'localhost,<IP-do-VPS>'. Não use '*' se puder evitá-lo.
|
|
| 2 |
Dizer quem entra. No pg_hba.conf, acrescente uma linha só para o endereço exato da aplicação, com senha criptografada:host nome_da_base usuário 203.0.113.10/32 scram-sha-256O /32 quer dizer «apenas este endereço». O 203.0.113.10 é só um exemplo.
|
|
| 3 |
Abrir a porta só para ele. Com o ufw: ufw allow from 203.0.113.10 to any port 5432 proto tcp.
|
|
| 4 |
Reiniciar. systemctl restart postgresql.
|
|
| 5 |
Confirmar. No VPS, ss -ltn | grep 5432 mostra os endereços em que escuta. Do outro servidor, psql -h <IP-do-VPS> -U usuário -d nome_da_base.
|
|
| Linha do pg_hba.conf |
Quer dizer |
host base usuário IP/32 scram-sha-256 |
Bom. Uma base, um usuário, um endereço, senha criptografada. |
host all all 0.0.0.0/0 scram-sha-256 |
Mau. Qualquer pessoa no mundo pode tentar entrar em qualquer base. |
host all all 0.0.0.0/0 trust |
Desastre. Entra-se sem senha. |
O que costuma dar errado: mudar o postgresql.conf e esquecer o pg_hba.conf (o erro é no pg_hba.conf entry); abrir a porta na firewall do servidor mas não em outra firewall que esteja à frente; e deixar uma senha fraca. Bots varrem a porta 5432 o dia todo. Veja portas e firewall num VPS.
|
Como mexer sem se trancar de fora
Antes de editar, faça uma cópia dos dois arquivos (por exemplo, cp pg_hba.conf pg_hba.conf.antes). Mexa numa coisa de cada vez e teste. Uma diferença útil: alterações ao pg_hba.conf aplicam-se com systemctl reload postgresql, mas o listen_addresses só muda com systemctl restart postgresql. Na firewall, garanta primeiro a regra da porta do seu SSH antes de a ligar: se o ligar sem ela, fica sem acesso ao servidor. Se mesmo assim se trancar de fora, veja as quatro causas habituais.
|
Cifre a conexão. Uma base acessível pela internet, sem TLS, envia a senha e os dados em claro. Se a aplicação suporta, use SSL na conexão. Em alternativa, um túnel SSH dá-lhe a criptografia sem configurar nada no PostgreSQL. Veja manter o VPS seguro.
|
|
Perdeu o acesso ao VPS depois de mexer na firewall? Escreva-nos com o nome do servidor e a hora da alteração.
Abrir um pedido de suporte
|
PRODUTO RECOMENDADO Servidor VPS com acesso root Recursos só seus, o sistema que escolher, reinstalação quando quiser. desde R$ 46,20/mês (plano de 3 anos, com cupom) Ver planos |