
Laboratório Snort 3 IDS → IPS no Kali. Regras de detecção personalizadas + aplicação de iptables contra reconhecimento ICMP, varreduras SYN do Nmap, força bruta FTP do Hydra e backdoor vsftpd 2.3.4 (CVE-2011-2523).
Um ciclo completo de implantação do Snort 3 como Sistema de Detecção de Intrusão (monitoramento passivo) e como Sistema de Prevenção de Intrusão (bloqueio ativo via iptables), validado contra quatro vetores de ataque em uma rede virtual de três máquinas no Kali Linux.
O laboratório demonstra a distinção operacional entre detecção e prevenção executando uma cadeia de ataque idêntica de quatro vetores duas vezes — primeiro contra um IDS que registra mas não pode bloquear, depois contra uma camada IDS + iptables IPS que elimina ataques seletivamente enquanto preserva o tráfego legítimo.
Todo o tráfego entre o Atacante e o Metasploitable é forçado a passar pelo Analisador, tornando-o o ponto de estrangulamento natural tanto para monitoramento quanto para aplicação de regras.
┌─────────────────────────┐
│ Analisador / Roteador │
│ Kali + Snort 3 │
│ │
Atacante Kali ──VMnet9──┤ eth1: 10.10.10.1 │
10.10.10.10 │ │
│ eth0: 192.168.10.143 ───┼──> WAN (NAT)
│ │
Metasploitable 2 ─VMnet10┤ eth2: 192.168.50.1 │
192.168.50.10 │ │
└─────────────────────────┘
Substitua este esboço ASCII por
screenshots/01-network-topology.pngassim que tiver a figura no lugar:Topologia
O laboratório é executado em dois estágios com uma cadeia de ataque idêntica de quatro vetores em cada:
ping para descoberta de hostnmap -sS para enumeração de portas (1000 portas)Estágio 1 (IDS) executa o Snort passivamente no Analisador com cinco regras personalizadas — observe os alertas em tempo real, confirme que a exploração prossegue mesmo assim.
Estágio 2 (IPS) combina o Snort com uma camada de aplicação de regras iptables usando regras de descarte cirúrgicas — confirme que os ataques são bloqueados enquanto o ping ICMP e o login FTP legítimo permanecem funcionais.
MASQUERADE + FORWARD para que o Analisador roteie entre sub-redes e para a WAN — veja scripts/router_config.sh.scripts/ping_check.sh antes de instalar o Snort.O Snort é instalado via gerenciador de pacotes do Kali (sudo apt install snort -y) e configurado em /etc/snort/snort.conf:
HOME_NET = "10.10.10.0/24,192.168.50.0/24"
EXTERNAL_NET = "any"
ips = {
enable_builtin_rules = true,
include = "/etc/snort/rules/local.rules",
variables = default_variables
}
alert_fast = { file = true, packet = false }
HOME_NET abrange ambas as sub-redes internas para que o Snort trate todo o tráfego entre sub-redes no Analisador como digno de inspeção. alert_fast produz alertas compactos de uma linha (o registro por pacote geraria volume excessivo).
Validação da configuração:
sudo snort -T -c /etc/snort/snort.conf
# Resultado: 652 regras carregadas (5 texto personalizado + 647 embutidas), 0 avisos
Cinco regras em /etc/snort/rules/local.rules (arquivo completo em scripts/local.rules):
O Snort executa em modo passivo em ambas as interfaces internas:
sudo snort -c /etc/snort/snort.conf -i eth1 -i eth2 \
-A alert_fast -l /var/log/snort/
# Observe os alertas em um segundo terminal:
sudo tail -f /var/log/snort/alert_fast.txt
A saída de inicialização confirma que pcap DAQ configured to passive — o Snort vê cada pacote, mas não pode descartar ou modificar nenhum deles.
Após executar scripts/attack_simulator.sh a partir do Atacante:
O IDS detectou tudo e não parou nada. Esta é a lição central do Estágio 1: um IDS funcional sem aplicação de regras é um sistema de alarme, não uma fechadura. Quando um analista de SOC lê os alertas, o atacante já é root.
Uma observação secundária: as regras embutidas do Snort (116:408, 116:414) disparam em tráfego de broadcast DHCP — não é malicioso, mas em uma implantação de produção precisariam de regras de supressão para manter o log de alertas acionável.
A camada IPS é implantada com scripts/ips_setup.sh, que:
-D) para registro contínuoO mesmo script de ataque foi reexecutado a partir do Atacante:
Duas verificações manuais confirmaram a aplicação seletiva:
ping -c 4 192.168.50.10 → 4 pacotes transmitidos, 4 recebidos, 0% de perdaftp 192.168.50.10 com msfadmin:msfadmin → 220 (vsFTPd 2.3.4) … 230 Login bem-sucedidoProva quantitativa dos contadores de pacotes iptables durante a execução: 2051 pacotes aceitos, 12 pacotes descartados pela regra connlimit do FTP, 808 pacotes ICMP aceitos — aplicação seletiva em números.
Mesmo no modo IPS, o Snort continuou disparando alertas SID 1000002 / 1000003 em pacotes que atingiram seu ponto de inspeção passiva antes que o iptables descartasse os subsequentes — significando que iptables fornece aplicação enquanto o Snort fornece auditoria de logs, operando em conjunto.
Sim — cada um dos SIDs 1000001–1000004 disparou corretamente durante a simulação de ataque:
:) capturou a sequência exata de bytes do exploit.Mas detecção ≠ prevenção. O exploit vsftpd abriu um shell Meterpreter root enquanto todos os alertas estavam disparando. Um analista de SOC monitorando o IDS em tempo real teria visto o comprometimento — mas com o atacante já root em segundos, apenas alertar não é suficiente. Este é o núcleo operacional de por que o IPS existe.
A implementação alcançou mitigação completa de ataques com zero impacto observável no tráfego legítimo. A eficácia vem do design cirúrgico das regras — cada regra iptables visa uma assinatura comportamental, não um protocolo amplo:
connlimit por origem bloqueia o paralelismo das ferramentas de força bruta sem quebrar FTP de sessão única.STRING descarta a carga exata do exploit sem filtrar tráfego de login FTP legítimo.Uma limitação reconhecida: o ICMP é totalmente permitido, o que significa que um atacante ainda pode confirmar que o Metasploitable está ativo via ping. Em um ambiente de maior segurança, isso seria limitado por taxa ou restrito a fontes confiáveis. Neste laboratório, o ICMP é o principal mecanismo de verificação de conectividade, portanto permanece aberto.
Este laboratório usa uma máquina Snort dedicada. Comparado a executar o Snort como um plugin dentro de um appliance de firewall como pfSense ou OPNsense:
Vantagens da abordagem dedicada:
Compensações:
O Snort dedicado é a escolha correta para ambientes empresariais que precisam de desempenho, posicionamento e personalização. A abordagem de plugin pfSense/OPNsense faz mais sentido para ambientes de pequenas empresas ou laboratórios domésticos que priorizam a facilidade de uso.
O Estágio 2 é tecnicamente Snort passivo + aplicação iptables, não Snort executando em modo inline verdadeiro — o próprio Snort registra (pcap DAQ configured to passive), e o iptables realiza o descarte com base em limites de taxa, correspondências de string e contagens de conexão.
Este é um padrão de implantação legítimo e comum (é como muitas pilhas IDS/IPS baseadas em Linux do mundo real operam). Um acompanhamento natural seria migrar o Estágio 2 para uma configuração inline verdadeira usando snort --daq nfq (ou afpacket em modo inline) com as ações de regra reject / drop do Snort, para que o próprio Snort realize o descarte com base na correspondência completa de assinaturas, em vez de delegar ao iptables.
snort-ids-ips-lab/
├── README.md ← este arquivo
├── report/
│ ├── Snort-IDS-IPS-Report.pdf ← relatório completo do laboratório
│ └── Snort-IDS-IPS-Report.docx ← fonte editável
├── scripts/
│ ├── router_config.sh ← encaminhamento IP + roteamento iptables
│ ├── ping_check.sh ← verificação de conectividade
│ ├── attack_simulator.sh ← cadeia de ataque de 4 vetores
│ ├── ips_setup.sh ← regras iptables IPS + daemon Snort
│ └── local.rules ← 5 regras Snort personalizadas (SID 1000001-1000005)
├── screenshots/ ← figuras do relatório
├── .gitignore
└── LICENSE
⚠️ Uso exclusivo em laboratório. Estes scripts executam exploits reais e ferramentas de força bruta contra um alvo deliberadamente vulnerável. Não os execute contra qualquer sistema que você não possua e para o qual não tenha autorização explícita por escrito para testar.
scripts/router_config.sh, depois scripts/ping_check.sh para confirmar a conectividade total.sudo apt update && sudo apt install snort -y
scripts/local.rules em /etc/snort/rules/local.rules e defina HOME_NET = "10.10.10.0/24,192.168.50.0/24" em /etc/snort/snort.conf.sudo snort -T -c /etc/snort/snort.conf — espere 652 regras carregadas, 0 avisos.sudo snort -c /etc/snort/snort.conf -i eth1 -i eth2 -A alert_fast -l /var/log/snort/
# Em outro terminal:
sudo tail -f /var/log/snort/alert_fast.txt
sudo ./scripts/attack_simulator.sh — observe os alertas disparando e o shell Meterpreter.Todas as atividades documentadas neste repositório foram conduzidas exclusivamente dentro de um ambiente de laboratório virtual VMware autocontido para fins acadêmicos supervisionados. Nenhum sistema externo, de produção ou do mundo real foi alvo, escaneado ou afetado de qualquer forma. O Metasploitable 2 é uma máquina virtual intencionalmente vulnerável projetada especificamente para treinamento de segurança.
Este material não deve ser usado para replicar estas atividades contra qualquer sistema real sem autorização explícita por escrito do proprietário do sistema. Varreduras de porta não autorizadas, ataques de credenciais ou exploração de serviços de rede são ilegais na maioria das jurisdições.
MIT — veja LICENSE. O relatório do laboratório em si é fornecido para referência educacional.
| Componente | Detalhes |
|---|
| Analisador / Roteador | Kali Linux — 3 adaptadores: eth0 WAN (192.168.10.143, NAT), eth1 LAN1 (10.10.10.1, host-only), eth2 LAN2 (192.168.50.1, host-only) |
| Atacante | Kali Linux — eth0 na VMnet9 (10.10.10.10) — gateway padrão 10.10.10.1 |
| Alvo | Metasploitable 2 — eth0 na VMnet10 (192.168.50.10) — gateway padrão 192.168.50.1 |
| Versão do Snort | Snort++ 3.12.1.0-0kali1 (instalado no Analisador) |
| Ferramentas de ataque | Nmap 7.99, Hydra v9.6, Metasploit Framework (msfconsole) |
| Virtualização | VMware — VMnet9 = 10.10.10.0/24, VMnet10 = 192.168.50.0/24 (ambas host-only) |
| SID | Nome | Gatilho |
|---|
| 1000001 | Ping ICMP Detectado | Qualquer tráfego ICMP em qualquer direção — captura pings de reconhecimento |
| 1000002 | Tentativa de Conexão FTP | Qualquer conexão TCP para a porta 21 — captura tráfego legítimo e de força bruta |
| 1000003 | Possível Varredura SYN do Nmap | Pacotes TCP com apenas a flag SYN definida (flags:S) — a assinatura de uma varredura half-open |
| 1000004 | Tentativa de Backdoor VSFTPD 2.3.4 | content:":)" na porta FTP 21 — a string exata do gatilho do CVE-2011-2523 |
| 1000005 | Possível Shellcode do Metasploit | `content:" |
| Ataque | Detecção | Resultado |
|---|
| Reconhecimento ICMP | ✅ SID 1000001 — alertas bidirecionais | Ping concluído |
| Varredura SYN do Nmap | ✅ SID 1000003 — milhares de alertas em <1 segundo | 23 portas abertas enumeradas |
| Força bruta FTP Hydra | ✅ SID 1000002 — alertas repetidos de conexão FTP | Credenciais msfadmin:msfadmin quebradas |
| Backdoor vsftpd 2.3.4 | ✅ SID 1000004 — correspondência de conteúdo :) disparada | Shell Meterpreter root obtida |
| Regra | O que faz |
|---|
ACCEPT icmp | Permite explicitamente todo ICMP — preserva verificações de conectividade |
DROP tcp dpt:21 STRING ":)" | Descarta pacotes contendo o gatilho do backdoor vsftpd 2.3.4 na porta 21 |
ACCEPT tcp --syn -m limit --limit 10/s --limit-burst 20 | Permite handshakes TCP normais dentro do limite de taxa |
DROP tcp --syn (após limite) | Descarta inundações SYN que excedam 10/s — derrota varreduras SYN do Nmap |
DROP tcp dpt:21 -m connlimit --connlimit-above 5 --connlimit-mask 32 | Bloqueia > 5 conexões FTP simultâneas por origem — derrota o paralelismo do Hydra |
ACCEPT eth1→eth0, ACCEPT eth2→eth0 | Roteamento de saída normal |
ACCEPT -m conntrack --ctstate RELATED,ESTABLISHED | Stateful — preserva sessões estabelecidas |
| Ataque | Resultado do Estágio 2 |
|---|
| Reconhecimento ICMP | ✅ Permitido (intencional) |
| Varredura SYN do Nmap | ❌ Bloqueada — 1000 portas tcp filtradas (sem resposta), varredura levou 21,71 s em vez de <1 s |
| Força bruta FTP Hydra | ❌ Bloqueada — todos os filhos foram desabilitados devido a muitos erros de conexão — 0 senhas válidas encontradas |
| Backdoor vsftpd | ❌ Bloqueado — Rex::ConnectionTimeout — Exploit concluído, mas nenhuma sessão foi criada |
| Ataque / Tráfego | Estágio 1 (apenas IDS) | Estágio 2 (IDS + iptables IPS) |
|---|
| Ping ICMP | Detectado ✅ | Permitido ✅ (intencional) |
| Varredura SYN do Nmap | Detectado — 23 portas abertas encontradas | Bloqueado — 1000 filtradas |
| Força bruta FTP Hydra | Detectado — msfadmin:msfadmin quebrado | Bloqueado — 0 senhas encontradas |
| Exploit vsftpd 2.3.4 | Detectado — Shell Meterpreter root | Bloqueado — tempo limite de conexão |
| Login FTP legítimo | n/a | Preservado (230 Login bem-sucedido) |
sudo ./scripts/ips_setup.sh, depois reexecute a cadeia de ataque no Atacante. Confirme os bloqueios, então teste manualmente:
ping -c 4 192.168.50.10 # deve ter sucesso
ftp 192.168.50.10 # msfadmin / msfadmin — deve ter sucesso