Cos'e'#
VLAN (Virtual Local Area Network) divide una rete fisica in piu' reti logiche isolate su un unico switch. Ogni VLAN e' un broadcast domain separato: un dispositivo in VLAN 10 non vede il traffico di VLAN 20, anche se entrambi sono fisicamente connessi allo stesso switch.

VLAN implementa la segmentazione logica della rete a Layer 2, creando broadcast domain isolati sullo stesso hardware fisico per ridurre la superficie di attacco da lateral movement e ottimizzare il traffico.
TL;DR#
- Ogni VLAN e' una subnet IP separata: VLAN 10 (HR) -> 192.168.10.x, VLAN 20 (IT) -> 192.168.20.x.
- Un device in VLAN 10 non raggiunge un device in VLAN 20 senza passare da un router o switch L3.
- La configurazione e' software: nessun cavo da spostare, solo file di configurazione dello switch.
- VLAN 1 e' la VLAN di default su Cisco: non usarla per sicurezza (tutta la gestione ci transita per default).
Access Port vs Trunk Port#
Le porte di uno switch hanno due modalita' operative distinte. La scelta della modalita' determina quali VLAN transitano sulla porta e come vengono identificate.
Come funziona il tag 802.1Q:
Frame Ethernet standard:
[ DST MAC | SRC MAC | EtherType | Payload | FCS ]
Frame con tag 802.1Q (trunk):
[ DST MAC | SRC MAC | 802.1Q Tag (4 byte) | EtherType | Payload | FCS ]
^
TPID (0x8100) + Priority + VLAN ID (12 bit = max 4094 VLAN)
Inter-VLAN Routing#
Device su VLAN diverse non possono comunicare direttamente: il traffico deve passare da Layer 3 (router o switch L3). Questo e' il checkpoint dove si applicano le ACL per il controllo del lateral movement.
PC HR (192.168.10.5) vuole raggiungere DB (192.168.20.8):
1. PC HR manda pacchetto al suo gateway (192.168.10.1 - subinterface VLAN 10)
2. Router verifica ACL: "VLAN 10 -> VLAN 20 porta 22 SSH?" → DENY
3. Router verifica ACL: "VLAN 10 -> VLAN 20 porta 3306 MySQL?" → PERMIT
4. Router instrada verso 192.168.20.1 (subinterface VLAN 20)La Tabella di Routing dice dove mandare il pacchetto (il navigatore). Le ACL dicono se mandarlo (il buttafuori). Sono due funzioni separate sullo stesso dispositivo.
Traffico Nord-Sud vs Est-Ovest#
Questa terminologia nasce da come gli ingegneri disegnano le mappe di rete: internet si disegna in alto (Nord), i server in basso (Sud). I server tra loro vengono affiancati sulla stessa linea (Est-Ovest).
flowchart TD
INET["Internet (Nord)"]
subgraph DCSENZA ["Senza VLAN - Rete Piatta"]
direction TB
FW1["Firewall Perimetrale"]
SW1["Switch - unico broadcast domain"]
WEB1["Web Server COMPROMESSO"]
DB1["Database - I tuoi dati"]
FW1 --> SW1
SW1 --> WEB1
SW1 --> DB1
WEB1 -.->|Lateral Movement Est-Ovest - Nessun ostacolo| DB1
end
subgraph DCVLAN ["Con VLAN - Segmentazione"]
direction TB
FW2["Firewall Perimetrale"]
RTR["Router / Firewall Interno - ACL"]
subgraph V10 ["VLAN 10 - Frontend"]
WEB2["Web Server COMPROMESSO"]
end
subgraph V20 ["VLAN 20 - Backend"]
DB2["Database - Al Sicuro"]
end
FW2 --> RTR
RTR --> V10
RTR --> V20
WEB2 -.->|Tenta Lateral Movement| RTR
RTR -.-x|BLOCCATO - ACL nega SSH dal WebServer al DB| DB2
end
INET --> DCSENZA
INET --> DCVLAN
style WEB1 fill:rgb(127, 29, 29, 0.2),stroke:#f87171
style WEB2 fill:rgb(127, 29, 29, 0.2),stroke:#f87171
style DB2 fill:rgb(6, 78, 59, 0.2),stroke:#34d399
style DB1 fill:rgb(180, 83, 9, 0.2),stroke:#fbbf24
style RTR fill:rgb(30, 58, 138, 0.2),stroke:#60a5fa
Lettura diagramma: Confronto tra rete piatta (a sinistra) e rete con VLAN (a destra). Senza VLAN, un Web Server compromesso raggiunge il Database direttamente via switch L2 senza alcun ostacolo. Con le VLAN, il traffico Est-Ovest deve passare per il router/firewall interno dove le ACL bloccano la connessione SSH non autorizzata.
| Flusso | Che cos'e' | Esempio | Controllo |
|---|---|---|---|
| Nord-Sud | Attraversa il confine della rete | Utente esterno accede al web server | Firewall perimetrale |
| Est-Ovest | Laterale tra server interni | Web server -> Database interno | Firewall interno + ACL inter-VLAN |
Il problema storico: le aziende proteggevano solo il traffico Nord-Sud (portone blindato perimetrale). Se un attaccante bucava il web server esposto, il traffico Est-Ovest verso il database era invisibile al firewall perimetrale.
VLAN Hopping#
VLAN hopping e' una famiglia di attacchi che permette di "saltare" da una VLAN all'altra senza passare dal router e senza essere autorizzati. Ci sono due tecniche principali.
flowchart TD
ATK["Attaccante in VLAN 10 - Guest"]
subgraph SPOOFING ["Tecnica 1 - Switch Spoofing"]
direction TB
ATK1["Attaccante invia DTP frames"]
SW_A["Switch: negozia trunk automaticamente"]
RESULT1["Attaccante riceve traffico di TUTTE le VLAN"]
ATK1 -->|DTP negotiate| SW_A
SW_A -->|trunk stabilito| RESULT1
end
subgraph DOUBLETAG ["Tecnica 2 - Double Tagging"]
direction TB
ATK2["Attaccante crea frame con 2 tag 802.1Q"]
T1["Tag esterno: VLAN 1 - VLAN nativa dello switch"]
T2["Tag interno nascosto: VLAN 20 - target"]
SW_B["Switch di accesso rimuove tag esterno"]
SW_C["Switch successivo legge tag interno"]
RESULT2["Frame arriva in VLAN 20 - target"]
ATK2 --> T1
T1 -.->|Pacchetto| SW_B
T2 -.->|nascosto nel payload| SW_B
SW_B -->|rimuove tag VLAN 1| SW_C
SW_C -->|legge tag VLAN 20| RESULT2
end
ATK --> SPOOFING
ATK --> DOUBLETAG
style ATK fill:rgb(127, 29, 29, 0.2),stroke:#f87171
style RESULT1 fill:rgb(180, 83, 9, 0.2),stroke:#fbbf24
style RESULT2 fill:rgb(180, 83, 9, 0.2),stroke:#fbbf24
Lettura diagramma: Due percorsi di attacco dal nodo "Attaccante in VLAN 10". Switch Spoofing (sinistra): l'attaccante invia DTP frames che convincono lo switch a negoziare un trunk, ottenendo accesso a tutte le VLAN. Double Tagging (destra): il frame ha due tag 802.1Q sovrapposti - il primo (VLAN nativa) viene rimosso dal primo switch, il secondo (VLAN target) porta il traffico a destinazione.
Switch Spoofing (DTP)
Lo switch Cisco per default prova a negoziare automaticamente se una porta deve diventare trunk (DTP - Dynamic Trunking Protocol). Un attaccante che invia DTP frames puo' far credere allo switch di essere un altro switch legittimo, facendosi aprire un trunk e ricevendo traffico di tutte le VLAN.
Double Tagging
L'attaccante costruisce un frame con due tag 802.1Q sovrapposti. Il tag esterno usa la VLAN nativa (di default VLAN 1 - untagged). Quando il frame arriva allo switch di accesso, questo rimuove il primo tag (VLAN nativa) e manda il frame verso il trunk. Il secondo switch vede il secondo tag (VLAN target) e consegna il frame nella VLAN protetta. L'attacco e' unidirezionale: non riceve risposte dalla VLAN target.
Difese contro VLAN Hopping:
# 1. Disabilitare DTP su tutte le porte access (Cisco IOS)
interface fastethernet 0/1
switchport mode access # forza modalita' access
switchport nonegotiate # disabilita DTP completamente
switchport access vlan 10
# 2. Cambiare la VLAN nativa del trunk in una VLAN non usata
interface fastethernet 0/24
switchport mode trunk
switchport trunk native vlan 999 # 999 = VLAN non assegnata a nessuno
# 3. Non usare mai VLAN 1 per traffico reale
# 4. Disabilitare porte switch non usate e metterle in VLAN isolata
interface range fastethernet 0/15-24
switchport mode access
switchport access vlan 999
shutdownScenario Reale Blue Team#
VLAN come difesa contro ARP poisoning. Un attaccante nella VLAN Guest non puo' fare ARP poisoning verso la VLAN Server, perche' i due segmenti operano in broadcast domain separati: il traffico ARP di VLAN 30 (Guest) non raggiunge mai VLAN 20 (Server).
# Verifica segmentazione VLAN su switch Cisco
show vlan brief # lista tutte le VLAN e le porte assegnate
show interfaces trunk # porte in modalita' trunk attive
show interfaces fastethernet 0/1 switchport # dettaglio porta singola
# Verifica che DTP sia disabilitato
show dtp interface fastethernet 0/1
# Verifica VLAN nativa sui trunk
show interfaces trunk | grep native
# Da Linux: verifica broadcast domain con arping
# (se arping raggiunge host in altra VLAN → segmentazione fallita)
arping -I eth0 192.168.20.1
Correlazione con ARP poisoning lab:
In un laboratorio con arpspoof, l'attaccante in VLAN 30 (Guest) manda arpspoof -i eth0 -t 192.168.20.5 192.168.20.1 ma i pacchetti ARP non raggiungono VLAN 20. Il broadcast ARP rimane confinato nel proprio broadcast domain. Questo e' il motivo per cui la VLAN Guest del Wi-Fi di casa e' su subnet separata: anche se qualcuno e' sulla tua rete Wi-Fi ospiti, non puo' fare ARP poisoning verso i tuoi PC nella LAN principale.
In un ambiente cloud AWS, le VLAN corrispondono alle subnet VPC: public subnet (DMZ - web server), private subnet (app servers), database subnet (RDS). Il Security Group e il Network ACL fanno il lavoro del trunk port e delle regole inter-VLAN. La microsegmentazione Zero Trust e' VLAN portata all'estremo: ogni workload ha le sue policy, indipendentemente dalla subnet.
In Docker Compose, le networks sono VLAN software: ogni network isola i container che vi appartengono, e i container in reti diverse non si parlano per default. docker network ls mostra i broadcast domain virtuali. Un container frontend in network web non raggiunge il container db in network backend senza un link esplicito nella configurazione, esattamente come due VLAN che non si parlano senza inter-VLAN routing.
Collegato a#
- arp - ARP poisoning bloccato dalla segmentazione VLAN (broadcast domain separati)
- aaa-radius - 802.1X + Dynamic VLAN Assignment: RADIUS assegna la VLAN corretta post-autenticazione
- zero-trust - Microsegmentazione come evoluzione delle VLAN verso policy per singolo workload
- docker-network - Docker networks come VLAN software in ambiente container


