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 comansible
.