Reti private virtuali (VPN) con tecnologia IPsec A.A. 2005/2006 Walter Cerroni Reti private e reti private virtuali Aziende e/o enti di dimensioni medio/grandi in genere hanno necessità di interconnettere in maniera sicura sedi sparse sul territorio e distanti tra loro Soluzione tradizionale: utilizzo di linee dedicate da affittare direttamente presso gli operatori (reti private) soluzione costosa Alternativa più economica: utilizzo di connessioni sicure attraverso reti pubbliche (reti private virtuali - VPN) flussi di pacchetti autenticati e con contenuto informativo criptato attraverso reti tradizionali diverse tecnologie disponibili (ATM, MPLS, IPsec, tunnelling) protocolli di tunnelling livello 2: PPTP, L2TP livello 3: IPsec 2 1
L architettura IPsec (RFC 2401) Realizza VPN a livello network attraverso l uso di tre protocolli IKE (Internet Key Exchange): serve per autenticare l interlocutore e per negoziare ed aggiornare gli algoritmi e le chiavi di crittografia/autenticazione da utilizzare nei dati da trasmettere in VPN (porta UDP sorgente e destinazione = 500) AH (Authentication Header) (campo protocol = 51): fornisce l autenticazione dei pacchetti trasmessi in VPN garantendo integrità ed autenticità dei dati identità del mittente ESP (Encapsulating Security Payload) (campo protocol = 50): oltre a fornire autenticazione come in AH, garantisce anche la riservatezza delle informazioni tramite crittografia modalità trasporto o tunnel 3 IPsec: ESP in modalità trasporto autenticazione terminali VPN DATI IP IKE TRAILER DATI cifratura HEADER aggiorna header IP?????????? HEADER autenticazione AUTH?????????? HEADER IP 4 2
IPsec: ESP in modalità tunnel autenticazione terminali VPN DATI IP IKE TRAILER???? cifratura?? HEADER?????? HEADER genera header IP autenticazione AUTH???????????? HEADER IP 5 Reti private IP LEFTSUBNET RIGHTSUBNET linea dedicata LAN 1 LEFT RIGHT LAN 2 6 3
Reti private virtuali IPsec ESP in modalità trasporto LAN 1 LEFT RIGHT LAN 2 AUTH?????????? HEADER IP ESP in modalità tunnel LAN 1 LEFT RIGHT LAN 2 AUTH???????????? HEADER IP 7 Tipologie di connessione a VPN IPsec NET-TO-NET LAN 1 LAN 2 LEFT RIGHT IP statici HOST-TO-NET LEFT RIGHT DATI IP LAN 2 IP statici 8 4
Tipologie di connessione a VPN IPsec HOST-TO-HOST LEFT IP statici RIGHT ROADWARRIOR LEFT RIGHT DATI IP LAN 2 IP dinamico IP statico 9 Problemi nell attraversamento di NAT La negoziazione IKE potrebbe non andare a buon fine, perché i pacchetti inviati da LEFT arrivano a RIGHT con un indirizzo IP diverso da quello atteso Il NAPT potrebbe cambiare la porta UDP sorgente di LEFT, mentre RIGHT potrebbe rifiutare traffico IKE da porte UDP 500 La scadenza della tabella NAT potrebbe avvenire durante un periodo di silenzio, interrompendo così la connessione sicura Il NAPT non riesce a distinguere pacchetti ESP appartenenti a connessioni IPsec provenienti da LEFT diversi (ESP non usa porte) Nella modalità trasporto, la modifica di un indirizzo IP richiederebbe di aggiornare il checksum TCP o UDP (che fa uso di pseudo-header IP), ma questa è cifrata all interno del payload IP LEFT NAT RIGHT LAN 10 5
Soluzione: IPsec con NAT-Traversal Soluzione da applicare ai peer IPsec non si ha controllo sul NAT I problemi dovuti alla presenza di NAT vengono risolti con: verifica della capacità dei peer di eseguire NAT-Traversal verifica della presenza di NAT tra LEFT e RIGHT (NAT-Discovery) notifica esplicita degli indirizzi IP originali possibilità per IKE di utilizzare porte UDP diverse dalla 500 invio periodico di pacchetti NAT-Keepalive per mantenere attive le connessioni sicure nelle tabelle NAT incapsulamento di ESP in UDP, utilizzando le stesse porte di IKE Il NAPT riesce così a distinguere connessioni diverse AUTH???????????? HEADER UDP IP 11 IPsec su Linux: Openswan Software open source (www.openswan.org) deriva dal progetto originario FreeS/Wan contiene patch per il NAT-Traversal e per l autenticazione tramite certificati (interoperabilità con client Windows) Costituito da due elementi principali KLIPS implementa i protocolli ESP ed AH a livello di kernel è necessario per i kernel 2.2 e 2.4 il kernel 2.6 implementa già funzionalià IPsec PLUTO demone che implementa il protocollo IKE 12 6
Autenticazione a chiave pubblica (RSA) Occorre creare una coppia di chiavi RSA e memorizzarla nel file /etc/ipsec.secrets ipsec newhostkey bits <n_bit> output /etc/ipsec.secrets <n_bit> indica la dimensione della chiave in numero di bit (deve essere maggiore di 512) Nel file /etc/ipsec.conf andranno inserite le chiavi pubbliche dei due terminali VPN, visualizzabili tramite ipsec showhostkey left ipsec showhostkey right sul terminale LEFT sul terminale RIGHT 13 Configurazione Openswan File /etc/ipsec.conf config setup klipsdebug=none plutodebug=all configurazione generale # Add connections here conn net-to-net mantenere l indentazione!!! configurazione delle singole connessioni conn host-to-net 14 7
Connessione Openswan NET-TO-NET File /etc/ipsec.conf (stesso file su entrambi i terminali VPN) conn net-to-net left=137.204.107.60 leftsubnet=10.1.0.0/16 leftnexthop=137.204.107.254 right=137.204.57.77 rightsubnet=10.2.0.0/16 rightnexthop=137.204.57.254 auto=add authby=rsasig leftrsasigkey=0saqpll7oz rightrsasigkey=0saqnbvjo2 nome della connessione tra due sottoreti private parametri dei due terminali LEFT e RIGHT e relative sottoreti private modalità di attivazione della connessione modalità di autenticazione della connessione e relative chiavi 15 Connessione Openswan HOST-TO-NET File /etc/ipsec.conf (stesso file su entrambi i terminali VPN) conn host-to-net left=137.204.107.60 leftnexthop=137.204.107.254 right=137.204.57.77 rightsubnet=10.2.0.0/16 rightnexthop=137.204.57.254 auto=add authby=rsasig leftrsasigkey=0saqpll7oz rightrsasigkey=0saqnbvjo2 nome della connessione tra un host e una sottorete privata parametri dei due terminali LEFT (host singolo con IP statico) e RIGHT (sottorete privata) 16 8
Connessione Openswan ROADWARRIOR conn roadwarrior left=137.204.107.60 leftsubnet=10.1.0.0/16 leftnexthop=137.204.107.254 right=%any File /etc/ipsec.conf del terminale LEFT con IP statico e sottorete privata conn roadwarrior left=%any right=137.204.107.60 rightsubnet=10.1.0.0/16 rightnexthop=137.204.107.254 File /etc/ipsec.conf del terminale mobile RIGHT con IP dinamico 17 NAT-Traversal con Openswan (NET-TO-NET) File /etc/ipsec.conf sul terminale LEFT (interno al NAT) config setup nat_traversal=yes conn net-to-net left=192.168.50.3 leftsubnet=10.1.0.0/16 leftnexthop=192.168.50.254 leftid=@left-peer right=137.204.57.77 rightsubnet=10.2.0.0/16 rightnexthop=137.204.57.254 rightid=@right-peer abilitazione del NAT-Traversal nella configurazione generale identificativi dei due peer da usare in fase di negoziazione IKE al posto degli indirizzi IP 18 9
NAT-Traversal con Openswan (NET-TO-NET) File /etc/ipsec.conf sul terminale RIGHT (esterno al NAT) config setup nat_traversal=yes conn net-to-net left=%any leftsubnet=10.1.0.0/16 leftnexthop=192.168.50.254 leftid=@left-peer right=137.204.57.77 rightsubnet=10.2.0.0/16 rightnexthop=137.204.57.254 rightid=@right-peer abilitazione del NAT-Traversal nella configurazione generale può essere sostituito con l indirizzo pubblico del NAT, se lo si conosce identificativi dei due peer da usare in fase di negoziazione IKE al posto degli indirizzi IP 19 NAT-Traversal con Openswan (HOST-TO-NET) File /etc/ipsec.conf sul terminale LEFT (interno al NAT) config setup nat_traversal=yes si omette leftsubnet conn net-to-net left=192.168.50.3 leftnexthop=192.168.50.254 leftid=@left-peer right=137.204.57.77 rightsubnet=10.2.0.0/16 rightnexthop=137.204.57.254 rightid=@right-peer 20 10
NAT-Traversal con Openswan (HOST-TO-NET) File /etc/ipsec.conf sul terminale RIGHT (esterno al NAT) config setup nat_traversal=yes conn net-to-net left=%any leftsubnetwithin=192.168.50.0/24 leftnexthop=192.168.50.254 leftid=@left-peer right=137.204.57.77 rightsubnet=10.2.0.0/16 rightnexthop=137.204.57.254 rightid=@right-peer occorre specificare la sottorete privata a cui appartiene LEFT, oppure 0.0.0.0/0 per accettare qualsiasi rete 21 Apertura di un tunnel IPsec Attivazione moduli e demone IPsec /etc/init.d/ipsec start Apertura di una connessione specificata in /etc/ipsec.conf ipsec auto up <nome_connessione> Chiusura di una connessione specificata in /etc/ipsec.conf ipsec auto down <nome_connessione> Verifica dello stato delle connessioni IPsec ipsec auto status 22 11
Esercitazioni in laboratorio 1. Realizzare una VPN IPsec tra due sottoreti IP e verificarne la connettività tramite ping. Verificare tramite sniffer che il traffico tra i due peer è cifrato 10.0.0.x/30 10.0.0.y/30 192.168.8.0/24 2. Realizzare una VPN IPsec tra un host e una rete IP attraverso un router e verificare il comportamento di traceroute rispetto al caso di assenza di VPN 3. Realizzare una VPN IPsec tra un host e una rete IP attraverso un NAT e verificare tramite sniffer cosa accade 10.0.0.x/30 10.0.0.y/30 NAT 192.168.8.0/24 23 12