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