Una rete piatta è comoda: ogni dispositivo vede tutto e quasi niente richiede regole particolari. È anche il motivo per cui un problema nato su un oggetto poco affidabile può trasformarsi in un problema dell’intera infrastruttura. Segmentare una rete significa accettare un po’ di complessità in più in cambio di un vantaggio enorme: limitare ciò che un dispositivo può raggiungere anche quando quel dispositivo non è più affidabile.
La VLAN è soltanto il primo pezzo. Se separiamo Ufficio, SIP, Gestione e telecamere ma poi configuriamo il router affinché tutte le reti possano comunicare liberamente, abbiamo ottenuto soprattutto ordine amministrativo, non vera segmentazione. La sicurezza nasce quando il routing attraversa una policy e quella policy descrive esplicitamente i flussi consentiti.
Livello 2, livello 3 e firewall
Una VLAN separa domini Ethernet al livello 2. Due host in VLAN diverse non si parlano direttamente tramite ARP: per raggiungersi devono passare da un router, cioè dal livello 3. È proprio quel passaggio obbligato che ci permette di applicare le policy firewall.
OpenWrt aggiunge un’astrazione molto utile: le zone. Una zona non è necessariamente una singola interfaccia fisica; è un gruppo logico di reti a cui assegniamo comportamenti comuni. Possiamo quindi dire che la zona Gestione accetta connessioni amministrative, la zona CCTV non inoltra traffico verso Ufficio, la zona SIP raggiunge il DNS interno ma non il resto della DMZ.
Default deny: partire da ciò che non deve succedere
Il metodo più semplice da mantenere nel tempo è partire da una policy restrittiva e aggiungere eccezioni comprensibili. Non “Ufficio può andare in SIP”, ma “Ufficio può raggiungere il PBX 10.0.10.100 sulla porta 5061”. La seconda regola racconta già da sola quasi tutta la ragione per cui esiste.
Questo approccio è particolarmente importante per IoT, telefoni e telecamere. Sono apparati che spesso non amministriamo come un server Linux, ricevono firmware con frequenze differenti e possono avere servizi difficili da disabilitare. La segmentazione compensa in parte questa mancanza di controllo restringendo le conseguenze di una compromissione.
Stateful non significa onnisciente
Firewall4 usa nftables ed è stateful: una connessione autorizzata in una direzione può avere traffico di risposta senza dover scrivere una seconda regola speculare. Ma il firewall del router non è l’unico punto di controllo. Un server può avere il proprio firewall locale, un’applicazione può applicare ACL e un servizio SIP può rifiutare una sorgente perfettamente raggiungibile a livello IP.
È proprio ciò che vedremo più avanti nel caso del telefono SIP: i pacchetti attraversavano OpenWrt correttamente, eppure la registrazione falliva. Il problema era un livello più avanti.
Con questi concetti chiari possiamo costruire la topologia e le regole concrete.
Topologia
Ufficio 192.168.1.0/24
DMZ 172.16.0.0/24
SIP 10.0.10.0/24
Gestione 10.0.20.0/24
CCTV 10.0.30.0/24 # esempio
La policy di base è INPUT e FORWARD in DROP per le reti normali; Gestione è la zona privilegiata da cui amministrare le altre.
Fotografare la configurazione
uci export network
uci export firewall
fw4 print
nft list ruleset
fw4 print mostra ciò che OpenWrt genererà; nft list ruleset mostra ciò che è realmente caricato nel kernel.
Creare le zone
uci add firewall zone
uci set firewall.@zone[-1].name='Ufficio'
uci add_list firewall.@zone[-1].network='Ufficio'
uci set firewall.@zone[-1].input='DROP'
uci set firewall.@zone[-1].output='ACCEPT'
uci set firewall.@zone[-1].forward='DROP'
uci add firewall zone
uci set firewall.@zone[-1].name='Gestione'
uci add_list firewall.@zone[-1].network='Gestione'
uci set firewall.@zone[-1].input='ACCEPT'
uci set firewall.@zone[-1].output='ACCEPT'
uci set firewall.@zone[-1].forward='ACCEPT'
uci commit firewall
fw4 check
/etc/init.d/firewall restart
Regola puntuale invece di forwarding globale
config rule
option name 'Ufficio-to-PBX-SIP-TLS'
option src 'Ufficio'
option dest 'Sip'
option dest_ip '10.0.10.100'
option proto 'tcp'
option dest_port '5061'
option target 'ACCEPT'
Non impostiamo src_port: la porta sorgente del client è normalmente effimera.
Servizi specifici in DMZ
config rule
option name 'SIP-to-DNS'
option src 'Sip'
option dest 'Dmz'
option dest_ip '172.16.0.100'
option proto 'tcp udp'
option dest_port '53'
option target 'ACCEPT'
config rule
option name 'SIP-to-Web'
option src 'Sip'
option dest 'Dmz'
option dest_ip '172.16.0.200'
option proto 'tcp'
option dest_port '80 443'
option target 'ACCEPT'
Telecamere
Le telecamere devono raggiungere il server di videosorveglianza e, se serve, DNS/NTP. Non hanno motivo di aprire sessioni verso PC e server della LAN.
Caso reale: telefono SIP e 504
Un telefono spostato dalla rete SIP alla rete Ufficio attraversava correttamente OpenWrt. Il REGISTER arrivava al PBX, ma il servizio rispondeva con errore. La causa era la policy INPUT del PBX, che non autorizzava la nuova sorgente.
# Sul router
tcpdump -ni any host 10.0.10.100 and port 5060
# Sul PBX
tcpdump -ni any 'port 5060 or port 5061'
uci show firewall | grep -E 'Ufficio|Sip|5060|5061'
fw4 print | grep -n -E '5060|5061'
Debug sistematico
uci export network
uci export firewall
fw4 check
fw4 print
nft list ruleset
tcpdump -ni any host 192.168.1.50
tcpdump -ni any host 10.0.10.100
Per ogni apertura dovrebbe esistere una frase comprensibile: “Ufficio può raggiungere il PBX su 5061 perché…”. Se non riusciamo più a spiegare la regola, è il momento di rivederla.
Approfondimenti collegati
- DHCP su reti segmentate, per servire più VLAN senza allargare artificialmente le subnet.
- Port scanning con Nmap, per verificare da ogni zona ciò che è realmente raggiungibile.
- Firewall proattivo, per aggiungere reazioni dinamiche senza perdere una policy di base leggibile.

