OPENVPN Tunneling Win to Linux Introduzione Finalmente è disponibile openvpn per Windows, con cui diventa possibile impostare tunnel verso macchine con OS Win o GNU/Linux. Un porting del TAP-Win32 driver è stato effettuato sotto Windows e nonostante sia in versione beta è risultato stabile e perfettamente funzionante. Io l ho provato cercando di impostare un tunnel tra un sistema con Windows XP ed un server Linux. La mia esigenza era quella di consentire connessioni sicure da client con sistemi operativi Win e Linux verso firewall con Linux. Da tempo utilizzo il pptp con tutti i suoi limiti di sicurezza, cercavo un sistema disponibile su più piattaforme, visto che IPSEC presenta un implementazione decisamente più complessa. Adesso è diventato davvero facile, basta seguire con attenzione le istruzioni riportate su OpenVPN Win32 Install: http://openvpn.sourceforge.net/install32.html Credo che siano più che sufficienti, ma per chi fosse interessato riporto comunque la mia esperienza. Requirements I sistemi impegnati sono una Linux box con Slackware 9.0 e kernel 2.4.20 che agisce da server ed un client (notebook) con WindowsXP. Linux Openvpn http://osdn.dl.sourceforge.net/sourceforge/openvpn/openvpn-1.4.3.tar.gz WinXP/2000 TAP-Win32 driver http://prdownloads.sourceforge.net/openvpn/openvpn-1.5_beta13-install.exe Configurazione Client XP Una volta installato il pacchetto che è un eseguibile autoinstallante, viene creata una voce Openvpn sotto Tutti i programmi con cui si può accedere alle varie funzioni del programma.
Diciamo che le operazioni necessarie richiedono tre fasi: 1. Aggiungere il Tap-Win32 Ethernet Adapter indispensabile per poter lanciare openvpn e instaurare la connessione 2. Generare una Static Key da condivider con il sistema Linux per crittografare i dati 3. Modificare il file sample.ovpn secondo le proprie necessità ed eseguire openvpn Sotto Win openvpn può essere usato da console sotto il Prompt del DOS, oppure attraverso i menu, in maniera ancora più semplice e vicina al mondo windows. Diciamo che utilizzandolo da console si ha ovviamente un maggior controllo del tutto simile a quello che si ha su Linux. Aggiungere il Tap-Win32 Ethernet Adapter Dal menu Openvpn selezionare Add a Win32 Virtual Ethernet Adapter Il device viene aggiunto e deve essere disponibile sotto le connessioni di rete un pò come per la stessa scheda di rete, anche se risulta ancora non attiva la connessione:
Una volta aggiunto il device lo si può configurare impostando le opzioni del TCP/IP, come l IP e gli altri parametri di rete necessari. Generazione di una chiave Static Key
La cifratura dei dati può avvenire semplicemente utilizzando una pre shared key che deve essere distribuita ad entrambi i sistemi che intrattengono la connessione. Questo è sicuramente il metodo più semplice ed efficace per garantire la sicurezza ai dati che transitano all interno del tunnel. Sotto il client Win questa operazione è molto semplice, basta infatti utilizzare il comando Generate a Openvpn static key sotto il menu Openvpn. Viene creata un file contenente la chiave dal nome key.txt da copiare in modo sicuro sul server Linux. Ovviamente questa operazione può anche essere fatta al rovescio, creando la chiave segreta sulla linux box e copiandola poi su Win. Configurazione del file sample.ovpn La configurazione è del tutto simile a quella che si effettua sotto Linux. Sicuramente è più semplice predisporre il file di configurazione da far leggere a openvpn con l opzione -config, ma ricordiamoci che è comunque possibile passare tutti i parametri da riga di comando. La configurazione scelta ricalca quella standard: #Config per WinXP remote box # nome del server Linux remoto port 5000 # porta su cui gira il servizio, questa è quella di default dev tun # device scelto tra tap o tun ifconfig 10.0.0.2 10.0.0.1 # impostazione del peer to peer tar locale e remoto cipher DES-EDE3-CBC # tipo di cipher utilizzato, può essere scelto con openvpn show-ciphers secret key.txt # nome della chiave segreta persist-tun # imposta il tunnel in modalità persistente ping 10 # imposta il ping per il remote point comp-lzo # abilita la compressione verb 4 # livello di verbosity per la connessione mute 10
A questo punto si deve rinominare il file sample.ovpn.txt in sample.ovpn o qualsiasi altro nome, l importante è che la sua estensione sia.ovpn, in questo modo può essere attivato da Win semplicemente cliccando sopra il file con il tasto destro del mouse e scegliendo: Start Openvpn on this config file A questo punto si attiva openvpn lasciandoci aperta la finestra con le informazioni di debug. Appena ci compare la voce Peer Connection Initiated with 192.168.17.224:5000, abbiamo la certezza che il tunnel si è instaurato: Sotto il menu delle connessioni avremo che il nuovo device risulterà attivo e potremmo anche vedere i pacchetti che incrementano nelle proprietà della connessione. Configurazione Linux Una volta scaricato il pacchetto wget http://prdownloads.sourceforge.net/openvpn/openvpn-1.4.3.tar.gz * è sufficiente scompattarlo, compilarlo e installarlo root@box:/usr/src/openvpn-1.4.3#./configure; make;make install * Per motivi di stabilità si è preferito non usare sotto linux la versione 1.5 in beta, comunque funzionante.
Ovviamente si deve aver compilato il TUN/TAP device driver sotto il kernel, che deve essere caricato prima dell attivazione del tunnel. Network device support <M> Universal TUN/TAP device driver support e sotto le Networking options deve essere compilato il modulo che consente l IP tunneling Networking options <M> IP: tunneling Se si vuole abilitare la compressione sono necessarie anche le librerie LZP che vanno compilate ed installate prima di openvpn, sono reperibili su: http://www.oberhumer.com/opensource/lzo/download/lzo-1.08.tar.gz Una volta copiata la chiave generata sul client WinXP nella stessa directory dove si trova il file di configurazione, è possibile creare un file di configurazione analogo: #Config per Linux box remote client10 # nome del server Linux remoto port 5000 # porta su cui gira il servizio, questa è quella di default dev tun # device scelto tra tap o tun ifconfig 10.0.0.1 10.0.0.2 # impostazione del peer to peer tar locale e remoto cipher DES-EDE3-CBC # tipo di cipher utilizzato, può essere scelto con openvpn show-ciphers secret key.txt # nome della chiave segreta persist-tun # imposta il tunnel in modalità persistente ping 10 # imposta il ping per il remote point comp-lzo # abilita la compressione verb 4 # livello di verbosity per la connessione mute 10 L unica differenza consiste nella direttiva remote ed in quella ifconfig che devono essere necessariamente invertite. A questo punto è possibile eseguire openvpn root@box:/tmp# openvpn --config sample.ovpn & Mon Nov 3 17:09:16 2003 0: Current Parameter Settings: Mon Nov 3 17:09:16 2003 1: persist_config = DISABLED Mon Nov 3 17:09:16 2003 2: persist_mode = 1 Mon Nov 3 17:09:16 2003 3: show_ciphers = DISABLED Mon Nov 3 17:09:16 2003 4: show_digests = DISABLED Mon Nov 3 17:09:16 2003 5: genkey = DISABLED Mon Nov 3 17:09:16 2003 6: askpass = DISABLED Mon Nov 3 17:09:16 2003 7: show_tls_ciphers = DISABLED Mon Nov 3 17:09:16 2003 8: local = '[UNDEF]' Mon Nov 3 17:09:16 2003 9: remote = 'client10' Mon Nov 3 17:09:16 2003 10: 72 variation(s) on previous 10 message(s) suppressed by --mute Mon Nov 3 17:09:16 2003 11: OpenVPN 1.4.3 i686-pc-linux-gnu [SSL] [LZO] built on Nov 3 2003 Mon Nov 3 17:09:16 2003 12: UDP link local (bound): [undef]:5000 Mon Nov 3 17:09:16 2003 13: UDP link remote: 192.168.17.150:5000 Mon Nov 3 17:09:16 2003 14: WARNING: file 'key.txt' is group or others accessible Mon Nov 3 17:09:16 2003 15: Static Encrypt: Cipher 'DES-EDE3-CBC' initialized with 192 bit key Mon Nov 3 17:09:16 2003 16: Static Encrypt: Using 160 bit message digest 'SHA1' for HMAC authentication Mon Nov 3 17:09:16 2003 17: Static Decrypt: Cipher 'DES-EDE3-CBC' initialized with 192 bit key
Mon Nov 3 17:09:16 2003 18: Static Decrypt: Using 160 bit message digest 'SHA1' for HMAC authentication Mon Nov 3 17:09:16 2003 19: LZO compression initialized Mon Nov 3 17:09:16 2003 20: Data Channel MTU parms [ udp_mtu=1300 extra_frame=45 extra_buffer=19 extra_tun=0 dynamic = [ mtu_min_initial=mtu_initial_undef mtu_max_initial=mtu_initial_undef mtu_initial=mtu_set_to_max mtu_min=145 mtu_max=1300 mtu=1300 ]] Mon Nov 3 17:09:16 2003 21: TUN/TAP device tun0 opened Mon Nov 3 17:09:16 2003 22: /sbin/ifconfig tun0 10.0.0.1 pointopoint 10.0.0.2 mtu 1255 Mon Nov 3 17:09:21 2003 23: Peer Connection Initiated with 192.168.17.150:5000 root@box:/tmp# ping -c 3 10.0.0.2 PING 10.0.0.2 (10.0.0.2): 56 octets data 64 octets from 10.0.0.2: icmp_seq=0 ttl=128 time=1.2 ms 64 octets from 10.0.0.2: icmp_seq=1 ttl=128 time=0.9 ms 64 octets from 10.0.0.2: icmp_seq=2 ttl=128 time=1.0 ms --- 10.0.0.2 ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 0.9/1.0/1.2 ms La connessione è instaurata. Risorse http://openvpn.sourceforge.net/install32.html Note Da tempo si cercava un implementazione funzionante sotto Win che consentisse la costruzione di tunnel verso win o Linux in maniera semplice ed efficace. Openvpn fa tutto questo, è un programma sicuro, facilmente configurabile e davvero efficace per instaurare connessioni sicure attraverso la rete. Io lo consiglio veramente a chi avesse necessità di questo tipo, visto anche l elevato grado di mantenimento e supporto da parte del team di sviluppo. Doc: openvpn_wintolinux.pdf Dott. Paolo PAVAN [Netlink Sas] pavan@netlink.it Data: Ottobre 2003 Note finali Il presente documento è a semplice scopo divulgativo L autore non si assume la responsabilità di eventuali danni diretti o indiretti derivanti dall'uso dei programmi, o dall applicazione delle configurazioni menzionate nel seguente articolo L uso o il riutilizzo del presente articolo è liberamente consentito per scopi didattici o informativi previa citazione della fonte Sono possibili errori o imprecisioni, segnalatemele a pavan@netlink.it Chi volesse integrare il presente documento, può scrivere a pavan@netlink.it.