SNORT - LittlePlantXD/CyberGamer GitHub Wiki

Guia Definitivo: Configuração de Firewall Iptables e IPS com Snort

Este documento detalha o processo completo para configurar um firewall iptables robusto, integrá-lo com o Snort em modo IPS (Sistema de Prevenção de Intrusão) e customizar regras de bloqueio e logging.


Parte 1: Configuração do Firewall Iptables com Logging Personalizado

Objetivo: Criar um firewall seguro que bloqueia tudo por padrão, libera apenas serviços essenciais e registra as ações em arquivos específicos.

1.1. Preparação do Ambiente (Reset do Firewall)

Começamos com um reset completo para garantir que não há regras antigas interferindo.

# Limpa todas as regras existentes
sudo iptables -F

# Remove quaisquer chains personalizadas não padrão
sudo iptables -X

# Zera os contadores de pacotes e bytes
sudo iptables -Z

1.2. Criação das Chains de Log

Criamos chains dedicadas para organizar a lógica de logging e aceitação/rejeição de pacotes.

# Chain para pacotes que serão permitidos e logados
sudo iptables -N LOG_ACCEPT

# Chain para pacotes que serão negados e logados
sudo iptables -N LOG_DROP

1.3. Definição do Comportamento das Chains de Log

Populamos as chains com as ações de log e o veredito final (ACCEPT ou DROP).

# ---- Regras para a chain LOG_ACCEPT ----
sudo iptables -A LOG_ACCEPT -j LOG --log-prefix "IPTABLES-PERMIT: " --log-level 7
sudo iptables -A LOG_ACCEPT -j ACCEPT

# ---- Regras para a chain LOG_DROP ----
sudo iptables -A LOG_DROP -j LOG --log-prefix "IPTABLES-DENY: " --log-level 7
sudo iptables -A LOG_DROP -j DROP

1.4. Criação das Regras de Tráfego de Entrada

# Permite todo tráfego na interface de loopback
sudo iptables -A INPUT -i lo -j ACCEPT

# Permite pacotes de conexões já existentes
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Permite e loga novas conexões SSH
sudo iptables -A INPUT -p tcp --dport 22 -j LOG_ACCEPT

# Permite e loga novas conexões HTTP
sudo iptables -A INPUT -p tcp --dport 80 -j LOG_ACCEPT

# Permite e loga requisições e respostas PING (ICMP)
sudo iptables -A INPUT -p icmp --icmp-type 8 -j LOG_ACCEPT
sudo iptables -A INPUT -p icmp --icmp-type 0 -j LOG_ACCEPT

1.5. Definição da Política Padrão e Log de Rejeição

# Define a política padrão para DROP
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP

# Permite conexões iniciadas pelo servidor
sudo iptables -P OUTPUT ACCEPT

# Loga tudo que for rejeitado
sudo iptables -A INPUT -j LOG_DROP

1.6. Configuração do rsyslog para Logging Personalizado

Crie o arquivo:

sudo nano /etc/rsyslog.d/10-iptables.conf

Adicione:

# Logs de pacotes permitidos
:msg,contains,"IPTABLES-PERMIT: " -/var/log/permit.log
& stop

# Logs de pacotes negados
:msg,contains,"IPTABLES-DENY: " -/var/log/deny.log
& stop

Reinicie o serviço:

sudo systemctl restart rsyslog

Parte 2: Integração do Iptables com Snort (Modo IPS)

Objetivo: Transformar nosso firewall em um Sistema de Prevenção de Intrusão.

2.1. Instalação dos Pré-requisitos

sudo apt-get update
sudo apt-get install snort apache2 iptables-persistent

Durante a instalação, informe o IP da sua rede local (ex: 192.168.15.0/24).

2.2. Modificando a Regra do Firewall para NFQUEUE

Liste as regras com números:

sudo iptables -L INPUT -n --line-numbers

Substitua a regra da porta 80 por NFQUEUE:

sudo iptables -R INPUT <NÚMERO_DA_LINHA> -p tcp --dport 80 -j NFQUEUE --queue-num 0

Parte 3: Customização do Snort e Teste Final

3.1. Habilitando Log via Syslog no Snort

sudo nano /etc/snort/snort.conf

Na seção Step #6, adicione:

output alert_syslog: LOG_AUTH LOG_ALERT

3.2. Criando a Regra de Bloqueio Personalizada

sudo nano /etc/snort/rules/local.rules

Adicione:

drop tcp any any -> $HOME_NET 80 (msg:"ALARME DE ATAQUE DETECTADO"; content:"ALARME DE ATAQUE"; sid:1000003; rev:1;)

3.3. Garantindo o Carregamento da Regra

sudo nano /etc/snort/snort.conf

Remova o # da linha:

include $RULE_PATH/local.rules

3.4. O Teste de Fogo

Terminal da VM (Root):

sudo killall -9 snort
sudo -i
snort -c /etc/snort/snort.conf -Q --daq nfq --daq-var queue=0 -D
ps aux | grep snort

Segundo terminal da VM (Monitoramento):

tail -f /var/log/auth.log | grep "ALARME DE ATAQUE"

Host (PowerShell):

Invoke-WebRequest -Uri http://<IP_DA_SUA_VM> -Method Post -Body "payload=ALARME DE ATAQUE"

3.5. Salvando a Configuração Final do Firewall

sudo iptables-save > /etc/iptables/rules.v4

✅ Resultado Final Esperado

  • O comando PowerShell deve falhar (pacote bloqueado).
  • O log /var/log/auth.log deve conter o alerta "ALARME DE ATAQUE DETECTADO".
  • O sistema estará protegido com inspeção de pacotes em tempo real via Snort.

Obs: Para facilitar o gerenciamento de regras em ambiente produtivo, considere utilizar ferramentas como ufw, firewalld ou scripts automatizados com ansible.