In questo lab due reti locali, separate tra loro e ciascuna protetta da un firewall, verranno messe in comunicazione attraverso una vpn IPSec. Verificheremo, tramite uno sniffer posto sul link intermedio, che il traffico tra le due lan viene cifrato e quindi è incomprensibile, al contrario di quello diretto verso altri host come Pc3. L’occasione è anche buona per verificare l’interoperabilità del protocollo IPSec tra dispositivi di marche differenti.
IPSec è lo standard “de facto” utilizzato per le vpn. Garantisce riservatezza (i dati sono cifrati in modo serio) integrità (i dati non possono subire variazioni durante il trasporto) ed autenticazione (gli end point vengono autenticati). Utilizza un meccanismo a chiave asimmetrica per negoziare una chiave simmetrica, con cui i dati in transito vengono effettivamente cifrati. La chiave asimmetrica garantisce la possibilità di creare una connessione cifrata su un canale insicuro, e consentire quindi il successivo scambio di una chiave simmetrica. Quest’ultima è più efficace per una cifratura continua, e la chiave viene rinegoziata ogni tot secondi di funzionamento (o tot dati transitati nel tunnel); in tal modo si evita la possibilità che qualcuno, analizzando il traffico, cerchi di calcolarne la chiave in tempo utile.
I firewall utilizzati per il lab sono apparati di recupero ma ancora validissimi soprattutto a scopo didattico. Il primo è un glorioso Cisco Pix 515E, montaggio a rack, con 3 interfacce fisiche. L’altro invece consta di una vecchia scheda madre micro ATX e con doppia porta ethernet, sulla quale è stato installato m0n0wall, firewall open source basato su FreeBSD. Della piccola motherboard utilizzata non era possibile farci molto: la cpu a 400MHz ne limitava drasticamente le possibilità di utilizzo con sistemi operativi tradizionali. Invece per m0n0wall si è rivelata eccellente, funziona bene e gira senza rallentamenti.
Innanzi tutto gli apparati vanno configurati per ottenere un funzionamento base, secondo lo schema allegato; quindi si impostano gli ip delle interfacce, il nat, la default-route. Per la configurazione sul Pix si può agire da linea di comando oppure attraverso SDM, applicazione grafica in Java resa disponibile dallo stesso firewall tramite web browser; purtroppo questa non è esente da difetti, si blocca spesso e costringe a riavviare il browser se non addirittura il pc, e poi richiede una versione specifica del sw Java; tuttavia per la creazione delle vpn c’è un pratico wizard che ne semplifica notevolmente la configurazione a chi non ha sufficiente dimestichezza con la cli. L’uso della linea di comando è comunque più pratico, almeno per le cose di base.
Per m0n0wall invece l’interfaccia web è decisamente efficace e non utilizza Java, oltre funzionare correttamente. A questo link: http://doc.m0n0.ch/handbook/ipsec-tunnels.html si trova una guida online per la configurazione di vpn su m0n0wall.
Dopo aver verificato che le impostazioni di base sono valide, ed aver anche configurato le interfacce del router Cisco 1720, si passa alla vpn. Vanno scelti i parametri che i peer utilizzeranno per la negoziazione del tunnel e che saranno identici per entrambi i firewall; riepiloghiamoli qui di seguito:
Peer address: 10.0.0.1 (lato m0n0wall) – 10.0.0.2 (lato Pix)
Lan remota: 192.168.1.0/24 (lato m0n0wall) – 172.16.1.0/24 (lato Pix)
PSK: abcde
Modalità: Tunnel – ESP
IKE policy: 3DES – MD5 – Gruppo 2
Transform set: 3DES – MD5
Ovviamente si tratta di un esercizio ed i parametri utilizzati sono solo di esempio: nella pratica la cifratura maggiore avviene con AES e l’algoritmo di hashing SHA è migliore di MD5. Inoltre utilizzare i parametri più “spinti” significa richiedere maggiore potenza di calcolo alle cpu e quindi complessivamente abbassare le prestazioni dei firewall. La chiave precondivisa (psk) serve, insieme all’indirizzo IP, per l’autenticazione dei peer (e non per la cifratura).
Una volta impostati i dati, per instaurare il tunnel tra i firewall è necessario creare del traffico tra una lan e l’altra: basta un “ping –t” da Pc1 a Pc2 ed i firewall negoziano automaticamente la vpn. Se la configurazione è corretta, oltre ad avere risposta al ping, sul menu di configurazione del Pix appare l’indicazione “Ipsec Tunnels 1” mentre sulla web interface di m0n0wall, nella sezione “Diagnostics -> IPSec” sono visibili le SA attive, una per ciascun flusso tra i firewall.
Ora che la vpn è in piedi colleghiamo il pc con Wireshark a bordo su una porta dello switch, che avremo opportunamente settato per il monitoring delle porte su cui sono attestate le interfacce wan dei firewall, ed avviamo lo sniffer. Come si può verificare facilmente esiste un traffico continuo di pacchetti ESP tra un firewall e l’altro: è il traffico del nostro ping –t che viene cifrato e incapsulato nel protocollo ESP, ed ovviamente risulta incomprensibile. Se analizziamo un pacchetto ESP noteremo che l’unica parte in chiaro è l’header, che contiene ip sorgente ed ip destinazione; tutto il resto è cifrato.
Se ora dal Pc1 apriamo una sessione Telnet verso Pc3 vedremo, sullo sniffer, i pacchetti transitare in chiaro: infatti questo traffico non è tra le due lan dei firewall e conseguentemente non viene cifrato. Analizzando uno di questi pacchetti possiamo chiaramente vedere il contenuto del payload e riconoscere la configurazione di un router; infatti Pc3 in realtà è un altro Cisco 1720 e il comando inviato via Telnet era uno show running-config (nel dettaglio si nota la password per entrare via vty).
Anche per questa volta è tutto. Alla prossima!
Andrea.