Como configurar um firewall com UFW em um servidor de nuvem Ubuntu e Debian

Introdução

Configurar um firewall funcional é crucial para garantir a segurança do seu servidor na nuvem. Anteriormente, configurar um firewall era feito através de utilitários complicados ou obscuros. Muitos desses utilitários (por exemplo, iptables) têm muitas funcionalidades incorporadas, mas exigem esforço adicional do usuário para aprender e entendê-los.

Outra opção é UFW, ou Firewall Descomplicado. O UFW é uma interface para o iptables que visa fornecer uma interface mais amigável ao usuário do que outros utilitários de gerenciamento de firewall. O UFW é bem suportado pela comunidade Linux e geralmente é instalado por padrão em muitas distribuições.

Neste tutorial, você configurará um firewall usando o UFW para proteger um servidor na nuvem Ubuntu ou Debian. Você também aprenderá como configurar regras padrão do UFW para permitir ou negar conexões para portas e endereços IP, excluir regras que você criou, desativar e ativar o UFW e redefinir tudo para as configurações padrão, se preferir.

Pré-requisitos

Para seguir este tutorial, você precisará de um servidor que esteja executando Ubuntu ou Debian. Seu servidor deve ter um usuário não-root com privilégios sudo. Para configurar isso para o Ubuntu, siga nosso guia sobre Configuração Inicial do Servidor com Ubuntu 20.04. Para configurar isso para o Debian, siga nosso guia sobre Configuração Inicial do Servidor com Debian 11. Ambos os guias de configuração inicial do servidor garantirão que você tenha o UFW instalado em sua máquina e que tenha um ambiente seguro que você possa usar para praticar a criação de regras de firewall.

Usando IPv6 com UFW

Se o seu Servidor Virtual Privado (VPS) estiver configurado para IPv6, certifique-se de que o UFW esteja configurado para suportar IPv6 para que ele configure tanto suas regras de firewall IPv4 quanto IPv6. Para fazer isso, abra o arquivo de configuração do UFW no seu editor de texto preferido. Aqui vamos usar o nano:

  1. sudo nano /etc/default/ufw

Confirme se IPV6 está definido como sim:

/etc/default/ufw
# /etc/default/ufw # # Definir para sim para aplicar regras para suportar IPv6 (não significa apenas IPv6 no loopback # aceito). Você precisará 'desativar' e depois 'ativar' o firewall para # que as alterações tenham efeito. IPV6=yes

Depois de fazer suas alterações, salve e saia do arquivo. Se estiver usando o nano, pressione CTRL + X, Y e, em seguida, ENTER.

Agora reinicie seu firewall, primeiro desabilitando-o:

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

Em seguida, habilite-o novamente:

  1. sudo ufw enable
Output
Firewall is active and enabled on system startup

Seu firewall UFW está agora configurado para configurar o firewall para IPv4 e IPv6 quando apropriado. Em seguida, você ajustará as regras padrão para conexões com seu firewall.

Configurando Padrões do UFW

Você pode melhorar a eficiência do seu firewall definindo regras padrão para permitir e negar conexões. O padrão do UFW é negar todas as conexões de entrada e permitir todas as conexões de saída. Isso significa que qualquer pessoa tentando acessar seu servidor não seria capaz de se conectar, enquanto qualquer aplicativo dentro do servidor é capaz de se conectar externamente. Para atualizar as regras padrão definidas pelo UFW, primeiro aborde a regra de conexões de entrada:

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

Em seguida, aborde a regra de conexões de saída:

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

Nota: Se você deseja ser mais restritivo, pode negar todas as solicitações de saída. Esta opção é baseada em preferência pessoal. Por exemplo, se você tiver um servidor de nuvem de frente para o público, isso poderá ajudar a evitar qualquer tipo de conexões de shell remoto. No entanto, isso torna seu firewall mais difícil de gerenciar porque você terá que configurar regras para todas as conexões de saída também. Você pode definir isso como padrão com o seguinte:

  1. sudo ufw default deny outgoing

Permitindo Conexões no Firewall

Permitir conexões requer a alteração das regras do firewall, o que pode ser feito emitindo comandos no terminal. Se você ativou seu firewall agora, por exemplo, ele negaria todas as conexões de entrada. Se você estiver conectado via SSH ao seu servidor, isso seria um problema porque você ficaria bloqueado fora do seu servidor. Evite que isso aconteça permitindo conexões SSH para o seu servidor:

  1. sudo ufw allow ssh

Se suas alterações foram bem-sucedidas, você receberá a seguinte saída:

Output
Rule added Rule added (v6)

O UFW vem com alguns padrões, como o comando ssh usado no exemplo anterior. Alternativamente, você pode permitir conexões de entrada para a porta 22/tcp, que utiliza Protocolo de Controle de Transmissão (TCP) para realizar a mesma função:

  1. sudo ufw allow 22/tcp

Se você tentou isso depois de já ter executado allow ssh, no entanto, você receberá a seguinte mensagem, pois a regra já existe:

Output
Skipping adding existing rule Skipping adding existing rule (v6)

Se o seu servidor SSH estiver em execução na porta 2222, você pode permitir conexões com a mesma sintaxe, mas substitua pela porta 2222. Por favor, note que se você usar apenas o número da porta, isso afetará também tcp e udp:

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

Protegendo Servidores Web

Para proteger um servidor web com acesso ao Protocolo de Transferência de Arquivos (FTP), você precisará permitir conexões para a porta 80/tcp.

Permitir conexões para a porta 80 é útil para servidores web como Apache e Nginx que escutam solicitações de conexão HTTP. Para fazer isso, permita conexões na porta 80/tcp:

  1. sudo ufw allow 80/tcp

O UFW geralmente fornece os perfis com as regras necessárias para o funcionamento do servidor web. Se não, os perfis do servidor web podem ser armazenados como “WWW” e abertos como ftp ou tcp, como nos seguintes exemplos:

  1. sudo ufw allow www

Você também pode usar ftp ou a porta 21 para permitir conexões FTP:

  1. sudo ufw allow ftp
  1. sudo ufw allow 21/tcp

Para conexões FTP, você também precisa permitir conexões para a porta 20:

  1. sudo ufw allow 20/tcp

Seus ajustes dependerão de quais portas e serviços você precisa abrir, e testes podem ser necessários. Lembre-se de deixar sua conexão SSH permitida também.

Especificando Faixas de Portas

Você também pode especificar intervalos de portas para permitir ou negar com o UFW. Para fazer isso, você deve primeiro especificar a porta no limite inferior do intervalo, seguido por dois pontos (:), e então seguir com o limite superior do intervalo. Por último, você deve especificar qual protocolo (seja tcp ou udp) deseja aplicar às regras.

Por exemplo, o seguinte comando permitirá o acesso TCP a todas as portas de 1000 a 2000, inclusive:

  1. sudo ufw allow 1000:2000/tcp

Da mesma forma, o seguinte comando negará conexões UDP a todas as portas de 1234 a 4321:

  1. sudo ufw deny 1234:4321/udp

Especificando Endereços IP

Você pode permitir conexões de um endereço IP específico como no exemplo a seguir. Certifique-se de substituir o endereço IP pelas suas próprias informações:

  1. sudo ufw allow from your_server_ip

Como esses exemplos demonstram, você tem muita flexibilidade quando se trata de ajustar as regras do firewall, permitindo seletivamente certas portas e conexões de endereços IP. Consulte o nosso guia para aprender mais sobre permitir conexões de entrada de um endereço IP ou sub-rede específica.

Negando Conexões

Se você quisesse abrir todas as portas do seu servidor — o que não é recomendado — você poderia permitir todas as conexões e então negar quaisquer portas às quais você não deseja dar acesso. O exemplo a seguir é de como você negaria acesso à porta 80:

  1. sudo ufw deny 80/tcp

Excluindo Regras

Se você deseja excluir algumas das regras que você administrou, use delete e especifique a regra que você deseja eliminar:

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

Se as regras forem longas e complexas, há uma abordagem alternativa em dois passos. Primeiro, gere uma lista numerada das regras atuais:

  1. sudo ufw status numbered

Então, com esta lista numerada, revise quais regras estão atualmente permitidas e exclua a regra referindo-se ao seu número:

  1. sudo ufw delete number
Output
Status: active To Action From -- ------ ---- [ 1] OpenSSH ALLOW IN Anywhere [ 2] 22/tcp ALLOW IN Anywhere [ 3] 2222/tcp ALLOW IN Anywhere [ 4] 80 ALLOW IN Anywhere [ 5] 20/tcp ALLOW IN Anywhere …

Por exemplo, se a porta 80 for o número 4 na lista, você usaria a seguinte sintaxe. Você também pode ser questionado se deseja prosseguir com a operação. Você pode decidir sim y ou não n:

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

Habilitando UFW

Depois de definir todas as regras que deseja aplicar ao seu firewall, você pode habilitar o UFW para que ele comece a aplicá-las. Se estiver se conectando via SSH, certifique-se de configurar sua porta SSH, comumente a porta 22, para permitir que as conexões sejam recebidas. Caso contrário, você poderia se trancar fora do seu servidor:

  1. sudo ufw enable
Output
Firewall is active and enabled on system startup

Para confirmar se as suas alterações foram aplicadas, verifique o estado para revisar a lista de regras:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 22/tcp ALLOW Anywhere 2222/tcp ALLOW Anywhere 20/tcp ALLOW Anywhere 80/tcp DENY Anywhere …

Você também pode usar verbose para uma saída mais abrangente:

  1. sudo ufw status verbose

Para desativar o UFW, execute o seguinte:

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

Redefinindo Configurações Padrão

Se por algum motivo você precisar redefinir as regras do seu servidor em nuvem para suas configurações padrão, você pode fazer isso com o comando ufw reset. Por favor, note que você receberá um prompt para escrever y ou n antes de redefinir tudo, já que isso pode interromper conexões SSH existentes:

  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.20220217_190530' Backing up 'before.rules' to '/etc/ufw/before.rules.20220217_190530' Backing up 'after.rules' to '/etc/ufw/after.rules.20220217_190530' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20220217_190530' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20220217_190530' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20220217_190530'

A redefinição para as configurações padrão irá desativar o UFW e excluir quaisquer regras que você tenha definido anteriormente. No entanto, as configurações padrão não voltarão para as originais se você as tiver modificado. Agora você pode começar do zero com o UFW e personalizar suas regras e conexões conforme preferir.

Conclusão

Neste tutorial, você aprendeu como configurar e configurar seu servidor em nuvem para permitir ou restringir o acesso a um subconjunto de portas ou endereços IP. Além disso, você praticou a exclusão de quaisquer regras que não deseja mais e confirmou que essas alterações foram contabilizadas desativando e depois ativando seu firewall UFW. Finalmente, você aprendeu como redefinir seu firewall UFW para as configurações padrão. Para saber mais sobre o que é possível com o UFW, confira nosso guia sobre Essenciais do UFW: Regras Comuns de Firewall e Comandos.

Source:
https://www.digitalocean.com/community/tutorials/how-to-setup-a-firewall-with-ufw-on-an-ubuntu-and-debian-cloud-server