OpenVPN: Virtual Private Network daemon
Utilizzeremo quindi OpenVPN per connettere un client ad una rete VPN (Virtual Private Network)
Prerequisiti
OpenVPN è disponibile in due modi: precompilato (RPM e DEB) e con il codice sorgente. Noi prenderemo in considerazione la seconda ipotesi poiché è la più world-compatible.
Scarichiamoci quindi il nostro bel tarball openvpn:
wget http://openvpn.net/release/openvpn-2.0.9.tar.gz
e quindi scompattiamolo:
tar -xvf openvpn-2.0.9.tar.gz
Portiamoci quindi nella cartella di OpenVPN:
cd openvpn-2.0.9/
e avviamo lo script ./configure, che verifica l'esistenza delle librerie e headers necessari.
./configure
Quando ha finito di verificare e non ci sono più dipendenze da soddisfare, possiamo dare il make:
make
Adesso compilerà openvpn e creerà l'eseguibile, installabile con (da root oppure con sudo):
make install
Creazione certificati
Per l'accesso al server VPN, OpenVPN utilizza un sistema di certificati digitali: ogni client dovrebbe avere il suo certificato (anche se si può distribuire un solo certificato e farlo utilizzare a più clients). Andando per ordine:
Portiamoci ora nella directory easy-rsa e modifichiamo il file vars:
vi vars
Una volta personalizzato secondo le proprie opzioni, dare i comandi:
. ./vars
./clean-all
per applicare le variabili e fare pulizia dei vecchi files.
Creazione certificato C.A. root
Per creare il certificato root della Certification Authority locale, dare il comando:
./build-ca
Questo crea due files (ca.crt e ca.key).
Creazione parametri Diffie-Hellman
Per creare il file .dh dare il comando:
./build-dh
Creazione certificato per il client
Anche se ho usato il singolare per il titolo, è sott'inteso che si possono creare più certificati per più clients. Ci sono 3 diversi tipi di certificato. Ne basta crearne uno con un tipo, quindi se non sapete cosa scegliere, usate il primo.
Usare il comando:
./build-key nomecertificato
per creare un certificato standard. Usare invece:
./build-key-pass nomecertificato
per creare un certificato protetto con password. Usare infine:
./build-key-pkcs12 nomecertificato
per creare un certificato nel formato PKCS #12.
Configurazione server
Ecco un file di esempio preso da OpenVPN. Personalizzatelo e poi vedremo come usarlo:
# Indirizzo sul quale essere in ascolto
;local a.b.c.d
# Porta di OpenVPN. Utile cambiarla se vuoi
# avviare più istanze di OpenVPN insieme.
port 1194
# TCP or UDP?
;proto tcp
proto udp
# "dev tun" crea un tunnel IP routed,
# "dev tap" crea un tunnel ethernet.
# Usa "dev tap0" se vuoi usare un bridge ethernet
# e hai precedentemente creato l'interfaccia tap0
# e l'hai aggiunta al bridge.
# Se vuoi creare le policy di accesso sulla VPN,
# devi creare le regole del firewall per le
# interfacce TUN/TAP.
# Nei sistemi non-Windows, puoi dare un numero
# come tun0.
# Su Windows, usa "dev-node" per farlo.
;dev tap
dev tun
# Windows ha bisogno del nome dell'adattatore.
# Nei sistemi XP SP2 o più nuovi, potresti
# avere bisogno di disabilitare Windows
# Firewall sull'adattatore TAP.
# I sistemi non-Windows generalmente non
# hanno bisogno di farlo.
;dev-node MyTap
# Certificato Root SSL/TLS (C.A.), certificato
# (cert), e chiave privata (key). Ogni client
# e il server devono avere il loro certificato
# e il file chiave. Il server e tutti i clients
# usano lo stesso file C.A.
#
# Vedi nella cartella easy-rsa per una serie
# di script per generare certificati RSA e
# chiavi private. Ricorda di usare un
# Common Name diverso per il server e per
# ogni client.
#
# Può essere usato qualsiasi sistema
# di gestione delle chiavi X509. OpenVPN può
# inoltre usare le chiavi nel formato PKCS #12.
ca ca.crt
cert server.crt
key server.key # Questo file DEVE essere segreto
# File di parametri di Diffie Hellman.
dh dh1024.pem
# Configura le modalità del server e fornisci
# una subnet VPN per OpenVPN. Il server
# Prende il primo indirizzo per se, gli
# altri restano a disposizione per i clients.
# Ad esempio, se la rete è 10.8.0.0, il
# server si prenderà 10.8.0.1.
# Commenta questa linea se usi un bridge
# ethernet. Vedi le pagine man per info.
server 10.8.0.0 255.255.255.0
# Mantiene le corrispondenze client <-> IP
# in questo file. Se OpenVPN dovesse cadere
# o è riavviato, i client alla riconnessione
# viene fornito lo stesso IP.
ifconfig-pool-persist ipp.txt
# Configura il server per l'ethernet bridging.
# Devi usare prima le opzioni di bridge del tuo
# OS per unire l'interfaccia TAP con la scheda NIC.
# Quindi devi impostare manualmente IP/netmask
# nell'interfaccia di bridge. Infine devi impostare
# il range di IP di questa subnet da riservare
# per i clients. Lascia la linea commentata
# se non usi l'ethernet bridging.
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
# Tabella di routing da mandare ai clients.
# Sappi che anche il resto della rete locale
# deve avere il percorso di route della VPN.
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
# DNS e WINS
;push "dhcp-option DNS 10.8.0.1"
;push "dhcp-option WINS 10.8.0.1"
# Decommenta questa direttiva per consentire
# i clients di "vedersi" tra di loro.
# Di default, i clients possono solo vedere
# il server.
;client-to-client
# Decommenta questa linea se vuoi che
# lo stesso certificato può essere
# usato per più connessioni contemporanee
# da client diversi.
#
# SE HAI GENERATO UNA CHIAVE INDIVIDUALE
# NON DOVRESTI DECOMMENTARE QUESTA LINEA.
;duplicate-cn
# Questa direttiva causa dei messaggi
# tipo ping, per controllare il link.
# Il primo paramentro sono gli intervalli
# (in secondi) dei ping. Il secondo è
# il timeout del ping.
keepalive 10 120
# Abilita la compressione del link.
# Se la abiliti qui, devi abilitarla
# anche nei clients.
comp-lzo
# Numero massimo dei clients da connettere.
;max-clients 100
# Nei sistemi non Windows si possono impostare
# privilegi ridotti ad un utente da
# assegnare a OpenVPN.
;user nobody
;group nobody
# Prova a preservare alcune cose nel restart.
persist-key
persist-tun
# Registro di stato
status openvpn-status.log
# Per default, i messaggi di log vanno a finire
# nel syslog (o, in Windows, in
# "\Program Files\OpenVPN\log")
# Usa una di queste direttive per personalizzare.
;log openvpn.log
;log-append openvpn.log
# Imposta il livello del log
#
# 0 niente tranne gli errori fatali
# 4 pre l'uso normale
# 5 e 6 possono aiutare per il debug
# 9 è estremamente dettagliato
verb 3
# Raggruppa i messaggi ripetuti. Fino
# a 20 messaggi ripetuti possono essere
# "ridotti" ad un messaggio nel log.
;mute 20
Salvatelo in una cartella.
Partenza OpenVPN Server
Per far partire OpenVPN, dare il comando (nella directory della configurazione):
openvpn ./server.conf
Se tutto va bene, OpenVPN aspetterà le connessioni dei clients.
Configurazione clients
Ecco il file di configurazione per il client. Personalizzatelo e salvatelo:
# Specifica che siamo Client
client
# Usa lo stesso settaggio del server.
;dev tap
dev tun
# Nome dell'adattatore TAP di Windows.
;dev-node MyTap
# TCP o UDP? Usa lo stesso per il server.
;proto tcp
proto udp
# Hostname/IP e porta del server remoto.
# Puoi inserire diversi server qui, per
# il bilanciamento del carico.
remote vattelapesca.org 1194
# Seleziona gli host in modo random,
# altrimenti prova gli host nell'ordine.
;remote-random
# Continua all'infinito a risolvere l'host
# name del server OpenVPN. E' particolarmente
# indicato per le macchine che non hanno
# una connessione permanente ad internet,
# come i portatili.
resolv-retry infinite
# I client non hanno bisogno di restare
# in ascolto su una porta specifica
nobind
# Imposta utente meno privilegiato (non-Windows only)
;user nobody
;group nogroup
# Prova a preservare alcune cose nel restart.
persist-key
persist-tun
# Se ti devi connettere attraverso un
# proxy per raggiungere il server OpenVPN,
# imposta l'indirizzo IP del proxy e
# la porta qui.
;http-proxy-retry # Riprova al fallimento
;http-proxy [proxy server] [proxy port #]
# Le reti wireless producono molti
# pacchetti duplicati. Impostalo per
# ridurre i warning dei pacchetti.
;mute-replay-warnings
# Certificato Root SSL/TLS (C.A.), certificato
# (cert), e chiave privata (key). Ogni client
# e il server devono avere il loro certificato
# e il file chiave. Il server e tutti i clients
# usano lo stesso file C.A.
#
ca ca.crt
cert client.crt
key client.key
# Verifica il certificato del server
# controllando nsCertType.
#
# Per usare questa opzione, devi generare il
# certificato con l'opzione nsCertType a "server".
;ns-cert-type server
# Se usi anche una chiave tls-auth, impostala
;tls-auth ta.key 1
# Seleziona il cipher crittografico.
;cipher x
# Abilita compressione sul link VPN.
# Da abilitare solo se abilitata al server.
comp-lzo
# Imposta il livello del log
#
# 0 niente tranne gli errori fatali
# 4 pre l'uso normale
# 5 e 6 possono aiutare per il debug
# 9 è estremamente dettagliato
verb 3
# Raggruppa i messaggi ripetuti. Fino
# a 20 messaggi ripetuti possono essere
# "ridotti" ad un messaggio nel log.
;mute 20
Partenza OpenVPN Server
Per far partire OpenVPN, dare il comando (nella directory della configurazione):
openvpn ./client.conf
Se tutto va bene, OpenVPN si connetterà al server specificato.
|