Regras avançadas

LinuxBeginner
Pratique Agora

Introdução

Nos laboratórios anteriores, você abriu e fechou “portas” para todos. Mas e se você quiser abrir a porta somente para um amigo ou trancá-la especificamente para alguém conhecido por causar problemas?

É nesse ponto que entram as regras avançadas. Em vez de apenas abrir ou fechar um serviço de forma ampla, elas permitem definir políticas mais detalhadas, como verificar endereços de origem, registrar eventos ou rejeitar tráfego específico.

Elas são importantes porque as políticas reais de firewall geralmente dependem de condições. As decisões de segurança raramente se resumem a “porta aberta” ou “porta fechada”.

Observação sobre o ambiente do laboratório: para evitar que você bloqueie acidentalmente o acesso ao terminal web, usaremos a zona trusted por padrão. Isso significa que todo o tráfego será permitido, a menos que o bloqueemos explicitamente. Em um ambiente de produção real, você usaria uma zona mais restritiva, como public ou drop.

Neste laboratório, você aprenderá a:

  1. Bloquear pessoas específicas: rejeitar conexões de um endereço IP específico.
  2. Manter registros: registrar tentativas para identificar quem tentou entrar.
  3. Restringir o acesso: configurar uma regra que permita o controle remoto (SSH) somente a partir de uma rede específica.
  4. Auditar: salvar suas regras em um arquivo para revisão.

Bloquear um IP específico

Nesta etapa, primeiro vamos aprender a bloquear alguém que esteja causando problemas. Suponha que você perceba que o computador em 192.168.1.100 está tentando invadir seu sistema. Você quer bloqueá-lo completamente.

Usaremos uma “Regra avançada” para isso. Embora nossa zona padrão seja trusted (que permite todo o tráfego), uma regra específica de Reject terá precedência para esse IP.

As regras avançadas são importantes porque as políticas reais de firewall geralmente dependem de condições. Você pode querer comportamentos diferentes com base no endereço de origem, no serviço, na necessidade de registrar eventos ou em outros critérios que comandos simples de abrir ou fechar não conseguem expressar bem.

A sintaxe se parece com a construção de uma frase: rule family="ipv4" source address="192.168.1.100" reject

Execute o comando a seguir para adicionar essa regra permanentemente.

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" reject'

Veja o significado de cada parte dessa “frase”:

  • rule family="ipv4": estamos trabalhando com endereços IP padrão.
  • source address="...": este é o endereço da origem indesejada.
  • reject: esta é a ação executada.

Reject x Drop:

  • Reject é uma ação explícita: informa ao remetente que ele não tem permissão.
  • Drop é uma ação silenciosa: ignora completamente o remetente, como se o computador não existisse.

A escolha entre essas ações não é apenas uma questão de estilo. reject fornece uma resposta mais rápida a clientes legítimos e facilita a solução de problemas, enquanto drop pode revelar menos informações a um invasor, mas causar tempos de espera maiores.

Como usamos --permanent, a regra foi salva, mas ainda não está ativa. Recarregue o firewall para aplicá-la.

sudo firewall-cmd --reload

Agora, verifique se a regra existe.

sudo firewall-cmd --list-rich-rules

A nova regra deverá aparecer na lista.

Registrar pacotes descartados

Nesta etapa, bloquear alguém é útil, mas às vezes você também precisa de provas. Você pode adicionar “registro” a uma regra. É como instalar uma câmera de segurança que grava toda vez que a regra é acionada.

Essa combinação de filtragem e registro é comum nas operações de segurança. Bloquear o tráfego protege o sistema, enquanto o registro cria evidências que podem ser investigadas posteriormente.

Vamos bloquear outro IP, 10.0.0.5, mas desta vez vamos registrar a tentativa antes de rejeitá-la.

Execute este comando:

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.5" log prefix="BLOCKED_IP: " level="info" reject'

O que há de novo aqui?

  • log: ativa o registro.
  • prefix="BLOCKED_IP: ": ao gravar nos logs do sistema, inicia a linha com este texto. Isso facilita bastante a localização desses eventos usando ferramentas de pesquisa.

Aplique as alterações.

sudo firewall-cmd --reload

Verifique o resultado.

sudo firewall-cmd --list-rich-rules

Agora você deverá ver duas regras: a primeira, que apenas rejeita, e a segunda, que registra e rejeita.

Restringir o acesso a um serviço

Nesta etapa, em um ambiente protegido, você bloquearia o SSH para todas as origens e permitiria o acesso somente a partir de uma rede confiável, como sua VPN.

Observação didática: como estamos usando a zona trusted para manter sua conexão ativa, esta etapa é parcialmente simbólica. Adicionar uma regra de “Allow” quando todo o tráfego já é permitido não altera o comportamento. No entanto, aprender essa sintaxe é essencial para quando você trabalhar com zonas restritivas, como public ou drop.

O objetivo é criar uma regra que diga: “Permitir SSH se a origem for 192.168.0.0/24”.

Este é um bom exemplo do princípio do menor privilégio aplicado às políticas de rede. Em vez de expor o acesso administrativo ao mundo inteiro, você o restringe à rede que deve gerenciar o servidor legitimamente.

Primeiro, remova o serviço SSH geral.

sudo firewall-cmd --permanent --remove-service=ssh

Observação: você pode ver um aviso como Warning: NOT_ENABLED: ssh. Isso é normal e esperado. Como nossa zona padrão é trusted (que permite tudo por padrão, mas não tem serviços específicos ativados), tentar remover um serviço que não está listado explicitamente gera esse aviso inofensivo.

Em seguida, adicione a Regra avançada específica para a sub-rede.

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" service name="ssh" accept'

Recarregue o firewall para ativar essas alterações.

sudo firewall-cmd --reload

Agora, faça a verificação. Primeiro, confira a lista de serviços.

sudo firewall-cmd --list-services

Você não deverá ver ssh aqui, pois ele foi removido da lista geral de serviços.

Depois, verifique as Regras avançadas.

sudo firewall-cmd --list-rich-rules

Você deverá ver uma regra que aceita service name="ssh" quando a origem for a especificada.

Auditar suas regras

Nesta etapa, em um ambiente de produção, é uma boa prática auditar as regras do firewall e fazer um backup delas antes de encerrar a sessão. Isso garante que as regras sejam aplicadas na ordem correta e que você tenha um arquivo para recuperação.

Nesta etapa, você exportará suas Regras avançadas para um arquivo de texto para auditoria.

Primeiro, liste todas as Regras avançadas e redirecione a saída para um arquivo chamado rules_list.txt na pasta do projeto.

sudo firewall-cmd --list-rich-rules > ~/project/rules_list.txt

Agora, leia o arquivo para confirmar se o conteúdo está correto.

cat ~/project/rules_list.txt

Você deverá ver a lista das regras criadas neste laboratório. Esse arquivo agora funciona como um backup simples da sua configuração de regras avançadas.

Resumo

Neste laboratório, você aprimorou seus conhecimentos de firewall usando Regras avançadas. Você aprendeu a:

  1. Bloquear IPs específicos (a regra “Reject”).
  2. Registrar eventos de segurança (a regra de “registro”).
  3. Restringir serviços sensíveis, como SSH, somente a redes confiáveis.
  4. Auditar sua configuração exportando as regras para um arquivo.

Essas técnicas avançadas oferecem a precisão necessária para proteger ambientes complexos.