Como Configurar um Firewall com UFW em um Servidor Cloud 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 arcanos. Muitos desses utilitários (por exemplo, iptables) têm muita funcionalidade embutida neles, mas exigem esforço extra do usuário para aprender e entender.

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

Neste tutorial, você irá configurar um firewall usando o UFW para proteger um servidor na nuvem Ubuntu ou Debian. Você também aprenderá a 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 de volta 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 esses 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ê pode 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 que IPV6 está definido como sim:

/etc/default/ufw
# /etc/default/ufw # # Defina como sim para aplicar regras para suportar IPv6 (não significa apenas IPv6 em loopback # aceito). Você precisará 'desabilitar' e depois 'habilitar' 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 depois ENTER.

Agora reinicie seu firewall desabilitando-o primeiro:

  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 tanto para IPv4 quanto para IPv6, quando apropriado. Em seguida, você ajustará as regras padrão para as conexões com seu firewall.

Configurando Padrões 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 que tente alcançar seu servidor não será capaz de se conectar, enquanto qualquer aplicativo dentro do servidor pode 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 na nuvem de frente para o público, poderá ajudar a prevenir qualquer tipo de conexões de shell remoto. No entanto, isso torna seu firewall mais complicado 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 ao 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 habilitando as conexões SSH para o seu servidor:

  1. sudo ufw allow ssh

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

Output
Rule added Rule added (v6)

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

  1. sudo ufw allow 22/tcp

Se você tentou isso após já ter executado allow ssh, no entanto, você receberá a seguinte mensagem, já que 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 substituindo-a pela porta 2222. Por favor, note que se você usar apenas o número da porta, afeta também o tcp e o udp:

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

Protegendo Servidores Web

Para proteger um servidor web com acesso via 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 o Apache e o Nginx, que escutam solicitações de conexão HTTP. Para fazer isso, permita conexões para a 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. Caso contrário, os perfis do servidor web podem estar armazenados como “WWW” e abertos como ftp ou tcp, como nos exemplos a seguir:

  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 das portas e serviços que 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 extremo inferior do intervalo, seguido de dois pontos (:), e então seguir com o extremo superior do intervalo. Por último, você deve especificar qual protocolo (ou tcp ou udp) você deseja que as regras se apliquem.

Por exemplo, o seguinte comando permitirá 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 para 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 com 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. Confira o nosso guia para aprender mais sobre permitir conexões de entrada de um endereço IP específico ou sub-rede.

Negando Conexões

Se desejar abrir todas as portas do seu servidor – o que não é recomendado – você pode permitir todas as conexões e depois negar quaisquer portas às quais você não queira dar acesso. O exemplo a seguir mostra como você negaria o acesso à porta 80:

  1. sudo ufw deny 80/tcp

Excluindo Regras

Se desejar excluir algumas das regras que você administrou, use o comando delete e especifique a regra que 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

Em seguida, com esta lista numerada, reveja 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 estiver no número 4 da 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 definir sua porta SSH, comumente a porta 22, para permitir que as conexões sejam recebidas. Caso contrário, você poderá se bloquear fora do seu servidor:

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

Para confirmar que 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

Restaurando Configurações Padrão

Se por algum motivo você precisar restaurar as regras do seu servidor na 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, pois 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 restauração das configurações padrão desativará o UFW e excluirá quaisquer regras que você definiu anteriormente. As configurações padrão, no entanto, não voltarão às suas configurações originais se você as modificou. Agora você pode começar do zero com o UFW e personalizar suas regras e conexões conforme sua preferência.

Conclusão

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

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