Guia
Como configurar firewall UFW no Ubuntu
Aprenda a configurar o firewall UFW no Ubuntu para proteger sua VPS, liberar SSH, HTTP e HTTPS, testar regras e evitar bloqueios com segurança na prática.
Tempo estimado: 15-20 minutos
Dificuldade: Iniciante
Neste guia, você vai configurar o UFW no Ubuntu para reduzir a superfície de ataque da sua VPS. O UFW, abreviação de Uncomplicated Firewall, é uma camada simples para gerenciar regras do netfilter no Linux. Na prática, ele permite bloquear conexões que não foram autorizadas e liberar apenas os serviços que você realmente usa, como SSH, HTTP e HTTPS.
Antes de começar, mantenha a sessão SSH atual aberta até terminar todos os testes. Se você fechar a conexão antes de confirmar que a porta SSH está liberada, pode ficar sem acesso remoto ao servidor.
O que você vai aprender
Ao final deste guia, você terá uma configuração inicial de firewall adequada para uma VPS Ubuntu usada em projetos web, APIs, painéis administrativos ou ambientes de desenvolvimento. Você não precisa conhecer iptables em detalhes, porque o UFW simplifica a criação e a leitura das regras.
Você vai aprender a:
- Verificar se o UFW está instalado e identificar o estado atual do firewall.
- Fazer backup dos arquivos de configuração antes de alterar regras.
- Liberar a porta SSH com segurança para evitar bloqueio de acesso.
- Definir políticas padrão para negar conexões de entrada e permitir conexões de saída.
- Abrir portas HTTP e HTTPS para sites, APIs e aplicações web.
- Ativar o firewall sem derrubar sua sessão ativa.
- Testar portas, revisar logs e resolver problemas comuns.
Este tutorial funciona bem para servidores Ubuntu 22.04 LTS e Ubuntu 24.04 LTS. A lógica também serve para Debian, embora nomes de perfis e versões de pacotes possam variar. Se você ainda está planejando a infraestrutura, pode combinar este guia com uma leitura sobre VPS para desenvolvedores para entender quais recursos costumam influenciar projetos em produção.
Pré-requisitos
Você precisa de uma VPS com Ubuntu e acesso SSH com um usuário que tenha permissão para usar sudo. O guia assume que você já consegue entrar no servidor pelo terminal. Em computadores Linux e macOS, use o aplicativo Terminal. No Windows, use Windows Terminal, PowerShell ou um cliente SSH como PuTTY. Os comandos abaixo foram escritos para uma sessão shell comum no Ubuntu.
Você também precisa saber qual porta SSH está em uso. Na maioria dos servidores, a porta padrão é 22. Algumas imagens de provedores alteram essa porta por segurança ou por configuração do painel. Se você não sabe, vamos verificar durante o primeiro passo antes de ativar qualquer regra.
Use uma conta com sudo. Para testar, execute:
sudo -v
Se sua senha for aceita, o comando não mostra saída e retorna ao prompt. Se o usuário não tiver permissão, você verá algo parecido com:
usuario is not in the sudoers file.
Nesse caso, entre com o usuário administrativo fornecido pelo provedor ou ajuste as permissões pelo console web. Também recomendo ter acesso ao console de emergência do painel da VPS. Ele é útil caso uma regra incorreta bloqueie o SSH. Ao escolher onde hospedar servidores, latência e suporte ao console remoto fazem diferença. Você pode comparar esses pontos no guia sobre VPS no Brasil ou no exterior.
Passo 1: Acessar a VPS e auditar o estado atual
Primeiro, conecte-se à VPS e descubra quais serviços estão escutando portas de rede. Esse diagnóstico evita que você bloqueie um serviço legítimo sem perceber. Não ative o firewall ainda. A ordem correta é verificar, liberar SSH, configurar regras essenciais e só depois habilitar o UFW.
Entre no servidor usando SSH. Substitua o IP pelo endereço real da sua VPS:
ssh [email protected]
Em um primeiro acesso, o cliente SSH pode pedir confirmação da chave do host. Depois de autenticar, você verá um prompt parecido com:
Welcome to Ubuntu 24.04 LTS
ubuntu@vps:~$
Agora veja a versão do sistema:
lsb_release -a
Saída esperada em Ubuntu 24.04:
Distributor ID: Ubuntu
Description: Ubuntu 24.04 LTS
Release: 24.04
Codename: noble
Liste portas TCP em escuta:
sudo ss -tulpn
Um servidor web simples pode mostrar algo assim:
Netid State Local Address:Port Process
tcp LISTEN 0.0.0.0:22 users:(('sshd',pid=817,fd=3))
tcp LISTEN 0.0.0.0:80 users:(('nginx',pid=930,fd=6))
tcp LISTEN 0.0.0.0:443 users:(('nginx',pid=930,fd=7))
Verifique também se o UFW já está ativo:
sudo ufw status verbose
Se ainda não foi configurado, a saída comum é:
Status: inactive
Guarde mentalmente as portas exibidas pelo ss. Neste guia, vamos liberar SSH, HTTP e HTTPS. Se sua VPS roda banco de dados, Redis, Docker, painel de controle ou outro serviço, não exponha a porta na internet automaticamente. Primeiro confirme se esse serviço precisa receber conexões externas.
Passo 2: Instalar o UFW e criar backup da configuração
O UFW costuma vir instalado no Ubuntu Server, mas você deve confirmar antes de seguir. Também vamos criar um backup dos arquivos de configuração. Isso não é exagero. Firewall é uma configuração crítica, e ter uma cópia facilita auditoria e recuperação caso você altere muitas regras durante testes.
Atualize a lista de pacotes e instale o UFW:
sudo apt update && sudo apt install ufw -y
Você deve ver uma saída parecida com esta:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
ufw is already the newest version (0.36.2-6).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Confirme a versão instalada:
ufw --version
Saída esperada:
ufw 0.36.2
Copyright 2008-2023 Canonical Ltd.
Agora crie um diretório de backup com data e copie os arquivos atuais. Este comando não remove nada, apenas copia configurações existentes:
BACKUP_DIR=$HOME/ufw-backup-$(date +%Y%m%d-%H%M%S)
mkdir -p $BACKUP_DIR
sudo cp -a /etc/ufw $BACKUP_DIR/
sudo cp -a /lib/ufw $BACKUP_DIR/
echo $BACKUP_DIR
A saída mostra o caminho do backup:
/home/ubuntu/ufw-backup-20260622-143012
Confira se os arquivos foram copiados:
ls -la $BACKUP_DIR
Saída esperada:
total 16
drwxrwxr-x 4 ubuntu ubuntu 4096 Jun 22 14:30 .
drwxr-x--- 6 ubuntu ubuntu 4096 Jun 22 14:30 ..
drwxr-xr-x 3 root root 4096 Jun 22 14:30 ufw
drwxr-xr-x 2 root root 4096 Jun 22 14:30 ufw
Se os diretórios aparecerem, você tem uma cópia de segurança. Em ambientes com auditoria mais rígida, registre também a mudança em um documento interno. Para entender como analisamos critérios operacionais em provedores e infraestrutura, veja como avaliamos serviços de VPS.
Passo 3: Liberar SSH antes de ativar o firewall
Este é o passo mais sensível do guia. Antes de ativar o UFW, você precisa permitir a porta SSH usada pela sua sessão. Se pular essa etapa, o firewall pode bloquear novas conexões e você dependerá do console do provedor para corrigir. Mantenha a janela atual aberta durante todo o processo.
Descubra a porta configurada no OpenSSH Server:
sudo sshd -T | grep '^port '
Na configuração padrão, a saída será:
port 22
Agora libere o perfil OpenSSH do UFW. Esse perfil normalmente aponta para a porta 22 TCP:
sudo ufw allow OpenSSH
Saída esperada:
Rules updated
Rules updated (v6)
Verifique as regras adicionadas antes de ativar qualquer coisa:
sudo ufw show added
Você deve ver:
Added user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
Se o comando sshd -T mostrou uma porta diferente, por exemplo 2222, libere essa porta explicitamente:
sudo ufw allow 2222/tcp
A saída será:
Rules updated
Rules updated (v6)
Nesse cenário, confirme com:
sudo ufw show added
Saída esperada:
Added user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
ufw allow 2222/tcp
Se você usa porta customizada, pode remover a regra OpenSSH depois que tudo estiver testado, desde que ela não seja necessária. Por enquanto, deixe as permissões como estão. O objetivo é reduzir risco de bloqueio durante a primeira configuração.
Passo 4: Configurar regras para HTTP, HTTPS e políticas padrão
Com SSH liberado, configure as políticas padrão do firewall. A política de entrada deve negar conexões não autorizadas. A política de saída pode permanecer permitida, porque o servidor precisa consultar DNS, baixar pacotes, renovar certificados TLS e acessar APIs externas. Essa combinação é adequada para a maioria das VPS iniciais.
Defina a política padrão para entrada:
sudo ufw default deny incoming
Saída esperada:
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)
Defina a política padrão para saída:
sudo ufw default allow outgoing
Saída esperada:
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
Agora libere HTTP e HTTPS. Use essas regras se você roda Nginx, Apache, Caddy, uma API pública ou qualquer aplicação web exposta por proxy reverso:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Saída esperada para cada comando:
Rules updated
Rules updated (v6)
Se você usa Nginx instalado pelo apt, pode listar perfis disponíveis:
sudo ufw app list
Uma saída comum é:
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
O perfil Nginx Full libera 80 e 443 ao mesmo tempo. Como já criamos regras por porta, não precisa repetir. Revise o que foi preparado:
sudo ufw show added
Saída esperada:
Added user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
Não libere portas de banco de dados, como 3306, 5432 ou 6379, apenas porque o serviço existe. Em uma VPS simples, esses serviços devem escutar em 127.0.0.1 ou em rede privada. Firewall ajuda, mas não substitui configuração segura do próprio serviço.
Passo 5: Ativar o UFW com segurança
Agora você vai ativar o firewall. Antes disso, faça uma última verificação das regras planejadas. Este comando mostra regras adicionadas, mesmo com o firewall ainda inativo:
sudo ufw show added
Confirme que SSH aparece na lista. A saída mínima segura deve conter OpenSSH ou a porta customizada que você usa:
Added user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
Aviso: o próximo comando altera o comportamento de rede do servidor. Ele não apaga arquivos nem remove pacotes, mas pode bloquear conexões que não foram liberadas. Execute somente se a regra SSH apareceu na verificação anterior.
Ative o UFW:
sudo ufw enable
O UFW vai avisar que a operação pode interromper conexões SSH existentes:
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
Digite y e pressione Enter. A saída esperada é:
Firewall is active and enabled on system startup
Verifique o status detalhado:
sudo ufw status verbose
Você deve ver algo semelhante a:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp (OpenSSH) ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
80/tcp (v6) ALLOW IN Anywhere (v6)
443/tcp (v6) ALLOW IN Anywhere (v6)
Abra uma segunda janela de terminal e teste um novo login SSH antes de fechar a sessão original:
ssh [email protected]
Se entrar normalmente, você pode continuar. Se falhar, não feche a sessão antiga. Use-a para revisar as regras com sudo ufw status verbose e liberar a porta correta.
Passo 6: Revisar, numerar e ajustar regras
Depois de ativar o firewall, aprenda a revisar regras numeradas. Esse recurso facilita manutenção, principalmente quando você precisa remover uma permissão antiga ou corrigir uma porta aberta por engano. O UFW aplica regras em ordem, mas para configurações simples a numeração serve mais como referência administrativa.
Liste as regras numeradas:
sudo ufw status numbered
Saída esperada:
Status: active
To Action From
-- ------ ----
[ 1] OpenSSH ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
[ 4] OpenSSH (v6) ALLOW IN Anywhere (v6)
[ 5] 80/tcp (v6) ALLOW IN Anywhere (v6)
[ 6] 443/tcp (v6) ALLOW IN Anywhere (v6)
Para ver regras mais completas em formato raw, execute:
sudo ufw status verbose
Se você adicionou uma porta por engano, remova pelo próprio comando de regra quando possível. Por exemplo, se liberou a porta 8080 e não usa mais:
sudo ufw delete allow 8080/tcp
A saída esperada é:
Rule deleted
Rule deleted (v6)
Cuidado ao remover por número. Como a lista muda após cada exclusão, apague uma regra por vez e confira novamente. Antes de qualquer remoção, execute:
sudo ufw status numbered
Se precisar permitir uma porta temporária para teste local, prefira restringir por IP de origem quando possível. Exemplo para liberar a porta 3000 apenas para o IP público 198.51.100.25:
sudo ufw allow from 198.51.100.25 to any port 3000 proto tcp
Saída esperada:
Rules updated
Depois do teste, remova a regra:
sudo ufw delete allow from 198.51.100.25 to any port 3000 proto tcp
Essa rotina mantém o firewall limpo e reduz portas expostas sem necessidade.
Verificação e testes
Com o UFW ativo, valide por dentro e por fora do servidor. Comece pela visão interna:
sudo ufw status verbose
A saída deve confirmar status active, entrada deny e saída allow:
Status: active
Default: deny (incoming), allow (outgoing), disabled (routed)
Teste se o servidor consegue sair para a internet. Isso confirma que a política outgoing não quebrou atualizações e renovações de certificado:
curl -I https://ubuntu.com
Saída esperada:
HTTP/2 200
server: nginx
content-type: text/html; charset=utf-8
Agora veja logs recentes do UFW:
sudo journalctl -u ufw --no-pager -n 20
Em muitos servidores, a saída será curta:
Started Uncomplicated firewall.
Se você tiver acesso a outro computador, teste portas abertas e fechadas de fora. No seu computador local, instale nmap se necessário e rode:
nmap -Pn -p 22,80,443,3306 203.0.113.10
Resultado esperado para uma VPS web sem banco exposto:
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
3306/tcp filtered mysql
Se 3306 aparecer como open, o firewall permitiu ou o serviço está exposto por outra camada. Revise regras, security groups do provedor e configuração do banco. Alguns provedores aplicam firewalls externos além do UFW, então compare os resultados com o painel da VPS.
Troubleshooting
Problema 1: perdi acesso SSH depois de ativar o UFW. Se você ainda tem uma sessão aberta, não feche. Rode sudo ufw status verbose e confirme se OpenSSH ou a porta SSH customizada aparece como ALLOW IN. Se não aparecer, libere a porta correta com sudo ufw allow OpenSSH ou sudo ufw allow 2222/tcp. Depois teste uma nova conexão em outra janela. Se todas as sessões foram fechadas, acesse o console web do provedor e execute os mesmos comandos localmente. Como medida temporária, você pode desativar o firewall com sudo ufw disable, corrigir as regras e ativar novamente.
Problema 2: meu site parou de abrir, mas SSH funciona. Verifique se as portas 80 e 443 estão liberadas com sudo ufw status verbose. Se não estiverem, execute sudo ufw allow 80/tcp e sudo ufw allow 443/tcp. Depois confirme se o serviço web está rodando com sudo systemctl status nginx ou sudo systemctl status apache2. Um firewall correto não resolve um Nginx parado. Teste localmente com curl -I http://127.0.0.1. Se local funciona e externo não, investigue UFW e firewall do provedor.
Problema 3: nmap mostra portas filtradas que eu esperava abertas. Primeiro confirme se a aplicação está escutando em 0.0.0.0 ou no IP público com sudo ss -tulpn. Se ela escuta apenas em 127.0.0.1, conexões externas não chegarão, mesmo com UFW liberado. Depois revise regras numeradas com sudo ufw status numbered. Também verifique se existe firewall externo no painel da VPS bloqueando a porta. Essa camada pode ficar acima do sistema operacional.
Problema 4: adicionei regras duplicadas ou erradas. Liste regras com sudo ufw status numbered e remova pelo comando explícito quando possível, como sudo ufw delete allow 8080/tcp. Evite apagar várias regras numeradas em sequência sem conferir a lista entre uma remoção e outra. A numeração muda após cada exclusão. Se a configuração ficou confusa, use o backup criado no início como referência e reconstrua as regras com calma.
Próximos passos
Depois de configurar o UFW, documente as portas liberadas e o motivo de cada uma. Uma tabela simples com porta, protocolo, serviço e origem permitida já ajuda bastante em manutenções futuras. Também revise suas aplicações para garantir que serviços internos, como bancos de dados, filas e caches, não escutem em IP público.
Se sua VPS hospeda sites, o próximo ajuste natural é configurar TLS com certificados válidos e renovação automática. Depois, revise hardening de SSH, atualização automática de segurança, monitoramento de logs e backups. Firewall reduz exposição, mas proteção real combina várias camadas.
Também vale testar o comportamento após reiniciar o servidor:
sudo reboot
Aviso: esse comando reinicia a VPS e derruba conexões ativas por alguns segundos ou minutos. Execute apenas em janela de manutenção ou quando você puder tolerar a interrupção. Após o servidor voltar, entre novamente e rode:
sudo ufw status verbose
A saída deve continuar mostrando:
Status: active
Se você mantém mais de uma VPS, transforme esse processo em checklist. Comece por acesso SSH, instale e valide UFW, libere apenas portas essenciais, teste externamente e registre a configuração. Esse fluxo simples evita erros repetidos e facilita crescer a infraestrutura sem abrir portas desnecessárias.
Perguntas frequentes
O UFW substitui o firewall do provedor da VPS?
Não necessariamente. O UFW roda dentro do sistema operacional da VPS, enquanto muitos provedores oferecem um firewall externo no painel. As duas camadas podem trabalhar juntas. O firewall do provedor bloqueia tráfego antes de chegar ao servidor, e o UFW controla o que o Ubuntu aceita localmente. Se uma porta estiver liberada no UFW, mas bloqueada no painel, ela continuará inacessível externamente. Em ambientes simples, usar as duas camadas aumenta a segurança, desde que você documente as regras para evitar diagnóstico confuso.
Posso ativar o UFW enquanto estou conectado por SSH?
Sim, mas você deve liberar SSH antes de ativar o firewall. Execute sudo ufw allow OpenSSH ou libere a porta customizada usada pelo sshd. Depois confirme com sudo ufw show added e só então rode sudo ufw enable. Mantenha a sessão atual aberta e teste uma segunda conexão em outro terminal antes de sair. Se a nova conexão falhar, use a sessão antiga para corrigir as regras. Essa sequência reduz bastante o risco de ficar bloqueado fora da VPS.
Quais portas devo liberar em uma VPS Ubuntu comum?
Para uma VPS web básica, normalmente você libera SSH, HTTP e HTTPS. SSH costuma usar 22/tcp, HTTP usa 80/tcp e HTTPS usa 443/tcp. Outros serviços devem ser avaliados caso a caso. Banco de dados, Redis, Elasticsearch e painéis administrativos não devem ficar expostos publicamente sem necessidade. Quando uma porta precisa ficar acessível apenas para você, restrinja por IP de origem usando sudo ufw allow from IP to any port PORTA proto tcp. Isso reduz exposição sem impedir seu acesso administrativo.
Como vejo logs de conexões bloqueadas pelo UFW?
Primeiro confirme se o logging está ativo com sudo ufw status verbose. O padrão costuma ser logging low. Para consultar eventos recentes, use sudo journalctl -k ou sudo journalctl -u ufw --no-pager -n 50, dependendo da versão e configuração do sistema. Você também pode verificar arquivos em /var/log/ufw.log quando existirem. Logs ajudam a identificar tentativas em portas fechadas, mas não substituem testes externos com nmap e validação dos serviços com ss, curl e systemctl.
Devo bloquear conexões de saída com UFW?
Para iniciantes, manter saída permitida é a escolha mais segura operacionalmente. O servidor precisa acessar repositórios de pacotes, DNS, APIs externas, servidores de e-mail, monitoramento e autoridades certificadoras para renovar TLS. Bloquear saída exige mapear dependências com cuidado e pode quebrar atualizações ou integrações. Em ambientes mais rígidos, você pode mudar a política outgoing para deny, mas faça isso apenas depois de listar destinos necessários, criar regras específicas e testar em janela de manutenção.
Como removo uma regra errada sem quebrar o firewall?
Use sudo ufw status numbered para listar regras com numeração. Quando possível, remova pelo comando explícito, por exemplo sudo ufw delete allow 8080/tcp. Isso evita confusão com números que mudam após cada exclusão. Se precisar remover por número, apague uma regra por vez e rode sudo ufw status numbered novamente antes da próxima. Antes de mudanças maiores, faça backup de /etc/ufw. Após remover, teste o serviço afetado e confirme que SSH continua acessível em uma nova sessão.
Fontes consultadas
- Ubuntu Server Documentation, Firewalls · coletado em 22/06/2026
- Ubuntu Manpage, ufw · coletado em 22/06/2026
- OpenSSH Manual, sshd_config · coletado em 22/06/2026
- Nmap Reference Guide · coletado em 22/06/2026