Open Vpn

Da prendere in considerazione

vpn server multiprotocollo
https://www.softether.org/

passare la vpn tramite tunnel
http://openvpn.net/index.php/open-source/documentation/howto.html#http

Installare su Centos 6

L'ho testato su una CentOS release 6.4 a 64 bit la guida dove ho prese queste info è più ambia ed era su una centos a 32 bit
http://blog.qnology.com/2013/03/tutorial-centos-6-openvpn-client.html

yum -y update
wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
yum --enablerepo=epel
yum install install openvpn

Debianizzati.org

La sorgente di questa guida è questa

Per prima cosa installiamo la roba

apt-get install openvpn

Questo metterà anche in /dev/net/tun il device virtuale che ci serve.

Ci sono due tipi di installazione tramite chiame simmetrica condivisa e tramite asimetrica con certification autority.

Chiave simmetrica

utile guida

http://openvpn.net/index.php/open-source/documentation/miscellaneous/78-static-key-mini-howto.html

Sito ufficiali per chiavi asimmetriche

Il riferimenti di debianizzati è stato ottimo per configurare open vpn con chiave simmetrica ma non riesco seguendo quell'how to a configurare il meccaniscmo a chiave asimmetrica, per questo motivo ho usato la guida di open vpn a questo indirizzo per generare le chiavi tramite gli script di rsa. Gli scrip di configurazione sono quelli sopra.

Setting up your own Certificate Authority (CA) and generating certificates and keys for an OpenVPN server and multiple clients

Overview

Bisogna stabilire un meccanismo di public key infrastructure. La PKI consiste di:

  • di certificati pubblici e privati per ogni entità client e server
  • una CA usata per firmare sia client che server.

Openvpn supporta una autenticazione bidirezionale basata sui certificati entrambe le entità server e client si devono autenticare per fare in modo che la fiducia mutua sia stabilita. Entrambe le entità devono avere i certificati firmati dalla CA.

Il modello di sicurezza ha un numero di caratteristiche desiderabili dal punto di vista della VPN

  • il server ha bisogno solo del proprio certificato non quello di ogni client connesso a lui.
  • il server accetta solo cliente che hanno il certificato firmato dalla master CA. Dato che il server può verificare questo senza accedere alla chiave privata della ca, è possibile per questa chiave che è quella più delicata della pki risiedere in una macchina senza connessione alla rete.
  • Se una chiave privata è compromessa può essere disabilitata aggiungendo il suo ccertifato alla CRL (Certification Revoche List).
  • The server can enforce client-specific access rights based on embedded certificate fields, such as the Common Name.

Generate the master Certificate Authority (CA) certificate & key

In questa sezione genereremo una master CA certificato/chiave, un server certificato/chiave e un certificato/chiave per 3 client.
Io ho provato e scritto solo le istruzioni per linux sulla guida originale ci sono pure le spiegazioni per windows.

Per amministrare la PKI useremo un set di scripts in bundle con openvpn

Nelle distribuzioni unix like, spostarsi nella directory easy-rsa di openvpn nella mia distro debian 5 la cartella è

/usr/share/doc/openvpn/examples/easy-rsa/2.0

All'interno di questa directory vi è una sub-dir che si chiama keys dove vengono poste le chiavi dopo la generazione.

Per prima cosa editare il file vars alla fine del file vi sono delle var d'ambiente che poi vengono lette dagli script in modo da avere i valori di default già impostati e non perdere tempo. Le var da impostare sono KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, and KEY_EMAIL.
Dopo eseguire

./vars
./clean-all
./build-ca

Dopo l'ultimo comando partirà uno script che farà alcune domande e genererà la nostra certification autority. Ricordiamo che la ca ci serve per assegnare e revocare i permessi ai certificati dei client.

Generate certificate & key for server

Adesso generiamo le chiavi già firmate per il server

./build-key-server server

La parola server messa in coda sarà il prefisso di tutte le chiavi e certificati generati da questo comando, che poi sono tre server.crt (certificato), server.key (chiave privata), server.csr (certificato firmato).
Quando si viene interrogati sul Common Name inserire "server". Rispondere si alle seguenti domande, "Sign the certificate? [y/n]" and "1 out of 1 certificate requests certified, commit? [y/n]".

Generate certificates & keys for 3 clients

Adesso generiamo il certificato per i clients come nomi per i client potremmo sostituire quelli degli utenti invece di quelli proposti dalla guida

./build-key client1
./build-key client2
./build-key client3

Generate Diffie Hellman parameters

E' necessario generare i parametri per l'algoritmo di diffie hellman

./build-dh

Key files

Ecco copiato dalla guida il significato di ogni chiave

Filename Needed By Purpose Secret
ca.crt server + all clients Root CA certificate NO
ca.key key signing machine only Root CA key YES
dh{n}.pem server only Diffie Hellman parameters NO
server.crt server only Server Certificate NO
server.key server only Server Key YES
client1.crt client1 only Client1 Certificate NO
client1.key client1 only Client1 Key YES

Adesso bisogna distribuire le chiavi e i certificati ai client, attraverso un canale sicuro (ssh non è male). Se si volesse che le chiavi primate *.key non girino per la rete si potrebbe fare generare le chiavi private e i certificati ai client, spedire solo i certificati alla ca e farseli restituire firmati.

File di configurazioni esempi

 # Sample OpenVPN 2.0 config file for            #
    # multi-client server.                          #
    #                                               #
    # This file is for the server side              #
    # of a many-clients <-> one-server              #
    # OpenVPN configuration. 

;local a.b.c.d
#su quale indirizzo il server deve ascoltare

port 5000 
#si possono lanciare più istanze di openvpn sulla stessa macchina ma bisogna scegliere delle porte diverse ovviamente

# TCP or UDP server?
;proto tcp
proto udp

# "dev tun" will create a routed IP tunnel,
# "dev tap" will create an ethernet tunnel.
#usa tap0 se stai creando un bridge ethernet e hai creato prima una interfaccia virtuale tap0 e fatto il bridge con la tua interfaccia ethernet
# su linux se crei una nuova interfaccia devi abilitare le regole di firewall su questa

ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
#ogni client e server hanno un crt e key propria mentre la ca è comune

sulla pagina web alla fine c'è il file di esempio con tutte le info per ogni parametro.

Revoking Certificates

cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
source vars
./revoke-full nome-utente

Il nome utente lo si trova dentro keys e corrisponde a quello del certificato senza estensione.

Dopo l'esecuzione si otterrà un messaggio come questo

Using configuration from /usr/share/doc/openvpn/examples/easy-rsa/2.0/openssl.cnf
Revoking Certificate 12.
Data Base Updated
Using configuration from /usr/share/doc/openvpn/examples/easy-rsa/2.0/openssl.cnf
nome-utente.crt: /C=IT/ST=RO/L=Roma/O=glamoo/CN=nome-utente/emailAddress=nome-utente@mail.com
error 23 at 0 depth lookup:certificate revoked

Nel file di configurazione del server vpn deve essere presente la direttiva
crl-verify crl.pem

Indica che è tutto a posto. Viene creato o aggiornato il file crl.pem che viene letto al momento in cui a openvpn viene chiesta l'autenticazione di un client. Questo vuol dire che non è necessario il riavvio del server quando si aggiunge un nuovo client alla lista dei revocati, (ovviamente quando cambio le impostazioni di configurazione del server la prima volta lo devo riavviare). Se il client che si vuole escludere è già connesso bisognerà stopparlo o riavviare il server.

Indirizzi ip statici per la vpn

As the man page says: "file is a comma-delimited ASCII file, formatted as <Common-Name>,<IP-address>". ipp.txt will either be created by OpenVPN itself after clients connect or, if you add a 0 as an optional argument, as in

ifconfig-pool-persist ipp.txt 0

Esempio mio funzionante

Server

local ip
port 5000
proto udp
dev tun
server 192.168.99.0 255.255.255.0
#ifconfig-pool-persist ipp.txt
push "route 192.168.211.0 255.255.255.0"
push "dhcp-option DNS 192.168.99.1"
tls-server
comp-lzo
dh /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/dh.pem
ca /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/ca.crt
cert /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/server.crt
key /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/server.key

Client
va caricato modrpobe tun da root

client 
proto udp
remote vpn.azienda.com 5000
dev tun
persist-key
persist-tun
mute-replay-warnings
comp-lzo
log-append openvpn.log
ca /etc/openvpn/ca.crt
cert /etc/openvpn/giuseppeclient.crt
key /etc/openvpn/giuseppeclient.key
verb 4

ccd dir

Per la configurazione di client con permessi separati da mettere dentro il file bisogna creare un file con il common name uguale a quello del certificato dentro la cartella ccd. In questo file bisogna mettere la direttiva ifconfig-push e una coppia di indirizzi di rete. L'ultimo numero di questi indirizzi deve seguire la coppia nella tabella sotto

ccd/sysadmin1

ifconfig-push 10.8.1.1 10.8.1.2

    [  1,  2] [  5,  6] [  9, 10] [ 13, 14] [ 17, 18]
    [ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
    [ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
    [ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
    [ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
    [101,102] [105,106] [109,110] [113,114] [117,118]
    [121,122] [125,126] [129,130] [133,134] [137,138]
    [141,142] [145,146] [149,150] [153,154] [157,158]
    [161,162] [165,166] [169,170] [173,174] [177,178]
    [181,182] [185,186] [189,190] [193,194] [197,198]
    [201,202] [205,206] [209,210] [213,214] [217,218]
    [221,222] [225,226] [229,230] [233,234] [237,238]
    [241,242] [245,246] [249,250] [253,254]

Client per windows

Il client per win si può scaricare dal sito.
Per le macchine a 64 bit win2003 ho usato questo client dalla pagina di openvpn a 64bit

Management Interface

Sorgente di questa sezione qui

La gestione di openvpn è stata fatta su modello client server su socket tcp. Adatta per essere collegata a una gui, ascolta su un indirizzo e su una porta. Dato che al momento è tutto in chiaro è consigliato usarla su indirizzo ip locale.
Per abilitare il server bisogna fornire le direttive

management
management-query-passwords
management-log-cache

Una volta che è tutto abilitato bisogna usare un client telnet che supporti il raw mode.

Aggiungiamo una riga al file di configurazione del server

management localhost 7505

Riavviamo e colleghiamoci con
telnet localhost 7505

help da la lista dei comandi.

Push dns su client linux

Su linux nonostante la direttiva lato server

push "dhcp-option DOMAIN intranet.azienda.com"
push "dhcp-option DNS 192.168.99.58"

le informazioni dns sotto linux non venivano iniettate al contrario di windows ho trovato la soluzione su http://www.jshsolutions.net/openvpn-pushing-dns-linux-clients/ bisogna aggiungere queste righe al file client.config
script-security 3  
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

e se non fosse installato bisogna mettere
apt-get install resolvconf
# la versione di openvpn deve essere 
openvpn --version
OpenVPN 2.1.3 x86_64-pc-linux-gnu

Avvio automatico

Dentro /etc/openvpn deve esserci un file .conf quello viene usato dal service per l'avvio della vpn

Salvo diversa indicazione, il contenuto di questa pagina è sotto licenza Creative Commons Attribution-ShareAlike 3.0 License