O que é uma porta e por que o seu app precisa de uma
Publicado em 2026-09-12 por frfrand
Una IP encuentra la máquina; el puerto encuentra el programa. Qué son los 65535 puertos, por qué los de abajo de 1024 son especiales y cómo se diagnostica un "address already in use".

Uma máquina tem um endereço IP. Mas nessa máquina rodam muitos programas ao mesmo tempo: um servidor web, um banco de dados, SSH, seu aplicativo.
Se chega um pacote a esse IP, para qual de todos ele é?
Para isso existe a porta. O IP encontra a máquina; a porta encontra o programa dentro dela. A combinação das duas coisas se chama socket, e é o que identifica de forma única uma conversa na rede.
65535 portas por endereço
O número da porta é armazenado em 16 bits, então vão de 1 a 65535. É um monte: nenhuma máquina normal usa mais do que algumas dezenas.
Eles se dividem em três faixas por convenção:
- 1 a 1023: as portas "bem conhecidas". Precisam de privilégios de root para que um programa possa ouvir nelas.
- 1024 a 49151: registradas. Aqui vivem a maioria dos bancos de dados e serviços.
- 49152 a 65535: efêmeras. São as que o sistema atribui automaticamente ao seu lado da conversa quando você abre uma conexão de saída.
Esse último ponto explica algo que confunde: quando seu navegador se conecta à porta 443 de um servidor, sua própria máquina usa uma porta aleatória da faixa alta. Por isso você pode ter vinte abas abertas contra o mesmo site sem que se misturem.
Os que vale a pena saber de cor
22 SSH 25 SMTP (correio de saída) 53 DNS 80 HTTP 443 HTTPS 3306 MySQL 5432 PostgreSQL 6379 Redis
São convenções, não regras. Nada te impede de rodar seu site na 8080 ou mover o SSH para a 2222.
E um esclarecimento que vale a pena: mover o SSH da 22 para a 2222 não te torna mais seguro. Os scanners automáticos testam todas as portas igualmente. O que isso faz é deixar seu log de autenticação muito mais limpo, porque o ruído de fundo dos bots desaparece. É higiene, não segurança.
Por que seu app roda na 3000 e não na 80
Porque para ouvir em uma porta menor que 1024 é necessário ser root, e você não quer que seu aplicativo rode como root.
A solução padrão é colocar um proxy reverso na frente: o nginx escuta na 443 (inicia como root, abre a porta e depois reduz privilégios) e encaminha as requisições para seu app em localhost:3000.
Seu app nunca fica exposto à Internet. Apenas o nginx está.
Address already in use
O erro mais comum com portas, e o mais fácil de resolver uma vez que você saiba o comando:
$ ss -tulpn | grep :3000 tcp LISTEN 0 511 *:3000 users:(("node",pid=8412))
Aí você tem o culpado com seu PID. As flags são fáceis de lembrar: t de TCP, u de UDP, l de listening, p de processo, n de números (sem resolver nomes).
Quase sempre é uma instância antiga do seu próprio aplicativo que não terminou de morrer. kill 8412 e segue.
Se o comando não mostrar o processo, tente com sudo: sem privilégios você não vê os processos de outros usuários.
Ouvir em 0.0.0.0 ou em 127.0.0.1
Esta distinção é pequena de escrever e enorme em consequências.
127.0.0.1:5432 aceita apenas conexões da própria máquina 0.0.0.0:5432 aceita conexões de qualquer lugar
Se o seu banco de dados estiver ouvindo em 0.0.0.0 e o firewall não bloqueá-lo, ele estará aberto à Internet. É uma das formas mais comuns de expor dados sem perceber.
A regra: tudo o que não precise entrar de fora, que ouça em 127.0.0.1. E se precisar se conectar a partir da sua máquina, não abra a porta: faça um túnel SSH.
No ArduMaker, as portas estão fechadas por padrão e são abertas declarando-as, justamente para que essa decisão seja explícita e não um descuido.

