Como Configurar um Firewall com UFW no Ubuntu

Introdução

O UFW, ou Firewall Descomplicado, é uma interface para o iptables que visa simplificar o processo de configuração de um firewall. Enquanto o iptables é uma ferramenta sólida e flexível, pode ser difícil para iniciantes aprender como usá-lo para configurar adequadamente um firewall. 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 Ubuntu v18.04 e superior.

Pré-requisitos

Se você estiver usando o Ubuntu versão 16.04 ou abaixo, recomendamos que você faça upgrade para uma versão mais recente, pois o Ubuntu não fornece mais suporte para essas versões. Esta coleção de guias irá ajudá-lo a atualizar sua versão do Ubuntu.

Para seguir este tutorial, você precisará de:

  • Um servidor executando Ubuntu, juntamente com um usuário não root com privilégios de sudo. Para orientação sobre como configurar isso, escolha sua distribuição nesta lista e siga nosso Guia de Configuração Inicial do Servidor.

  • O UFW é instalado por padrão no Ubuntu. Se ele foi desinstalado por algum motivo, você pode instalá-lo com sudo apt install ufw.

Configurar o firewall do Ubuntu com UFW

  1. Habilitar IPv6
  2. Configurar políticas padrão
  3. Permitir conexões SSH
  4. Habilitar UFW
  5. Permitir outras conexões necessárias
  6. Negar conexões
  7. Excluir Regras do Firewall
  8. Verificar o Status e as Regras do UFW
  9. Como Desativar ou Redefinir o Firewall no Ubuntu

Passo 1 — Certificando-se de que o IPv6 está Ativado

Nas versões mais recentes do Ubuntu, o IPv6 está ativado por padrão. Na prática, isso significa que a maioria das regras do firewall adicionadas ao servidor incluirá tanto uma versão IPv4 quanto uma versão IPv6, esta última identificada por v6 dentro da saída do comando de status do UFW. Para garantir que o IPv6 esteja ativado, você pode verificar o arquivo de configuração do UFW em /etc/default/ufw. Abra este arquivo usando o nano ou seu editor de linha de comando favorito:

  1. sudo nano /etc/default/ufw

Em seguida, certifique-se de que o valor de IPV6 esteja definido como yes. Deve parecer com isto:

/etc/default/ufw excerpt
  1. IPV6=yes

Salve e feche o arquivo. Se estiver usando o nano, você pode fazer isso digitando CTRL+X, depois Y e ENTER para confirmar.

Quando o UFW estiver habilitado em uma etapa posterior deste guia, ele será configurado para escrever regras de firewall tanto para IPv4 quanto para IPv6.

Passo 2 — Configurando Políticas Padrão

Se você está começando a usar o UFW, um bom primeiro passo é verificar suas políticas de firewall padrão. Essas regras controlam como lidar 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 que tente acessar seu servidor não será capaz de se conectar, enquanto qualquer aplicativo dentro do servidor poderá alcançar o mundo exterior. Regras adicionais para permitir serviços e portas específicas são incluídas como exceções a essa política geral.

Para garantir que você consiga acompanhar o restante deste tutorial, agora você configurará suas políticas padrão de UFW para tráfego de entrada e saída.

Para definir a política de entrada padrão do UFW como deny, execute:

  1. sudo ufw default deny incoming
Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly)

Para definir a política de saída padrão do UFW como allow, execute:

  1. sudo ufw default allow outgoing
Output
Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

Esses comandos definem as configurações padrão para negar conexões de entrada e permitir conexões de saída. Esses padrões de firewall podem ser suficientes sozinhos para um computador pessoal, mas os servidores geralmente precisam responder a solicitações de entrada de usuários externos. Vamos ver isso a seguir.

Passo 3 — Permitindo Conexões SSH

Se você habilitar seu firewall UFW agora, ele negará todas as conexões de entrada. Isso significa que você precisará criar regras que permitam explicitamente conexões legítimas de entrada — como conexões SSH ou HTTP, por exemplo — se deseja que seu servidor responda a esses tipos de solicitações. Se estiver usando um servidor na nuvem, provavelmente desejará permitir conexões SSH de entrada para poder se conectar e gerenciar seu servidor.

Permitindo o Perfil de Aplicativo OpenSSH no UFW

Ao ser instalada, a maioria das aplicações que dependem de conexões de rede registrará um perfil de aplicativo no UFW, o que permite aos usuários permitir ou negar rapidamente o acesso externo a um serviço. Você pode verificar quais perfis estão atualmente registrados no UFW com:

  1. sudo ufw app list
Output
Available applications: OpenSSH

Para habilitar o perfil de aplicativo OpenSSH, execute:

  1. sudo ufw allow OpenSSH
Output
Rule added Rule added (v6)

Isso criará regras de firewall para permitir todas as conexões na porta 22, que é a porta na qual o daemon SSH escuta por padrão.

Permitir SSH pelo Nome do Serviço

Outra maneira de configurar o UFW para permitir conexões SSH de entrada é fazendo referência ao nome do serviço: ssh.

  1. sudo ufw allow ssh
Output
Rule added Rule added (v6)

O UFW sabe quais portas e protocolos um serviço usa com base no arquivo /etc/services.

Permitir SSH pelo Número da Porta

Alternativamente, você pode escrever a regra equivalente especificando a porta em vez do perfil da aplicação ou nome do serviço. Por exemplo, este comando funciona da mesma forma que os exemplos anteriores:

  1. sudo ufw allow 22
Output
Rule added Rule added (v6)

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 este comando para permitir conexões nessa porta:

  1. sudo ufw allow 2222
Output
Rule added Rule added (v6)

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

Passo 4 — Habilitando UFW

Seu firewall agora deve estar configurado para permitir conexões SSH. Para verificar quais regras foram adicionadas até agora, mesmo quando o firewall ainda está desativado, você pode usar:

  1. sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall): ufw allow OpenSSH

Após confirmar que você tem uma regra para permitir conexões SSH de entrada, você pode habilitar o firewall com:

  1. sudo ufw enable
Output
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup

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

O firewall está agora ativo. Execute o comando sudo ufw status verbose para ver as regras que estão definidas. O restante deste tutorial aborda como usar o UFW com mais detalhes, como permitir ou negar diferentes tipos de conexões.

Passo 5 — Permitindo Outras Conexões

Neste ponto, você deve permitir todas as outras conexões que seu servidor precisa responder. 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 perfil de aplicativo, um nome de serviço ou uma porta; você já fez isso para SSH na porta 22. Você também pode fazer isso para:

  • HTTP na porta 80, que é o que servidores web não criptografados usam, usando sudo ufw allow http ou sudo ufw allow 80
  • HTTPS na porta 443, que é o que os servidores web criptografados usam, usando sudo ufw allow https ou sudo ufw allow 443
  • Apache com HTTP e HTTPS, usando sudo ufw allow 'Apache Full'
  • Nginx com HTTP e HTTPS, usando sudo ufw allow 'Nginx Full'

Não se esqueça de verificar quais perfis de aplicativos estão disponíveis para o seu servidor com sudo ufw app list.

Há várias outras maneiras de permitir conexões, além de especificar uma porta ou nome de serviço conhecido. Veremos algumas delas a seguir.

Faixas de Portas Específicas

Você pode especificar faixas de portas com UFW. Alguns aplicativos usam várias portas, em vez de uma única porta.

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

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

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

Endereços IP Específicos

Ao trabalhar com o UFW, também pode especificar endereços IP dentro das suas regras. Por exemplo, se 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, precisa usar o parâmetro from, fornecendo então o endereço IP que deseja permitir:

  1. sudo ufw allow from 203.0.113.4
Output
Rule added

Também pode especificar uma porta à qual o endereço IP tem permissão para se conectar, adicionando to any port seguido do número da porta. Por exemplo, se 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
Output
Rule added

Sub-redes

Se desejar permitir uma sub-rede de endereços IP, pode fazê-lo usando a notação CIDR para especificar uma máscara de rede. Por exemplo, se quiser permitir todos os endereços IP variando de 203.0.113.1 a 203.0.113.254, poderia usar este comando:

  1. sudo ufw allow from 203.0.113.0/24
Output
Rule added

Da mesma forma, também pode especificar a porta de destino à qual a sub-rede 203.0.113.0/24 tem permissão para se conectar. Novamente, vamos usar a porta 22 (SSH) como exemplo:

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

Conexões para uma Interface de Rede Específica

Se desejar criar uma regra de firewall que se aplique apenas a uma interface de rede específica, pode fazê-lo especificando “permitir em em” seguido pelo nome da interface de rede.

Pode querer procurar suas interfaces de rede antes de continuar. Para isso, use este comando:

  1. ip addr
Output Excerpt
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 . . .

A saída destacada indica os nomes das interfaces de rede. Geralmente, elas são nomeadas algo como eth0 ou enp3s2.

Portanto, se seu servidor tiver uma interface de rede pública chamada eth0, poderia permitir o tráfego HTTP (porta 80) para ela com este comando:

  1. sudo ufw allow in on eth0 to any port 80
Output
Rule added Rule added (v6)

Ao fazer isso, permitiria que seu servidor recebesse solicitações HTTP da internet pública.

Ou, se desejar que seu servidor de banco de dados MySQL (porta 3306) escute conexões na interface de rede privada eth1, por exemplo, poderia usar este comando:

  1. sudo ufw allow in on eth1 to any port 3306
Output
Rule added Rule added (v6)

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

Passo 6 — Negando Conexões

Se 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 crie regras que permitam explicitamente portas e endereços IP específicos.

No entanto, às vezes você vai querer 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 permitir (o que não é recomendado), você precisaria criar regras de negar para quaisquer serviços ou endereços IP dos quais você não queira permitir conexões.

Para escrever regras de negar, você pode usar os comandos descritos anteriormente, substituindo permitir por negar.

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

  1. sudo ufw deny http
Output
Rule added Rule added (v6)

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
Output
Rule added

Em alguns casos, você também pode querer bloquear conexões de saída do servidor. Para negar todos os usuários de usar uma porta no servidor, como a porta 25 para tráfego SMTP, você pode usar negar saída seguido do número da porta:

  1. sudo ufw deny out 25
Output
Rule added Rule added (v6)

Isso bloqueará todo o tráfego SMTP de saída no servidor.

Passo 7 — Excluindo Regras

Saber como excluir regras de firewall é tão importante quanto saber como criá-las. Existem duas maneiras diferentes de especificar quais regras excluir: pelo número da regra ou por sua denominação legível por humanos (semelhante à forma como as regras foram especificadas quando foram criadas).

Excluir uma Regra UFW Pelo Número

Para excluir uma regra UFW pelo seu número, primeiro você vai querer obter uma lista numerada de todas as suas regras de firewall. O comando de status do UFW tem uma opção para exibir números ao lado de cada regra, como demonstrado aqui:

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

Se decidir que deseja excluir a regra de número 2, aquela que permite conexões na porta 80 (HTTP), você pode especificá-la em um comando de exclusão UFW como este:

  1. sudo ufw delete 2
Output
Deleting: allow 80 Proceed with operation (y|n)? y Rule deleted

Isso solicitará uma confirmação e, em seguida, excluirá a regra 2, que permite conexões HTTP. Note que se tiver o IPv6 habilitado, você também vai querer excluir a regra IPv6 correspondente.

Excluir uma Regra UFW Pelo Nome

Em vez de usar números de regra, você também pode se referir a uma regra pelo seu nome legível, que é baseado no tipo de regra (tipicamente allow ou deny) e no nome do serviço ou número da porta que foi o alvo para essa regra, ou o nome do perfil de aplicativo no caso de ter sido usado. Por exemplo, se quiser excluir uma regra allow para um perfil de aplicativo chamado Apache Full que foi previamente ativado, você pode usar:

  1. sudo ufw delete allow "Apache Full"
Output
Rule deleted Rule deleted (v6)

O comando delete funciona da mesma maneira para regras que foram criadas referenciando um serviço pelo seu nome ou porta. Por exemplo, se você anteriormente definiu uma regra para permitir conexões HTTP com sudo ufw allow http, desta forma você poderia excluir essa regra:

  1. sudo ufw delete allow http
Output
Rule deleted Rule deleted (v6)

Porque os nomes dos serviços são intercambiáveis com os números de porta ao especificar regras, você também poderia se referir à mesma regra como allow 80, em vez de allow http:

  1. sudo ufw delete allow 80
Output
Rule deleted Rule deleted (v6)

Ao excluir regras do UFW pelo nome, tanto as regras IPv4 quanto as IPv6 são excluídas se existirem.

Passo 8 — Verificando o Status e as 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, o que é o padrão, você verá algo assim:

Output
Status: inactive

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

Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

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

Passo 9 — Desativar ou Redefinir Firewall

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

  1. sudo ufw disable
Output
Firewall stopped and disabled on system startup

Quaisquer regras que tenha criado com o UFW deixarão de estar ativas. Sempre pode executar sudo ufw enable se precisar ativá-lo posteriormente.

Se já tiver regras UFW configuradas, mas decidir que quer recomeçar, pode usar o comando de redefinição:

  1. sudo ufw reset
Output
Resetting all rules to installed defaults. This may disrupt existing ssh connections. Proceed with operation (y|n)? y Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353' Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353' Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'

Isso desativará o UFW e apagará quaisquer regras definidas anteriormente. Isso deverá dar-lhe um novo começo com o UFW. Tenha em mente que as políticas padrão não mudarão para as configurações originais, se as modificou em algum momento.

Implante suas aplicações front-end do GitHub usando a Plataforma de Aplicações DigitalOcean. Deixe a DigitalOcean focar na escalabilidade da sua aplicação.

Conclusão

Agora o seu firewall está configurado para permitir (pelo menos) conexões SSH. Certifique-se de permitir quaisquer outras conexões de entrada que o seu servidor necessite, ao mesmo tempo que limita quaisquer conexões desnecessárias, para que o seu servidor seja funcional e seguro.

Para aprender mais sobre configurações comuns do UFW, confira o tutorial UFW Essentials: Regras e Comandos Comuns do Firewall.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-22-04