Pfsense e OpenVPN - Davide Benvegnù -...

13
PFSense e OpenVPN Davide Benvegnù www.davidebenvegnu.com www.dbtek.it blog.dbtek.it 1 Pfsense e OpenVPN VPN PER CLIENT REMOTI Creazione dei certificate su Unix/Linux Per prima cosa si devono scaricare i sorgenti di OpenVPN da: http://openvpn.net/download.html Si possono scaricare anche direttamente, usando “fetch” or “wget” se non si vuole/può utilizzare l’interfaccia grafica. Scaricati i sorgenti, bisogna scompattarli con il comando “tar -xvzf openvpn-*.tar.gz” e poi posizionarsi nella cartella “easy-rsa”. Aprire “vars” ed editare i valori alla fine del file secondo le proprie esigenze in modo da non dover riscrivere tutto ogni volta che si genera un certificato (la generazione prende questi valori come default). export KEY_COUNTRY=IT export KEY_PROVINCE=FVG export KEY_CITY=TRIESTE export KEY_ORG="Nome Organizzazione" export KEY_EMAIL="[email protected]" Editate queste informazioni, bisogna eseguire alcuni scripts. Quando verrà richiesto di inserire il “Common Name”, inserire l’hostname del server pfsense (si trova in “General Setup” della configurazione del pfsense). [/path/easy-rsa]# source ./vars [/path/easy-rsa]# ./clean-all [/path/easy-rsa]# ./build-ca Country Name (2 letter code) [IT]: (premere invio) State or Province Name (full name) [FVG]: (premere invio) Locality Name (eg, city) [TRIESTE]): (premere invio) Organization Name (eg, company) [Nome Ogranizzazione]: (premere invio) Organizational Unit Name (eg, section) [ ]:( premere invio o inserire la unit name) Common Name (eg, your name or your server's hostname) [ ]:HostnamePFSENSE Email Address [[email protected]]: (premere invio) Nello script seguente bisogna inserire “server” come Common Name. Premere “y” per firmare il certificato. [/path/easy-rsa]# ./build-key-server server Poi si devono generare i parametri DH: [/path /easy-rsa]# ./build-dh

Transcript of Pfsense e OpenVPN - Davide Benvegnù -...

Page 1: Pfsense e OpenVPN - Davide Benvegnù - Homedavidebenvegnu.com/uploads/1/1/8/8/11887893/pfsense_e...PFSense e OpenVPN Davide Benvegnù – – blog.dbtek.it 2 Infine, i certificati

PFSense e OpenVPN

Davide Benvegnù

www.davidebenvegnu.com – www.dbtek.it – blog.dbtek.it

1

Pfsense e OpenVPN

VPN PER CLIENT REMOTI

Creazione dei certificate su Unix/Linux

Per prima cosa si devono scaricare i sorgenti di OpenVPN da: http://openvpn.net/download.html

Si possono scaricare anche direttamente, usando “fetch” or “wget” se non si vuole/può utilizzare

l’interfaccia grafica.

Scaricati i sorgenti, bisogna scompattarli con il comando “tar -xvzf openvpn-*.tar.gz” e poi

posizionarsi nella cartella “easy-rsa”.

Aprire “vars” ed editare i valori alla fine del file secondo le proprie esigenze in modo da non dover

riscrivere tutto ogni volta che si genera un certificato (la generazione prende questi valori come

default).

export KEY_COUNTRY=IT

export KEY_PROVINCE=FVG

export KEY_CITY=TRIESTE

export KEY_ORG="Nome Organizzazione"

export KEY_EMAIL="[email protected]"

Editate queste informazioni, bisogna eseguire alcuni scripts. Quando verrà richiesto di inserire il

“Common Name”, inserire l’hostname del server pfsense (si trova in “General Setup” della

configurazione del pfsense).

[/path/easy-rsa]# source ./vars

[/path/easy-rsa]# ./clean-all

[/path/easy-rsa]# ./build-ca

Country Name (2 letter code) [IT]: (premere invio)

State or Province Name (full name) [FVG]: (premere invio)

Locality Name (eg, city) [TRIESTE]): (premere invio)

Organization Name (eg, company) [Nome Ogranizzazione]: (premere invio)

Organizational Unit Name (eg, section) [ ]:( premere invio o inserire la unit name)

Common Name (eg, your name or your server's hostname) [ ]:HostnamePFSENSE

Email Address [[email protected]]: (premere invio)

Nello script seguente bisogna inserire “server” come Common Name.

Premere “y” per firmare il certificato.

[/path/easy-rsa]# ./build-key-server server

Poi si devono generare i parametri DH:

[/path /easy-rsa]# ./build-dh

Page 2: Pfsense e OpenVPN - Davide Benvegnù - Homedavidebenvegnu.com/uploads/1/1/8/8/11887893/pfsense_e...PFSense e OpenVPN Davide Benvegnù – – blog.dbtek.it 2 Infine, i certificati

PFSense e OpenVPN

Davide Benvegnù

www.davidebenvegnu.com – www.dbtek.it – blog.dbtek.it

2

Infine, i certificati per i client (al posto di client1, client2, ecc si possono inserire i nomi dei client o

qualsiasi cosa che identifichi il destinatario del certificato):

[/path /easy-rsa]# ./build-key client1

[/path /easy-rsa]# ./build-key client2

[/path /easy-rsa]# ./build-key client3

Si possono creare quanti certificati client si vogliono. Se si deve successivamente creare un

certificato client nuovo, basta farlo con ./build-key client_name. È tassativo usare sempre un nome

diverso per ogni certificato. I certificati vanno creati tutti nella stessa cartella, altrimenti non

funzioneranno (eventualmente fare il backup della cartella dei certificati, in modo da poterne

generare altri senza dover rifare e reinstallare i certificati server).

Creazione dei certificati su Windows

Per generare i certificati su macchine windows si possono utilizzare diversi programmi, ma quello

piu semplice ed immediato è “My Certificate Wizard” (http://www.openvpn.se/mycert/)

Si devono generare tre tipi di certificati: Certificate Autorità (CA), server e client.

NB: è necessario aver installato una versione di OpenVPN

Generare il certificato della Certificate Authority (CA) e la sua chiave

Aprire un prompt di dos e posizionarsi in \Program Files\OpenVPN\easyrsa.

Eseguire il seguente filebatch file per copiare i file di configurazione (il comando sovrascriverà i

file vars.bat e openssl.cnf eventualmente presenti nella cartella):

init-config

Editare il file vars.bat impostando i seguenti valori senza lasciare alcun valore vuoto:

export KEY_COUNTRY=IT

export KEY_PROVINCE=FVG

export KEY_CITY=TRIESTE

export KEY_ORG="Nome Organizzazione"

export KEY_EMAIL="[email protected]"

Poi, inizializzare il PKI con i comandi:

vars

clean-all

build-ca

L’ultimo comando (build-ca) creerà il certificato per la certificate authority (CA) e la sua chiave

invocando l’eseguibile openssl che si trova nella cartella bin dell’installazione di OpenVPN. In

Page 3: Pfsense e OpenVPN - Davide Benvegnù - Homedavidebenvegnu.com/uploads/1/1/8/8/11887893/pfsense_e...PFSense e OpenVPN Davide Benvegnù – – blog.dbtek.it 2 Infine, i certificati

PFSense e OpenVPN

Davide Benvegnù

www.davidebenvegnu.com – www.dbtek.it – blog.dbtek.it

3

alcuni sistemi questo path non è riconosciuto come valido, quindi se i seguenti comandi generano

un errore di “Invalid command name”, bisogna editare i file .bat sostituendo a “openssl” il percorso

completo (ad esempio “C:\Programmi\OpenVPN\bin\openssl”):

c:\program files\openvpn\easy-rsa\build-ca

Generating a 1024 bit RSA private key

............++++++

...........++++++

writing new private key to 'ca.key'

Verrà richiesto l’inserimento dei valori di configurazione del certificato, alcuni gia impostati di

default (li prende dal file vars.bat). Per lasciare una campo vuoto, inserire un punto ( “.” ).

Nel Common Name inserire un valore che richiami il fatto che quello che si sta generando è il

certificato per la certificate autorità (ad esempio OpenVPN-CA)

Generare il certificato per il server e la sua chiave

Per la generazione del certificato server utilizzare il seguente comando, sempre dal prompt:

build-key-server server

Come nello step precedente, molti parametri saranno impostati di default. Quando sarà richiesto il

Common Name, inserire "server".

Rispondere infine “y” alle domande proposte:

"Sign the certificate? [y/n]" per firmare il certificato e

"1 out of 1 certificate requests certified, commit? [y/n]" per avviare la generazione

Generare i certificati per i client

Generare i certificati per i client è molto simile al passaggio precedente, solamente si usa un altro

comando:

build-key client1

build-key client2

build-key client3

Se si vuole anche proteggere con password le chiavi, utilizzare il comando build-keypass al posto

di build-key.

Per ogni client è necessario inserire il Common Name appropriato. È tassativo usare sempre un

nome diverso per ogni certificato. I certificati vanno creati tutti nella stessa cartella, altrimenti non

funzioneranno (eventualmente fare il backup della cartella dei certificati, in modo da poterne

generare altri senza dover rifare e reinstallare i certificati server).

Generare i paramenti Diffie Hellman (DH)

Per il server OpenVPN devono essere anche generati i parametri Diffie Hellman (DH).

Page 4: Pfsense e OpenVPN - Davide Benvegnù - Homedavidebenvegnu.com/uploads/1/1/8/8/11887893/pfsense_e...PFSense e OpenVPN Davide Benvegnù – – blog.dbtek.it 2 Infine, i certificati

PFSense e OpenVPN

Davide Benvegnù

www.davidebenvegnu.com – www.dbtek.it – blog.dbtek.it

4

build-dh

L’output mostrato sarà simile al seguente:

Generating DH parameters, 1024 bit long safe prime, generator 2

This is going to take a long time

.................+...........................................

...................+.............+.................+.........

......................................

Key Files

A questo punto abbiamo generato tutti i file necessari, si trovano tutti nella stessa cartella.

Nome

Richiesto per Funzione Segreto

ca.crt server + tutti i client Certificato principale CA NO

ca.key server Chiave principale CA SI

dh{n}.pem server Parametri Diffie Hellman NO

server.crt server Certificato del server NO

server.key server Chiave del server SI

client1.crt Client1 Cerificato del client1 NO

client1.key Client1 Chiave del client1 SI

client2.crt Client2 Cerificato del client2 NO

client2.key Client2 Chiave del client2 SI

client3.crt Client3 Cerificato del client3 NO

client3.key Client3 Chiave del client3 SI

Impostare la VPN per client remoti

Creati i certificati, è possibile configurare OpenVPN per la connessione dei client. Ciccare sul menu

VPN OpenVPN e poi sulla piccola icona “+” del tab “Server” per aggiungere una nuova

connessione VPN server.

Page 5: Pfsense e OpenVPN - Davide Benvegnù - Homedavidebenvegnu.com/uploads/1/1/8/8/11887893/pfsense_e...PFSense e OpenVPN Davide Benvegnù – – blog.dbtek.it 2 Infine, i certificati

PFSense e OpenVPN

Davide Benvegnù

www.davidebenvegnu.com – www.dbtek.it – blog.dbtek.it

5

Come si può vedere, è impostato come protocollo “TCP”, questo perché è noto che UDP può aver

problemi con alcuni router. Il TCP è leggermente più lento, ma per il momento è l’unico che

assicura il 100% di compatibilità

Abilitare il “Dynamic IP”. In questo modo i client possono connettersi anche senza impostare

manualmente un indirizzo ip della rete.

“Address pool” deve essere una sottorete indipendente che non è utilizzata in alcun segmento di rete

esistente. Questo è molto importante, altrimenti si possono provocare conflitti di indirizzi IP e, nel

migliore dei casi, comunque la VPN non funzionerebbe.

Cambiare il “Authentication method” impostando PKI (Public Key Infrastructure).

A questo punto bisogna incollare il testo dei certificati e delle chiavi negli appositi box. Aprire con

un editor di testo i file specificati e copiare il contenuto includendo:

-----BEGIN CERTIFICATE-----

&

-----END CERTIFICATE----

Page 6: Pfsense e OpenVPN - Davide Benvegnù - Homedavidebenvegnu.com/uploads/1/1/8/8/11887893/pfsense_e...PFSense e OpenVPN Davide Benvegnù – – blog.dbtek.it 2 Infine, i certificati

PFSense e OpenVPN

Davide Benvegnù

www.davidebenvegnu.com – www.dbtek.it – blog.dbtek.it

6

Page 7: Pfsense e OpenVPN - Davide Benvegnù - Homedavidebenvegnu.com/uploads/1/1/8/8/11887893/pfsense_e...PFSense e OpenVPN Davide Benvegnù – – blog.dbtek.it 2 Infine, i certificati

PFSense e OpenVPN

Davide Benvegnù

www.davidebenvegnu.com – www.dbtek.it – blog.dbtek.it

7

Dopo aver copiato i certificati e le chiavi, disattivare “LZO-Compression” (eventualmente sarà

possibile riabilitarla una volta verificato il funzionamento della VPN). Alla fine cliccare su

“SAVE”.

NB: Per permettere ai client di connettersi anche su altre reti al di fuori della LAN impostata,

bisogna inserire una rotta nel campo “Custom options”. Supponendo ad esempio di voler

connettersi anche alla DMZ, con indirizzo 192.168.2.0/24, bisogna scrivere:

push “route 192.168.100.0 255.255.255.0”

Regole sul firewall

Per fare in modo che i client si connettano al server OpenVPN, bisogna creare una regola che

permetta alle connessioni in entrata sull’interfaccia WAN di accedere alla porta 1194 (o quella

impostata per la VPN, se è stata cambiata)

Page 8: Pfsense e OpenVPN - Davide Benvegnù - Homedavidebenvegnu.com/uploads/1/1/8/8/11887893/pfsense_e...PFSense e OpenVPN Davide Benvegnù – – blog.dbtek.it 2 Infine, i certificati

PFSense e OpenVPN

Davide Benvegnù

www.davidebenvegnu.com – www.dbtek.it – blog.dbtek.it

8

Scegliere il menu “Firewall Rules”, cliccare sul tab “WAN” e infine sulla piccola icona “+” per

aggiungere una nuova regola.

Come Protocollo inserire “TCP” oppure “UDP” a seconda del protocollo scelto precedentemente

nella definizione del server.

“Destination port range” è la porta in ascolto del server OpenVPN, di default la 1194.

Cliccando su “Save” le modifiche verranno salvate.

Configurazione dei client (Windows)

Page 9: Pfsense e OpenVPN - Davide Benvegnù - Homedavidebenvegnu.com/uploads/1/1/8/8/11887893/pfsense_e...PFSense e OpenVPN Davide Benvegnù – – blog.dbtek.it 2 Infine, i certificati

PFSense e OpenVPN

Davide Benvegnù

www.davidebenvegnu.com – www.dbtek.it – blog.dbtek.it

9

Dopo aver configurato il server, è necessario creare i file di configurazione per i client, in modo che

possano connettersi da qualsiasi parte del mondo.

NB: ovviamente, i client devono aver installata una versione client di OpenVPN.

Creare un file di testo con il nome “nomeclient.ovpn” e inserire il testo di configurazione seguente:

float

port 1194

dev tun

proto tcp-client

remote IpPubblicoDiConnessione 1194

ping 10

persist-tun

persist-key

tls-client

ca ca.crt

cert client1.crt

key client1.key

ns-cert-type server

#comp-lzo

pull

verb 4

Eventualmente rimuovere il # se la comprezzione lzo è stata abilitata nella configurazione del

server.

Inoltre è necessario copiare i certificati generati precedentemente nella stessa cartella del file

appena creato. I file da copiare sono il certificato della Certificate Autority (CA), il certificato del

client e la sua chiave. (Ad esempio “ca.crt”, “client1.crt” e “client1.key”)

Page 10: Pfsense e OpenVPN - Davide Benvegnù - Homedavidebenvegnu.com/uploads/1/1/8/8/11887893/pfsense_e...PFSense e OpenVPN Davide Benvegnù – – blog.dbtek.it 2 Infine, i certificati

PFSense e OpenVPN

Davide Benvegnù

www.davidebenvegnu.com – www.dbtek.it – blog.dbtek.it

10

VPN SITE-TO-SITE

Ipotizzando una situazione di questo tipo:

Ufficio1 LAN: 192.168.0.0/24

Ufficio2 LAN: 192.168.1.0/24

impostare i server PfSense com indicato per connettere le due reti.

Bisognerà configurare un ufficio come server e l’altro come client

NB: se è gia stato configurato un accesso VPN per i client remoti, non modificare la configurazione

esistente ma aggiungere un nuovo tunnel.

Configurazione Ufficio1

Configuriamo l’Ufficio1 come server.

Dal menu “VPN OpenVPN”, selezionare il tab “Server” e fare click su “+”.

Utilizzare il protocollo TCP e, se sono stati configurati altri tunnel VPN, usare una porta diversa da

quelle utilizzate (nell’esempio è stata utilizzata la 1193). Ovviamente bisognerà creare una regola

sul firewall che permetta le connessioni dalla WAN su questa porta.

“Address pool” deve essere una sottorete indipendente, che non sia usata ne in Ufficio1 ne in

Ufficio2.

In “Remote network” inserire la rete LAN dell’Ufficio2.

Ora si deve creare la “Shared key”.

Fare il login sul server PfSense dell’Ufficio1 in SSH, digitare “8” (la shell) ed utilizzare il seguente

comando:

# openvpn --genkey --secret shared.key

Questo comando creerà la shared key per questo server OpenVPN. Generata la chiave, copiare il

contenuto del file shared.key appena creato nel box Shared Key dell’interfaccia Web e premere

“Save”.

Si deve copiare la shared key appena generata in modo da utilizzarla sul server nell’Ufficio2.

Page 11: Pfsense e OpenVPN - Davide Benvegnù - Homedavidebenvegnu.com/uploads/1/1/8/8/11887893/pfsense_e...PFSense e OpenVPN Davide Benvegnù – – blog.dbtek.it 2 Infine, i certificati

PFSense e OpenVPN

Davide Benvegnù

www.davidebenvegnu.com – www.dbtek.it – blog.dbtek.it

11

Page 12: Pfsense e OpenVPN - Davide Benvegnù - Homedavidebenvegnu.com/uploads/1/1/8/8/11887893/pfsense_e...PFSense e OpenVPN Davide Benvegnù – – blog.dbtek.it 2 Infine, i certificati

PFSense e OpenVPN

Davide Benvegnù

www.davidebenvegnu.com – www.dbtek.it – blog.dbtek.it

12

Configurazione Ufficio2

Dal menu “VPN OpenVPN”, selezionare il tab “Client” e fare click su “+”.

Utilizzare “TCP” come protocollo.

“Server address” deve essere l’IP pubblic dell’Ufficio1.

“Server port” è la porta di connessione per la VPN impostata sul PfSense dell’Ufficio1 (in questo

caso 1193.)

“Interface IP” deve essere l’indirizzo IP della rete locale.

“Remote network” è l’indirizzo IP della LAN dell’Ufficio1.

Incollare la shared key generata nell’Ufficio1 nel box shared key e alla fine cliccare su “Save”.

Page 13: Pfsense e OpenVPN - Davide Benvegnù - Homedavidebenvegnu.com/uploads/1/1/8/8/11887893/pfsense_e...PFSense e OpenVPN Davide Benvegnù – – blog.dbtek.it 2 Infine, i certificati

PFSense e OpenVPN

Davide Benvegnù

www.davidebenvegnu.com – www.dbtek.it – blog.dbtek.it

13

A questo punto il tunnel VPN tra le due sedi dovrebbe essere “up and running”.