Portas e firewall num VPS: porque a aplicação não é alcançável

A aplicação corre, responde no próprio servidor, e de fora não abre. Em quase todos os casos é uma de três coisas: a aplicação só escuta em 127.0.0.1, a firewall não deixa passar a porta, ou o pedido nunca chega por causa do DNS ou de um proxy. Descobrir qual é faz-se de dentro para fora, e é rápido. Este artigo é para um VPS com acesso root.

De dentro para fora, por ordem

1 A aplicação está a escutar, e onde? sudo ss -tlnpProcure a porta. O endereço à esquerda diz tudo: 127.0.0.1:3000 só aceita pedidos do próprio servidor; 0.0.0.0:3000 (ou *:3000) aceita de qualquer lado. Se a porta nem aparece, a aplicação não está a correr.
2 Responde no próprio servidor? curl -I http://127.0.0.1:3000. Se não responde aqui, o problema é da aplicação, não da rede.
3 Veja a firewall: sudo ufw status verboseSe disser «inactive», o ufw não é o que bloqueia. Se estiver activo e a porta não constar, é o bloqueio.
4 Teste de fora, de outro computador ou do telemóvel: curl -I http://IP-DO-VPS:3000. Ou, com o nc: nc -zv IP-DO-VPS 3000.
5 Se for por nome, confirme o DNS e que o registo A aponta para este VPS: verificar o DNS.

O que a mensagem diz

De fora, vê Quer dizer O que fazer
«Connection refused» O pedido chegou ao servidor e ninguém atendeu naquela porta (ou foi recusado). A aplicação não está a correr, ou escuta só em 127.0.0.1. Veja o passo 1.
Fica à espera e dá «timed out» O pedido foi descartado pelo caminho. Costuma ser a firewall. Abra a porta (ver abaixo) e repita o teste.
Funciona por IP e não por nome O DNS não aponta para este servidor, ou ainda não propagou. Verifique o registo A: quanto demora o DNS.
Funciona em HTTP e não em HTTPS A 443 está fechada, ou falta o certificado. Abra a 443 e veja HTTPS para um contentor.

Abrir uma porta, por sistema

Sistema Abrir a porta 8080 Ver
Ubuntu e Debian (ufw) sudo ufw allow 8080/tcp sudo ufw status verbose
AlmaLinux e Rocky (firewalld) sudo firewall-cmd --permanent --add-port=8080/tcp e depois sudo firewall-cmd --reload sudo firewall-cmd --list-all

Se vai ligar o ufw pela primeira vez, faça-o por esta ordem, ou fecha a porta do próprio SSH e fica à porta do seu servidor: sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
O OpenSSH assume a porta 22. Se o seu SSH usa outra, abra essa.

O Docker passa por cima do ufw. Uma porta publicada num contentor (-p 8080:80) fica aberta ao mundo mesmo que o ufw não a tenha autorizado, porque o Docker escreve as suas próprias regras. Para a manter só no servidor, publique em 127.0.0.1 (-p 127.0.0.1:8080:80) e ponha um proxy com HTTPS à frente: nginx como proxy inverso.
Abra só o que precisa. As portas das bases de dados (MySQL, PostgreSQL) não devem ficar abertas ao mundo. Para lhes chegar de fora, use um túnel: túnel SSH. Os seis cuidados básicos estão em segurança de um VPS.
Depois de abrir a porta no servidor, ainda pode haver outra barreira fora dele, se o seu ambiente tiver uma firewall adicional configurada. Se o teste de fora continua em «timed out» com a porta aberta e a aplicação a escutar em 0.0.0.0, diga-nos: verificamos o lado da rede. Instalar e configurar a firewall dentro do servidor é seu: até onde vai o nosso suporte.

Fez o teste de dentro para fora e a porta continua sem responder? Envie-nos o IP do VPS, a porta, e o resultado do ss -tlnp e do teste de fora.

Abrir um pedido de suporte

VEJA TAMBÉM

Que portas estão abertas, e porque a sua integração fica pendurada sem erro

Nginx como proxy inverso à frente de um contentor

Manter o VPS ou o servidor dedicado seguro: os seis cuidados

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
  • 0 Utilizadores acharam útil
Esta resposta foi útil?