Como configurar o UFW no Ubuntu e Debian: entrada bloqueada, SSH só para o seu IP, IPv6 filtrado, ativação com rollback automático e o caso do Docker.

Para que serve

O UFW (Uncomplicated Firewall) é a forma mais simples de montar um firewall em uma VM Linux com Ubuntu ou Debian. Ele gera as regras do kernel por você a partir de comandos curtos como ufw allow 443/tcp. Este artigo monta uma configuração segura do UFW no Ubuntu e no Debian: tudo fechado na entrada, SSH só para o seu IP e apenas os serviços públicos que você realmente usa.

Use o UFW dentro das VMs. No host Proxmox, use o firewall do próprio Proxmox (veja também o artigo «Firewall do Proxmox VE: como ativar sem perder o acesso»).

Atenção: risco de perder o acesso. Ao executar ufw enable, tudo o que não estiver liberado é bloqueado, inclusive o SSH. Siga a ordem do artigo: libere o SSH antes de ativar. Se algo der errado, entre pelo console da VM no Proxmox (noVNC) ou, se o Linux estiver instalado direto no servidor, pelo console IPMI/iLO, e rode ufw disable.

Pré-requisitos

  • Ubuntu 22.04/24.04 ou Debian 12/13, com acesso root ou sudo.
  • O IP público fixo de onde você administra (203.0.113.10 nos exemplos).
  • Acesso ao console da VM (Proxmox → VM → Console) ou ao IPMI/iLO, testado antes.
  • Nenhum outro firewall ativo na mesma máquina (firewalld, script próprio de nftables/iptables). Dois gerenciadores ao mesmo tempo causam conflito.

Como configurar o UFW no Ubuntu e Debian passo a passo

1. Instalar

No Ubuntu o UFW já vem instalado. No Debian:

sudo apt update
sudo apt install ufw

Confira se está inativo antes de começar: sudo ufw status deve mostrar Status: inactive.

2. Confirmar que o IPv6 será filtrado

Seu servidor tem IPv6. Abra /etc/default/ufw e confirme a linha:

IPV6=yes

Sem isso, as regras valem só para IPv4 e os serviços continuam expostos pelo IPv6.

3. Definir as políticas padrão

sudo ufw default deny incoming
sudo ufw default allow outgoing

Entrada bloqueada, saída liberada. Isso ainda não está valendo; o firewall só é ativado no passo 6.

4. Liberar o SSH só para você

sudo ufw allow from 203.0.113.10 to any port 22 proto tcp comment 'SSH admin'
sudo ufw allow from 198.51.100.0/24 to any port 22 proto tcp comment 'SSH escritorio'

Se você usa IPv6 para administrar, adicione também o seu endereço IPv6 da mesma forma. Se o SSH roda em outra porta, troque o 22.

Não há como restringir por IP porque o seu IP muda? Use pelo menos o limitador de tentativas, que bloqueia temporariamente quem abrir 6 ou mais conexões em 30 segundos:

sudo ufw limit 22/tcp comment 'SSH com limite'

Restringir por IP (ou por VPN) é sempre melhor do que apenas limitar.

5. Liberar os serviços públicos

Libere somente o que precisa ser acessado pela internet. Exemplo de servidor web:

sudo ufw allow 80,443/tcp comment 'Web'

Serviços internos, como banco de dados, devem ficar restritos ao IP de quem consome:

sudo ufw allow from 10.10.10.20 to any port 5432 proto tcp comment 'Postgres app'

Antes de ativar, revise o que foi cadastrado:

sudo ufw show added

6. Ativar com rede de segurança

Agende a desativação automática em 5 minutos. Se você perder o acesso, basta esperar:

sudo systemd-run --on-active=5m --unit=ufw-rollback /usr/sbin/ufw disable
sudo ufw --force enable

Agora, sem fechar a sessão atual, abra uma nova conexão SSH. Se ela funcionar, cancele a desativação agendada:

sudo systemctl stop ufw-rollback.timer

Se a nova conexão não abrir, aguarde os 5 minutos, reconecte e revise as regras.

7. Ligar o log (opcional)

sudo ufw logging low

Os bloqueios aparecem com o prefixo [UFW BLOCK] em journalctl -k ou /var/log/ufw.log.

Como saber se funcionou

  • sudo ufw status verbose mostra Status: active, as políticas padrão e as regras.
  • De outra máquina, teste uma porta liberada e uma bloqueada: nc -vz IP-DO-SERVIDOR 443 deve conectar; nc -vz IP-DO-SERVIDOR 22 a partir de um IP não autorizado deve dar timeout.
  • Reinicie a VM e confirme que o UFW sobe sozinho: sudo ufw status.

Comandos do dia a dia

TarefaComando
Listar regras numeradassudo ufw status numbered
Apagar a regra nº 3sudo ufw delete 3
Inserir regra no toposudo ufw insert 1 deny from 192.0.2.50
Simular sem aplicarsudo ufw --dry-run allow 8080/tcp
Recarregar após editar arquivossudo ufw reload
Perfis de aplicaçãosudo ufw app list

Atenção ao apagar por número: a numeração muda a cada exclusão. Rode status numbered de novo antes de apagar a próxima.

Problemas comuns

  • Docker ignora o UFW. Portas publicadas com -p 8080:80 ficam acessíveis pela internet mesmo com default deny, porque o Docker cria regras próprias que são avaliadas antes das do UFW. Publique apenas no localhost (-p 127.0.0.1:8080:80) e use um proxy reverso, ou filtre na chain DOCKER-USER, ou use o firewall do Proxmox na VM. Veja também o artigo «Docker ignora o UFW: por que acontece e como corrigir o firewall».
  • Perdi o SSH após ativar. Entre pelo console da VM no Proxmox (ou pelo IPMI/iLO, se for instalação direta no servidor), rode sudo ufw disable, corrija as regras e ative de novo.
  • Regra de "deny" não funciona. O UFW aplica a primeira regra que combina. Se existe um allow antes, o deny nunca é alcançado. Use ufw insert 1 para colocá-lo no topo.
  • Firewall do Proxmox também ativo na VM. Pode usar os dois, mas o pacote precisa passar pelos dois. Ao depurar, confira as duas camadas.

Perguntas frequentes

O UFW já vem instalado no Ubuntu?

Sim, no Ubuntu ele já vem instalado, mas inativo. No Debian, instale com apt install ufw.

Como liberar uma porta no UFW?

Use sudo ufw allow 443/tcp para uma porta pública ou sudo ufw allow from IP to any port 5432 proto tcp para liberar só para um IP.

Ativei o UFW e perdi o SSH. Como resolver?

Entre pelo console da VM no Proxmox (ou pelo IPMI/iLO, se o Linux está direto no servidor), rode sudo ufw disable, corrija as regras e ative de novo.

O UFW filtra IPv6?

Sim, desde que /etc/default/ufw tenha IPV6=yes. Sem isso, os serviços continuam expostos pelo IPv6.

Por que o Docker passa por cima do UFW?

O Docker cria regras próprias que são avaliadas antes das do UFW. Publique as portas só no localhost ou filtre na chain DOCKER-USER.

Precisa de ajuda?

Se ficou alguma dúvida, abra um ticket ou fale com o suporte pelo WhatsApp.

Esta resposta lhe foi útil? 0 Usuários acharam útil (0 Votos)

Leia também