Configurare l'output degli avvisi Snort: archiviare i dati IDS dove servono
Snort **non archivia avvisi di default**. Devi **configurare un plugin di output** per instradare gli eventi unified2 verso una destinazione. Il percorso standard:
🔧 Configurazione core: plugin di output `unified2`
In `snort.conf` (o file incluso):
# Output file base (rotazione gestita esternamente) output unified2: filename /var/log/snort/alert.u2, limit 128, nostamp # O con unified2.conf per configurazione avanzata (consigliato) include $RULE_PATH/unified2.conf **Esempio `unified2.conf` (file + rotazione):**
output unified2: \ filename /var/log/snort/alert.u2, \ limit 128, \ nostamp, \ mpls_event_types, \ vlan_event_types 🎯 Destinazioni comuni (configura tramite `unified2` + strumenti esterni)
| Destinazione | Strumento / Metodo | Note |
|---|---|---|
| SIEM (Splunk, Elastic, QRadar, Sentinel, Graylog) | Universal Forwarder / Filebeat / Logstash / Fluentd legge `.u2` → parsing → indicizzazione | **Migliore per aziende.** Schema-on-read. Arricchimento avvisi, correlazione, dashboard. |
| Database (MySQL, PostgreSQL, TimescaleDB) | Barnyard2 (legacy) / **Snort 3 `alert_csv` / `alert_sql`** / **Consumer Python/Go personalizzato** | Barnyard2 non mantenuto. **Scrivi il tuo consumer** che legge unified2 → SQL. Usa connection pooling. |
| Syslog / Rsyslog / Syslog-ng | barnyard2 → syslog / **Consumer personalizzato → syslog()** | Aggregazione log centrale. Formato CEF/LEEF per ingestione SIEM. |
| File (JSON/CSV/Testo) | Snort 3 `alert_json` / `alert_csv` / **Consumer personalizzato → JSON Lines** | Semplice, portatile. **Ruota con `logrotate`.** Non per volumi elevati. |
| Elasticsearch / OpenSearch diretto | Filebeat (modulo: snort) → Elastic / **Logstash codec: unified2** | Indicizzazione nativa. Dashboard pronte (Elastic SIEM). |
| Time-Series DB (InfluxDB, TimescaleDB) | Telegraf exec/input → Influx / **Writer personalizzato** | Metriche + avvisi. Dashboard Grafana. |
🐍 Consumer Python minimale (Proof of Concept)
#!/usr/bin/env python3 # unified2_to_json.py — legge unified2, emette JSON Lines su stdout/file import sys, struct, json, socket, datetime from pathlib import Path FILE = Path('/var/log/snort/alert.u2') # tipi record unified2: 2=packet, 7=event, 104=event_v2, 105=packet_v2, 110=extra_data # Semplificato: parsi Event v2 (104) + Packet v2 (105) # USA UNA LIBRERIA VERA: `pysnort`, `idstools`, `unified2` (PyPI) — NON PARSARE RAW IN PROD. # Esempio usando idstools (pip install idstools) # from idstools import unified2 # for event in unified2.EventIterator(open(FILE, 'rb')): # print(json.dumps(event)) ✅ Checklist produzione
- **Usa Snort 3** (output JSON/CSV nativo, inspectori pluggabili).
- **Distribuisci Barnyard2 SOLO se bloccato su Snort 2.9.x** (EOL 2022).
- **Dimensiona archiviazione:** link 1Gbps → 50–200GB/giorno unified2. Pianifica retention / tiering.
- **Trasporto sicuro:** TLS per Syslog/Beats/Forwarder.
- **Monitora la pipeline:** Dead letter queue, alert di lag, alert disco.
- **Testa regola → avviso → archivio → dashboard** end-to-end.
Linea di fondo: Configura output `unified2` → instrada a **Filebeat/Logstash/Vector/Fluent Bit** → **Elastic/Splunk/Sentinel**. Questo è il percorso moderno e scalabile.