Como Configurar um Firewall com UFW no Ubuntu

Introdução

O UFW, ou Firewall Simples, é uma interface para o iptables que está direcionado para simplificar o processo de configuração de uma firewall. Enquanto o iptables é uma ferramenta sólida e flexível, pode ser difícil para os iniciantes aprender a usá-la para configurar corretamente uma firewall. Se você está procurando começar asegurar sua rede e não sabe qual ferramenta usar, o UFW pode ser a escolha certa para você.

Este tutorial vai mostrar como configurar uma firewall com o UFW no Ubuntu v18.04 e acima.

Pré-requisitos

Se você estiver usando a versão do Ubuntu 16.04 ou abaixo, recomendamos que você atualize para uma versão mais recente, já que o Ubuntu já não oferece suporte para essas versões. Este conjunto de guias ajudará você a atualizar sua versão do Ubuntu.

Para seguir este tutorial, você precisará:

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

  • UFW está instalado por padrão no Ubuntu. Se por algum motivo ele tiver sido desinstalado, você pode instalá-lo com o comando 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. Habilitando UFW
  5. Permitir Qualquer Outra Conexão Necessária
  6. Negando Conexões
  7. Excluindo Regras de Firewall
  8. Verificar Status e Regras do UFW
  9. Como Desativar ou Redefinir Firewall no Ubuntu

Passo 1 — Verificando se IPv6 está Habilitado

Nas versões recentes do Ubuntu, IPv6 está habilitado por padrão. Em prática, isso significa que a maioria das regras de firewall adicionadas ao servidor incluirá tanto a versão IPv4 quanto a versão IPv6, a última identificada por v6 dentro do resultado do comando de status do UFW. Para verificar se IPv6 está habilitado, você pode verificar o arquivo de configuração do UFW em /etc/default/ufw. Abra esse arquivo usando nano ou seu editor de linha de comando preferido:

  1. sudo nano /etc/default/ufw

Então, certifique-se de que o valor de IPV6 está definido como yes. Ele deve parecer assim:

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

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

Quando o UFW for habilitado em um passo posterior deste guia, ele será configurado para gravar regras de firewall tanto para IPv4 quanto para IPv6.

Passo 2 — Configurando Políticas Padrão

Se você estiver começando agora com o UFW, um bom primeiro passo é verificar suas políticas de firewall padrão. essas regras controlam como é tratado o tráfego que não corresponde explicitamente a nenhuma outra regra.

Por padrão, o UFW é configurado para rejeitar todas as conexões de entrada e permitir todas as conexões de saída. Isso significa que nenhuma pessoa tentando se conectar ao seu servidor não seria capaz de fazer conexão, enquanto qualquer aplicativo dentro do servidor teria a capacidade de se conectar ao mundo externo. As regras adicionais para permitir conexões específicas de serviços e portas são incluídas como exceções à política geral de segurança.

Para garantir que você possa seguir junto com o restante deste tutorial, agora vamos configurar as políticas padrão do UFW para conexões de entrada e saída.

Para definir a política padrão de entrada 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 padrão de saída 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)

Essas comandas definem os padrões padrão para rejeitar conexões de entrada e permitir conexões de saída. Esses padrões de firewall padrão sozinhos poderiam suficiência para um computador pessoal, mas servidores usualmente precisam responder a solicitações de usuários externos. Vamos ver isso na próxima etapa.

Passo 3 — Permitindo Conexões SSH

Se você tivesse habilitado sua firewall UFW agora, ela rejeitaria todas as conexões de entrada. Isso significa que você teria que criar regras que explicitamente permitam conexões legítimas de entrada — por exemplo, conexões SSH ou HTTP. Se você estiver usando um servidor na nuvem, provavelmente voulez permitir conexões SSH para que você possa conectar-se e gerenciar seu servidor.

Permitir o Perfil de Aplicação OpenSSH no UFW

Após a instalação, a maioria das aplicações que dependem de conexões de rede registará um perfil de aplicação no UFW, o que permite que os usuários permitam ou negem acesso externo a um serviço rapidamente. Você pode ver quais perfis estão atualmente registrados no UFW com:

  1. sudo ufw app list
Output
Available applications: OpenSSH

Para habilitar o perfil de aplicação OpenSSH, execute:

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

Isso criará regras de firewall para permitir todas as conexões no porto 22, que é o porto que o processo de aplicação SSH escuta por padrão.

Permitir SSH pelo Nome do Serviço

Outra maneira de configurar o UFW para permitir conexões SSH entrantes é referenciando seu nome de serviço: ssh.

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

O UFW sabe quais portos e protocolos um serviço usa baseado no arquivo /etc/services.

Permitir SSH pelo Número do Porto

Alternativamente, você pode escrever uma regra equivalente especificando o porto em vez do perfil ou nome de serviço. Por exemplo, esta comanda funciona na mesma maneira que as anteriores:

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

Seu servidor SSH foi configurado para usar um porto diferente, você terá que especificar o porto adequado. Por exemplo, se seu servidor SSH está escutando no porto 2222, você pode usar esta comanda para permitir conexões nesse porto:

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

Agora que sua firewall está configurada para permitir conexões de SSH entrantes, você pode habilitar-la.

Passo 4 — Habilitar UFW

A firewall agora deve estar configurada para permitir conexões SSH. Para verificar quais regras foram adicionadas até agora, mesmo quando a firewall ainda estiver desabilitada, 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 que permite conexões SSH entrantes, você pode habilitar a 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á uma aviso que diz que a comanda pode interromper as conexões SSH existentes. Você já definiu uma regra de firewall que permite conexões SSH e deve ser fina. Responda à mensagem com y e pressione ENTER.

A firewall agora está ativa. Executar a comanda sudo ufw status verbose para ver as regras que estão setadas. O restante deste tutorial cobre como usar UFW em detalhe, como permitir ou negar diferentes tipos de conexões.

Passo 5 — Permitindo outras conexões

Ao longo deste tempo, você deve permitir todas as outras conexões que seu servidor precisa para responder. As conexões que você deve permitir dependem de suas necessidades específicas. Você já sabe como escrever regras que permitam conexões baseadas em um perfil de aplicativo, nome de serviço ou porta; você já fez isso para o SSH na porta 22. Você também pode fazer isso para:

  • HTTP na porta 80, que é a que os servidores sem segurança usam, usando sudo ufw allow http ou sudo ufw allow 80
  • HTTPS na porta 443, que é a que os servidores com segurança usam, usando sudo ufw allow https ou sudo ufw allow 443
  • Apache com ambos HTTP e HTTPS, usando sudo ufw allow 'Apache Full'
  • Nginx com ambos HTTP e HTTPS, usando sudo ufw allow 'Nginx Full'

Não esqueça de ver quais perfis de aplicativos estão disponíveis para 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. Vamos ver algumas dessas próximamente.

Intervalos de Portas Específicos

Você pode especificar intervalos de portas com o UFW. Algumas aplicações usam múltiplas portas, em vez de uma porta única.

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

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

Quando especificando intervalos de portas com o UFW, você deve especificar o protocolo (tcp ou udp) que as regras devem se aplicar. Não mencionamos isso antes porque não especificar o protocolo automaticamente permite ambos os protocolos, o que é aceitável na maioria dos casos.

Endereços IP Específicos

Ao trabalhar com o UFW, você também pode especificar endereços IP em suas regras. Por exemplo, se você quiser permitir conexões de um endereço IP específico, como o endereço de trabalho ou de casa 203.0.113.4, você precisará usar o parâmetro from, fornecendo então o endereço IP que você quer permitir:

  1. sudo ufw allow from 203.0.113.4
Output
Rule added

Você também pode especificar uma porta para a qual o endereço IP está autorizado a 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 esse comando:

  1. sudo ufw allow from 203.0.113.4 to any port 22
Output
Rule added

Sub-redes

Se você quiser permitir um sub-rede de endereços IP, pode fazer isso usando a notação CIDR para especificar uma máscara de rede. Por exemplo, se você 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, você também pode especificar a porta de destino que a sub-rede 203.0.113.0/24 tem permissão para se conectar. Novamente, usaremos 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 com uma Interface de Rede Específica

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

Você pode querer verificar suas interfaces de rede antes de continuar. Para fazer 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. Eles são tipicamente nomeados algo como eth0 ou enp3s2.

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

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

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

Ou seja, se você quer que seu servidor de banco de dados do MySQL (porta 3306) escute conexões na interfase privada eth1, por exemplo, voce pode usar esta comanda:

  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 conectem-se ao seu banco de dados MySQL.

Passo 6 — Rejeição de Conexões

Se você não tiver alterado a política padrão para conexões entrantes, o UFW está configurado para rejeitar todas as conexões de entrada. Geralmente, isso simplifica o processo de criar uma política de segurança de firewall, exigindo que você crie regras que explicitamente permitam portas específicas e endereços IP ou subredes.

Mas às vezes você vai querer rejeitar conexões baseadas no endereço IP ou subrede de origem, talvez porque saber que seu servidor está sendo atacado desde lá. Além disso, se você quiser mudar sua política padrão de recepção para permitir (que não é recomendado), você precisaria criar rejeições para qualquer serviço ou endereço IP que você não deseja permitir conexões.

Para escrever regras rejeição, você pode usar as comandas descritas anteriormente, substituindo permissão por rejeição.

Por exemplo, para rejeitar conexões HTTP, você poderia usar esta comanda:

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

Ou se você quiser rejeitar todas as conexões de 203.0.113.4 você pode usar esta comanda:

  1. sudo ufw deny from 203.0.113.4
Output
Rule added

Na algumas ocasiões, você também pode querer bloquear conexões de saída do servidor. Para negar todos os usuários de usar um porto no servidor, como o porto 25 para trafego SMTP, você pode usar deny out seguido por número do porto:

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

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

Passo 7 – Excluir Regras

Conhecer como excluir regras é tão importante quanto saber como criar elas. Há duas maneiras diferentes de especificar quais regras devem ser excluídas: por número ou por uma designação humanamente legível (semelhante à forma em que as regras foram especificadas quando elas foram criadas).

Excluindo uma Regra do UFW Por Número

Para excluir uma regra do UFW por seu número, primeiro você vai querer obter uma lista numerada de todas as regras de firewall. O comando de estado do UFW tem uma opção para mostrar 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 número 2, a que permite conexões na porta 80 (HTTP), voce poderia especificar-la em um comando de delete do UFW assim:

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

Este comando irá solicitar uma confirmação e depois excluir a regra 2, que permite conexões HTTP. Note que se você tiver IPv6 habilitado, você também precisaria excluir a regra correspondente do IPv6.

Excluir uma Regra do UFW por Nome

Em vez de usar números de regra, você pode também se referir a uma regra por sua denominação legível por humanos, que é baseada no tipo de regra (normalmente allow ou deny) e o nome do serviço ou número de porta que era o alvo desta regra, ou o nome do perfil de aplicativo, caso tenha sido usado. Por exemplo, se você quiser excluir uma regra de allow para um perfil de aplicativo chamado Apache Full que foi habilitado anteriormente, você pode usar:

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

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

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

Como os nomes de serviços são intercambiáveis com os números de porta quando especificando 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 por nome, ambas as regras IPv4 e IPv6 são excluídas se existirem.

Passo 8 — Verificando o Status do UFW e Regras

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 você verá é algo como isso:

Output
Status: inactive

Se o UFW estiver ativo, o que deve aparecer é que ele está ativo e listará quais regras foram definidas. Por exemplo, se a configuração do firewall foi feita para permitir conexões de SSH (porta 22) de qualquer lugar, a saída pode parecer com essa estrutura:

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 você quiser ver como o UFW configurou a firewall.

Passo 9 — Desativar ou Resetar Firewall

Se decidir que não quer usar o firewall UFW, você pode desativar-lo com este comando:

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

As regras criadas com o UFW não serão mais ativas. Você sempre pode executar sudo ufw enable se precisar de ativar depois.

Se você já tiver regras configuradas com o UFW mas decidir que quer começar novamente, você pode usar o comando reset:

  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 irá desativar o UFW e excluir todas as regras que foram definidas anteriormente. Isso deve lhe dar um início fresco com o UFW. Lembrar que as políticas padrão não mudarão para suas configurações originais, se você modificou elas em algum momento.

Deploye sua aplicação front-end do GitHub usando o Plataforma de Aplicativos DigitalOcean. Deixe o DigitalOcean focar na escalação da sua aplicação.

Conclusão

Sua firewall agora está configurada para permitir (pelo menos) conexões SSH. Certifique-se de permitir qualquer outra conexão de entrada que seu servidor precise, ao mesmo tempo em que limita conexões desnecessárias, para que seu servidor funcione e esteja seguro.

Para aprender mais sobre as configurações comuns do UFW, consulte o tutorial UFW Essenciais: Regras e Comandos Comuns de Firewall.

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