Introdução
O UFW, ou Firewall Descomplicado, é uma interface simplificada de gerenciamento de firewall que oculta a complexidade das tecnologias de filtragem de pacotes de nível inferior, como o iptables
e o nftables
. Se você está procurando começar a proteger sua rede e não tem certeza de qual ferramenta usar, o UFW pode ser a escolha certa para você.
Este tutorial mostrará como configurar um firewall com UFW no Debian 11.
Pré-requisitos
Para seguir este tutorial, você precisará de um servidor Debian 11 com um usuário não root
com permissões de sudo
, que você pode configurar seguindo o Passo 1 ao 3 no tutorial Configuração Inicial do Servidor com Debian 11.
Passo 1 – Instalando o UFW
Debian não instala o UFW por padrão. Se você seguiu o tutorial completo de Configuração Inicial do Servidor, terá instalado e ativado o UFW. Se não, instale agora usando apt
:
Você configurará o UFW e o habilitará nos seguintes passos.
Passo 2 — Usando IPv6 com o UFW (Opcional)
Este tutorial é escrito com IPv4 em mente, mas funcionará para IPv6 também se você o habilitar. Se o seu servidor Debian tiver IPv6 ativado, você desejará garantir que o UFW esteja configurado para suportar IPv6. Isso garantirá que o UFW gerencie as regras do firewall para IPv6 além do IPv4. Para configurar isso, abra o arquivo de configuração do UFW /etc/default/ufw
com nano
ou seu editor favorito:
Localize IPV6
no arquivo e garanta que o valor seja yes
:
IPV6=yes
Salve e feche o arquivo. Se estiver usando nano
, pressione CTRL+X
, depois Y
, depois ENTER
para salvar e sair do arquivo.
Agora, quando o UFW estiver habilitado, ele será configurado para escrever regras de firewall tanto para IPv4 quanto para IPv6. Antes de habilitar o UFW, no entanto, você desejará garantir que seu firewall esteja configurado para permitir que você se conecte via SSH. Comece definindo as políticas padrão.
Passo 3 — Configurando Políticas Padrão
Se você está apenas começando com seu firewall, as primeiras regras a definir são suas políticas padrão. Essas regras lidam com o tráfego que não corresponde 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 tente acessar seu servidor não será capaz de se conectar, enquanto qualquer aplicativo dentro do servidor poderá alcançar o mundo exterior.
Defina suas regras UFW de volta para os padrões para ter certeza de que você será capaz de acompanhar este tutorial. Para definir os padrões usados pelo UFW, use estes comandos:
Você receberá uma saída como a seguinte:
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
Esses comandos definem os padrões para negar conexões de entrada e permitir conexões de saída. Esses padrões de firewall sozinhos podem ser suficientes para um computador pessoal, mas os servidores geralmente precisam responder a solicitações de entrada de usuários externos. Você começará esse processo no próximo passo.
Passo 4 — Permitindo Conexões SSH
Não pode ainda ativar o seu firewall UFW, porque isso negaria todas as conexões de entrada, incluindo suas tentativas de acessar o seu servidor. Isso significa que você precisará criar regras que permitam explicitamente conexões de entrada legítimas — como conexões SSH ou HTTP, por exemplo — se quiser que seu servidor responda a esses tipos de solicitações. Se estiver usando um servidor na nuvem, provavelmente vai querer permitir conexões SSH de entrada para poder conectar-se e gerenciar seu servidor.
Para configurar seu servidor para permitir conexões SSH de entrada, use este comando:
Isso criará regras de firewall que permitirão todas as conexões na porta 22
, que é a porta na qual o daemon SSH escuta por padrão. O UFW sabe em qual porta está associado o allow ssh
porque está listado como um serviço no arquivo /etc/services
.
No entanto, você pode realmente escrever a regra equivalente especificando a porta em vez do nome do serviço. Por exemplo, este comando produz o mesmo resultado que o acima:
Se configurou o seu daemon SSH para usar uma porta diferente, terá de especificar a porta apropriada. Por exemplo, se o seu servidor SSH estiver escutando na porta 2222
, pode usar o mesmo comando mas substituir 22
por 2222
.
Agora que seu firewall está configurado para permitir conexões SSH de entrada, pode ativá-lo.
Passo 5 — Ativar UFW
Para ativar o UFW, use este comando:
Você receberá um aviso que diz que o comando pode interromper as conexões SSH existentes. Você já configurou uma regra de firewall que permite conexões SSH, então deve estar tudo bem para continuar. Responda à solicitação com y
e pressione ENTER
.
O firewall está agora ativo. Para ver as regras que você definiu, execute este comando:
O resto deste tutorial aborda como usar o UFW com mais detalhes, incluindo permitir e negar diferentes tipos de conexões.
Passo 6 — Permitindo Outras Conexões
Neste ponto, você deve permitir todas as outras conexões que o seu servidor precisa para funcionar corretamente. As conexões que você deve permitir dependem das suas necessidades específicas. Você já sabe como escrever regras que permitem conexões com base em um nome de serviço ou porta; você fez isso para SSH na porta 22
.
Você pode fazer isso para HTTP na porta 80
, que é o que os servidores web não criptografados usam. Para permitir esse tipo de tráfego, você digitaria:
Você também pode fazer isso para HTTPS na porta 443
, que é o que os servidores web criptografados usam. Para permitir esse tipo de tráfego, você digitaria:
Em ambos os cenários, especificar as portas também funcionaria, com HTTP sendo 80
e HTTPS sendo 443
. Por exemplo:
Há outras maneiras de permitir conexões, no entanto, além de especificar uma porta ou serviço conhecido. Isso é discutido a seguir.
Intervalos de Portas Específicos
Você pode especificar intervalos de portas com UFW. Por exemplo, alguns aplicativos usam várias portas em vez de uma única porta.
Por exemplo, para permitir conexões X11
, que usam as portas 6000
–6007
, use estes comandos:
Ao especificar intervalos de portas com UFW, você deve especificar o protocolo (tcp
ou udp
) ao qual as regras devem ser aplicadas. Isso não foi mencionado anteriormente porque não especificar o protocolo automaticamente permite ambos os protocolos, o que é OK na maioria dos casos.
Endereços IP Específicos
Ao trabalhar com UFW, você também pode especificar endereços IP. Por exemplo, se você quiser permitir conexões de um endereço IP específico, como um endereço IP de trabalho ou doméstico de 203.0.113.4
, você precisa especificar from
e então o endereço IP:
Você também pode especificar uma porta específica à qual o endereço IP pode se conectar adicionando to any port
seguido do número da porta. Por exemplo, se você quiser permitir que 203.0.113.4
se conecte à porta 22
(SSH), use este comando:
Sub-redes
Se deseja permitir uma sub-rede de endereços IP, pode fazê-lo utilizando a notação CIDR para especificar uma máscara de rede. Por exemplo, se deseja permitir todos os endereços IP variando de 203.0.113.1
a 203.0.113.254
, pode usar este comando:
Da mesma forma, também pode especificar a porta de destino à qual a sub-rede 203.0.113.0/24
tem permissão para se conectar. Novamente, usando a porta 22
(SSH) como exemplo:
Conexões para uma Interface de Rede Específica
Se deseja criar uma regra de firewall que se aplique apenas a uma interface de rede específica, pode fazê-lo especificando permitir em em
, seguido pelo nome da interface de rede.
Será útil verificar as suas interfaces de rede antes de continuar. Para tal, utilize este comando:
Output. . .
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. Geralmente têm nomes como eth0
ou enp3s2
.
Se o seu servidor tiver uma interface de rede pública chamada eth0
, por exemplo, pode permitir o tráfego HTTP para ela com este comando:
Ao fazer isso, permitirá que o seu servidor receba solicitações HTTP da internet pública.
Ou, se quiser que um servidor de banco de dados MySQL (porta 3306
) escute conexões na interface de rede privada eth1
, você poderia usar este comando:
Isto permitiria que outros servidores na sua rede privada se conectassem ao seu banco de dados MySQL.
Passo 7 — 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. Geralmente, isso simplifica o processo de criação de uma política de firewall segura, exigindo que você crie regras que permitam explicitamente portas específicas e endereços IP.
Às vezes, você vai querer negar conexões específicas com base no endereço IP de origem ou na sub-rede, no entanto, talvez porque você saiba que seu servidor está sendo atacado de lá. Além disso, se você quiser alterar sua política de entrada padrão para permitir
(o que não é recomendado), você precisaria criar regras de negar
para quaisquer serviços ou endereços IP para os quais você não queira permitir conexões.
Para escrever regras de negar
, você pode usar os comandos descritos acima, substituindo permitir
por negar
.
Por exemplo, para negar conexões HTTP, você poderia usar este comando:
Ou se você quiser negar todas as conexões de 203.0.113.4
, você poderia usar este comando:
Agora, você pode aprender como implementar regras de exclusão.
Passo 8 — Excluir Regras
Saber como excluir regras de firewall é tão importante quanto saber como criá-las. Existem duas maneiras de especificar quais regras excluir: pelo número da regra ou pela própria regra. Isso é semelhante à forma como as regras foram especificadas quando foram criadas.
Pelo Número da Regra
Se você estiver usando o número da regra para excluir regras de firewall, a primeira coisa que desejará fazer é obter uma lista de suas regras de firewall. O comando UFW status
tem a opção numbered
, que exibe números ao lado de cada regra:
OutputStatus: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
Se você decidir que deseja excluir a regra 2
, que permite conexões HTTP na porta 80
, você pode especificar isso no seguinte comando UFW delete
:
Isso mostrará um prompt de confirmação, ao qual você pode responder com y/n
. Digitar y
irá então excluir a regra 2
. Note que se você tiver o IPv6 ativado, você também vai querer excluir a regra IPv6 correspondente.
Pela Regra Atual
A alternativa aos números de regra é especificar a regra real a ser excluída. Por exemplo, se você deseja remover a regra allow http
, você poderia escrevê-la assim:
Você também pode especificar a regra com allow 80
em vez do nome do serviço:
Este método excluirá tanto as regras IPv4 quanto as regras IPv6, se existirem.
Passo 9 — Verificando o Status e as Regras do UFW
A qualquer momento, você pode verificar o status do UFW com este comando:
Se o UFW estiver desativado, que é o padrão, a saída será esta:
OutputStatus: inactive
Se o UFW estiver ativo, o que deveria estar se você seguiu o Passo 3, a saída dirá que está ativo e listará quaisquer regras que você tenha definido. Por exemplo, se o firewall estiver configurado para permitir conexões SSH (porta 22
) de qualquer lugar, a saída poderá incluir algo assim:
OutputStatus: active
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
Use o comando status
se desejar verificar como o UFW configurou o firewall.
Passo 10 — Desativando ou Redefinindo o UFW (opcional)
Se você decidir que não quer mais usar o UFW, pode desativá-lo com este comando:
Quaisquer regras que você tenha criado com UFW não estarão mais ativas. Você sempre pode executar sudo ufw enable
se precisar ativá-las posteriormente.
Se você já configurou regras UFW, mas decide que deseja começar novamente, pode usar o comando de reset:
Isso desativará o UFW e excluirá quaisquer regras que você tenha definido anteriormente. Tenha em mente que as políticas padrão não voltarão às suas configurações originais se você as modificou em algum momento. Isso deve lhe dar um novo começo com o UFW.
Conclusão
Seu firewall agora está configurado para permitir (pelo menos) conexões SSH. Certifique-se de permitir quaisquer outras conexões de entrada que seu servidor precise, ao mesmo tempo em que limita conexões desnecessárias. Isso garantirá que seu servidor seja funcional e seguro.
Para aprender mais sobre configurações comuns do UFW, confira este tutorial sobre UFW Essentials: Regras e Comandos de Firewall Comuns.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-debian