Realizziamo una VPN con openvpn

 

OpenVPN un sistema per collegarti alla tua rete

 

Scenario:

 

Analizziamo la nostra esigenza:

Lo scenario come da figura, mostra un lan con un server Microsoft Windows 2003, contenente una applicazione, da potereseguire con una postazione remota utulizzanto RDP (termina server),  sulla rete è presente un proxy con suse linux, che la funzione di filtrare la rete locale, con quella demilitarizzata. Per risolvere l'esigenza di connessione dall'esterno, vado a sfruttare il mio proxy installando il pacchetto OPENVPN.

 

Installazione OPENVPN;

Avviare yast installare il pacchetto openvpn, una volta installato controllare che sia stato creato il dispositivo “tun”, per verificare usare il comando:
ls /dev/net
nella cartella net trovere tun, nel caso non ci fosse bisogna caricare il modulo: modprobe –v tun.
Ora che abbiamo installato OPENVPN dobbiamo cifrare le comunicazioni

 

Cifrale le COMUNICAZIONI;

Il problema di questo scenario, è che chi chiama, non è provvisto di un ip statico, quindi non si può conoscere l’ip del client e di conseguenza creare quelle politiche dove solo determinati ip possono accedere alla vpn. Per poter identificare il client è necessario utilizzare un certificato digitale X.509, questo certificato deve essere creato dalla macchina con ip pubblico in questo caso il nostro proxy con OPENVPN. Per creare questi certificati esistono più sistemi. Io ho utilizzato il seguente:
portarsi nella cartella proxy: /usr/share/openvpn/easy-rsa/2.0 #
cd /usr/share/openvpn/easy-rsa/2.0
proxy:/usr/share/openvpn/easy-rsa/2.0 # ls
Makefile  build-key-pass  inherit-inter revoke-full README build-key-pkcs12  keys  sign-req build-ca build-key-server  list-crl  vars build-dh build-req openssl-0.9.6.cnf  whichopensslcnf build-inter  build-req-pass openssl.cnf build-key clean-all pkitool
Mofificare il file vars vedi il mio esempio:
# easy-rsa parameter settings
# NOTE: If you installed from an RPM,
# don't edit this file in place in
# /usr/share/openvpn/easy-rsa --
# instead, you should copy the whole
# easy-rsa directory to another location
# (such as /etc/openvpn) so that your
# edits will not be wiped out by a future
# OpenVPN package upgrade.
# This variable should point to
# the top level of the easy-rsa
# tree.
export EASY_RSA="`pwd`"
# This variable should point to
# the requested executables
export OPENSSL="openssl"
export PKCS11TOOL="pkcs11-tool"
export GREP="grep"
# This variable should point to
# the openssl.cnf file included
# with easy-rsa.
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
# Edit this variable to point to
# your soon-to-be-created key
# directory.
# WARNING: clean-all will do
# a rm -rf on this directory
# so make sure you define
# it correctly!
export KEY_DIR="$EASY_RSA/keys"
# Issue rm -rf warning
echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR
# PKCS11 fixes
export PKCS11_MODULE_PATH="dummy"
export PKCS11_PIN="dummy"
# Increase this to 2048 if you
# are paranoid.  This will slow
# down TLS negotiation performance
# as well as the one-time DH parms
# generation process.
export KEY_SIZE=1024
# In how many days should the root CA key expire?
export CA_EXPIRE=3650
# In how many days should certificates expire?
export KEY_EXPIRE=3650
# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="IT"
export KEY_PROVINCE="RM"
export KEY_CITY="SANTAMARINELLA"
export KEY_ORG="CASA"
export KEY_EMAIL="info@lanzagiuseppe.it"
ora creare la cartella keys : mkdir keys
dare i diritti a keys: chmod 777 keys
esegui I seguenti comandi:
proxy:/usr/share/openvpn/easy-rsa/2.0 #./clean-all
 proxy:/usr/share/openvpn/easy-rsa/2.0 # source ./vars
 proxy:/usr/share/openvpn/easy-rsa/2.0 # ./clean-all
 proxy:/usr/share/openvpn/easy-rsa/2.0 #./build-ca
questo ultimo script vi presenterà delle domande rispondente e avrete un certificato CA, questo certificato vi servirà per firmare tutti i certificati che andiamo a creare
Creiamo il server certificato per il server … per comodità lo chiamo server:
proxy:/usr/share/openvpn/easy-rsa/2.0 #./build-key-server server
rispondete alle domande in modo predefinito, arrivati al common name rispondete server e dare y quando vi sarà chiesto di procedere con la firma, a questo punto procediamo per i client, la procedura è come sopra ma lo script è diverso:
proxy:/usr/share/openvpn/easy-rsa/2.0 #./build-key nome-client
or ache abbiamo le key CA, del server chiamata server e infine del client chiamata nome-client eseguiamo il seguente comando:
proxy:/usr/share/openvpn/easy-rsa/2.0 #./build-dh
ora la directory  precedentemente create “keys” contiene una serie di file: ca.key dh1024.pem server.crt server.key server.crs nome-client.crt nome-client.crs nome-client.key, ora non resta che copiare i file della cartella keys in /etc/openvpn:
chmod –R 775 keys
cd keys
cp -puv /etc/openvpn /*

 

Configurare il servizio OPENVPN per il SERVER;

Ora che abbiamo copiato I certificate nella cartella /etc/openvpn, dobbiamo prendere il file openvpn.conf nel mio caso dalla cartella /usr/share/doc/packages/openvpn/sample-config-files  altri casi /usr/share/doc/openvpn/sample-config-files  e copiarlo nella cartella /etc/openvpn
Fatta la copia va editato il file openvpn.conf, attenzione il file è molto lungo ma nel nostro caso vanno editate solo poche righe:
cercare, e modificare come segue:

# open up this port on your firewall.
port 1194

# TCP or UDP server?
;proto tcp
proto udp

# "dev tun" will create a routed IP tunnel,
# "dev tap" will create an ethernet tunnel.
# the firewall for the TUN/TAP interface.
;dev tap
dev tun

# Windows needs the TAP-Win32 adapter name
# (see "pkcs12" directive in man page).
ca ca.crt
cert server.crt
key server.key  # ricordate sono le chiavi create

# Diffie hellman parameters.
# Generate your own with:
#   openssl dhparam -out dh1024.pem 1024
# Substitute 2048 for 1024 if you are using
# 2048 bit keys.
dh dh1024.pem

# Configure server mode and supply a VPN subnet
# back to the OpenVPN server.
;push "route 192.168.10.0 255.255.255.0"
push "route 192.168.1.0 255.255.255.0" questa server per far vedere la rete interna

# To assign specific IP addresses to specific

Ora salviamo il file e rinominiamolo in server.conf, dare il comando /etc/init.d/openvpn start e il gioco è fatto.
Nota bene: ricordati di riconfigurare il firewall e abilitare la porta udp 1194, nel caso di più interface, il firewall interno deve essere configurato in modo che l’interface tun sia impostata come interfaccia interna.

 

Configurare il servizio OPENVPN per il CLIENT Windows7;

Una volta avviato il portatile che deve connettersi alla VPN dobbiamo scaricare il file openvpn-2.2.1-install.exe installate il programma scaricato e entrate nella cartella C:\Program Files (x86)\OpenVPN\sample-config copiate il file client.ovpn nella cartella C:\Program Files (x86)\OpenVPN\config anche qui il file deve essere editato solo per poche righe:
# the firewall for the TUN/TAP interface.
;dev tap
dev tun # impostare come tun
# Windows needs the TAP-Win32 adapter name
# on the server.
;proto tcp
proto udp # impostare il protocollo in UDP
# The hostname/IP and port of the server.
# to load balance between the servers.
remote 213.203.111.111 1194 # qui va inserito l’indirizzo del server VPN
;remote my-server-2 1194

# Choose a random host from the remote
# for each client.  A single ca
# file can be used for all clients.
ca ca.crt
cert nome-client.crt
key nome-client.key # questo sono le chiavi create sul server

# Verify server certificate by checking
# that the certicate has the nsCertType

A questo punto salvate la configurazione, e copiate le chiavi ca.key, nome-client.crt e nome-client.key nome-client.crs create sul server nella cartella C:\Program Files (x86)\OpenVPN\config, avviamo dall’icona sul desktop in modalità amministratore openvpn, una volta avviato apparirà vicino all’orologio l’icona openvpn cliccare con il tasto dx del mouse e con il sx connetti. Avvenuta la connessione funziona tutto. Non rimane che configurare gli host della rete lan in modo che vengano visti dal portatile, nel nostro caso andiamo a configurare il terminal server:
entriamo nel server e apriamo la console con cmd al prompt di giatiamo la seguente tabella di routing:

route –p add 10.8.0.0 mask 255.255.255.0 192.168.1.1
dove –p sta per permanente 10.8.0.0 è la rete configurata nel file server.conf e 192.168.1.1 è il proxy, chiudere il terminale e riprovate dal client.
Una volta connessi, andiamo su start e nella finestra cerca programmi digitiamo mstsc.exe per la connessione in rdp, dare l’indirizzo del server, nel nostro caso 192.168.1.3 e vedrete la sessione del terminal server.