16
VPN con IPSec e OpenVpn Tecnologie e Servizi di Rete Raffaele Sommese 18/12/2016

VPN con IPSec e OpenVpn - netgroup.polito.itnetgroup.polito.it/images/Didattica/CNTS-TSR_slide/IPSec_OpenVPN... · IPsec è uno standard consolidato per reti a ... livello tre dello

Embed Size (px)

Citation preview

Page 1: VPN con IPSec e OpenVpn - netgroup.polito.itnetgroup.polito.it/images/Didattica/CNTS-TSR_slide/IPSec_OpenVPN... · IPsec è uno standard consolidato per reti a ... livello tre dello

VPN con IPSec e OpenVpn Tecnologie e Servizi di Rete

Raffaele Sommese 18/12/2016

Page 2: VPN con IPSec e OpenVpn - netgroup.polito.itnetgroup.polito.it/images/Didattica/CNTS-TSR_slide/IPSec_OpenVPN... · IPsec è uno standard consolidato per reti a ... livello tre dello

VPN con IPSec e OpenVpn

2 Sommario Introduzione ...................................................................................................................................................... 3

Lo Standard IPSEC .......................................................................................................................................... 3

Encapsulating Security Payload ................................................................................................................. 4

Il Layer L2TP ............................................................................................................................................... 4

Il Software OpenVPN ..................................................................................................................................... 5

Configurazioni Tipiche ................................................................................................................................... 5

Site2Site ..................................................................................................................................................... 5

RoadWarrior .............................................................................................................................................. 6

Infrastruttura Base ............................................................................................................................................ 7

Scenario Implementato ................................................................................................................................. 8

Scenario Implementativo IPSEC ........................................................................................................................ 8

Installazione e Configurazione....................................................................................................................... 8

Problema del NAT-T ..................................................................................................................................... 10

Client Dockerized ......................................................................................................................................... 11

Analisi del Traffico ....................................................................................................................................... 11

Scenario Implementativo OpenVPN ................................................................................................................ 13

Installazione e Configurazione..................................................................................................................... 13

Generazione dei certificati ...................................................................................................................... 14

Differenze tra modalità Bridging e Routing ................................................................................................. 15

Analisi del Traffico ....................................................................................................................................... 15

Instaurazione di una connessione OpenVpn ............................................................................................... 16

Bibliografia ....................................................................................................................................................... 16

Page 3: VPN con IPSec e OpenVpn - netgroup.polito.itnetgroup.polito.it/images/Didattica/CNTS-TSR_slide/IPSec_OpenVPN... · IPsec è uno standard consolidato per reti a ... livello tre dello

VPN con IPSec e OpenVpn

3 Introduzione

Lo Standard IPSEC IPsec è uno standard consolidato per reti a pacchetto, il cui obiettivo è di rendere sicure le connessioni a livello tre dello stack ISO/OSI. (Wikipedia(it))

Lo standard opera dunque a livello di rete rendendo automaticamente sicure tutte le informazioni di livello superiore.

IPsec garantisce dei meccanismi di controllo dell'integrità dei pacchetti e un meccanismo di autenticazione.

Lo scopo principale è quello di rendere sicura la comunicazione end-to-end o site-to-site tra due host/sedi.

Possiamo schematizzare IPSec come una suite di protocolli divisi in due macrocategorie:

• Protocolli per lo scambio delle chiavi di cifratura e autenticazione. • Protocolli che forniscono l'autenticazione e/o la confidenzialità del flusso di dati.

Per lo scambio chiavi esiste, attualmente,solo l'Internet Key Exchange (IKE).

IKE è un protocollo di livello applicativo (Porta 500/udp) il cui scopo principale è stabilire una chiave di sessione condivisa corrispondente alla comunicazione da instaurare tra le due entità.

Le chiavi possono essere di tipo simmetriche e condivise (Pre-Shared Key) oppure possiamo implementare un infrastruttura a chiavi pubbliche di tipo asimmetrico con l'uso di un autenticazione a certificati.

Esistono, invece, due protocolli per l'autenticazione e la confidenzialità dei dati:

• AH fornisce autenticazione e integrità del messaggio, ed è il protocollo IP 51. • ESP fornisce autenticazione, confidenzialità e integrità del messaggio, ed è il protocollo IP50.

Nel nostro esempio analizzeremo solo l'implementazione con ESP.

Esistono due categorie di funzionamento:

• Transport mode (Utilizzato in connessioni di tipo end-to-end,Cifra solo il payload dei pacchetti) • Tunnel mode (Utilizzato in connessioni di tipo gateway-to-gateway,Cifra anche l'header dei

pacchetti)

Esiste anche una soluzione mista gateway-host detta RoadWarrior.

Page 4: VPN con IPSec e OpenVpn - netgroup.polito.itnetgroup.polito.it/images/Didattica/CNTS-TSR_slide/IPSec_OpenVPN... · IPsec è uno standard consolidato per reti a ... livello tre dello

VPN con IPSec e OpenVpn

4 Encapsulating Security Payload

Figura 1 ESP Packet.

In Figura 1 è riportata la struttura di un pacchetto ESP (Stallings, 2005).

Security Parameters Index (SPI)

E' un intero a 32 bit generato durante la fase di Security Association.

Sequence Number

Numero crescente,usato per la prevenzione di attacchi di tipo replay.

Padding

Campo di riempimento. Alcuni algoritmi possono lavorare solo (o lavorano più velocemente) su blocchi di dati a dimensione fissa.

Pad Leght

Rappresenta in ottetti la dimensione dei pad aggiunti

Next Header

Rappresenta il protocollo di livello trasporto del Payload contenuto.

Authentication Data Dati per l'autenticazione del pacchetto.

A differenza di AH che antepone solo un header, ESP racchiude il pacchetto cifrato in un nuovo pacchetto IP.

Il Layer L2TP Il protocollo L2TP permette di creare un tunnel VPN a livello 2 operando su una connessione UDP su porta 1701. L2TP non fornisce di per se alcun meccanismo di sicurezza,viene dunque spesso usato in accoppiata con IPSEC che fornisce il layer di autenticazione e cifratura,IPSEC infatti provvede a creare la connessione sicura e successivamente L2TP crea un tunnel sfruttando la connessione sottostante. All'interno del tunnel

Page 5: VPN con IPSec e OpenVpn - netgroup.polito.itnetgroup.polito.it/images/Didattica/CNTS-TSR_slide/IPSec_OpenVPN... · IPsec è uno standard consolidato per reti a ... livello tre dello

VPN con IPSec e OpenVpn

5 "layer 2" possono essere instradati protocolli di tipo PPP per stabilire una connessione punto-punto tra host, in alternativa è possibile realizzare un bridge tra le interfacce di rete per unire il tunnel alla rete locale.

I protocolli PPP possiedono un ulteriore livello di autenticazione attraverso PAP,CHAP o MS-CHAP.

Il Software OpenVPN OpenVPN1 è un software robusto e altamente flessibile per reti private virtuali. (ArchWiki, 2016) Supporta l'uso di TLS, configurazioni di tipo bridge e può essere eseguito sia su protocollo TCP sia su UDP, tuttavia l'approccio TCP è sconsigliato, le motivazioni sono riportate in (Titz, 2001).

OpenVPN è strettamente legato alla libreria OpenSSL2 utilizzata per l'autenticazione e la confidenzialità attraverso cifratura a chiave condivisa o a chiave pubblica,per via di questo stretto legame è risultato essere vulnerabile ad HeartBleed.

OpenVPN adopera dei virtual network device del Kernel Linux, TUN (Network Tunnel) simula un device di livello 3 mentre TAP(Network Tap) simula un device a livello 2. Ulteriori informazioni riguardanti TUN e TAP possono essere ritrovate in (Krasnyansky, 2000)

Configurazioni Tipiche

Site2Site Questo è un caso tipico in realtà aziendali. Riferiamoci al caso in cui un'azienda voglia unificare le reti di due sedi distanti.

Figura 2 Site2Site Scenario.

I due siti sono interconnessi tra di loro attraverso un canale virtuale della VPN.

Sulla VPN può essere fatto passare sia traffico di livello 3 utilizzando IPSEC puro o OPENVPN in configurazione Routing o in alternativa traffico di livello 2 con L2TP over IPSEC o OPENVPN in configurazione Bridging.

In questo tipo di configurazione spesso è adottato un approccio di autenticazione di tipo PreSharedKey.

1 https://openvpn.net/ 2 https://www.openssl.org/

Page 6: VPN con IPSec e OpenVpn - netgroup.polito.itnetgroup.polito.it/images/Didattica/CNTS-TSR_slide/IPSec_OpenVPN... · IPsec è uno standard consolidato per reti a ... livello tre dello

VPN con IPSec e OpenVpn

6 RoadWarrior

Figura 3 RoadWarrior Scenario.

In una configurazione con utenti RoadWarrior i dipendenti devono accedere alla rete locale aziendale spesso da postazioni mobili o in generale dall'esterno della rete della società.

In questo caso oltre a fornire la connessione VPN dobbiamo anche garantire che la subnet aziendale non vada a sovrapporsi alla subnet della rete locale dell'utente, per risolvere questo problema sono spesso adottate soluzioni di Singolo (o Double) NAT.

Per questa tipologia di connessione l'approccio di autenticazione più adottato è quello a certificati, poiché è possibile generare un certificato per ogni utente(e se necessario revocarlo) e registrarne la sessione associata per rilevare eventuali violazioni e/o comportamenti anomali.

Nel caso di un approccio L2TP over IPSEC l'utente può utilizzare anche le proprie credenziali di autenticazione aziendali (Es. Quelle associate ad un server Kerberos) per la connessione.

Page 7: VPN con IPSec e OpenVpn - netgroup.polito.itnetgroup.polito.it/images/Didattica/CNTS-TSR_slide/IPSec_OpenVPN... · IPsec è uno standard consolidato per reti a ... livello tre dello

VPN con IPSec e OpenVpn

7 Infrastruttura Base L'Infrastruttura Base è costituita da una (o più) Virtual Machine o macchine fisiche con sistema operativo Gnu/Linux. L'OS base suggerito per i Container è CoreOS3, una distribuzione Gnu\Linux specializzata per la gestione dei Container con Docker.

L'approccio di CoreOS è quello di fornire un alto livello di astrazione pur mantenendo un basso overhead sulle performance. CoreOS può essere fatto girare su qualsiasi piattaforma Cloud, su OpenStack, su Vagrant o su hardware dedicato.

Docker è un gestore di container che permette l'automatizzazione del deployment delle risorse utilizzando la virtualizzazione attraverso le funzionalità previste dal kernel Linux come cgroups e namespaces. (Wikipedia(en))

All'indirizzo http://bit.ly/2hTjB6o è disponibile un immagine ova per VMware (da importare rinominandola in due modi differenti per avviare da una parte i client e dall'altra i server).

Ai fini di questa guida è utile ricavare gli indirizzi ip del server e del client relativi all'interfaccia eth0 (Interfaccia Host-Only di VMware) attraverso il comando

ifconfig eth0

Inoltre è suggerito collegarsi alle due virtual machine (agli indirizzi di eth0) attraverso un client SSH (Es Putty) in modo da poter utilizzare il copia e incolla, non avendo la virtual machine distribuita ne le estensioni di VMware (essendo un interfaccia cli) ne il layout italiano della tastiera (CoreOS viene distribuito solo con layout americano). Le Credenziali di login sono user core e password core

Figura 4 SSH e VMware

3 https://coreos.com/

Page 8: VPN con IPSec e OpenVpn - netgroup.polito.itnetgroup.polito.it/images/Didattica/CNTS-TSR_slide/IPSec_OpenVPN... · IPsec è uno standard consolidato per reti a ... livello tre dello

VPN con IPSec e OpenVpn

8

Scenario Implementato Nel nostro caso tratteremo solo lo scenario RoadWarrior con re-indirizzamento del traffico internet dell'utente . L'approccio Site2Site è stato tralasciato in quanto Docker fornisce a tutti i container la stessa interfaccia di rete e dunque era triviale interconnetterle via VPN. A titolo di esempio si riporta comunque che nel caso di IPSec installato sul Default Gateway, è necessario solamente specificare4 LeftSubnet e RightSubnet ambo i lati della rete con le rispettive classi di IP (in questo caso è possibile evitare il layer L2TP, assicurandosi che ambo i device supportino IPSEC nativamente). Nel caso OpenVPN è possibile utilizzare le direttive push "route rete sottorete gateway"5 ambo i lati.

Scenario Implementativo IPSEC

Installazione e Configurazione Per creare una semplice installazione di IPSEC possiamo prelevare il container con il seguente comando:

docker pull r4ffy/ipsec

Alternativamente è possibile scaricare i sorgenti dell'immagine del container dal GitHub e compilarli:

https://github.com/raffysommy/IPSec-Docker

Ed eseguire il container:

docker run -i --net host -v /lib/modules/:/lib/modules/ --privileged -e PUBLICIP=0.0.0.0 -t r4ffy/ipsec

Ove 0.0.0.0 va sostituito con l'indirizzo dell'interfaccia eth0

In nostro server IPSEC è partito.

Andiamo ad analizzare il comando di run.

L'opzione -e PUBLICIP indica l'indirizzo ip associato all'interfaccia di ipsec (nel nostro caso quello di eth0)

L'opzione --net host specifica che vogliamo adoperare la modalità di rete non "container-based",infatti docker by design fornisce anche uno stack di connettività "containerized" e "nat-ed" che non è adatto ai nostri scopi.

L'opzione -v ci permette di montare la cartella host /lib/modules contenente i moduli del kernel all'interno del container. (OpenSwan necessita di alcuni moduli kernel per funzionare)

L'opzione --privileged ci permette di eseguire il container in modalità privilegiata consentendo dunque l'accesso ai device e alle syscall della macchina.

Andiamo ora ad analizzare il DockerFile:

FROM ubuntu:14.04

4 Nel file Ipsec.conf 5 Nel file Server.conf

Page 9: VPN con IPSec e OpenVpn - netgroup.polito.itnetgroup.polito.it/images/Didattica/CNTS-TSR_slide/IPSec_OpenVPN... · IPsec è uno standard consolidato per reti a ... livello tre dello

VPN con IPSec e OpenVpn

9 La distribuzione base è Ubuntu 14.04

RUN DEBIAN_FRONTEND=noninteractive apt-get -y install lsof iptables ipsec-tools iproute2 openswan openssl xl2tpd wget

Andiamo ad installare alcuni pacchetti utili quali openswan (che fornisce il Layer Ipsec) e xl2tpd (Layer 2 Trasport Protocol). Utilizziamo quest'approccio a differenza del solo IPSec con certificati poiché è largamente supportato dai vari device. (Ex IPSec puro è supportato solo da Windows 7 in poi)

RUN mkdir /tmp/setup WORKDIR /tmp/setup

Con questi due comandi creiamo una directory per il setup e la impostiamo come directory attuale

ENV USERNAME vpnuser Qui ritroviamo l'username della VPN

ENV PASSWORD ch4ng3m3 Qui la password

ENV PRESHAREDKEY y0umustc4ngeme Questa invece è la PreSharedKey di IPSec,in questo caso condivisa tra tutti gli utilizzatori del servizio.

VOLUME /lib/modules Come spiegato in precedenza, ci permette di montare la cartella /lib/modules contenente i moduli del kernel.

EXPOSE 500/udp 4500/udp Porte di IPSec .Notiamo che la 1701/udp di l2tp non risulta essere accessibile dall'esterno,infatti i dati vengono incapsulati prima da IPSec e successivamente passati a l2tp.

COPY setup.sh ./ RUN chmod +x setup.sh COPY ipsec.conf /etc/ipsec.conf COPY xl2tpd.conf /etc/xl2tpd/xl2tpd.conf COPY options.xl2tpd /etc/ppp/options.xl2tpd

Copiamo i vari file di setup e configurazione,

CMD ["./setup.sh"]

ed eseguiamo lo script di setup.

Lo script di setup si occupa di impostare l'indirizzo IP del server nei file di configurazione di openswan e xl2tpd e di abilitare l'IP forwarding a livello kernel.

Si occupa anche di creare i file secrets contenenti le password e di creare l'utente locale relativo all'istanza di Ipsec (necessario per connessioni da device mobili).

Lo script infine avvia i servizi,imposta le regole di iptables per il forwarding dei pacchetti ed esegue un ping con intervallo orario come KeepAlive (Docker termina il container alla terminazione dello script).

Page 10: VPN con IPSec e OpenVpn - netgroup.polito.itnetgroup.polito.it/images/Didattica/CNTS-TSR_slide/IPSec_OpenVPN... · IPsec è uno standard consolidato per reti a ... livello tre dello

VPN con IPSec e OpenVpn

10 Problema del NAT-T Prima di creare una connessione alla nostra Vpn dobbiamo considerare il seguente problema:

Analizzando la struttura di un pacchetto ESP notiamo che presenta esternamente solo l'header IP Il NAT-PT,rompendo il principio di connettività end-to-end,altera gli header di livello trasporto e rete in contrasto con IPSec che si prefigge l'integrità del pacchetto.

Nel caso di AH verificando l'integrità dell'intero pacchetto a livello rete qualunque tipo di NAT modifica gli header e dunque l'integrità.

Nel caso di ESP,che non copre l'header IP,IPSec funziona con NAT di tipo SNAT,il quale effettua solo una traduzione degli indirizzi.

Il NAT crea problemi anche ad IKE poiché questo utilizza gli indirizzi IP Sorgente e Destinazione nella fase di HandShake.

IPSec risolve questi problemi attraverso il NAT-Trasversal. All'apertura della connessione entrambi i dispositivi controllano se entrambi supportano la funzionalità (di default è disabilitata),viene poi verificato chi tra i due host è dietro nat,e viene avviata la connessione su una coppia di porte UDP,successivamente per mantenere la connessione vengono inviati dei pacchetti di KeepAlive.

Di seguito è riportato un pacchetto ESP incapsulato.

I sistemi operativi Windows richiedono una modifica nel registro di sistema per funzionare con NAT-T descritta nel KB9261796

Si riporta di seguito una guida per la configurazione del client IPSec in Windows 77

6 https://support.microsoft.com/en-us/kb/926179 7 https://kb.iweb.com/entries/22375983-Configuring-new-VPN-L2TP-IPSec-connections-in-Windows-7

Page 11: VPN con IPSec e OpenVpn - netgroup.polito.itnetgroup.polito.it/images/Didattica/CNTS-TSR_slide/IPSec_OpenVPN... · IPsec è uno standard consolidato per reti a ... livello tre dello

VPN con IPSec e OpenVpn

11 Client Dockerized È riportato un client in versione docker per ipsec:

https://github.com/raffysommy/IPSec-Client-Docker (per i sorgenti)

Si consiglia di eseguire i due container su diverse virtual machine. Scaricandolo ed eseguendolo con: (modificando il server IP con l'indirizzo di eth0 del server IPSEC)

docker pull r4ffy/ipsecclient docker run --privileged -v /lib/modules/:/lib/modules/ -e SERVERIP=0.0.0.0 -e USERNAME=vpnuser -e PASSWORD=ch4ng3m3 -e PRESHAREDKEY=y0umustc4ngeme -i -t r4ffy/ipsecclient

./avvio.sh

Instauriamo una connessione con il server,possiamo provare la connessione lanciando un: ping 192.168.10.1 Notiamo che in questo caso non è stato necessario l'uso della rete host poiché il client funziona dietro NAT grazie al NAT-T. Per provare la connessione senza nat usiamo la rete host con: docker run --net host --privileged -v /lib/modules/:/lib/modules/ -e SERVERIP=0.0.0.0 -e USERNAME=vpnuser -e PASSWORD=ch4ng3m3 -e PRESHAREDKEY=y0umustc4ngeme -i -t r4ffy/ipsecclient

./avvio.sh

Analisi del Traffico È possibile analizzare il traffico monitorando la scheda VMNet1 di VMware.

Da queste tracce di traffico catturate da Wireshark, possiamo notare la sessione iniziale di scambio chiavi attraverso IKE e il traffico ESP scambiato successivamente.

Figura 5 Tracce di traffico di IPSEC NAT-T

In questo caso ci ritroviamo in un caso in cui il client subisce NAT e ritroviamo i dati incapsulati in un pacchetto UDP su porta sorgente-destinazione 4500.

Page 12: VPN con IPSec e OpenVpn - netgroup.polito.itnetgroup.polito.it/images/Didattica/CNTS-TSR_slide/IPSec_OpenVPN... · IPsec è uno standard consolidato per reti a ... livello tre dello

VPN con IPSec e OpenVpn

12

Figura 6 Tracce di traffico IPSEC No-NAT

Qui invece il pacchetto non subisce NAT e i dati sono marcati come IP 50 (ESP).

Page 13: VPN con IPSec e OpenVpn - netgroup.polito.itnetgroup.polito.it/images/Didattica/CNTS-TSR_slide/IPSec_OpenVPN... · IPsec è uno standard consolidato per reti a ... livello tre dello

VPN con IPSec e OpenVpn

13 Scenario Implementativo OpenVPN

Installazione e Configurazione Possiamo realizzare una semplice installazione di OpenVPN prelevando il container con:

docker pull r4ffy/openvpn

O in alternativa compilando i sorgenti del container:

https://github.com/raffysommy/DockerOpenvpn

Eseguendo il container la prima volta con la seguente sintassi avvieremo anche il meccanismo di generazione delle chiavi:

docker run --name openvpn -v ~/container --privileged -p 1194:1194/udp -d -t r4ffy/openvpn8

Mentre nelle esecuzioni successive possiamo semplicemente montare il volume con le chiavi.

docker run --volumes-from=openvpn --privileged -p 1194:1194/udp -d -t r4ffy/openvpn

In entrambi i casi possiamo leggere l'output del container attraverso il comando:

docker logs openvpn

Figura 7 Output Installazione OpenVPN

8 Per fermare e rimuovere tutti i container è possibile utilizzare il seguente comando docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q) (Rehm, 2013)

Page 14: VPN con IPSec e OpenVpn - netgroup.polito.itnetgroup.polito.it/images/Didattica/CNTS-TSR_slide/IPSec_OpenVPN... · IPsec è uno standard consolidato per reti a ... livello tre dello

VPN con IPSec e OpenVpn

14 In Figura 6 è possibile notare che il nostro setup carica un archivio compresso contenente le chiavi e la configurazione per il client su trasfer.sh.9 e ci fornisce un indirizzo da cui possiamo prelevarlo.

Per connetterci al nostro server OpenVPN possiamo usare sempre lo stesso container modificando i parametri di avvio:

docker run -i --privileged -t r4ffy/openvpn /bin/sh -c "wget -O openvpn.sh http://bit.ly/2hv3tqG; chmod +x openvpn.sh; ./openvpn.sh 0.0.0.0 https://transfer.sh/dzF7G/client1.tgz; /bin/bash"

Ove

0.0.0.0 va sostituito con l'ip del server openvpn.

https://transfer.sh/dzF7G/client1.tgz sostituito con l'indirizzo dove il server carica le chiavi ssh.

Successivamente possiamo usare:

ping 192.168.9.1

per testare l'operatività del tunnel VPN.

O in alternativa, su Linux, basta scompattare l'archivio delle chiavi ed eseguire nella stessa cartella il comando(come root):

openvpn --config client.ovpn

Mentre per Windows è possibile scaricare OpenVPN Portable10 (un implementazione Portable del software OpenVPN) ed eseguirla come Amministratore,avendo cura di scompattare il nostro archivio delle chiavi in data/config

Il Dockerfile si presenta con la usuale struttura:

FROM debian:jessie #Debian Jessie base RUN DEBIAN_FRONTEND=noninteractive apt-get -y install iptables wget openssl easy-rsa curl openvpn #pacchetti necessari ENV COUNTRY="US" ENV PROVINCE="CA" ENV CITY="SanFrancisco" ENV ORG="Fort-Funston" ENV EMAIL="mail@domain" #variabili per il setup dei certificati.

Nella fase di setup modifichiamo l'IP del server nella configurazione di default del client,successivamente controlliamo se esistono i certificati e nel caso li creiamo.

Generazione dei certificati Per generare i certificati utilizziamo un set di tool di openssl che ritroviamo nella directory easy-rsa. (OpenVPN, 2008) Andiamo ad analizzare il nostro file di setup:

9 http://trasfer.sh 10 https://sourceforge.net/projects/ovpnp/

Page 15: VPN con IPSec e OpenVpn - netgroup.polito.itnetgroup.polito.it/images/Didattica/CNTS-TSR_slide/IPSec_OpenVPN... · IPsec è uno standard consolidato per reti a ... livello tre dello

VPN con IPSec e OpenVpn

15 1. Con source ./vars richiamiamo le variabili d'ambiente di OpenSSL 2. Successivamente ripuliamo la cartella delle chiavi con ./clean-all 3. Generiamo la chiave della Certification Autority con ./build-ca --batch.

Ricordiamo che le chiavi generate attraverso questo meccanismo sono di tipo self-signed ovvero sono firmate con un certificato di CA autogenerato che ha valore solo in scenari interni.

4. Generiamo il certificato server(firmandolo con la CA) con ./build-key-server --batch server 5. Generiamo la Diffie-Hellman key con ./build-dh --batch

Il protocollo Diffie-Hellman è un metodo che permette a due terminali di generare una chiave privata condivisa,che può essere scambiata su un canale generalmente insicuro quale Internet,usando un meccanismo analogo a quello del RSA. (Terr, 2012)

6. Infine generiamo le chiavi client(firmandole con la chiave CA) ./build-key --batch client1, le comprimiamo con tar e le carichiamo con transfer.sh.

Il protocollo di trasporto scelto per OpenVPN è stato UDP. Un interessante comparazione tra le prestazioni di VPN over TCP e UDP,con paragoni sulla latenza che favoriscono lo scenario UDP,può essere ritrovata in (Experimental performance comparison between TCP vs UDP tunnel using OpenVPN, 2015).

Differenze tra modalità Bridging e Routing Il setup appena realizzato implementa una soluzione tun Routing. La differenza principale tra la modalita tap rispetto alla modalità tun è che tap crea un tunnel di livello 2.

L'utilità di un tunnel di livello 2 è quella di poter gestire traffico ARP,RARP e DHCP o protocolli come ad esempio NetBIOS. Per collegare il tunnel di livello 2 creato da OpenVPN ad una rete fisica, è possibile utilizzare le bridge-utils di linux,creando un interfaccia di bridge che comprende sia l'interfaccia di tunnel sia le varie interfacce fisiche realizzando di fatto uno switch software.

Analisi del Traffico

Figura 8 Tracce di traffico OpenVPN

Page 16: VPN con IPSec e OpenVpn - netgroup.polito.itnetgroup.polito.it/images/Didattica/CNTS-TSR_slide/IPSec_OpenVPN... · IPsec è uno standard consolidato per reti a ... livello tre dello

VPN con IPSec e OpenVpn

16 Instaurazione di una connessione OpenVpn Uno schema base dell'instaurazione di una connessione OpenVpn è il seguente:

Figura 9 OpenVPN HandShake (Tunneling protocols identification using light packet inspection, 2016)

Nella prima fase viene effettuato un Hard Reset delle connessioni e successivamente ritroviamo il TLS HandShake in cui vengono scambiati i certificati.

OpenVPN usa un unico canale sia per l'handshaking iniziale sia per il trasporto dei pacchetti cifrati e dei dati di autenticazione.

Bibliografia ArchWiki. 2016. OpenVPN. [Online] 2016. https://wiki.archlinux.org/index.php/OpenVPN.

Experimental performance comparison between TCP vs UDP tunnel using OpenVPN. I. Coonjah, P. C. Catherine and K. M. S. Soyjaudah. 2015. Computing, Communication and Security (ICCCS), 2015 International Conference on, Pamplemousses, 2015 : IEEE, 2015.

Krasnyansky, Maxim. 2000. Universal TUN/TAP device driver. [Online] 2000. https://www.kernel.org/doc/Documentation/networking/tuntap.txt.

OpenVPN. 2008. EasyRSA. [Online] 2008. https://openvpn.net/index.php/open-source/documentation/miscellaneous/77-rsa-key-management.html.

Rehm, Fabio. 2013. Stop / remove all Docker containers. [Online] 2013. https://coderwall.com/p/ewk0mq/stop-remove-all-docker-containers.

Stallings, William. 2005. IP Security. Cryptography and Network Security. 2005.

Terr, David. 2012. Diffie-Hellman Protocol. [Online] 2012. http://mathworld.wolfram.com/Diffie-HellmanProtocol.html.

Titz, Olaf. 2001. Why TCP Over TCP Is A Bad Idea. [Online] 2001. http://sites.inka.de/bigred/devel/tcp-tcp.html.

Wikipedia(en). Docker. [Online] https://en.wikipedia.org/wiki/Docker_(software).

Wikipedia(it). IPSEC. [Online] https://it.wikipedia.org/wiki/IPsec.