Reti private virtuali (VPN) con tecnologia IPsec
Transcript
Reti private virtuali (VPN) con tecnologia IPsec
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 DATI autenticazione terminali VPN TRAILER DATI IP HEADER IKE aggiorna header IP cifratura ???? ?????? HEADER autenticazione AUTH ???? ?????? HEADER IP 4 2 IPsec: ESP in modalità tunnel IP DATI IP HEADER ???? ?????? ?? HEADER TRAILER genera header IP DATI autenticazione terminali VPN IKE cifratura autenticazione AUTH ???? ?????? ?? HEADER IP 5 Reti private IP RIGHTSUBNET LEFTSUBNET INTERNET DATI IP LAN 1 DATI LEFT IP linea dedicata DATI RIGHT IP LAN 2 6 3 Reti private virtuali IPsec ESP in modalità trasporto DATI INTERNET IP LAN 1 DATI LEFT DATI IP AUTH ???? ?????? IP LAN 2 RIGHT IP HEADER ESP in modalità tunnel DATI INTERNET IP DATI LAN 1 DATI IP LEFT AUTH ???? ?????? ?? IP LAN 2 RIGHT IP HEADER 7 Tipologie di connessione a VPN IPsec NET-TO-NET DATI INTERNET IP DATI LAN 1 LEFT IP LAN 2 RIGHT IP statici HOST-TO-NET INTERNET DATI LEFT RIGHT IP LAN 2 IP statici 8 4 Tipologie di connessione a VPN IPsec HOST-TO-HOST INTERNET LEFT RIGHT IP statici ROADWARRIOR INTERNET DATI LEFT IP dinamico RIGHT IP LAN 2 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 INTERNET LEFT LAN NAT RIGHT 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 nome della connessione tra due sottoreti private left=137.204.107.60 leftsubnet=10.1.0.0/16 leftnexthop=137.204.107.254 right=137.204.57.77 parametri dei due terminali LEFT e RIGHT e relative sottoreti private rightsubnet=10.2.0.0/16 rightnexthop=137.204.57.254 auto=add authby=rsasig leftrsasigkey=0sAQPLL7oZ... rightrsasigkey=0sAQNbVjO2... ... 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 nome della connessione tra un host e una sottorete privata 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 parametri dei due terminali LEFT (host singolo con IP statico) e RIGHT (sottorete privata) auto=add authby=rsasig leftrsasigkey=0sAQPLL7oZ... rightrsasigkey=0sAQNbVjO2... ... 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 File /etc/ipsec.conf del terminale mobile RIGHT con IP dinamico rightsubnet=10.1.0.0/16 rightnexthop=137.204.107.254 ... 17 NAT-Traversal con Openswan (NET-TO-NET) File /etc/ipsec.conf sul terminale LEFT (interno al NAT) config setup ... nat_traversal=yes abilitazione del NAT-Traversal nella configurazione generale ... 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 ... 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 abilitazione del NAT-Traversal nella configurazione generale ... conn net-to-net left=%any leftsubnet=10.1.0.0/16 può essere sostituito con l’indirizzo pubblico del NAT, se lo si conosce 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 ... 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 occorre specificare la sottorete privata a cui appartiene LEFT, oppure 0.0.0.0/0 per accettare qualsiasi rete 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 ... 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