Como Configurar um Firewall com UFW no Servidor Ubuntu 22.04

No Servidor Ubuntu 22.04, você pode gerenciar o tráfego de rede de entrada e saída usando o UFW (Uncomplicated Firewall). Para servidores remotos, certifique-se de permitir a porta SSH que você está usando antes de habilitar o firewall e confirme que você pode recuperar o acesso usando outro terminal ou console.

Coisas para Verificar Antes de Começar

UFW é uma ferramenta para gerenciar firewalls no Linux. Mesmo que uma porta seja permitida no firewall, uma conexão só pode ser feita se o serviço estiver instalado, em execução e ouvindo no endereço e porta corretos. Se houver grupos de segurança na nuvem ou firewalls externos, verifique suas regras separadamente também.

Não altere arbitrariamente políticas existentes em um servidor em execução. Primeiro, verifique o status atual do firewall, as regras registradas, os serviços necessários e as portas de acesso, e prepare um método de acesso que possa ser usado mesmo se o SSH estiver desconectado, como através de um console de nuvem ou console de gerenciamento do servidor. Os comandos exigem privilégios de administrador.

sudo ufw status verbose
sudo ufw show added
sudo ss -lntup

status verbose mostra as políticas e regras ativas do UFW. Se o UFW estiver inativo, você não pode verificar todas as regras registradas apenas com esta tela, portanto, consulte também o show added. ss ajuda a identificar sockets em escuta, mas não estabelece se um serviço é acessível de fora.

Ativar após permitir SSH

O seguinte é um exemplo de um novo servidor executando SSH na porta TCP padrão 22. Se a porta for diferente, altere para a porta atual. Esta regra permite essa porta sem restringi-la a um IP específico, portanto, considere que a faixa de acesso é ampla. Em servidores já ativos, revise primeiro as regras e prioridades existentes.

sudo ufw allow 22/tcp

Verifique outras regras de serviço necessárias e a política padrão, depois ligue o firewall. Quando você liga o UFW, conexões SSH existentes podem ser interrompidas à medida que as regras são reaplicadas. Teste uma nova conexão SSH a partir de um terminal separado enquanto mantém a sessão atual e, se falhar, acesse com o console preparado para modificar as regras.

sudo ufw enable
sudo ufw status verbose

Verifique se o status está active e se a regra SSH pretendida está exibida. Em seguida, teste conexões tanto de redes permitidas quanto de redes não permitidas para os serviços realmente necessários. Este procedimento e exceções também podem ser verificados na seção de gerenciamento remoto da documentação do Ubuntu 22.04 UFW .

Políticas Básicas e Regras de Portas

As configurações padrão de um UFW recém-instalado geralmente negam conexões de entrada e permitem conexões de saída, mas isso pode variar conforme o servidor. Verifique as políticas reais com status verbose. Por exemplo, para negar conexões de entrada por padrão em um novo servidor onde todos os serviços necessários foram verificados, você pode usar o seguinte comando. Em um servidor já em operação, primeiro revise como as mudanças de política afetarão os serviços e conexões existentes.

sudo ufw default deny incoming

Se você precisar fornecer um servidor web externamente, permita as portas e protocolos que são realmente usados. A seguir estão exemplos de portas TCP para HTTP e HTTPS, e não é necessário aplicá-las universalmente a servidores que não executam serviços web.

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Se o servidor fornecer serviços de DNS, você pode permitir UDP e TCP na porta 53 conforme necessário. Não abra portas em servidores que não fornecem serviços de DNS apenas porque é um exemplo.

sudo ufw allow 53/udp
sudo ufw allow 53/tcp

allow adiciona regras de permissão, e deny adiciona regras de negação. As regras de porta sem um protocolo especificado podem se aplicar tanto a TCP quanto a UDP, então é mais claro especificar o protocolo necessário. A ordem das regras é importante, e a primeira regra que corresponder pode ser aplicada, portanto, adicionar uma regra de negação quando já existem regras de permissão não bloqueia necessariamente o acesso.

Permitir o acesso apenas de IPs específicos

O seguinte é um exemplo de permitir conexões apenas na porta TCP 22 a partir de um único endereço IPv4. 192.0.2.10 é um endereço de espaço reservado para fins de explicação, então substitua-o pelo IP real de acesso do administrador e, se o IP puder ser alterado, prepare um método de recuperação primeiro.

sudo ufw allow from 192.0.2.10 to any port 22 proto tcp

Mesmo que você adicione esta regra, o acesso pode não ser restrito se houver uma regra permitindo a porta 22 a partir de todos os endereços. Verifique as regras existentes e sua ordem usando a lista numerada, e mantenha apenas as regras que são realmente necessárias. Se o servidor tiver IPv6 habilitado, não presuma que uma regra somente IPv4 restrinja o acesso IPv6; também verifique as políticas e regras de IPv6.

sudo ufw status numbered

Excluindo regras e desativando o firewall

Para excluir uma regra que você adicionou com o conteúdo exato, use delete no comando original. Por exemplo, o comando abaixo exclui uma regra que permite a porta UDP 53, enquanto as regras TCP são separadas.

sudo ufw delete allow 53/udp

Você também pode excluir por número, mas se você excluir uma regra, os números mudam. Sempre verifique novamente o número atual e o conteúdo com sudo ufw status numbered. A exclusão baseada em número exclui apenas uma regra IPv4 ou IPv6 exibida, portanto verifique a regra correspondente para a outra versão de IP também. Após a exclusão, verifique o status novamente e teste a conexão real.

Para desligar o firewall, use o seguinte comando. Quando desativado, a proteção fornecida pelo UFW é removida, então não presuma que seja seguro apenas porque outro firewall existe; primeiro, verifique o escopo do impacto.

sudo ufw disable

Quando uma regra não se comporta como esperado

Verifique se o serviço está em execução, se a porta e o protocolo corretos estão permitidos, a ordem das regras e as políticas padrão. Além disso, revise as regras do firewall em nuvem, do roteador e da rede upstream, assim como os endereços IPv4 ou IPv6 usados para conectar. Devido a containers ou regras de rede gerenciadas separadamente, pode ser difícil avaliar o comportamento geral usando apenas a lista de status do UFW.

Antes de realmente alterar uma regra, você pode visualizar as alterações usando --dry-run. Por exemplo, o seguinte comando mostra as alterações em uma regra de permissão TCP 80 sem aplicá-las.

sudo ufw --dry-run allow 80/tcp

A tela de status do UFW mostra principalmente regras gerenciadas pelos comandos do UFW e não representa todas as configurações de firewall no sistema. Para explicações adicionais e formatos de comando, consulte a Documentação do Firewall do Servidor Ubuntu.