Por omissão o PostgreSQL só escuta em 127.0.0.1. Para aceitar ligaçõ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 noutro servidor tem mesmo de falar directamente com a base.
|
Passo a passo
| 1 |
Escutar noutro 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 exacto da aplicação, com palavra-passe cifrada:host nome_da_base utilizador 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 utilizador -d nome_da_base.
|
|
| Linha do pg_hba.conf |
Quer dizer |
host base utilizador IP/32 scram-sha-256 |
Bom. Uma base, um utilizador, um endereço, palavra-passe cifrada. |
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 palavra-passe. |
O que costuma correr mal: 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 noutra firewall que esteja à frente; e deixar uma palavra-passe 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 ficheiros (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 ligação. Uma base acessível pela internet, sem TLS, envia a palavra-passe e os dados em claro. Se a aplicação suporta, use SSL na ligação. Em alternativa, um túnel SSH dá-lhe a cifra 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 456,30 MT/mês (plano de 3 anos, com cupão) Ver planos |