Como abrir portas no Ubuntu com UFW: guia prático de firewall
Aprenda a abrir, liberar e fechar portas no Ubuntu usando UFW. Configure o firewall passo a passo com regras seguras pra HTTP, HTTPS, SSH e portas custom.
Firewall mal configurado é uma das causas mais comuns de problemas em servidores Linux recém-provisionados — seja porque a aplicação não responde (porta fechada) ou porque o servidor está exposto demais (porta aberta sem necessidade). No Ubuntu, o UFW (Uncomplicated Firewall) é a interface padrão e simplifica a gestão de regras do iptables, mantendo a configuração legível e versionável.
Este tutorial cobre o fluxo completo: habilitar o UFW sem se trancar fora via SSH, abrir portas pra serviços comuns (HTTP, HTTPS, banco de dados), criar regras restritas por IP de origem, verificar o status e remover regras antigas. O alvo é sysadmin Linux configurando o firewall pela primeira vez num servidor Ubuntu 22.04 ou 24.04.
Tempo estimado: 10-15 minutos pra rodar todos os passos com calma, incluindo verificação. Se você só precisa abrir uma porta específica, vá direto pra seção “Abrindo portas TCP e UDP”.
Pré-requisitos
Você precisa de Ubuntu 22.04 LTS ou 24.04 LTS com acesso sudo, sessão SSH ativa e estável, e conhecimento da porta SSH em uso (padrão: 22). O UFW já vem instalado por default — não é necessário instalar pacote externo.
Antes de começar, confirme em qual porta o SSH está rodando. Se você ou o provedor mudou pra uma porta custom (ex: 2222), essa informação é crítica — abrir a porta errada significa perder acesso ao servidor após habilitar o firewall.
22/tcp 80/tcp 443/tcp deny incoming, allow outgoing Verificando status atual do UFW
Antes de adicionar regras, confirme se o UFW está habilitado ou desabilitado. Habilitar com regras erradas pode te desconectar imediatamente.
Verifique o status do UFW:
sudo ufw status verboseSe a saída for Status: inactive, o firewall está desabilitado e nenhuma regra está em vigor. Se for Status: active, liste as regras existentes antes de mudar qualquer coisa.
Identifique a porta SSH em uso lendo a configuração:
sudo grep -i "^Port" /etc/ssh/sshd_configSe a saída mostrar Port 22 (ou nenhuma linha), está no padrão. Se mostrar outro número (ex: Port 2222), anote — você precisa liberar essa porta antes de habilitar o UFW.
Habilitar o UFW sem antes liberar a porta SSH derruba sua sessão atual e impede reconexão. Se isso acontecer e você não tiver acesso ao console do provedor, a recuperação exige reinstalação do servidor.
Liberando SSH antes de habilitar o firewall
Este é o passo mais importante. Sempre libere SSH primeiro, depois habilite o UFW.
Libere a porta SSH (use 22 ou a porta custom identificada acima):
sudo ufw allow 22/tcpSe o SSH roda em porta custom:
sudo ufw allow 2222/tcpA resposta Rules updated confirma que a regra foi adicionada à configuração pendente. Ela ainda não está ativa porque o UFW está desabilitado.
Habilite o UFW:
sudo ufw enableO UFW vai perguntar se você quer continuar, avisando que pode interromper conexões SSH. Confirme com y. Se sua sessão SSH não cair, o passo anterior funcionou.
Abrindo portas TCP e UDP
Com o firewall ativo, libere as portas das aplicações que precisam estar acessíveis externamente. UFW aceita várias sintaxes — escolha a mais clara pro seu caso.
Libere HTTP e HTTPS pra serviços web (nginx, Apache, Caddy):
sudo ufw allow 80/tcp
sudo ufw allow 443/tcpAlternativa usando perfil pré-definido (mais legível em scripts):
sudo ufw allow "Nginx Full"Liste os perfis disponíveis com sudo ufw app list.
Libere uma porta UDP (ex: DNS interno ou servidor de jogo):
sudo ufw allow 53/udp
sudo ufw allow 27015/udpSe a aplicação usa TCP e UDP no mesmo número (ex: alguns protocolos de jogo), omita o protocolo:
sudo ufw allow 27015Libere um intervalo de portas (útil pra FTP passive ou range de aplicações):
sudo ufw allow 5000:5100/tcpUse dois pontos (:) pra separar início e fim. O intervalo é inclusivo nos dois extremos.
Restringindo acesso por IP de origem
Pra serviços que não devem ser públicos (banco de dados, painel admin, métricas), libere apenas IPs conhecidos.
Libere PostgreSQL apenas pro IP do seu servidor de aplicação:
sudo ufw allow from 203.0.113.45 to any port 5432 proto tcpSubstitua 203.0.113.45 pelo IP real. Pra liberar uma rede inteira (ex: VPC privada):
sudo ufw allow from 10.0.0.0/24 to any port 5432 proto tcpAplique rate-limit em SSH pra mitigar tentativas de brute force:
sudo ufw limit 22/tcpO limit bloqueia conexões da mesma origem que excederem 6 tentativas em 30 segundos. Não substitui chaves SSH e fail2ban, mas adiciona uma camada extra.
Use ufw limit pra rate-limiting + autenticação por chave SSH (desabilitando senha em /etc/ssh/sshd_config) + fail2ban monitorando /var/log/auth.log. Os três juntos cobrem 99% dos ataques automatizados sem prejudicar acesso legítimo.
Verificando regras ativas
Depois de adicionar regras, confirme que tudo ficou como esperado.
Liste todas as regras com numeração:
sudo ufw status numberedA saída mostra cada regra com um índice ([ 1], [ 2], etc), útil pra remover regras específicas depois. A coluna To indica destino (porta no servidor), Action é ALLOW/DENY/LIMIT, e From é a origem permitida.
Teste a conectividade da porta a partir de outra máquina:
nc -zv SEU_IP 80Se a porta estiver aberta e o serviço respondendo, a saída é Connection succeeded. Se a porta estiver aberta mas nada escutando, é Connection refused. Se a porta estiver fechada pelo firewall, o comando trava ou retorna Operation timed out.
Removendo regras antigas
Conforme você reorganiza serviços, regras viram lixo. Limpar mantém o firewall auditável.
Remova uma regra pelo número (use a lista de ufw status numbered):
sudo ufw delete 3O UFW pede confirmação mostrando qual regra será removida. Após delete, os números das regras subsequentes são reindexados — sempre rode ufw status numbered antes de cada delete em sequência.
Remova uma regra pela especificação completa (alternativa que não depende de número):
sudo ufw delete allow 8080/tcpIsso é mais seguro em scripts porque não depende da ordem das regras.
Resolução de problemas
”ufw: command not found”
O UFW não está instalado (raro no Ubuntu padrão, mas acontece em imagens minimalistas):
sudo apt update
sudo apt install -y ufw
Porta liberada mas serviço não responde
Cheque se o serviço está realmente escutando na porta:
sudo ss -tulpn | grep :PORTA
Se nada aparecer, o problema não é firewall — o serviço não está rodando ou está bound em 127.0.0.1 (localhost only). Pra serviços que devem aceitar conexões externas, configure-os pra bind em 0.0.0.0 ou no IP público.
Regras desaparecem após reboot
O UFW persiste regras automaticamente em /etc/ufw/user.rules. Se as regras somem após reboot, o serviço pode não estar habilitado no boot:
sudo systemctl enable ufw
sudo systemctl status ufw
Próximos passos
Com o firewall ativo e portas configuradas, considere os seguintes próximos passos pra fortalecer o servidor:
- Configure fail2ban pra monitorar tentativas de brute force em SSH, HTTP e outros serviços.
- Migre SSH pra autenticação por chave e desabilite login por senha em
/etc/ssh/sshd_config. - Defina logs do UFW em nível médio (
sudo ufw logging medium) e centralize-os via journald ou sistema externo. - Documente as regras do firewall num runbook versionado — facilita auditoria e onboarding de outros sysadmins.
- Estude regras
before.ruleseafter.rulesem/etc/ufw/pra casos avançados como NAT, masquerading e integração com Docker.
Se você está provisionando isso em produção e quer focar em aplicação em vez de operação de infraestrutura, uma VPS Hostini já vem com Ubuntu LTS e firewall pré-configurado com SSH liberado — você só adiciona as regras das suas aplicações.
Perguntas frequentes
Qual a diferença entre 'ufw allow 80' e 'ufw allow 80/tcp'?
Sem especificar o protocolo, o UFW libera tanto TCP quanto UDP na porta. Especificar /tcp ou /udp restringe a regra ao protocolo certo, o que é mais seguro e claro. Pra serviços web (HTTP, HTTPS, SSH) sempre use /tcp; pra DNS e jogos use /udp ou ambos conforme a aplicação.
Preciso reiniciar o UFW depois de adicionar uma regra?
Não. O UFW aplica regras em tempo real assim que você executa o comando allow ou deny. Reload (sudo ufw reload) só é necessário se você editou arquivos de configuração manualmente em /etc/ufw/ ou alterou perfis em /etc/ufw/applications.d/.
Como abrir uma porta apenas pra um IP específico?
Use a sintaxe estendida: sudo ufw allow from 203.0.113.45 to any port 5432 proto tcp. Isso libera a porta 5432 (PostgreSQL) somente pra requisições vindas do IP 203.0.113.45 — útil pra bancos de dados que devem ser acessíveis só pelo seu servidor de aplicação.
O UFW funciona em Docker?
Parcialmente. O Docker manipula iptables diretamente e ignora as regras do UFW pra portas publicadas com -p. Pra contêineres expostos ao público, use a flag --iptables=false no Docker daemon ou configure regras em /etc/ufw/after.rules. Em produção, considere expor contêineres só via reverse proxy (nginx) com UFW protegendo o host.
Como ver qual processo está usando uma porta antes de abrir no firewall?
Use sudo ss -tulpn | grep :PORTA pra listar processos escutando na porta. Se nada aparece, nenhum serviço está bound nela — abrir no UFW não vai fazer a porta funcionar. Você precisa primeiro iniciar o serviço (nginx, mysql, etc) que vai responder nessa porta.
É seguro deixar a porta 22 aberta pra qualquer IP?
Funcional, mas não ideal. Recomendamos limitar SSH a IPs conhecidos (sudo ufw allow from SEU_IP to any port 22) ou usar sudo ufw limit ssh, que bloqueia tentativas excessivas de conexão da mesma origem. Combine com chaves SSH (desabilitando senha) e fail2ban pra defesa em profundidade.