Architettura
Sono presenti due Virtual Appliance, la prima, un Application Delivery Controller (ADC) che effettuerà LoadBalancing NAT-Traversal (che chiameremo NAT-T) tra la rete pubblica e DMZ mentre l'altra conterrà la componente VPN (che chiameremo VPN server) tra la DMZ e la rete intranet, la quale permetterà di accedere ai sistemi informatici aziendali (vedi Figura 1). All'interno di quest'ultima è stato installato Easy RSA, che verrà utilizzato per la creazione e verifica dei certificati. Quando un client si vuole collegare alla VPN, passerà prima per NAT-T il quale ha un listener pubblico che ascolta in porta 45483. Tutte le connessioni a questa porta verranno inoltrate verso VPN server in porta 1194. A questo punto verrà controllato il certificato del client che si vuole collegare alla VPN e, se valido, VPN server assegnerà al client un indirizzo IP 10.8.0.X. Non appena il client riceverà l'assegnazione dell'IP, potrà accedere alla rete intranet aziendale. Questa architettura permette di separare completamente i due ambienti pubblico e intranet utilizzando la DMZ come fascia di sicurezza.
Per assicurare che la VPN rimanga sempre operativa, VPN server può essere duplicato e gli deve essere assegnato un indirizzo IP diverso da quello precedente. Attraverso il bilanciatore di Oplon ADC se un VPN server smette di funzionare per qualsiasi motivo, anche per manutenzione, il traffico verrà inoltrato nell'altro VPN server mantenendo la continuità operativa (vedi Figura 2).
Compatibility Matrix e dimensionamento licenze Freeware
Le VAPP distribuite e disponibili direttamente dal download sono per le più diffuse piattaforme virtuali oggi sul mercato, altre immagini virtuali possono essere richieste a Oplon attraverso e-mail: customercare@oplon.net.
Immagini direttamente disponibili dal sito:
VMware Compatibility ESXi 5.1 and later (con OS di base "Powered by CentOS")
Virtual BOX all versions (con OS di base "Powered by CentOS")
Le Virtual appliance sono licenziate per queste risorse:
CPU: max 2
RAM: max 5120MB
Se si assegnano più risorse l'application delivery controller non eseguirà lo start
Primi step
Dal manuale LBL_VAPP_NATT_setup_ita.pdf
eseguire i paragrafi da 4 a 12 e
quindi proseguire.
Setup CA (Certificate Authority)
Easy RSA usa un set di script per generare le chiavi e i certificati.
Prima di tutto bisogna configurare la CA.
Per fare questo, bisogna accedere alla riga di comando della Virtual
Appliance VPN server e andare in /etc/VPN server/easy-rsa
scrivendo:
cd /etc/VPN server/easy-rsa
Creare poi un nuovo file chiamandolo vars con il seguente comando:
nano vars
oppure
vi vars
Aggiungere il testo seguente inserendo le informazioni al posto del testo scritto in colore rosso:
set_var EASYRSA "$PWD"
set_var EASYRSA_PKI "$EASYRSA/pki"
set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "ITALIA"
set_var EASYRSA_REQ_PROVINCE "Padova"
set_var EASYRSA_REQ_CITY "Padova"
set_var EASYRSA_REQ_ORG "OPLON CERTIFICATE AUTHORITY"
set_var EASYRSA_REQ_EMAIL "admin@oplon.net"
set_var EASYRSA_REQ_OU "OPLON EASY CA"
set_var EASYRSA_KEY_SIZE 2048
set_var EASYRSA_ALGO rsa
set_var EASYRSA_CA_EXPIRE 7500
set_var EASYRSA_CERT_EXPIRE 365
set_var EASYRSA_NS_SUPPORT "no"
set_var EASYRSA_NS_COMMENT "OPLON CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR "/etc/VPN server/easy-rsa/x509-types"
set_var EASYRSA_SSL_CONF "/etc/VPN server/easy-rsa/openssl-easyrsa.cnf"
set_var EASYRSA_DIGEST "sha256"
Salvare il file una volta finito. Eseguire il comando seguente per creare la PKI:
./easyrsa init-pki
Output:
Note: using Easy-RSA configuration from: ./vars
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /pki
Adesso bisogna creare il certificate della CA attraverso il comando seguente:
./easyrsa build-ca
Si otterrà un output simile a questo:
Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.1.1c FIPS 28 May 2019
Enter New CA Key Passphrase:
Re-Enter New CA Key Passphrase:
Generating RSA private key, 2048 bit long modulus (2 primes)
....................................................................+++++
..........................................................................................................................................+++++
e is 65537 (0x010001)
Can't load /etc/VPN server/easy-rsa/pki/.rnd into RNG
140218549745472:error:2406F079:random number
generator:RAND_load_file:Cannot open
file:crypto/rand/randfile.c:98:Filename=/etc/VPN
server/easy-rsa/pki/.rnd
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a
DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/pki/ca.crt
Il comando appena eseguito genera due file chiamati ca.key e ca.crt. Questi file saranno usati per firmare i certificati del server e dei client.
Generazione del certificato del server
Ora bisogna generare una coppia di chiavi e una richiesta del certificato per il server. Eseguire il seguente comando per generare i file chiamandoli server:
./easyrsa gen-req server nopass
Output:
Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.1.1c FIPS 28 May 2019
Generating a RSA private key
...........................+++++
...............................................................................................................................................................................................................................................................................................+++++
writing new private key to '/pki/private/server.key.kOlBTwtY6a'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a
DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [server]:
Keypair and certificate request completed. Your files are:
req: /pki/reqs/server.req
key: /pki/private/server.key
Firmare la richiesta del Server usando la CA
Adesso bisogna firmare la richiesta del server appena generata usando il certificato della CA eseguendo il seguente comando:
./easyrsa sign-req server server
Output:
Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.1.1c FIPS 28 May 2019
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this
request has not been cryptographically verified. Please be sure it came
from a trusted source or that you have verified the request checksum
with the sender.
Request subject, to be signed as a server certificate for 365 days:
subject= commonName = server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /pki/safessl-easyrsa.cnf
Enter pass phrase for /pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'server'
Certificate is to be certified until Feb 16 05:00:50 2021 GMT (365 days)
Write out database with 1 new entries
Data Base Updated
Certificate created at: /pki/issued/server.crt
Verificare il certificato appena generato:
openssl verify -CAfile pki/ca.crt pki/issued/server.crt
Se tutto è andato a buon fine, si dovrebbe ottenere il seguente output:
pki/issued/server.crt: OK
A questo punto, per aggiungere un ulteriore livello di sicurezza, generare una chiave Diffie-Hellman che viene usata per lo scambio delle chiavi:
./easyrsa gen-dh
Output:
Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.1.1c FIPS 28 May 2019
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
....+................................+........................................+.....++*++*++*++*
DH parameters of size 2048 created at /pki/dh.pem
Adesso bisogna copiare tutti i file creati, all'interno della directory
/etc/VPN server/server/
:
cp pki/ca.crt /etc/VPN server/server/
cp pki/dh.pem /etc/VPN server/server/
cp pki/private/server.key /etc/VPN server/server/
cp pki/issued/server.crt /etc/VPN server/server/
Generare chiavi e certificato del Client
A questo punto bisogna generare le chiavi e il certificato per i client. Prima di tutto si generano le chiavi e la richiesta del certificato con, al posto di "client", il nome che si vuole (noi per semplicità useremo la parola client):
./easyrsa gen-req client nopass
Output:
Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.1.1c FIPS 28 May 2019
Generating a RSA private key
......................................................+++++
...+++++
writing new private key to '/pki/private/client.key.e38GUtzHie'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a
DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [client]:
Keypair and certificate request completed. Your files are:
req: /pki/reqs/client.req
key: /pki/private/client.key
Ora si firma la richiesta del client usando il certificato della CA:
./easyrsa sign-req client client
Output:
Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.1.1c FIPS 28 May 2019
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this
request
has not been cryptographically verified. Please be sure it came from a
trusted
source or that you have verified the request checksum with the sender.
Request subject, to be signed as a client certificate for 365 days:
subject= commonName = client
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /pki/safessl-easyrsa.cnf
Enter pass phrase for /pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'client'
Certificate is to be certified until Feb 16 05:11:19 2021 GMT (365 days)
Write out database with 1 new entries
Data Base Updated
Certificate created at: /pki/issued/client.crt
A questo punto copiare tutti i certificati e chiavi del client nella
directory /etc/VPN server/client/
:
cp pki/ca.crt /etc/VPN server/client/
cp pki/issued/client.crt /etc/VPN server/client/
cp pki/private/client.key /etc/VPN server/client/
Configurare la VPN del Server
Per configurare la VPN all'interno del server, aprire il file /etc/VPN
server/server/server.conf
e, nella riga 11, dove c'è scritto push
,
sostituire l'indirizzo in rosso con l'indirizzo interno verso la quale
si vuole fare routing.
push "route 192.168.1.0 255.255.255.0"
Salvare il file dopo aver effettuato la modifica. Si possono aggiungere più comandi push.
Eseguire il servizio della VPN
Per avviare il servizio della VPN, eseguire i seguenti comandi:
systemctl start VPN server-server@server
systemctl enable VPN server-server@server
Per verificare che il servizio di VPN sia effettivamente partito, eseguire:
systemctl status VPN server-server@server
Si dovrebbe ottenere il seguente output:
● VPN server-server@server.service - VPN server service for server
Loaded: loaded (/usr/lib/systemd/system/VPN server-server@.service;
enabled; vendor preset: disabled)
Active: active (running) since Mon 2020-02-17 00:29:26 EST; 39min ago
Docs: man:VPN server(8)
https://community.VPN server.net/VPN server/wiki/VPN server24ManPage
https://community.VPN server.net/VPN server/wiki/HOWTO
Main PID: 32405 (VPN server)
Status: "Initialization Sequence Completed"
Tasks: 1 (limit: 12552)
Memory: 1.9M
CGroup: /system.slice/system-VPN serverx2dserver.slice/VPN
server-server@server.service
└─32405 /usr/sbin/VPN server --status /run/VPN
server-server/status-server.log --status-version 2
--suppress-timestamps --cipher AES-256->
Feb 17 00:29:26 centos8 systemd[1]: Starting VPN server service for
server...
Feb 17 00:29:26 centos8 systemd[1]: Started VPN server service for
server.
Una volta che il servizio della VPN è abilitato, verrà creato in automatico una interfaccia network chiamata tun0. Si può verificare con il seguente comando:
ifconfig
Si dovrebbe vedere l'interfaccia tun0:
eth0: flags=4163 mtu 1500
inet 100.245.36.127 netmask 255.255.255.0 broadcast 104.245.36.255
inet6 fe80::200:68ff:fef5:247f prefixlen 64 scopeid 0x20
ether 00:00:68:f5:24:7f txqueuelen 1000 (Ethernet)
RX packets 1926738 bytes 314886412 (300.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 174907 bytes 29557250 (28.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 216 bytes 40041 (39.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 216 bytes 40041 (39.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
tun0: flags=4305 mtu 1500
inet 10.8.0.1 netmask 255.255.255.255 destination 10.8.0.2
inet6 fe80::4152:a673:b260:d9e6 prefixlen 64 scopeid 0x20
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100
(UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4 bytes 304 (304.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Modificare la configurazione del Client
All'interno della directory /etc/VPN server/client/
si troverà un file
chiamato client.ovpn
, modificare la riga numero 4 aggiungendo
l'indirizzo del listener pubblico della Virtual Appliance NAT-T:
remote 0.0.0.0 45483
Modificare anche la riga 6 e 7 con il nome corretto del certificato e della chiave:
cert client.crt
key client.key
Salvare il file.
Connettersi dal Client
Da client scaricare e installare VPN server dal seguente link
https://VPN
server.net/community-downloads/.
Scaricare anche tutti i file che si trovano nella directory /etc/VPN
server/client del server
, dentro la cartella locale
C:\Users\<username>\VPN server\config
.
Fatto questo avviare VPN server, comparirà nella barra di windows
un'icona di uno schermo con un lucchetto. Se non compare, verificare se
nei processi di windows c'è un processo che si chiama VPN server, se
si, chiudere il processo e riavviare VPN server, a questo punto
dovrebbe comparire l'icona.
Cliccare destro sull'icona e poi connetti.
Se compare il seguente errore:
ERROR: Windows route add command failed [adaptive]: returned error code 1
avviare VPN server come amministratore.