Como Configurar um Firewall com UFW no Debian 11

Introdução

O UFW, ou Firewall Descomplicado, é uma interface simplificada de gerenciamento de firewall que oculta a complexidade das tecnologias de filtragem de pacotes em níveis mais baixos, como iptables e nftables. Se você está procurando começar a proteger sua rede e não tem certeza de qual ferramenta usar, o UFW pode ser a escolha certa para você.

Este tutorial mostrará como configurar um firewall com o UFW no Debian 11.

Pré-requisitos

Para seguir este tutorial, você precisará de um servidor Debian 11 com um usuário sudo não-root, que você pode configurar seguindo o Passo 1 até 3 no tutorial Configuração Inicial do Servidor com Debian 11.

Passo 1 – Instalando o UFW

Debian não instala o UFW por padrão. Se você seguiu todo o tutorial de Configuração Inicial do Servidor, você terá instalado e ativado o UFW. Caso contrário, instale agora usando apt:

  1. sudo apt install ufw

Você irá configurar o UFW e ativá-lo nos próximos passos.

Passo 2 — Usando IPv6 com o UFW (Opcional)

Este tutorial foi escrito com o IPv4 em mente, mas funcionará para o IPv6 também se você ativá-lo. Se o seu servidor Debian tiver o IPv6 ativado, você vai querer garantir que o UFW esteja configurado para suportar o IPv6. Isso garantirá que o UFW gerencie as regras do firewall para o IPv6 além do IPv4. Para configurar isso, abra o arquivo de configuração do UFW /etc/default/ufw com o nano ou seu editor favorito:

  1. sudo nano /etc/default/ufw

Localize IPV6 no arquivo e garanta que o valor seja yes:

/etc/default/ufw excerpt
IPV6=yes

Salve e feche o arquivo. Se estiver usando o nano, pressione CTRL+X, depois Y, depois ENTER para salvar e sair do arquivo.

Agora, quando o UFW estiver ativado, ele estará configurado para escrever regras de firewall tanto para IPv4 quanto para IPv6. Antes de ativar o UFW, porém, você vai querer garantir que seu firewall esteja configurado para permitir conexões via SSH. Comece definindo as políticas padrão.

Passo 3 — Configurando Políticas Padrão

Se você está começando a usar seu firewall, as primeiras regras a definir são suas políticas padrão. Essas regras lidam com o tráfego que não corresponde explicitamente a nenhuma outra regra. Por padrão, o UFW está configurado para negar todas as conexões de entrada e permitir todas as conexões de saída. Isso significa que qualquer pessoa tentando se conectar ao seu servidor não seria capaz de fazê-lo, enquanto qualquer aplicativo dentro do servidor seria capaz de alcançar o mundo exterior.

Restaure suas regras UFW para os padrões para garantir que você consiga acompanhar este tutorial. Para definir os padrões usados pelo UFW, utilize esses comandos:

  1. sudo ufw default deny incoming
  2. sudo ufw default allow outgoing

Você receberá uma saída semelhante à seguinte:

Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly) Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

Esses comandos configuram os padrões para negar conexões de entrada e permitir conexões de saída. Esses padrões de firewall podem ser suficientes para um computador pessoal, mas os servidores geralmente precisam responder a solicitações de usuários externos. Você iniciará esse processo na próxima etapa.

Passo 4 — Permitindo Conexões SSH

Você não pode habilitar seu firewall UFW ainda, porque isso negaria todas as conexões de entrada, incluindo suas tentativas de acessar seu servidor. Isso significa que você precisará criar regras que permitam explicitamente conexões de entrada legítimas — conexões SSH ou HTTP, por exemplo — se quiser que seu servidor responda a esses tipos de solicitações. Se você estiver usando um servidor na nuvem, provavelmente desejará permitir conexões SSH de entrada para poder se conectar e gerenciar seu servidor.

Para configurar seu servidor para permitir conexões SSH de entrada, use este comando:

  1. sudo ufw allow ssh

Isso criará regras de firewall que permitirão todas as conexões na porta 22, que é a porta na qual o daemon SSH escuta por padrão. O UFW sabe qual porta está associada ao allow ssh porque está listada como um serviço no arquivo /etc/services.

No entanto, você pode realmente escrever a regra equivalente especificando a porta em vez do nome do serviço. Por exemplo, este comando produz o mesmo resultado que o acima:

  1. sudo ufw allow 22

Se você configurou seu daemon SSH para usar uma porta diferente, precisará especificar a porta apropriada. Por exemplo, se seu servidor SSH estiver ouvindo na porta 2222, você pode usar o mesmo comando, mas substituir 22 por 2222.

Agora que seu firewall está configurado para permitir conexões SSH de entrada, você pode habilitá-lo.

Passo 5 — Habilitando o UFW

Para habilitar o UFW, use este comando:

  1. sudo ufw enable

Você receberá um aviso que diz que o comando pode interromper as conexões SSH existentes. Você já configurou uma regra de firewall que permite conexões SSH, então deve estar seguro para continuar. Responda à solicitação com y e pressione ENTER.

O firewall agora está ativo. Para ver as regras que você definiu, execute este comando:

  1. sudo ufw status verbose

O restante deste tutorial aborda como usar o UFW de maneira mais detalhada, incluindo permitir e negar diferentes tipos de conexões.

Passo 6 — Permitindo Outras Conexões

Neste ponto, você deve permitir todas as outras conexões necessárias para o funcionamento adequado do seu servidor. As conexões que você deve permitir dependem de suas necessidades específicas. Você já sabe como escrever regras que permitem conexões com base em um nome de serviço ou porta; você fez isso para o SSH na porta 22.

Você pode fazer o mesmo para o HTTP na porta 80, que é o que os servidores web não criptografados usam. Para permitir esse tipo de tráfego, você digitaria:

  1. sudo ufw allow http

Você também pode fazer o mesmo para o HTTPS na porta 443, que é o que os servidores web criptografados usam. Para permitir esse tipo de tráfego, você digitaria:

  1. sudo ufw allow https

Em ambos os cenários, especificar as portas também funcionaria, com o HTTP sendo 80 e o HTTPS sendo 443. Por exemplo:

  1. sudo ufw allow 80

Há outras maneiras de permitir conexões, no entanto, além de especificar uma porta ou serviço conhecido. Isso é discutido a seguir.

Intervalos de Porta Específicos

Você pode especificar intervalos de porta com o UFW. Por exemplo, alguns aplicativos usam múltiplas portas em vez de uma única porta.

Por exemplo, para permitir conexões X11, que usam as portas 6000 a 6007, use esses comandos:

  1. sudo ufw allow 6000:6007/tcp
  2. sudo ufw allow 6000:6007/udp

Ao especificar intervalos de porta com o UFW, você deve especificar o protocolo (tcp ou udp) ao qual as regras devem se aplicar. Isso não foi mencionado antes porque não especificar o protocolo automaticamente permite ambos os protocolos, o que é OK na maioria dos casos.

Endereços IP Específicos

Ao trabalhar com o UFW, você também pode especificar endereços IP. Por exemplo, se você quiser permitir conexões de um endereço IP específico, como um endereço IP de trabalho ou residencial de 203.0.113.4, você precisa especificar from e então o endereço IP:

  1. sudo ufw allow from 203.0.113.4

Você também pode especificar uma porta específica à qual o endereço IP pode se conectar adicionando to any port seguido pelo número da porta. Por exemplo, se você quiser permitir que 203.0.113.4 se conecte à porta 22 (SSH), use este comando:

  1. sudo ufw allow from 203.0.113.4 to any port 22

Sub-redes

Se você deseja permitir um intervalo de endereços IP, você pode fazer isso usando a notação CIDR para especificar uma máscara de rede. Por exemplo, se você deseja permitir todos os endereços IP no intervalo de 203.0.113.1 a 203.0.113.254, você pode usar este comando:

  1. sudo ufw allow from 203.0.113.0/24

Da mesma forma, você também pode especificar a porta de destino à qual a sub-rede 203.0.113.0/24 está autorizada a se conectar. Novamente, usando a porta 22 (SSH) como exemplo:

  1. sudo ufw allow from 203.0.113.0/24 to any port 22

Conexões para uma Interface de Rede Específica

Se você deseja criar uma regra de firewall que se aplique apenas a uma interface de rede específica, pode fazer isso especificando allow in on, seguido pelo nome da interface de rede.

Será útil verificar suas interfaces de rede antes de continuar. Para fazer isso, use este comando:

  1. ip addr
Output
. . . 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state . . . 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default . . .

O resultado destacado indica os nomes das interfaces de rede. Elas geralmente têm nomes como eth0 ou enp3s2.

Se o seu servidor tiver uma interface de rede pública chamada eth0, por exemplo, você poderia permitir o tráfego HTTP com este comando:

  1. sudo ufw allow in on eth0 to any port 80

Fazê-lo permitiria que seu servidor recebesse solicitações HTTP da internet pública.

Ou, se você deseja que um servidor de banco de dados MySQL (porta 3306) escute as conexões na interface de rede privada eth1, você pode usar este comando:

  1. sudo ufw allow in on eth1 to any port 3306

Isso permitiria que outros servidores em sua rede privada se conectassem ao seu banco de dados MySQL.

Passo 7 — Negando Conexões

Se você não alterou a política padrão para conexões de entrada, o UFW está configurado para negar todas as conexões de entrada. Geralmente, isso simplifica o processo de criação de uma política de firewall segura, exigindo que você crie regras que permitam explicitamente portas e endereços IP específicos.

Às vezes, você desejará negar conexões específicas com base no endereço IP de origem ou na sub-rede, talvez porque saiba que seu servidor está sendo atacado de lá. Além disso, se você quiser alterar sua política de entrada padrão para allow (o que não é recomendado), será necessário criar regras de deny para quaisquer serviços ou endereços IP que você não queira permitir conexões.

Para escrever regras de deny, você pode usar os comandos descritos acima, substituindo allow por deny.

Por exemplo, para negar conexões HTTP, você poderia usar este comando:

  1. sudo ufw deny http

Ou se você quiser negar todas as conexões de 203.0.113.4, você poderia usar este comando:

  1. sudo ufw deny from 203.0.113.4

Agora, você pode aprender como implementar regras de exclusão.

Passo 8 — Excluindo Regras

Saber como excluir regras de firewall é tão importante quanto saber como criá-las. Existem duas maneiras de especificar quais regras excluir: pelo número da regra ou pela própria regra. Isso é semelhante à forma como as regras foram especificadas quando foram criadas.

Pelo Número da Regra

Se você estiver usando o número da regra para excluir regras de firewall, a primeira coisa que você vai querer fazer é obter uma lista de suas regras de firewall. O comando UFW status possui a opção numbered, que exibe números ao lado de cada regra:

  1. sudo ufw status numbered
Output
Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN 15.15.15.0/24 [ 2] 80 ALLOW IN Anywhere

Se você decidir que deseja excluir a regra 2, que permite conexões HTTP na porta 80, você pode especificar isso no seguinte comando UFW delete:

  1. sudo ufw delete 2

Isso mostrará um prompt de confirmação, ao qual você pode responder com y/n. Digitar y então excluirá a regra 2. Note que se você tiver o IPv6 habilitado, você vai querer excluir também a regra IPv6 correspondente.

Pela Regra Real

A alternativa aos números de regra é especificar a regra real a ser excluída. Por exemplo, se você deseja remover a regra allow http, você pode escrevê-la assim:

  1. sudo ufw delete allow http

Você também pode especificar a regra com allow 80 em vez do nome do serviço:

  1. sudo ufw delete allow 80

Este método irá excluir tanto as regras IPv4 quanto as regras IPv6, se existirem.

Passo 9 — Verificação do Status e Regras do UFW

A qualquer momento, você pode verificar o status do UFW com este comando:

  1. sudo ufw status verbose

Se o UFW estiver desativado, que é o padrão, a saída será esta:

Output
Status: inactive

Se o UFW estiver ativo, o que deve ser se você seguiu o Passo 3, a saída indicará que está ativo e listará quaisquer regras que você tenha configurado. Por exemplo, se o firewall estiver configurado para permitir conexões SSH (porta 22) de qualquer lugar, a saída pode incluir algo assim:

Output
Status: active To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

Use o comando status se desejar verificar como o UFW configurou o firewall.

Passo 10 — Desativando ou Resetando o UFW (opcional)

Se você decidir que não deseja mais usar o UFW, você pode desativá-lo com este comando:

  1. sudo ufw disable

Qualquer regra que você tenha criado com o UFW não estará mais ativa. Você sempre pode executar sudo ufw enable se precisar ativá-la posteriormente.

Se você já tiver regras configuradas no UFW, mas decidir recomeçar, pode usar o comando de reset:

  1. sudo ufw reset

Isso desativará o UFW e excluirá quaisquer regras que você tenha definido anteriormente. Lembre-se de que as políticas padrão não voltarão às configurações originais se você as modificou em algum momento. Isso deve proporcionar um novo começo com o UFW.

Conclusão

Seu firewall está agora configurado para permitir (pelo menos) conexões SSH. Certifique-se de permitir outras conexões de entrada necessárias para o seu servidor, enquanto limita conexões desnecessárias. Isso garantirá que seu servidor seja funcional e seguro.

Para aprender sobre mais configurações comuns do UFW, confira este tutorial sobre Princípios básicos do UFW: Regras e Comandos Comuns do Firewall.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-debian-11-243261243130246d443771547031794d72784e6b36656d4a326e49732e