Connection Tracking — Firewall stateful in RouterOS
Il connection tracking permette a RouterOS di tenere traccia dello stato di ogni connessione di rete, abilitando un firewall stateful efficiente che distingue traffico legittimo da intrusioni.
Il connection tracking è il motore stateful di RouterOS. Mantiene una tabella di tutte le connessioni attive e assegna a ogni pacchetto uno dei cinque stati di connessione. Questo consente al firewall di accettare in modo efficiente il traffico di risposta senza dover aprire porte aggiuntive.
Gli stati di connessione
- new — primo pacchetto di una nuova connessione (es. TCP SYN) o pacchetto UDP senza entry nella tabella. È il traffico da esaminare con più attenzione.
- established — pacchetto appartenente a una connessione già vista in entrambe le direzioni. Il traffico di risposta legittimo. Da accettare quasi sempre.
- related — pacchetto correlato a una connessione esistente ma non parte di essa (es. messaggi ICMP di errore, connessione dati FTP in modalità passiva). Anch'esso legittimo.
- invalid — pacchetto che non corrisponde a nessuna connessione nota e non è
new. Tipicamente traffico malformato o attacchi. Da scartare sempre. - untracked — stato speciale per pacchetti esclusi dal conntrack tramite regole RAW con azione
notrack. Utile per traffico ad altissimo volume (es. DDoS mitigation).
Timeout di default per protocollo
- TCP SYN (handshake): 5 secondi
- TCP established: 1 giorno
- TCP close/fin-wait/time-wait: 10 secondi
- UDP (una direzione): 30 secondi
- UDP (bidirezionale): 3 minuti
- ICMP: 10 secondi
- Generico: 10 minuti
# Visualizza la configurazione corrente del conntrack /ip firewall connection tracking print # Il parametro "enabled=auto" attiva il conntrack solo se esistono # regole firewall che lo richiedono (ottimale per router base). # Forzarlo a "yes" o "no" se necessario: /ip firewall connection tracking set enabled=yes # Ridurre i timeout in ambienti con molte connessioni (es. server PPPoE) # per liberare più rapidamente le entry scadute: /ip firewall connection tracking set tcp-established-timeout=8h udp-timeout=30s udp-stream-timeout=2m generic-timeout=5m # Abilitare il liberal TCP tracking (raccomandato su link WAN instabili): # Fa sì che solo i segmenti RST fuori finestra vengano marcati INVALID # invece di scartare pacchetti legittimi su connessioni asimmetriche. /ip firewall connection tracking set liberal-tcp-tracking=yes # Visualizzare la tabella connessioni con colonne utili /ip firewall connection print detail
Stati TCP interni
Oltre agli stati di connessione del firewall, RouterOS traccia lo stato interno TCP: syn-sent, syn-recv, established, fin-wait, close-wait, last-ack, time-wait, close. Questi sono visibili nella tabella /ip firewall connection e utili per il debugging.
accept connection-state=established,related e drop connection-state=invalid. Questo garantisce massima performance (il traffico legittimo viene accettato immediatamente) e massima sicurezza (il traffico malformato viene scartato subito). Dopo aver modificato le regole NAT, svuota la tabella connessioni con /ip firewall connection remove [find] per evitare comportamenti inattesi.# Pattern fondamentale da inserire come PRIME regole in ogni chain: # Chain INPUT - protegge il router /ip firewall filter add chain=input connection-state=established,related,untracked action=accept comment="Accetta traffico di risposta stabilito" /ip firewall filter add chain=input connection-state=invalid action=drop comment="Scarta pacchetti non validi" # Chain FORWARD - protegge i clienti /ip firewall filter add chain=forward connection-state=established,related action=fasttrack-connection hw-offload=yes comment="FastTrack - accelerazione hardware traffico stabilito" /ip firewall filter add chain=forward connection-state=invalid action=drop comment="Scarta pacchetti forward non validi"
Perché lo stato 'invalid' va sempre scartato
Un pacchetto invalid è un pacchetto che il conntrack non riesce ad associare a nessuna connessione nota e che non è un legittimo new. Cause tipiche: pacchetti che arrivano dopo che il router ha già chiuso la connessione, segmenti TCP fuori finestra, frammenti riassemblati male, oppure traffico di attacco/scan. Accettarli non porta alcun beneficio (non c'è una sessione utile a cui appartengano) e apre la porta a tecniche di evasione del firewall. Per questo drop connection-state=invalid è una delle prime regole sia in input sia in forward.
invalid. In quel caso non rimuovere la regola: correggi il routing o abilita liberal-tcp-tracking=yes. Su un WISP con doppia uscita Internet questo è l'errore più comune che 'rompe' siti random.Dimensionare il conntrack su un router WISP
Ogni connessione attiva occupa una entry nella tabella conntrack (circa 300 byte). Un router gateway con centinaia di clienti P2P/streaming può arrivare facilmente a centinaia di migliaia di entry. Se la tabella si riempie, le nuove connessioni vengono scartate e i clienti 'non navigano'. Monitora il valore e, se serve, riduci i timeout o usa notrack (vedi articolo RAW) sul traffico che non necessita di stato.
# Numero totale di connessioni tracciate in questo momento /ip firewall connection print count-only # Conteggio per stato (per capire dove si accumulano le entry) :put [/ip firewall connection print count-only where connection-state=established] :put [/ip firewall connection print count-only where connection-state=new] # Le entry UDP (DNS, VoIP, gaming) sono spesso la maggioranza: # ridurre udp-timeout libera memoria più in fretta /ip firewall connection tracking set udp-timeout=15s udp-stream-timeout=1m # Su gateway con tanto P2P: abbassare il timeout TCP established # da 1 giorno (default) a qualche ora riduce drasticamente le entry stale /ip firewall connection tracking set tcp-established-timeout=4h # Verificare l'uso CPU del conntrack durante un picco /system resource print /tool profile duration=5s
drop invalid + timeout UDP ragionevoli risolve il 90% dei problemi di tabella piena.Continua con
Configura senza fatica con l'AI
In WispOS l'agente AI genera la configurazione RouterOS dalle tue parole e un tutor ti guida passo passo.
Prova WispOS