Software utilizzato: OpenVpn 2.0. OpenVpn si basa su SSL e non su IpSec. Questo howto è basato su Linux, in particolare Slackware 10.1 con kernel 2.4.x e kernel 2.6.x. Con poche modifiche, rintracciabili sul sito, è possibile anche lavorare su Windows E Mac OS:
http://openvpn.net/howto.html
http://openvpn.net/bridge.html
Questo howto si basa sulla documentazione ufficiale.... in ogni modo, può essere utile perchè raggruppa e organizza le informazioni necessarie per settare questa configurazione
I Client utilizzati sono stati Windows XP, Linux e Mac Os (panther).
Per tutti e 3 gli OS esistono delle GUI (client) http://openvpn.net/gui.html
Stare in qualsiasi parte del mondo e poter essere in lan, in tutta sicurezza, con altre persone... con il vostro ufficio, con chi volete voi.... giocare in rete.... Se si vuole realizzare una Lan virtuale,ma a tutti gli effetti è come se ci si trovasse in locale, questa potrebbe essere una soluzione corretta ed efficiente.
Ho scelto una configurazione in Ethernet Bridging per allargare il dominio di Broadcast. Questo, se il numero di client non è eccessivo, è una comodità. In questo modo non ho dovuto configurare Samba come Server Wins e tutti i client windows hanno potuto vedersi tranquillamente creando una rete microsoft.
Comunque, fino a che il numero di client è contenuto, si può accorpare tutti sotto la stessa subnet.
La topologia logica , qui di segiuto, è spiegata più avanti:
[INTERNET] | [eth0] Ip Pubblico [Server Linux - Firewall - Router - Server Dhcp][eth1] ---- Lan Fisica 192.168.1.0/24 con pool 50 -150 [br0] 192.168.1.1 [tap0] | | Lan Virtuale (In Vpn) 192.168.1.0/24 con pool 200 - 250
Per generalità, vedremo la procedura di installazione da sorgenti, anche se comunque sul sito sono presenti pacchetti precompilati. Il software necessario è scaricabile da qui: http://openvpn.net/download.html
Scaricate prima le librerie lzo decomprimetele tar -xvf lzo-1.08.tar.gz e installatele ./configure && make && make install && make clean Scaricate OpenVPN 2.0 decomprimete tar -xvf openvpn-2.0.tar.gz e installate ./configure && make && make install && make clean Se non le avete ancora installate , vi servono anche le librerie openssl.
Questi tools servono per poter attuare il bridging delle interfacce..... in un certo senso fanno lavorare le interfacce di rete (desiderate) come quelle di uno switch (a livello 2) piuttosto che come quelle di un router (livello 3)
Scaricate da qui decomprimete tar -xvf bridge-utils-1.0.6 e installate ./configure && make && make install && make clean
Prima di parlare della configurazione del server, diamo un'occhiata alla topologia della rete. Ho una macchina, con su montata Slackware 10.1, che mi fa da Firewall,Router,Server Dhcp ecc... La mia personale topologia è la seguente:
[INTERNET] | [eth0] Ip Pubblico [Server Linux - Firewall-Router-Server Dhcp][eth1] --- Lan Fisica 192.168.1.0/24 con pool 50 -150 [br0] 192.168.1.1 [tap0] | | Lan Virtuale (In Vpn) 192.168.1.0/24 con pool 200 - 250
tap0 è un interfaccia virtuale.
eth1 e tap0 vengono usate come interfacce di uno switch. br0 è un'altra interfaccia virtuale.... essa diventa il (quasi) default gateway (passatemi il termine usato per comprenderci) per la lan sia Fisica che Virtuale. Dato che eth1 e tap0 sono in bridging, il broadcast passa.
Ovviamente questa è una topologia logica approssimata, ma rende bene l'idea.
Per ottenere le interfacce br0, tap0 e mettere in Bridging eth1 con tap0 si usa il seguente script..... che io ho chiamato bridge_start.sh
#!/bin/bash
#################################
# Set up Ethernet bridge on Linux
# Requires: bridge-utils
#################################
# Define Bridge Interface
br="br0"
# Define list of TAP interfaces to be bridged,
# for example tap="tap0 tap1 tap2".
tap="tap0"
# Define physical ethernet interface to be bridged
# with TAP interface(s) above.
eth="eth1"
eth_ip="192.168.1.1"
eth_netmask="255.255.255.0"
eth_broadcast="192.168.1.255"
for t in $tap; do
openvpn --mktun --dev $t
done
brctl addbr $br
brctl addif $br $eth
for t in $tap; do
brctl addif $br $t
done
ifconfig $eth 0.0.0.0 promisc up
ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast
per fermare il bridging si usa quest'altro sript bridge_stop.sh
#!/bin/bash
####################################
# Tear Down Ethernet bridge on Linux
####################################
# Define Bridge Interface
br="br0"
# Define list of TAP interfaces to be bridged together
tap="tap0"
ifconfig $br down
brctl delbr $br
for t in $tap; do
openvpn --rmtun --dev $t
done
OpenVpn usa una crittografia a chiave pubblica. Nella mia configurazione ho usato una crittografia asimmetrica a 1024 bit e una crittografia simmetrica a 128 bit con algoritmo di ciphering blowfish. La cosa interessante è che openvpn usa una chiave di sessione con scadenza: ogni ora, per ogni client, viene cambiata la chiave. Questo assicura una sicurezza paragonabile all'attuale standard bancario. Se qualcuno avesse invece la paranoia, potrebbe usare una chiave asimmetrica a 2048 bit e chiavi di sessione a 256 bit. In tutti i casi, ad oggi col pc + potente al mondo, si stima ci voglia un tempo medio di decrittazione della chiave di sessione (a 128 bit), quantificabile nell'ordine delle decine di mesi.... decidete voi se vi basta, considerando il fatto che ogni ora cambia!!!! Per una trattazione completa dell'argomento crittografia, rimando alla ricca documentazione in rete.
Vediamo come generare tutto il necessario.
Io ho installato OpenVpn in /usr/local/openvpn-2.0/. Entrate nella directory /usr/local/openvpn-2.0/easy-rsa Poi nell'ordine :
Per quanto riguarda il server, avete generato tutto il necessario. Secondo le norme di sicurezza, la macchina che genera i certificati e le chiavi, dovrebbe essere staccata dalla rete. Si può eseguire questa stessa procedura su windows, usando il prompt di dos... le differenze sono minime... es: per chiamare vars, basterà scrivere solo vars e così via. A questo punto create una directory (es: server_files) dove volete voi e metteteci dentro i seguenti file: ca.crt, server.crt, server.key, dh1024.pem, bridge_start.sh, bridge_stop.sh, ta.key Considerate che gli unici file che devono rimanere assolutamente segreti sono i file .key, quelli delle chiavi private. il file ca.key è consigliabile tenerlo su una macchina scollegata dalla rete che farà da Certification Authority.... Generate le chiavi su una macchina e poi mettetele sul server e sui client.
Prima di tutto, è importante integrare la vostra configurazione del firewall con le seguenti regole . OpenVPN usa la porta (sia udp che tcp) 1194 (IANA Certified)
iptables -A INPUT -p udp --dport 1194 -i eth0 -j ACCEPT iptables -A INPUT -i tap+ -j ACCEPT iptables -A FORWARD -i tap+ -j ACCEPT
Nella directory, dove sarà posizionato il file di configurazione, create una directory di nome jail (o chiamatela come volete voi). Servirà per chrootare il servizio Create a questo punto il file di configurazione del server server.ovpn
# Interfaccia virtuale usata dev tap0 # Ip pubblico xxx.xxx.xxx.xxx local xxx.xxx.xxx.xxx # Porta del servizio port 1194 # Protocollo usato proto udp # Certificato generale ca ca.crt # Certificato Server cert server.crt # Chiave privata server key server.key # Parametri Diffie Hellman dh dh1024.pem # Autenticazione Tls tls-auth ta.key 0 # Direttiva per abilitare un meccanismo di assegnazione degli IP simil dhcp.... senza leases # gli ultimi due gruppi di numeri rappresentano il pool di indirizzi che verranno assegnati server-bridge 192.168.1.1 255.255.255.0 192.168.1.200 192.168.1.250 # Direttive per forzare, al client, una rotta per un' altra subnet .... in questo caso sono commentate ;push "route 192.168.10.0 255.255.255.0" ;push "route 192.168.20.0 255.255.255.0" # Direttiva per impostare un server wins ;push "dhcp-option WINS 192.168.1.1" # Permettere ai client di vedersi tra loro client-to-client # Keep Alive keepalive 10 120 # Metodo di compressione comp-lzo # Numero Massimo Client max-clients 50 # Dopo una fase iniziale diminuiamo i privilegi di openvpn user nobody group nobody # Chroot del servizio chroot jail # Evita l'accesso a risorse, in un riavvio, non più accessibili a causa della diminuzione dei privilegi persist-key persist-tun # Log status openvpn-status.log # Livello di dettaglio del log verb 3
Nella directory (quella precedentemente creata: es server_files) che contiene tutti i file necessari , create un file di nome start_all.sh, così fatto:
#!/bin/bash sh bridge_start.sh openvpn --config server.ovpn
La configurazione dei client è molto simile per tutti e 3 gli OS..... comunque i passi da seguire sono i seguenti. Sulla macchina che genera i certificati e le chiavi procedere nella seguente maniera:
Per ogni client raggruppate i file necessari: ca.crt, linClient.crt, linClient.key, ta.key (questo era l'esempio con linClient per gli altri client fate una cosa analoga) create poi il file di configurazione linClient.ovpn (e analoghi)
#Modalità Client client # Interfaccia dev tap # Direttiva per windows, che però per me non è stata necessaria ;dev-node MyTap # Protocollo proto udp # Ip pubblico del server xxx.xxx.xxx.xxx sulla porta 1194 remote xxx.xxx.xxx.xxx 1194 # Per la maggior parte dei client va bene così nobind # DownGrade dei privilegi..... windows semplicemente ignorerà questa direttiva user nobody group nobody # Opzioni di autenticazione ns-cert-type server tls-auth ta.key 1 # File dei certificati e chiavi ca ca.crt cert linClient.crt key linClient.key # Compressione comp-lzo # Dettaglio Log verb 3client
Installare OpenVpn. Esiste anche una GUI, ma io ho preferito non usarla..... (le gui sono scaricabili da qui) Copiate i file necessari in una directory che creerete a vostro piacimento: linClient_file... crate uno script di avvio start_vpn.sh
#!/bin/bash openvpn --config linClient.ovpn
Scaricate e installate la gui OpenVpn-Gui lasciando le impostazioni di default e continuando l'installazione nonostante il warning di windows ("il software non ha passato la certificazione Microsoft"). Copiate i file necessari nella directory OpenVpn/config/ (cancellando eventuali precedenti file sample ovpn). Vi apparirà un'iconcina in basso sulla destra... basta cliccare e parte tutto
Scaricate ed installate la gui... mettete i file analogamente ai client precedenti
Avviate il server precedentemente configurato.... aspettate che i client si connettano e Buon Divertimento.
Ovviamente questa è una tra le possibili configurazioni, questa l'ho fatta a mio gusto.
Se notate errori nella guida vi prego di segnalarmeli in pubblico o in privato. Ovviamente garanzia: NO WARRANTY.... non mi riterrò responsabile per qualsiasi accadimento collegato a questo howto. Usate queste informazioni a vostro rischio e pericolo.
Ringrazio sentitamente, tutti gli sviluppatori di OpenVpn e chiunque ha supportato, supporta e supporterà il progetto. Per ora questo howto è il mio piccolo contributo. Grazie di nuovo e complimenti per lo splendido prodotto.
Autore: MDS <doc.spock@gmail.com>
Copyright: "Il presente documento è rilasciato sotto licenza GPL e può essere tranquillamente distribuito mediante qualsiasi mezzo e modificato previa citazione dell'autore."