NetFlow e sFlow: analizzare il traffico di rete senza indovinare
Come funzionano NetFlow, IPFIX e sFlow, quando usarli al posto di SNMP e come impostare un collector per capire davvero chi consuma la banda.
SNMP ti dice quanto traffico passa su una porta. NetFlow e sFlow ti dicono chi lo sta generando, verso quale destinazione, con quale protocollo e su quale porta. È la differenza tra sapere che il link è saturo e sapere che a saturarlo è un backup che parte alle 14:00 verso un IP in Germania.
Come funziona NetFlow
NetFlow nasce in Cisco e oggi esiste in versione standardizzata come IPFIX (RFC 7011). Il principio è il flow record: il router raggruppa i pacchetti che condividono la stessa "chiave" — tipicamente IP sorgente, IP destinazione, porta sorgente, porta destinazione, protocollo, interfaccia, ToS — e mantiene un contatore in cache.
Quando il flusso termina (FIN/RST) o scade un timer, il record viene esportato via UDP verso un collector. I timer che contano:
- active timeout: ogni quanto viene esportato un flusso ancora in corso (default tipico 60-300 s)
- inactive timeout: dopo quanti secondi di silenzio il flusso è considerato chiuso (15-30 s)
Un active timeout alto significa grafici in ritardo; troppo basso significa più pacchetti di export e più carico sul collector. Su un router di edge, 60 secondi è un compromesso ragionevole.
Le versioni che incontrerai:
| Versione | Note |
|---|---|
| v5 | Solo IPv4, campi fissi, ancora diffusissima |
| v9 | Template-based, supporta IPv6, MPLS, VLAN |
| IPFIX | Standard IETF, template estendibili, campi custom |
Se hai IPv6 in rete, v5 non basta: serve v9 o IPFIX.
Come funziona sFlow
sFlow lavora in modo opposto. Non aggrega nulla: campiona i pacchetti con un rapporto fisso (per esempio 1 ogni 2000) e invia al collector i primi byte dell'header più i contatori di interfaccia. L'aggregazione la fa il collector, moltiplicando per il sampling rate.
Conseguenze pratiche:
- sFlow è statistico: su volumi alti è accurato, su flussi piccoli e brevi può non vederli affatto
- sFlow costa poco in CPU: è implementato in ASIC su quasi tutti gli switch datacenter, quindi si può abilitare ovunque senza pensarci
- NetFlow è esatto sui byte contati, ma richiede memoria per la flow cache e, su hardware entry-level, può essere gestito in software con impatto sulle prestazioni
Regola empirica: sFlow sugli switch di aggregazione, NetFlow/IPFIX sui router di bordo dove ti serve il dato preciso per il billing o per l'analisi di peering.
Scegliere il sampling rate
Con sFlow il rate va tarato sulla velocità della porta, non "a sentimento". Riferimenti usati comunemente:
- 1 Gbps → 1:1000
- 10 Gbps → 1:5000
- 25/40 Gbps → 1:10000
Un rate troppo aggressivo (1:100 su 10G) genera un volume di export che può saturare la CPU di management dello switch. Un rate troppo alto rende invisibili i flussi sotto la soglia di rilevanza.
Il collector
Il router esporta, ma senza collector i dati non esistono. Opzioni self-hosted collaudate:
- nfdump / nfsen: leggero, a riga di comando, ottimo per analisi forensi puntuali
- pmacct: il coltellino svizzero — aggrega per AS, per prefisso, per BGP community, e scrive su PostgreSQL, Kafka o file. È lo strumento di riferimento per un ISP che deve capire il proprio traffico di peering
- Akvorado: front-end moderno con ClickHouse, arricchisce i flussi con dati BGP e GeoIP
- Elastiflow / ntopng: più orientati all'enterprise, interfaccia pronta all'uso
Per un operatore, il valore vero arriva quando arricchisci il flusso con la tabella BGP: a quel punto non vedi solo "IP x verso IP y", ma "quanto traffico sto scambiando con AS15169 e su quale sessione". È la base per decidere dove aprire un peering e dove no.
Configurazione su MikroTik
RouterOS supporta l'export come Traffic Flow:
# Abilita l'export IPFIX (v9 compatibile) verso il collector
/ip traffic-flow
set enabled=yes interfaces=ether1,ether2 \
active-flow-timeout=1m inactive-flow-timeout=15s \
cache-entries=128k
# Destinazione: IP del collector, porta UDP, versione
/ip traffic-flow target
add dst-address=10.10.0.50 port=2055 version=9 v9-template-refresh=20
Due dettagli che fanno perdere tempo se ignorati:
cache-entriesva dimensionato sul numero di sessioni concorrenti: se la cache si riempie, i flussi vengono esportati prematuramente e i dati risultano frammentati- con la v9 il collector non capisce nulla finché non riceve il template:
v9-template-refreshcontrolla ogni quanti pacchetti viene rimandato. Se riavvii il collector e i grafici restano vuoti per qualche minuto, la causa è quasi sempre questa
Cosa ci fai davvero
Al di là dei grafici, i casi d'uso concreti:
- Diagnosi di saturazione: identificare in pochi secondi l'host o il servizio che sta occupando l'uplink
- Rilevamento DDoS: un picco di flussi con pochi pacchetti ciascuno verso una singola destinazione è la firma tipica di un attacco volumetrico
- Verifica delle policy di routing: controllare che il traffico esca davvero dal transit o dal peering che hai scelto
- Capacity planning: le curve di crescita a 6-12 mesi si costruiscono solo su dati storici
Privacy e retention
I flow record contengono indirizzi IP, quindi sono dati personali ai sensi del GDPR. Vanno definite una finalità (sicurezza e gestione della rete), una retention proporzionata e un accesso limitato. Conservare header di flusso per anni "perché non si sa mai" non è una scelta difendibile: meglio tenere il dato grezzo per settimane e mantenere le aggregazioni anonime per l'analisi storica.
Vuoi portare Velix a casa tua?
Verifica la copertura FTTH al tuo indirizzo in 30 secondi. Gratis, senza impegno.
Verifica copertura →