Servizio Sistemi Informativi SPERIMENTAZIONE DI RETI PRIVATE VIRTUALI CON L'UTILIZZO DI SOFTWARE OPEN SOURCE Redatto: Nucleo Gestione Innovazione e fornitori IT Versione: 1.0 Data emissione: 9/11/2006 Sommario Il documento descrive la sperimentazione effettuata nell'ambito di reti private virtuali (VPN) con l'utilizzo di software open source; in particolare si è ricorsi al software OpenVPN che presenta caratteristiche di diffusione ed affidabilità riconosciute, oltre ad una buona semplicità nella sua configurazione. pag. 1
Sperimentazione di reti private virtuali con l'utilizzo di software open source Introduzione Dall'informatica in rete nasce la necessità di comunicare in modo efficiente e sicuro. Spesso i soggetti che tra loro interagiscono devono utilizzare mezzi di trasmissione pubblici, come Internet, o canali la cui protezione non può essere garantita; in questo caso si ricorre all'introduzione di reti private virtuali (VPN) che, attraverso l'utilizzo di tecnologie crittografiche, forniscono i mezzi per autenticare reciprocamente gli utenti e proteggere le informazioni riservate da scambiare I protocolli che implementano una VPN sicura più conosciuti sono: IPsec (IP security), parte obbligatoria dell'ipv6. SSL utilizzato per instradare specifici protocolli, utilizzato dall'openvpn. PPTP (point to point tunneling protocol), sviluppato da Microsoft. Scopo di questa relazione è descrivere la sperimentazione effettuata in quest'ambito con l'utilizzo di software open source; in particolare si è ricorsi al software OpenVPN che presenta caratteristiche di diffusione ed affidabilità riconosciute, oltre ad una buona semplicità nella sua configurazione. OpenVPN OpenVPN è un programma VPN scritto da James Yonan e rilasciato con licenza GPL. È usato per creare tunnel crittografati punto punto fra i computer. Permette agli host di autenticarsi l'uno con l'altro per mezzo di chiavi private condivise, certificati digitali o credenziali utente/password. Usa in modo massiccio le librerie di cifratura OpenSSL e usa il protocollo SSLv3/TLSv1. È disponibile su Linux, xbsd, Mac OSX, Solaris e Windows 2000/XP. Offre un ricco insieme di caratteristiche per il controllo e la sicurezza. Non è una VPN con interfaccia web, e non è compatibile con IPsec o altri programmi VPN. L'intero programma è un singolo eseguibile binario usato per le connessioni sia dal lato server che dal lato client, da un file di configurazione opzionale, e da uno o più file contenenti le chiavi, in funzione del metodo di autenticazione usato. OpenVPN usa le librerie OpenSSL per la cifratura sia del canale dati che del canale di controllo. Fa eseguire a OpenSSL tutto il lavoro di cifratura e autenticazione, permettendo a OpenVPN di scegliere fra tutti gli algoritmi di cifratura disponibili nel pacchetto OpenSSL. Può usare l'accelerazione hardware per avere migliori prestazioni nella cifratura. Autenticazione OpenVPN permette ai computer diversi metodi di autenticarsi l'uno con l'altro: pag. 2
* chiave segreta condivisa * certificati digitali * credenziali utente/password. Il metodo con chiave segreta condivisa è il più semplice e immediato da implementare, quello basato sui certificati è il più robusto e completo ma richiede la definizione di una Public Key Infrastructure (PKI). L'autenticazione con utente/password è una caratteristica nuova introdotta con la versione 2.0 e si può usare con o senza il certificato del client (il server deve comunque avere il proprio certificato). Il pacchetto tar del codice sorgente include uno script perl per verificare le credenziali utente/password per mezzo dei moduli PAM e dei plugin in C auth pam. Rete OpenVPN concentra tutto il traffico dati e di controllo su una singola porta IP. Può usare una porta UDP (preferita e predefinita) oppure TCP. Può funzionare attraverso la maggior parte dei server proxy (HTTP incluso) e non ha problemi ad integrarsi col NAT. Il server può "inviare" alcune opzioni di configurazione di rete ai client. Fra queste, l'indirizzo IP, gli instradamenti, e alcune opzioni di connessione. OpenVPN offre due tipi di interfaccia di rete avvalendosi del driver Universal Tun/Tap; può creare sia tunnel IP punto punto al livello 3 dello stack OSI (configurazione routing), come anche interfacce Ethernet virtuali "tap" a livello 2 sulle quali veicolare l'intero traffico Ethernet, broadcast inclusi (configurazione bridging). OpenVPN può anche usare, come opzione, la libreria di compressione LZO per comprimere il flusso di dati. Configurazione di esempio: pag. 3
Server Linux Per la componente server si è scelto di utilizzare Linux, su cui è stato installato il package openvpn specifico della distribuzione utilizzata. Per creare i file necessari alla configurazione della vpn, è necessario eseguire un insieme di procedure che si trovano all'interno della cartella del pacchetto openvpn, in particolare in: openvpn/easy rsa Di seguito sono elencati gli step necessari. Editare lo script vars in modo opportuno. In particolare impostare i valori dei seguenti parametri: set HOME=/usr/share/OpenVPN/easy rsa set KEY_CONFIG=openssl.cnf set KEY_DIR=keys set KEY_COUNTRY=IT set KEY_PROVINCE=IT set KEY_CITY=Trento set KEY_ORG=Apss set KEY_EMAIL=mail@host.domain poi eseguire gli shell script:. vars./clean all./build ca./build dh (crea i parametri diffie helmann)./build key server server./build key client tn I precedenti comandi generano tutti i file necessari per configurare sia la parte client che server. Per generare certificati per diversi client ricordarsi di associare un common name univoco per ogni certificato. I file generati verranno così ripartiti: Server: ca.crt server.crt server.key dh1024.pem pag. 4
La chiave privata deve essere tenuta segreta, di conseguenza devono essere impostati opportunamente i diritti di lettura. Client: ca.crt client.crt client.key La configurazione usa il device TUN (Una configurazione alternativa e' col bridging device TAP) Il server viene avviato dalla directory /usr/share/openvpn/easy rsa/keys che contiene il file di configurazione, col comando # openvpn server.conf Client Linux Di seguito vengono elencati gli step necessari per la configurazione della parte client. Tale configurazione viene effettuata per mezzo di una gui specifica. Step 1 In questa form vengono indicati i seguenti path dei file di configurazione trasferiti dal server: certificato della Certification Authority certificato del client chiave privata del client pag. 5
Step 2 Il form successivo serve per impostare il gateway a cui si connette il client. Step 3 Dopo l'inserimento dei parametri viene attivato il demone del client, che crea un interfaccia virtuale tun0 con l'indirizzo IP fornito dal server precedentemente identificato. Nel nostro caso: 10.8.0.6. Client Windows In modo analogo in ambiente window può essere creato un file di configurazione contenente le impostazioni precedentemente elencate. Le seguenti immagini rapprensentano i diversi step necessari per l'impostazione del client openvpn utilizzando il programma vpngui. pag. 6
Menu utilizzato per controllare Openvpn: Finestra informativa della connessione Openvpn stabilita. pag. 7