VAPP VPN setup

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.

image1 Figura 1: VPN

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).

image2 Figura 2: VPN balanced

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.