Attenzione! Questa è una Pagina di prova. Le informazioni riportate potrebbero essere incomplete, errate e potenzialmente pericolose. Per contribuire alla realizzazione di questa pagina consultare la discussione di riferimento. |
Indice
Introduzione
Inserire una descrizione per questa nuova pagina leonardochiodi/TunnelIPsec_ikev2.
Lo scopo di questa pagina, è quello di creare un tunnel per la comunicazione site-to-site tra due hosts, basato sul nuovo standard di sicurezza ipsec/ikev2. "Internet key exchange version2 - IP security".
Uno degli scopi è di usare, quanto piu possibile strumento open source, senza fare uso di client di terze parti, o di strumenti proprietari. Useremo, in particolare, openSSL, ed il suo strumento "pki". Sceglierò di autenticare i due hosts che sono entrambi connessi ad internet, ma appartenenti a domini di rete distinti, attraverso l'uso di certificati SSL, e non della classica combinazione username/password. L'ente che fornirà la "garanzia" di autenticità di entrambi gli host, sarà quella che viene chiamata una "Certification Authority£. Questa certification authority verrà creata localmente, e sarà poi configurata su entrambi gli hosts. Logicamente, la prova che faremo sarà locale, ma esistono reali certification authority riconosciute con vari gradi di autorevolezza sui diversi domini di rete, e nessuno vieta all'utente di acquistare un vero certificato SSL per la connessione ma, per il momento quest'ultima ipotesi sarà marginale, in quanto vogliamo creare localmente anche la certification Authority (CA).
Una particolarità di questa procedura, è che creeremo i certificati del client anche in formato PKCS12, ovvero in un formato che sia idoneo allo smartphone.
Questo significa che anche uno smartphone sarà in grado di connettersi con connessione VPN protetta al server, usando il certificato.
La configurazione dunque è questa: ci sarà un server ed un client che stabiliranno tra di loro il tunnel ipsec/ikev2. In realtà la definizione di server/client è, in questo caso, impropria in quanto entrambi gli host potranno liberamente cominciare una comunicazione in qualunque momento, però per configurare la connessione è utile questa iniziale distinzione.
Dunque il client sarà di questo tipo:
CLIENT: Un host con installato il pacchetto openssl, e strongswan. Al momento il mio pacchetto è questo:
[code] ||/ Name Version Architecture Description +++-==============-================-============-================================= ii strongswan 5.9.5-2ubuntu2.3 all IPsec VPN solution metapackage ii openssl 3.0.2-0ubuntu1.16 amd64 Secure Sockets Layer toolkit - cryptographic utility [/quote]
Questo client è nattato. In particolare il nat è questo: Indirizzo IP locale: 192.168.31.11 Indirizzo IP interfaccia WAN del router: 5.94.x.x
Logicamente, devo censurare l'indirizzo IPv4 dell'interfaccia WAN, perchè è quella reale, e quindi sarei realmente raggiungibile. In ogni caso, questo indirizzo si può facilmente trovare ad esempio aprendo la pagina del browser su un sito come. https://www.mio-ip.it/
SERVER: Questo deve avere installati i medesimi pacchetti del client, ma NON è nattato. In particolare è raggiungibile attraverso un comune indirizzo IPV4 pubblico: 54.3.x.x Anche qui, ho dovuto, in parte censurare l'IP, perche l'interfaccia è raggiungibile. Nel mio caso, faccio esperimenti con un server OVH.
A questo punto generiamo la Certification Authority ed i certificati del server. In particolare la CA sarà identificata dal certificato della CA in formato X509 e dalla chiave della CA. Importante che questi due files non vadano smarriti, in caso contrario, chiunque ne venga in possesso, potrà generare certificati di accesso validi.
Genereremo poi il certificato e la chiave SSL del server.
[code] #!/bin/bash
openssl genrsa -out chiavePrivataCA.pem 2048
openssl rsa -passin pass:"" -in chiavePrivataCA.pem -out chiaveCA.pem
rm chiavePrivataCA.pem
sudo chmod 0600 chiaveCA.pem
ipsec pki --self \
- --ca \ --lifetime 3650 \ --dn "C=IT, O=certificatoCA_desktop, CN=CA-desktop" \ --in chiaveCA.pem \ --type rsa \
--outform der > certificatoCAX509.der
#Genero ora la chiave privata del server. #Questa, è quella che andrà aggiunta sia #si /etc/ipsec.d/private, che su ipsec.secrets ipsec pki --gen \
- --type rsa \ --size 4096 \
--outform der > chiavePrivata_OVH-server.der
chmod 600 chiavePrivata_OVH-server.der
ipsec pki --pub \
- --in chiavePrivata_OVH-server.der \ --type rsa | \
ipsec pki --issue \
- --lifetime 730 \ --cacert certificatoCAX509.der \ --cakey chiaveCA.pem \ --dn "C=IT, O=certificato_OVH_server, CN=OVH-server" \ --san "192.168.1.11" \ --san "5.94.x.x" \ --san "54.3.x.x" \ --flag serverAuth \ --flag ikeIntermediate \
--outform der > certificato_OVH-server.der
[/code]
Questa la lista dei files generati:
certificatoCAX509.der chiaveCA.pem
Esplicativi ! identificano la CA.
Avremo poi:
certificato_OVH-server.der chiavePrivata_OVH-server.der
Questi ultimi due, identificheranno il server. Da notare una cosa importante nello script di generazione dei certificati del server.