domenica 20 marzo 2016

OpenVPN Server su pfSense 2.3

Una delle funzionalità più utilizzate su pfsense è certamente quella di terminatore VPN. Nonostante tutto è anche una delle configurazioni più insidiose per chi si avvicina al mondo del networking senza conoscenze teoriche adeguate poichè richiede conoscenze di routing, nat e firewalling. In quest'articolo riprenderemo quanto già visto negli articoli Configurare OpenVPN Server su pfSense e Creare una VPN Site to Site con OpenVPN attualizzando le configurazioni già viste ed aggiungendo qualche spunto che possa dare qualche strumento in più per non incappare in problemi di configurazione.


Come anticipato, prenderemo in esame la configurazione di un server OpenVPN come parte di una connessione Site to Site.

Prima di partire occorre ricordare che la configurazione che andremo a realizzare è stata fatta con la versione 2.3 che al momento in cui scrivo l'articolo è ancora in Beta.

Il primo concetto da tenere ben presente è che, a differenza di altre tipologie di VPN, con OpenVPN in configurazione Site to Site uno dei terminatori si comporta da server e gli altri (possono essere anche più di uno) si comportano da client.

Per poter procedere con la configurazione di OpenVPN server occorre effettuare alcune operazioni preliminari che prevedono la creazione dei certificati digitali.

Per iniziare dobbiamo creare 3 tipi di certificati:
  • Un certificato per la nostra Certification Authority;
  • Un certificato di tipo server per il nostro pfSense;
  • Un certificato di tipo user per i client OpenVPN. Se dovessimo avere più sedi che devono collegarsi in VPN è bene creare un certificato per ogni sede.

Configurazione del server


Creazione del certificato della CA:

Portarsi nel menù System > Cert Manager > CAs
Cliccare su Add
Compilare in modo preciso i campi sotto ripotati per la creazione del nostro certificato
  1. Descriptive Name: Nome del certificato
  2. Method: Create an internal Certificate Authority
  3. Key length: 2048
  4. Digest Algorithm: sha256
  5. Lifetime: 3650 days (10 anni)
  6. Country Code:
  7. State or Province:
  8. City:
  9. Organization:
  10. Email Address:
  11. Common Name: internal-ca
Cliccare su Save



Creazione del certificato Server:
Potarsi nel menù System > Cert Manager > Certificates
Cliccare su Add
Compilare in modo preciso i campi sotto ripotati per la creazione del nostro certificato
  1. Method: Create an internal Certificate
  2. Descriptive Name: Nome del certificato
  3. Certificate Authority: Nome impostato nel certificato della CA
  4. Key length: 2048
  5. Digest Algorithm: sha256 
  6. Certificate Type: Server Certificate
  7. Lifetime: 3650 days (10 anni)
  8. Distinguished Name:
  9. Country Code:
  10. State or Province:
  11. City:
  12. Organization:
  13. Email Address:
  14. Common Name: nome dns firewall
Cliccare su Save

Creazione del certificato Utente:
 
Potarsi nel menù System > Cert Manager > Certificates
Cliccare su Add
Compilare in modo preciso i campi sotto ripotati per la creazione del nostro certificato
  1. Method: Create an internal Certificate
  2. Descriptive Name: Nome del certificato
  3. Certificate Authority: Nome impostato nel certificato della CA
  4. Key length: 2048
  5. Digest Algorithm: sha256  
  6. Certificate Type: User Certificate
  7. Lifetime: 3650 days (10 anni)
  8. Distinguished Name:
  9. Country Code:
  10. State or Province:
  11. City:
  12. Organization:
  13. Email Address:
  14. Common Name: nome dns firewall
Cliccare su Save

Creazione della Certificate Revocation List

A questo punto è buona prassi creare anche  una Certificate Revocation List che tornerà utile nel momento in cui ci sarà da invalidare dei certificati.

Potarsi nel menù System > Cert Manager > Certificate Revocation
Cliccare su Add or Import CRL in corrispondenza del nome del certificato della nostra CA
 
Compilare in modo preciso i campi sotto ripotati per la creazione del nostro certificato
  1. Method: Create an internal Certificate
  2. Descriptive Name: CRL
  3. Certificate Authority: Nome impostato nel certificato della CA
  4. Lifetime: 9999 days
  5. Serial: 0
Cliccare su Save


Configurazione del server OpenVPN

Portarsi nel menù VPN > OpenVPN > Server

Cliccare su Add

Impostare i seguenti campi:
  1. Server Mode: Peer to Peer (SSL/TSL)
  2. Protocol: UDP
  3. Device Mode: tun
  4. Interface: WAN (interfaccia su cui viene fatto il bind)
  5. Local Port: 1194
  6. Description: SITE TO SITE
  7. TLS authentication: YES
  8. Automatically generate a shared TLS authentication key: YES
  9. Peer Certificate Authority: Selezionare il certificato della CA
  10. Peer Certificate Revocation List: Selezionare  la CRL appena creata
  11. Server Certificate: Selezionare il certificato del server
  12. DH Parameters Length: 1024 bits
  13. Encryption algorithm: AES-128-CBC (128 bit)
  14. Auth digest algorithm: SHA1 (160-bit)
  15. Hardware Crypto: selezionare una eventuale scheda di accelerazione
  16. Certificate Depth: One (Client+Server)
  17. Tunnel Network: Inserire una subnet per il tunnel, non usare subnet in uso da client o server. Se abbiamo un solo client VPN è consigliabile utilizzare una subnet /30
  18. Compression: Enabled whit Adaptive Compression (l'opportunità di utilizzare o meno la compressione dipende dal tipo di traffico effettuato sulla VPN)

Attenzione
Per avere un maggior controllo sulle tabelle di routing di server e client preferisco non compilare i campi IPv4 Local network(s) ed IPv4 Remote network(s) ed utilizzare il campo Custom options per impartire direttive route e push route

Cliccare su Save


A questo punto la configurazione del nostro server è completa ma per fare un lavoro ben fatto aggiungiamo altri due passaggi.

Configurazione dell'interfaccia Virtuale

Per poter utilizzare il tunnel VPN come gateway nelle roules o per creare rotte statiche, è necessario assegnare al tunnel VPN un interfaccia virtuale.

Portarsi nel menù Interfaces > (assign) 

Nella colonna Network port selezionare ovpns1 (SITE TO SITE)
Cliccare su Add per aggiungere la nuova interfaccia

Cliccare sul nome della nuova interfaccia, tipicamente optx

Nell'interfaccia effettuare le seguenti modifiche:
  1. Enable: Yes
  2. Description: OPENVPN_SERVER

Cliccare su Save


Configurazione Client Specific Overrides

Nella fase di configurazione del server VPN avevamo visto che la subnet da impiegare per un tunnel site to site con due soli partecipanti (un server ed un client) è sufficiente utilizzare una subnet /30.
Una subnet /30 ha solo 2 IP utilizzabili di cui il primo viene assegnato al server mentre il secondo viene assegnato al client. Questo fa si che il server ed il client conoscano in modo inequivocabile quali modifiche effettuare alle tabelle di routing.

Nel caso in cui il server OpenVPN debba terminare le VPN di più sedi (quindi avrà più client), è necessario utilizare un subnet più ampia.
In questo caso occorre istruire client e server in modo che possano modificare le rispettive taebelle di routing in modo corretto, per farlo facciamo ricorso agli overrides.


Portarsi nel menù VPN > OpenVPN > Client Specific Overrides

Cliccare su Add

Impostare i seguenti campi:
  1. Server List: OpenVPN Server 1: SITE TO SITE
  2. Common name: Riportare il nome esatto del certificato del client
  3. Description: Per comodità riporto quanto messo nel campo precedente
  4. Advanced: iroute subnet del client (qui va indicata la subnet della lan del client raggiungibile attraverso il tunnel VPN)
Cliccare su Save


Impostare le regole di firewall

A questo punto non ci resta che configurare il firewall affinchè permetta il traffico verso la wan sulla porta 1194 UDP per ricevere le connessioni dai client OpenVPN e creare le regole sull'interfaccia virtuale per permettere il traffico tra i due site della vpn.

Portarsi sul menù Firewall > Rules > WAN
Cliccare su Add
E compilare i seguenti campi:
  1. Action: Pass
  2. Protocol: UDP
  3. Destination Port Range: From OpenVPN to OpenVPN  
Cliccare su Save


Portarsi sul menù Firewall > Rules > OPENVPN_SERVER
Cliccare su Add
E compilare i seguenti campi:
  1. Action: Pass
  2. Protocol: Any
  3. Source: Any  
  4. Destination: Any 
Cliccare su Save

Configurazione del Client


Ora possiamo passare alla configurazione del client.

Import dei certificati

Come prima cosa importiamo i certificati della CA e del Client

Portarsi sul menù System > Cert Manager > CAs
Cliccare su Add
E compilare i seguenti campi:
  1. Descriptive name: Nome del Certificato
  2. Method: Import an existing Certificate Authority
  3. Certificate data: Inserire il certificato della CA creato sul server
Cliccare su Save

Portarsi sul menù System > Cert Manager > Certificates
Cliccare su Add
E compilare i seguenti campi:
  1. Descriptive name: Nome del Certificato
  2. Method: Import an existing Certificate Authority
  3. Certificate data: Inserire il certificato del client
  4. Certificate Private Key: Inserire la chiave del certificato client
Cliccare su Save


Configurazione del Client OpenVPN
 rsi nel menù VPN > OpenVPN > Clients

Cliccare su Add


Impostare i seguenti campi:
  1. Server Mode: Peer to Peer (SSL/TSL)
  2. Protocol: UDP
  3. Device Mode: tun
  4. Interface: WAN (interfaccia su cui viene fatto il bind)
  5. Server host or address: IP Pubblico de server OpenVPN
  6. Server Port: 1194
  7. Description: SITE TO SITE
  8. TLS authentication: YES
  9. Key: Inserire la chiave TLS
  10. Peer Certificate Authority: Selezionare il nome del certificato della CA
  11. Client Certificate: Selezionare il nome del certificato Client
  12. Automatically generate a shared TLS authentication key: YES
  13. Encryption algorithm: AES-128-CBC (128 bit)
  14. Auth digest algorithm: SHA1 (160-bit)
  15. Hardware Crypto: selezionare una eventuale scheda di accelerazion

  16.  Topology: net30 se sul server è stata impostata una subnet /30 altrimenti l'altra opzione.

Configurazione dell'interfaccia Virtuale

Come già visto per il server, possiamo decidere di creare un interfacci avirtuale da associare al nostro tunnel.

Portarsi nel menù Interfaces > (assign) 

Nella colonna Network port selezionare ovpnc1 (SITE TO SITE)
Cliccare su Add per aggiungere la nuova interfaccia

Cliccare sul nome della nuova interfaccia, tipicamente optx

Nell'interfaccia effettuare le seguenti modifiche:
  1. Enable: Yes
  2. Description: OPENVPN_CLIENT

Cliccare su Save

Impostare le regole di firewall

A questo punto non ci resta che configurare il firewall affinchè permetta il traffico tra i due site della vpn.

Portarsi sul menù Firewall > Rules > OPENVPN_CLIENT
Cliccare su Add
E compilare i seguenti campi:
  1. Action: Pass
  2. Protocol: Any
  3. Source: Any  
  4. Destination: Any 
Cliccare su Save

A questo punto la costra configurazione è conclusa ed i due site sono in comunicazione tra di loro.
Posta un commento