Introdução

O Uncomplicated Firewall, ou UFW, é uma interface do iptables que visa facilitar o processo de configuração de um firewall. Embora o iptables seja uma ferramenta sólida e flexível, pode ser difícil para iniciantes aprenderem como usá-lo para configurar corretamente um firewall. Se você deseja começar a proteger sua rede e não sabe qual ferramenta usar, a UFW pode ser a escolha certa para você.

Neste tutorial, você vai aprender como configurar um firewall com UFW no Ubuntu 18.04

Pré-requisitos

Para seguir este tutorial, você vai precisar:

  • Um servidor Ubuntu 18.04.

  • O UFW já vem instalado por padrão no Ubuntu. Se por alguma razão ele não existir, instale com apt install ufw.

Passo 1: Usando IPv6 com UFW (opcional)

Embora este tutorial tenha sido escrito com IPv4, ele também funciona com o IPv6. Se estiver usando IPv6, tenha certeza de que o UFW está configurado para suportar IPv6, logo ele vai gerenciar as regras de firewall tanto para IPv6, quanto para IPv4. Para isso, abra a configuração UFW com nano ou outro editor.

$

sudo nano /etc/default/ufw

Depois, verifique se o IPv6 marca yes. Você deve ver algo assim:

/etc/default/ufw excerpt

IPV6= yes

Salve o progresso e feche o arquivo. Agora, quando o UFW estiver ativado, ele estará configurado para registrar as regras para IPv4 e IPv6. No entanto, antes de ativar o UFW, vamos garantir que o firewall esteja configurado para permitir conexões SSH. Começaremos definindo as políticas de padrão.

Passo 2: Configurando as Políticas de Padrão

Se você estiver iniciando com o seu firewall, as primeiras regras a serem definidas são as de padrão. Essas regras controlam como lidar com o tráfego que não correspondem 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 tentar acessar o seu servidor não será capaz de conectar, enquanto qualquer aplicação do servidor será capaz de alcançar o ambiente externo.

Vamos resetar as regras do UFW para que você possa seguir este tutorial. Para definir os padrões usados pelo UFW, use os comandos:

$$

ufw default deny incoming ufw default allow outgoing

Tais comandos definem os padrões para negar conexões de entrada e aceitar as de saída. Apenas esses padrões podem ser suficientes em um computador pessoal, mas os servidores geralmente precisam responder demandas que eles recebem de usuários externos.

Step 3: Permitindo conexões SSH

Se ativarmos nosso firewall UFW, ele rejeitaria todas as conexões de entrada. Isso significa que teremos que criar regras que permitam conexões legítimas de entrada - SSH ou HTTP, por exemplo - se quisermos que nosso servidor responda a esses tipos de demandas. Se estiver usando um cloud server, você provavelmente vai preferir liberar conexões de entrada SSH, para ser capaz de conectar e gerenciar o seu servidor.

Para configurar o seu servidor com o objetivo de liberar conexões SSH de entrada, use o comando seguinte:

$

ufw allow ssh

Este comando vai criar regras de firewall que permitirão todas as conexões na porta 22, que é a porta que SSH daemon ouve por padrão. O UFW sabe que allow ssh significa porta, pois ela está listada como um serviço no arquivo /etc/services.

Entretanto, podemos realmente fazer uma regra equivalente especificando a porta no lugar do nome do serviço. Por exemplo, este comando funciona da mesma forma que o de cima:

$

ufw allow 22

Se o daemon estiver configurado para uma porta diferente, você terá que especificar a porta correta. Por exemplo, se seu servidor SSH está escutando a porta 2222, você poderá usar este comando para permitir conexões nessa porta:

$

ufw allow 2222

Agora que o seu firewall está configurado para permitir conexões SSH de entrada, podemos ativá-lo.

Passo 4: Ativando o UFW

Para ativar o UFW, use este comando:

$

ufw enable

Você receberá um aviso informando que o comando pode interromper as conexões SSH existentes. Já configuramos uma regra de firewall que permite conexões SSH; portanto, podemos continuar. Responda à solicitação com y e pressione ENTER.

Agora seu firewall está ativo. Execute o comando ufw status verbose para ver as regras definidas. O restante deste tutorial é sobre como usar o UFW em detalhes, como permitir ou negar diferentes tipos de conexão.

Passo 5: Permitindo outras conexões

Nesse ponto, você pode permitir todas as outras conexões que o servidor precisa responder. As conexões que você precisa permitir dependem de necessidades específicas. Felizmente, você já sabe escrever regras que permitem conexões baseadas em um nome ou porta de serviço; nós já fizemos o SSH na porta 22. Você também pode fazer isso com:

HTTP na porta 80, que é o que os servidores web não criptografados usam, por meio de ufw allow http ou ufw allow 80 HTTPS na porta 443, que é o que os servidores da Web criptografados usam, por meio de ufw allow https ou ufw allow 443

Existem outras maneiras de permitir conexões, além de especificar uma porta ou serviço.

Faixas de portas específicas É possível especificar intervalos de portas com o UFW. Alguns aplicativos usam portas diferentes, em vez de uma única porta.

Por exemplo, para permitir conexões X11, que usa as portas 6000-6007, use os seguintes comandos:

$$

ufw allow 6000:6007/tcp ufw allow 6000:6007/udp

Ao especificar as faixas de portas com UFW, você deve especificar o protocolo (tcp or udp) para quais as regras vão funcionar.

Endereços de IP específicos

Ao trabalhar com o UFW, você também pode especificar endereços IP. Por exemplo, se você deseja permitir conexões de um determinado IP, como o IP da sua casa ou do trabalho 203.0.113.4, é necessário especificar from e o endereço IP:

$

ufw allow from 203.0.113.4

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

$

ufw allow from 203.0.113.4 to any port 22

Subredes

Se você deseja conceder permissão a uma sub-rede de endereços IP, pode fazê-lo através da notação CIDR para especificar uma máscara de rede. Por exemplo, se você deseja permitir todos os endereços IP de 203.0.113.1 a 203.0.113.254, você pode usar o comando:

$

ufw allow from 203.0.113.0/24

Você também pode especificar a porta de destino à qual a sub-rede 203.0.113.0/4`- pode se conectar. Novamente, usaremos a porta 22 como exemplo.

$

ufw allow 203.0.113.0/24 to any port 22

Conexões a uma rede específica

Se você deseja criar uma regra de firewall para aplicar apenas a uma interface de rede específica, pode fazê-lo especificando “allow in on” seguido pelo nome da interface.

Você pode pesquisar as interfaces antes de continuar. Para isso, use o comando:

$

ip addr

Output Exerpt

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 de interfaces de rede. Normalmente elas são nomeadas como eth0 ou enp3s2.

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

$

ufw allow in on eth0 to any port 80

Essas ações permitiriam que outros servidores de sua rede conectassem ao seu banco de dados MySQL.

Passo 6: 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. Isso geralmente simplifica o processo de criação de uma política de firewall segura, exigindo que você crie regras que permitam explicitamente endereços e portas IP específicos.

No entanto, às vezes você pode negar conexões específicas com base no endereço IP ou sub-rede de origem, talvez porque saiba que seu servidor está sendo atacado a partir daí. Além disso, se você deseja alterar sua política de entrada padrão para permitir todas (o que não é recomendado), será necessário criar regras de negação para quaisquer serviços ou endereços IP para os quais você não deseja permitir conexões.

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

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

$

ufw deny http

Ou se você quiser negar todas as conexões do 203.0.113.4, digite o comando:

$

ufw deny from 203.0.113.4

Passo 7: Deletando regras

Knowing how to exclude firewall rules is as important as knowing how to create them. There are two different ways to specify which rules to exclude: by rule number or by the actual rule (similar to how the rules were specified when they were created). We'll start with the delete by rule number method because it's easier. Saber como excluir regras de firewall é tão importante quanto criá-las. Existem duas maneiras diferentes de especificar quais regras excluir: pelo número da regra ou pela regra real (semelhante à forma como as regras foram especificadas quando criadas).

Começaremos com o método de exclusão por número de regra, porque é mais fácil.

Por número de regra

Se você quiser usar o número da regra para excluir regras de firewall, a primeira coisa que você precisará fazer é obter uma lista de regras de firewall. O comando UFW status possui uma opção para exibir números próximos a cada regra, conforme mostrado aqui:

$

ufw status numbered

Status: active

To Action From


[ 1] 22 ALLOW IN 15.15.15.0/24

[ 2] 80 ALLOW IN Anywhere

Se decidirmos excluir a regra 2, que permite conexões da porta 80 (HTTP), podemos especificá-la em um comando de exclusão UFW como este:

$

ufw delete 2

Isso exibirá um prompt de confirmação e excluirá a regra 2, que permite conexões HTTP. Observe que se você tiver o IPv6 ativado, também poderá excluir a regra IPv6 correspondente.

Por regra real

A alternativa aos números das regras é especificar a regra real a ser excluída. Por exemplo, se você deseja remover a regra allow http, pode digitar da seguinte maneira:

$

ufw delete allow http

Passo 8: Verificando o status e as regras UFW

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

$

ufw status verbose

Se o UFW estiver desativado, o que é o padrão, você verá algo assim:

Status: inactive

If UFW is active, which should happen if you followed Step 3, the output will say that it is active and will list the configured rules. For example, if the firewall is configured to allow 22 SSH (port) connections from anywhere, the output might look something like this: Se o UFW estiver ativo, o que acontecerá se você seguiu o passo 3, a saída dirá que está ativo e listará as regras configuradas. Por exemplo, se o firewall estiver configurado para permitir conexões 22 SSH (porta) de qualquer lugar, a saída poderá ser assim:

Status: active

Logging: on (low)

Default: deny (incoming), allow (outgoing), disabled (routed)

New profiles: skip

To Action From


22/tcp ALLOW IN Anywhere

Passo 9: Desativando ou reconfigurando o UFW

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

$

ufw disable

Todas as regras que você criou com o UFW não estarão mais ativas. Você sempre pode executar o sudo ufw enable se precisar ativá-lo mais tarde.

Se você já possui regras UFW configuradas, mas quer recomeçar, pode usar o comando reset:

$

ufw reset

Isso desativará o UFW e excluirá as regras definidas anteriormente. Lembre-se de que as políticas padrão não serão alteradas para as configurações originais se você as tiver modificado em algum momento. Isso deve lhe dar um novo começo ao UFW.

Conclusão

Seu firewall agora está configurado para permitir (pelo menos) conexões SSH. Certifique-se de permitir outras conexões de entrada ao servidor, limitando as conexões desnecessárias, para que o servidor fique funcional e seguro.

Read more about: DevelopmentFirewallUbuntu