OpenVPN e reti private virtuali con una PKI OpenSSL di Valentino ouz Squilloni Copyright 2004 Valentino Squilloni http://ouz.ath.cx
Sommario Introduzione al problema Tunnel e principi di funzionamento Certificati e Certification Authority Implementazione passo a passo Novita`e sviluppi futuri Esempi pratici
Introduzione VPN, ovvero Virtual Private Network. Privata percheòffre un servizio praticamente identico ad una LAN privata. Virtuale perche`in realta`il flusso dati passa dalla rete pubblica (Internet).
VPN: a chi serve? Alle aziende per collegare sedi staccate senza aver bisogno di connessioni dedicate. A due comuni utenti per condividere delle risorse attraverso internet Ad un admin per amministrare una macchina remota. A rendere confidenziale una rete condivisa (WLAN o LAN su hub).
VPN: come funziona? Tutto il traffico fra i due endpoint della VPN viene incapsulato in tunnel prestabiliti. I tunnel possono essere su diversi livelli della pila ISO/ OSI: IPSEC (a layer 3) PPTP (a layer 3) OpenVPN, l2tp, vtund, cipe, etc. (a layer 4)
Tunnel e incapsulamento OpenVPN usa i device tun/ tap. tun/tap: interfacce virtuali che permettono ai programmi in user-space di spedire/ ricevere pacchetti. Ogni pacchetto mandato sul tunnel viene criptato --> confidenzialita`
tun/ tap: differenze Tun: Tap: device virtuale IP punto-a-punto trasporta pacchetti IP simile all'interfaccia ppp interfaccia ethernet virtuale trasporta frame ethernet simile all'interfaccia eth NB. Se ho bisogno di broadcast ethernet, protocolli non-ip (Netbios), o creare LAN virtuali devo usare tap.
Modalita`di funzionamento di OpenVPN 3 modalita`: Tunnel non criptato Crittografia a chiave condivisa (shared-key) TLS: autenticazione e scambio di chiavi
TLS Stabilisce un canale dati e un canale di controllo sopra una singola porta tcp/ udp Canale di controllo: mutua autenticazione con certificati e Diffie-Hellman per scambio di chiavi (sicuro!) Canale dati: crittografia e autenticazione simmetrica (veloce!) Durante l'handshake un host avra`il ruolo di server l'altro (gli altri) di client.
Certificati X.509 In un sistema basato sui certificati ogni host deve disporre di una coppia chiave privata/ certificato. CA: entita`di cui tutti gli host si devono fidare. Garantisce l'identita`degli host coinvolti. Firma le richieste di certificato. Pubblica il proprio certificato che deve essere disponibile a tutti i partecipanti alla VPN.
Creazione CA Generazione chiave privata della CA: # openssl genrsa -out ca.key Generazione del csr: # openssl req -new -key ca.key -out ca.csr Autofirma del certificato: # openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt Firma del certificato di un client: # openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt
Certificati utente Processo identico per il client e per il server. # openssl genrsa -out client.key # openssl req -new -key client.key -out client.csr Il csr va mandato alla CA che lo firma. NB: Il server solamente crea il parametro di Diffie-Hellman: # openssh dhparam -out dh.pem 1024
TLS server (file di conf.) dev tun ifconfig 10.0.0.1 10.0.0.2 tls-server dh dh.pem ca ca.crt cert server.crt key server.key reneg-sec 60
TLS client (file di conf.) dev tun ifconfig 10.0.0.2 10.0.0.1 remote server.example.org tls-client ca ca.crt cert client.crt key client.key reneg-sec 60
Debugging log di OpenVPN (vedi verb) firewall su tun/tap stato delle interfacce di rete stato delle tabelle di routing eventualmente sniffing
Novita`di OpenVPN 2 Multitap/multiclient su singola porta Puo`girare non con i privilegi di root static key non piu`disponibile in server mode remote puo`specificare piu`macchine pull/push ifconfig-pool
Esempio 1: server invisibile Amministrare una macchina remota senza lasciare nessuna porta aperta sulla macchina. Sulla macchina remota tls-client e firewall completamente chiuso, sull'altra tls-server e apro la porta di OpenVPN. La macchina remota e`completamente invisibile al mondo :-)
Esempio 2: multitap con OpenVPN2 Server: local $IP_locale solite ca, cert, key, dh server 192.168.200.0 255.255.255.0 client-to-client Client: solite ca, cert, key client remote $IP_server $porta_server
Esempio 2: WLAN Utile per avere confidenzialita`e sicurezza in una WLAN. AP con dietro VPN concentrator che autentica i client.
Riassumendo OpenVPN aiuta a creare VPN in modo semplice, e non soffre dei problemi di IPsec (nat) L'infrastruttura TLS offre un ottimo grado si sicurezza e scalabilita` E`utile in diversi contesti E`in costante e rapida crescita Funziona su linux, *BSD, Win2k/WinXP, MacOSX, Solaris...
Domande?