OpenVpn Howto

Piccolo how-to su open-vpn

Prima di parlare di openvpn e di come creare una vpn tra due host, ed i vantaggi che possono venirne fuori bisogna che venga fatto una brevissima introduzione alle VPNs.

Breve introduzione alle VPNs.

La sicurezza in rete sta diventando di giorno in giorno un elemento fondamentale per le grandi aziende che adoperano Internet come mezzo di “commercio” e “comunicazione” e che pretendono di proteggersi e scambiare informazioni in maniera sicura.
Le VPNs rappresentano un modo per risparmiare cifre elevate per le linee dedicate e per permettere ad un utente quasliasi di connettersi da ovunque si trovi ed accedere ai propri dati personali residenti su server locali.
L’acronimo VPN sta per Virtual Private Network, ossia una rete privata, crittata e passante su di un canale di comunicazione diretto che permette lo scambio di dati con la possibilità di restringere l’accesso ad gruppo di utenti autorizzati.
Un semplice esempio di VPN:

Pc_Home ————- Internet ————- Pc_Uffico
Ip:10.0.0.1 ————- x.x.x.x ————- 10.0.1.2

Tra il Pc_Home e Pc_Ufficio viene aperto un canale di comunicazione che passa per Internet, utilizzando classi di indirizzi privati. Per effettuare tali operazioni si avvale dei Protocolli dei Tunneling, e` possibile accedere ad una rete privata tramite PPtP (Point To Point Tunneling Protocol) L2TP (Layer 2 Tunneling Protocol.), IPSec (IP Security).
Dopo questa breve spolverata riguardante le VPNs possiamo passare al nocciolo della questione ed al motivo per cui stiamo scrivendo questo articolo:
OpenVpn

Stiamo parlando di un software, ovviamente free, che permette la creazione di una VPN ossia un canale di comunicazione privato tra due Hosts.La necessita` di adoperare questo software e` nata dal fatto che abbiamo sperimentato di far “runnare” un servizio ad un client abbonato Fastweb del quale sappiamo tutti i problemi legati al Nat che si presentano per tali abbonati, per i quali possedere un servizio in locale, quale Http, Ftp, ssh, diventa un’ardua impresa.
Il Software in questione e` rintracciabile con semplicita` al seguente url: http://openvpn.secureforge.net e viene descritto come “secure IP tunnel daemon”.
Questo demone gira, di default, sulla porta 5000 UDP ma tramite i flags:

--port port : TCP/UDP port # for both local and remote.
--lport port : TCP/UDP port # for local (default=5000).
--rport port : TCP/UDP port # for remote (default=5000).

Tale porta puo` venir modificata, come ogni qualsiasi servizio.
e tramite il flag: –proto puo` essere selezionato il tipo di protocollo da utilizzare.

Openvpn suopporta una crittazione convenzionale di una chiave statica condivisa oppure una chiave pubblica (SSL/TSL mode), ma va detto che supporta anche connessioni senza crittazione., se possiedi kernel Linux 2.4.7 oppure superiore molto probabilmente i drivers TUN/TAP, necessari per la creazione dell’interfacce virtuali, sono installati. Se cosi` hai bisogno di creare il device e caricare il modulo

# mknod /dev/net/tun c 10 200
# modprobe tun

Se sul tuo Pc e` presente un eventuale firewall bisogna che imposti alcune regole per attivare l’inoltro dei pacchetti sulla TUN:
iptables -A INPUT -i tun+ -j ACCEPT
Questo software e` dotato di un lato client ed un lato server, nel caso in questione un pc fungera` da client mentre l’altro fungera` da server.
Come prima cosa generiamo una chiave statica ed uguale per entrambi gli host che vogliono stabilire la sessione con il seguente comando:

openvpn –genkey –secret key

Ora scegliamo una classe di indirizzi privati che verranno utilizzati per crare la VPN, nel nostro caso abbiamo preso in considerazione la rete privata di classe C 172.17.142.0/24.
L’host che funge da client adopererà l’ip 172.17.142.22 mentre l’host che fungerà da server utilizzerà l’ip 172.17.142.23. Ora analizziamo la sintassi del comando che viene eseguito “lato client”.

openvpn –remote 80.80.80.x –dev tun1 –ifconfig 172.17.142.22 172.17.142.23 –verb 5 –secret key

Andiamo subito a chiarire il comando raffigurato.

–remote 80.80.80.x e` il comando che imposta come server l’interfaccia pubblica dell’host che fungera` da server con indirizzo privato 172.17.142.22

–dev tun1 indica l’intefaccia da utilizzare

–ifconfig 172.17.142.22 172.17.142.23 imposta per primo l’ip che avra` il client locale e per secondo l’ip dell’interfaccia tun dell’host remoto.

–verb 5 Apriamo una piccola parentesi riguardo il verbose, esistono 6 livelli ed ognuno e` caratterizzato da una funzione specifica, quella che utilizzeremo noi e` il 5 che mostra i caratteri R e W in console per ogni pacchetto che viene letto e scritto. Le lettere maiuscole indicano i pacchetti TCP/UDP, mentre le minuscole indicano i pacchetti TUN/TAP.

–secret key indica il file che contiene la chiave per permettere la sessione crittata.

p.s: e` ovvio che entrambi i client debbano avere lo stesso file contente la chiave.

Appena avviato openvpn verra` creata un interfaccia virtuale denominata tun1 che avra` nel caso del client avremo 172.17.142.22, nel caso del Server avremo 172.17.142.23.
Dopo aver avviato openvpn conviene fare un po’ troubleshooting con i comandi route e ping, semplici ma efficaci. Lato server il comando sopra descritto subisce lievi modifiche:

openvpn –dev tun1 –ifconfig 172.17.142.23 172.17.142.22 –verb 5 –secret key

1) Ovviamente viene invertito la sequenza degli IP.
2) Il comando non comprende il flag “– remote x.x.x.x”, perche` ho anlizzato che
per un utente “fastweb”(io), il pc non puo` fungere da serve per problemi di NAT, dato che tutti gli utenti di un POP di fastweb stanno dietro proxy residenzialo ergo non puo` ricevere richieste ma solo effettuarle.
Fornire un servizio tramite una macchina interna alla VPN

Mostrare un servizio caricato sulla mia macchina e` praticamente impossibile dato il problema che ho segnalato pocanzi, di conseguenza ho utilizzato openvpn come strada alternativa per mostrare un servizio al pubblico.
Entriamo nel dettaglio:
Dopo aver stabilito una connessione con le stringe mostrate precedentemente, facciamo in modo che il pc che ci funge da server funga anche da NAT per il Forwarding di pacchetti specifici di un determinato servizio. Per tale motivo abbiamo sviluppato uno script contenente tutte le regole necessarie per forwardare il servizio ssh che di default gira sulla porta 22.
In questo script il server della VPN effettua il Forward dei pacchetti destinati alla sua porta 22 verso il client della VPN.
Ecco riportato un piccolo ascii art che aiutera` alla comprensione

Internet(request_ssh_session.22) to –> Host_Pubblico(serverVPN)[Forward to 172.17.142.22:22] –> 172.17.142.22

########### SCRIPT PER IL FORWARD DELLE PORTE DI UN SERVIZIO ###########
#! /bin/bash
/sbin/iptables -t nat -F
/sbin/iptables -F INPUT
/sbin/iptables -F OUTPUT
/sbin/iptables -F FORWARD
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 22 -j DNAT --to 172.17.142.22:22
iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 30000:65325 -j DNAT --to 172.17.142.22
iptables -t nat -A POSTROUTING -o ppp0 -s 172.17.142.22 -j MASQUERADE
iptables -t nat -A POSTROUTING -o tun1 -p tcp -s 172.17.142.22 -j SNAT --to Host_Pubblico
iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE
iptables -A FORWARD -i tun1 -p tcp -j ACCEPT
iptables -A FORWARD -i tun1 -p udp -j ACCEPT
iptables -A INPUT -i tun1 -p tcp -j ACCEPT
iptables -A INPUT -i tun1 -p udp -j ACCEPT
/sbin/iptables -L
/sbin/iptables -t nat -L
echo "1" > /proc/sys/net/ipv4/ip_forward

Con la collaborazione di Nazgul abbiamo creato un’interfaccia grafica per l’utilizzo di openvpn, compilata tramite Gtk 2.0 e testata su Slackware 9.x. e Debian.

E` semplice ed intuitiva comprende tutti campi che sono stati indicati precedentemente ed e` integrato nell’avvio del programma il comando

#modprobe tun

non vi resta che generare la key, che ripeto dev’essere comune.

E` stata anche realizzata una versione in bash che vi alleghiamo sempre per cercare di rendere semplice ed intuitivo questo software che se ben utilizzato porta molti vantaggi. Ricordo che tutti i software compilati, ed elencati, es: iptables, openvpn sono stati eseguiti su Slackware 9.0 la versione delle gtk era la 2.2 per la compilazione di onpenvpnGUI.c lato server e client.
Per compilare bisogna utilizzare questa stringa di esempio:

gcc -o openvpnGUI openvpn.c `pkg-confg –libs –cflags gtk+-2.0`

Di iptables abbiamo usato la versione iptables v1.2.7a.
Possibili bug presenti nei software allegati ? si .. e forse anche molti.

OpenVpn Bash Client (tar.gz)

OpenVpn Bash Server (tar.gz)

OpenVpn GUI Client (tar.gz)

Cogito ergo sum
Non c’e` nulla interamente in nostro potere, se non i nostri pensieri.
Digital Souls Research Group

[cartesio zast signal]: date

Sun Jun 6 12:15:58 UTC 2004

NOTA: Questo articolo è stato importato dal vecchio sito su cui era hostato prima…

Un ringraziamento particolare a petabyte (aka bejelith ) per il sito e l’hosting, a cartesio per la parte teorica e il test su rete nattata Fastweb, e a Nazgul per l’intefaccia grafica.

1 commento su “OpenVpn Howto

  1. Emilio Rispondi

    “Con la collaborazione di Nazgul abbiamo creato un’interfaccia grafica per l’utilizzo di openvpn, compilata tramite Gtk 2.0 e testata su Slackware 9.x. e Debian.”
    ———————————
    Se ti interessa a testare su altre distro, ne ho disposizione già installate.
    Basta farmelo sapere. Ciao!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *