Snort não armazena alertas por padrão. Você deve configurar um plugin de saída para direcionar eventos unified2 a um destino. O caminho padrão:
No `snort.conf` (ou arquivo incluído):
# Saída básica em arquivo (rotação externa) output unified2: filename /var/log/snort/alert.u2, limit 128, nostamp # Ou com unified2.conf para config avançada (recomendado) include $RULE_PATH/unified2.conf Exemplo `unified2.conf` (arquivo + rotação):
output unified2: \ filename /var/log/snort/alert.u2, \ limit 128, \ nostamp, \ mpls_event_types, \ vlan_event_types | Destino | Ferramenta / Método | Notas |
|---|---|---|
| SIEM (Splunk, Elastic, QRadar, Sentinel, Graylog) | Universal Forwarder / Filebeat / Logstash / Fluentd faz tail `.u2` → parse → indexa | Melhor para enterprise. Schema-on-read. Enriquecimento de alertas, correlação, dashboards. |
| Banco de Dados (MySQL, PostgreSQL, TimescaleDB) | Barnyard2 (legado) / Snort 3 `alert_csv` / `alert_sql` / Consumer Python/Go custom | Barnyard2 não mantido. Escreva seu próprio consumer lendo unified2 → SQL. Use connection pooling. |
| Syslog / Rsyslog / Syslog-ng | barnyard2 → syslog / Consumer custom → syslog() | Agregação central de logs. Formato CEF/LEEF para ingest SIEM. |
| Arquivo (JSON/CSV/Texto) | Snort 3 `alert_json` / `alert_csv` / Consumer custom → JSON Lines | Simples, portável. Rotacione com `logrotate`. Não para alto volume. |
| Elasticsearch / OpenSearch Direto | Filebeat (module: snort) → Elastic / Logstash codec: unified2 | Indexação nativa. Dashboards prontos (Elastic SIEM). |
| Time-Series DB (InfluxDB, TimescaleDB) | Telegraf exec/input → Influx / Writer custom | Métricas + alertas. Dashboards Grafana. |
#!/usr/bin/env python3 # unified2_to_json.py — tail unified2, emite JSON Lines para stdout/file import sys, struct, json, socket, datetime from pathlib import Path FILE = Path('/var/log/snort/alert.u2') # unified2 record types: 2=packet, 7=event, 104=event_v2, 105=packet_v2, 110=extra_data # Simplificado: parse Event v2 (104) + Packet v2 (105) # USE UMA LIB REAL: `pysnort`, `idstools`, `unified2` (PyPI) — NÃO PARSE RAW EM PROD. # Exemplo usando idstools (pip install idstools) # from idstools import unified2 # for event in unified2.EventIterator(open(FILE, 'rb')): # print(json.dumps(event)) Linha final: Configure saída `unified2` → pipe para Filebeat/Logstash/Vector/Fluent Bit → Elastic/Splunk/Sentinel. Esse é o caminho moderno, escalável.
Tecnologia Eletrônica © [www.351231.com]