O UFW, ou Uncomplicated Firewall, é uma interface de gerenciamento simplificado de firewall que esconde a complexidade das tecnologias de filtragem de pacotes de baixo nível, como iptables
e nftables
. Se você deseja começar a proteger sua rede, mas não tem certeza sobre qual ferramenta usar, o UFW pode ser a escolha certa para você.
Este tutorial lhe mostrará como configurar um firewall com o UFW no Ubuntu 20.04.
Para seguir este tutorial, você vai precisar do seguinte:
O UFW vem instalado por padrão no Ubuntu. Se ele tiver sido desinstalado por algum motivo, você pode instalá-lo com sudo apt install ufw
.
Este tutorial foi escrito tendo o IPv4 em mente, mas funcionará também com o IPv6, contanto que você o habilite. Se seu servidor Ubuntu tiver o IPv6 habilitado, certifique-se de que o UFW esteja configurado para dar suporte ao IPv6, para que ele gerencie as regras de firewall do IPv6, além das regras do IPv4. Para fazer isso, abra a configuração UFW com o nano
ou seu editor favorito.
- sudo nano /etc/default/ufw
Então, certifique-se de que o valor IPV6
seja yes
. Deve se parecer com isto:
IPV6=yes
Salve e feche o arquivo. Agora, quando o UFW estiver habilitado, ele será configurado para escrever regras de firewall para ambos IPv4 e IPv6. No entanto, antes de habilitar o UFW, nós vamos querer garantir que seu firewall esteja configurado para permitir que você se conecte via SSH. Vamos começar configurando as políticas padrão.
Se você estiver apenas começando com seu firewall, as primeiras regras a definir são suas políticas padrão. Essas regras controlam a maneira de lidar com tráfego que não seja claramente compatível com quaisquer outras regras. Por padrão, o UFW é configurado para negar todas as conexões de entrada e permitir todas as conexões de saída. Isso significa que qualquer um que tentasse acessar o seu servidor não conseguiria conectar-se, ao passo que os aplicativos dentro do servidor conseguiriam alcançar o mundo exterior.
Vamos retornar as regras do seu UFW para as configurações padrão, para que possamos ter certeza de que você conseguirá acompanhar este tutorial. Para definir os padrões usados pelo UFW, utilize estes comandos:
- sudo ufw default deny incoming
- sudo ufw default allow outgoing
Esses comandos configuram os padrões para negar as conexões de entrada e permitir as conexões de saída. Esses padrões do firewall poderiam suprir as necessidades de um computador pessoal Porém, os servidores normalmente precisam responder às solicitações que chegam de usuários externos. Vamos verificar isso a seguir.
Se nós habilitássemos nosso firewall UFW agora, ele negaria todas as conexões de entrada. Isso significa que precisaremos criar regras que permitam de maneira explícita as conexões de entrada legítimas — conexões SSH ou HTTP, por exemplo — se quisermos que nosso servidor responda a esses tipos de pedidos. Se você estiver usando um servidor na nuvem, você provavelmente irá querer permitir conexões de entrada via protocolo SSH para que você consiga se conectar e gerenciar o seu servidor.
Para configurar seu servidor para permitir as conexões de entrada via SSH, você pode utilizar este comando:
- sudo ufw allow ssh
Esse procedimento criará regras do firewall que permitirão todas as conexões na porta 22
, que é a porta na qual o SSH daemon escuta por padrão. O UFW sabe o que a porta allow ssh
significa porque ela está listada como um serviço no arquivo /etc/services
.
No entanto, podemos realmente escrever a regra equivalente, especificando a porta em vez do nome do serviço. Por exemplo, este comando funciona de forma semelhante ao anterior:
- sudo ufw allow 22
Se você configurou seu SSH daemon para usar uma porta diferente, você terá que especificar a porta apropriada. Por exemplo, se seu servidor SSH estiver escutando na porta 2222
, você pode usar este comando para permitir as conexões naquela porta:
- sudo ufw allow 2222
Agora que seu firewall está configurado para permitir as conexões de entrada via SSH, podemos habilitá-lo.
Para habilitar o UFW, utilize este comando:
- sudo ufw enable
Você receberá um aviso que diz que o comando pode interromper conexões via SSH existentes. Nós já configuramos uma regra de firewall que permite conexões via SSH, então tudo bem continuar. Responda ao prompt com y
e tecle ENTER
.
O firewall agora está ativo. Execute o comando sudo ufw status verbose
para ver as regras que foram definidas. O resto deste tutorial tratará de como usar o UFW em mais detalhes, como, por exemplo, permitir ou negar diferentes tipos de conexões.
Neste ponto, você deve permitir todas as outras conexões às quais seu servidor precisa responder. As conexões que você deve permitir dependem das suas necessidades específicas. Felizmente, você já sabe escrever regras que permitem conexões baseadas em um nome de serviço ou porta; já fizemos isso para o SSH na porta 22
. Você também pode fazer isso para:
sudo ufw allow http
ou sudo ufw allow 80
sudo ufw allow https
ou sudo ufw allow 443
Há várias outras maneiras de permitir outras conexões, além de especificar uma porta ou serviço conhecido.
Você pode especificar faixas de portas com o UFW. Alguns aplicativos usam várias portas, em vez de uma única porta.
Por exemplo, para permitir conexões via protocolo X11, que usam as portas 6000
-6007
, utilize esses comandos:
- sudo ufw allow 6000:6007/tcp
- sudo ufw allow 6000:6007/udp
Ao especificar as faixas de porta com o UFW, você deve especificar o protocolo (tcp
ou udp
) para o qual as regras devem aplicar-se. Nós não mencionamos isso antes porque não especificar o protocolo automaticamente permite ambos os protocolos, o que é OK na maioria dos casos.
Ao trabalhar com o UFW, você também pode especificar endereços IP. Por exemplo, se quiser permitir conexões de um endereço IP específico, como um endereço IP de trabalho ou domicílio de 203.0.113.4
, você precisa especificar from
, então o endereço IP:
- sudo ufw allow from 203.0.113.4
Você também pode especificar uma porta específica na 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 o endereço 203.0.113.4
se conecte à porta 22
(SSH), utilize este comando:
- sudo ufw allow from 203.0.113.4 to any port 22
Se você quiser permitir uma sub-rede de endereços IP, você pode fazer isso usando uma notação CIDR para especificar uma máscara de rede. Por exemplo, se você quiser permitir todos os endereços IP na faixa de 203.0.113.1
a 203.0.113.254
, você pode usar este comando:
- sudo ufw allow from 203.0.113.0/24
De maneira similar, você também pode especificar a porta de destino na qual a sub-rede 203.0.113.0/24
tem permissão para se conectar. Novamente, nós vamos usar a porta 22
(SSH) como um exemplo:
- sudo ufw allow from 203.0.113.0/24 to any port 22
Se você quiser criar uma regra de firewall que se aplique apenas a uma interface de rede específica, você pode fazer isso especificando “allow in on” seguido do nome da interface de rede.
Você pode querer verificar suas interfaces de rede antes de continuar. Para fazer isso, utilize este comando:
- ip addr
Output Excerpt2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .
O resultado destacado indica os nomes de interfaces de rede. Normalmente, elas recebem nomes como eth0
ou enp3s2
.
Então, se o seu servidor tiver uma interface de rede pública chamada eth0
, você pode permitir o tráfego HTTP (porta 80
) nela, usando este comando:
- sudo ufw allow in on eth0 to any port 80
Fazer isso permitiria que seu servidor recebesse pedidos HTTP da internet pública.
Ou, se você quiser que seu servidor de banco de dados MySQL (porta 3306
) escute conexões na interface de rede privada eth1
, por exemplo, você pode usar este comando:
- sudo ufw allow in on eth1 to any port 3306
Isso permitiria que outros servidores na sua rede privada se conectassem ao seu banco de dados MySQL.
Se você não tiver mudado 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 ao exigir que você crie regras que permitam explicitamente portas e endereços IP específicos.
No entanto, algumas vezes você irá querer negar conexões específicas baseadas no endereço IP ou na sub-rede da origem, talvez porque você saiba que seu servidor está sendo atacado a partir daí. Além disso, se você quisesse alterar sua política de entrada padrão para permitir (allow) (o que não é recomendado), você precisaria criar regras para negar (deny) quaisquer serviços ou endereços IP para os quais você não quisesse permitir conexões.
Para escrever regras de deny, você pode usar os comandos descritos acima, substituindo allow por deny.
Por exemplo, para negar conexões HTTP, você pode usar este comando:
- sudo ufw deny http
Ou se você quiser negar todas as conexões do endereço 203.0.113.4
você pode usar este comando:
- sudo ufw deny from 203.0.113.4
Agora, vamos ver como excluir regras.
Saber como excluir regras do firewall é tão importante quanto saber como criá-las. Há duas maneiras diferentes para especificar quais regras excluir: pelo número da regra ou pela regra em si (semelhante ao modo como as regras foram especificadas quando foram criadas). Vamos começar com o método excluir pelo número da regra porque é mais fácil.
Se você estiver usando o número da regra para excluir regras do firewall, a primeira coisa que você vai querer fazer é obter uma lista das regras do seu firewall. O comando status do UFW tem uma opção para mostrar números ao lado de cada regra, como demonstrado aqui:
- 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 decidirmos que queremos excluir a regra 2, aquela que permite conexões na porta 80 (HTTP), podemos especificar isso em um comando delete do UFW desta forma:
- sudo ufw delete 2
Isso mostraria um prompt de confirmação e então excluiria a regra 2, que permite conexões HTTP. Note que se você tivesse o IPv6 habilitado, você iria querer excluir a regra correspondente ao IPv6 também.
A alternativa para os números das regras é especificar a regra propriamente dita a ser excluída. Por exemplo, se quiser remover a regra allow http
, você pode escrever desta forma:
- sudo ufw delete allow http
Você também poderia especificar a regra por allow 80
, em vez de pelo nome do serviço:
- sudo ufw delete allow 80
Esse método irá excluir as regras do IPv4 e do IPv6, se houver.
A qualquer momento, você pode verificar o status do UFW com este comando:
- sudo ufw status verbose
Se o UFW estiver desabilitado - o que acontece por padrão, você verá algo como isso:
OutputStatus: inactive
Se o UFW estiver ativo - o que deve ser o caso se você tiver seguido o Passo 3 - o resultado dirá que ele está ativo e listará quaisquer regras que estejam definidas. Por exemplo, se o firewall estiver configurado para permitir conexões via SSH (porta 22
) de qualquer lugar, o resultado poderia parecer com este:
OutputStatus: 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.
Se você decidir que não quer usar o UFW, você pode desativá-lo com este comando:
- sudo ufw disable
Quaisquer regras que você tenha criado com o UFW já não estarão mais ativas. Você sempre poderá executar sudo ufw enable
se precisar ativá-lo mais tarde.
Se você já tiver regras do UFW configuradas, mas decidir que quer começar novamente, você pode usar o comando de redefinição:
- sudo ufw reset
Isso irá desabilitar o UFW e excluir quaisquer regras que tiverem sido definidas anteriormente. Lembre-se de que as políticas padrão não irão voltar para suas configurações originais se, em algum momento, você as tiver alterado. Isso deve dar a você um novo começo com o UFW.
Seu firewall agora está configurado para permitir (pelo menos) conexões via SSH. Certifique-se de permitir outras conexões de entrada necessárias para o seu servidor, ao mesmo tempo em que limita quaisquer conexões desnecessárias, para que seu servidor seja funcional e seguro.
Para aprender sobre mais configurações comuns do UFW, verifique o tutorial Fundamentos do UFW: regras comuns de firewall e comandos.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!