Torino ITA)
+39 01119115797
info@netpic.it

OpenVPN con Mikrotik

OpenVPN con Mikrotik

Cosa vuol dire connettersi ad una Rete Privata Virtuale?

Una VPN (Virtual Private Network) è una rete privata virtuale che garantisce privacy, anonimato e sicurezza attraverso un canale di comunicazione riservato (tunnel VPN) e creato sopra un’infrastruttura di rete pubblica. Il termine virtuale sta a significare che tutti i dispositivi appartenenti alla rete non devono essere necessariamente collegati ad una stessa LAN locale ma possono essere dislocati in qualsiasi punto geografico del mondo.

Le VPN sono utilizzate soprattutto in ambito aziendale o dalle amministrazioni pubbliche, ma anche da privati che vogliono raggiungere dall’esterno la loro rete domestica, soprattutto per la possibilità di abbattere i costi nella realizzazione di una propria rete protetta e creata, sfruttando l’infrastruttura della rete pubblica. Un altro noto utilizzo è quello che consente di cambiare il nostro indirizzo IP mittente potendo accedere ad Internet in maniera sicura e senza restrizioni. È bene tenere a mente che, poiché i dati su Internet, se non adeguatamente protetti, quindi se viaggiano in chiaro, senza un livello di crittografia, possono essere intercettati da chiunque, amplificando il rischio di furto di dati, soprattutto sensibili.

Installiamo un server OpenVPN su una RouterBoard

Mai come in questo periodo, dominato dalla pandemia e dalle esigenze di smart working, ci sono arrivate richieste di attivazione di VPN e possibilità di lavorare da remoto e accedere da casa a dispositivi aziendali. A tal proposito gli apparati Mikrotik offrono diversi strumenti per attivare servizi VPN (Virtual Private network). Infatti attraverso il suo sistema operativo RouterOs si può scegliere tra::

  • OPENVPN
  • PPTP
  • SSTP
  • L2TP
  • IPSEC

Vediamo come installare un servizio VPN con OpenVPN, soluzione molto diffusa e multipiattaforma, rende possibile agli utenti di collegarsi OS diversi e dispositivi diversi (PC, Tablet o Smartphone). Nel nostro caso abbiamo un obiettivo preciso, differenziare gli utenti con certificati specifici (per ogni client) che verranno richiesti dal server al momento della connessione per una mutua autenticazione.
Questo aumenta il grado di sicurezza e rende maggiormente gestibile il dispositivo, potendo eventualmente revocare i certificati degli utenti che si connettono ..

Creazione dei certificati per il server e per i client

Come prima operazione andremo a creare i certificati, necessari al funzionamento del nostro server OPENVPN, una volta collegati al Mikrotik, il metodo più semplice consiste nell’usare questi comandi digitati (usare copia-incolla) in una finestra del terminale:

/certificate add name=CA country="IT" state="IT" locality="Torino" organization="MyORG" common-name="CA" key-size=4096 days-valid=3650 key-usage=crl-sign,key-cert-sign
/certificate sign CA ca-crl-host=127.0.0.1 name="CA"

/certificate add name=server country="IT" state="IT" locality="Torino" organization="MyORG" common-name="server" key-size=4096 days-valid=3650 key-usage=digital-signature,key-encipherment,tls-server
/certificate sign server ca="CA" name="server"

/certificate add name=client country="IT" state="IT" locality="Torino" organization="MyORG" common-name="client" key-size=4096 days-valid=3650 key-usage=tls-client
/certificate sign client ca="CA" name="client"

Questi comandi devono restituire un “progess: done”, ma fate attenzione che la nostra RouterBoard può mettere anche un po’ di tempo a generare i certificati. Otteniamo quindi il seguente risultato:

I certificati creati sono tre:

  • CA.crt: è il certificato della Certification Authority, creata sulla nostra RouterBoard. Serve a creare e firmare gli altri certificati per client e server.
  • server.crt: è il certificato da utilizzare per il server OpenVPN
  • client.crt: è il certificato da utilizzare sul client per connettersi al server OpenVPN

Esportazione dei certificati per i client

Eseguiamo i seguenti comandi per esportare  certificati da utilizzare successivamente per la connessione del client al server:

/certificate export-certificate CA export-passphrase=""
/certificate export-certificate client export-passphrase=012345678
 --> solo specificando la password di esportazione si ottiene il il file .key da importare nel file di configurazione .ovpn per il client

Questo comando permette di esportare i certificati per i client (.crt e .key) da importare nel file di configurazione, assieme al certificato della CA.

I file da scaricare saranno ancora tre:

  • cert_export_CA.crt: Il certificato della Certification Authority
  • cert_export_client.crt: Il certificato per il client
  • cert_export_client.key: la chiave privata del client

Copiare i certificati sul client

I certificati possono essere scaricati direttamente sul PC da cui connettersi usando il menu [File] della RouterBoard. Sul  nostro client dovremmo aver installato OpenVPN. Vediamo quale client per OpenVPN va installato in base al nostro sistema operativo.

Windows

https://openvpn.net/community-downloads/



GNULinux

# apt install openvpn

MacOS: Tunnelblick

https://tunnelblick.net/

Ogni sistema operativo richiede la sua configurazione, ma la logica resta sempre la stessa.

Come esempio vediamo come attivare la connessione su WIndows, dopo aver installato il Client OpenVPN. I tre file (CA) percorso, C:\Program Files\OpenVPN\config:

I file scaricati si portano dietro il prefisso di creazione (cert_), per cui li rinominiamo con dei nomi più consoni in:

Creazione del client.ovpn

Andremo a questo punto a creare sempre nella cartella situata nel percorso C:\Program Files\OpenVPN\config: il file CLIENT.ovpn, dove nel suo interno sono contenute le info necessarie riguardanti l’indirizzo IP del server VPN i certificati e il metodo di autenticazione. Con il notepad adattiamo alle nostre esigenze il file, con particolare attenzione alla direttiva remote a cui dobbiamo affiancare l’indirizzo IP remoto (X.Y.Z.K) della nostro RouterBoard:

client
dev tun
proto tcp-client
remote X.Y.Z.K
port 1194
nobind
persist-key
persist-tun
tls-client
remote-cert-tls server
ca CA.crt
cert client.crt
key client.key
verb 4
mute 10
cipher AES-256-CBC
auth SHA1
auth-user-pass auth.cfg
auth-nocache
redirect-gateway def1

Creazione del file per l’autenticazione (auth.cfg)

Nel caso in cui non volessimo inserire ogni volta utente e password possiamo inserire il seguente file:

vpn
0123456789

Creazione del Pool DHCP

Creiamo ora il pool dhcp dedicato ai client che utilizzeranno le sessioni vpn:

/ip pool add name=ovpn ranges=172.16.100.2-172.16.100.254
/ip dhcp-server network add address=172.16.100.0/24 comment=vpn dns-server=8.8.8.8 gateway=172.16.100.1 netmask=24

Creazione del profilo PPP

Il profilo permette di assegnare agli utenti i giusti parametri al momento della connessione:

/ppp profile add dns-server=172.16.100.1 local-address=ovpn name=open_vpn remote-address=ovpn use-compression=no use-encryption=required

Attivazione dell’interfaccia openvpn sul server openvpn (mikrotik)

Momento essenziale è quello della creazione dell’interfaccia del server, agevolata dal comando inserito dal terminale:

/interface ovpn-server server set certificate=server cipher=blowfish128,aes128,aes192,aes256 default-profile=open_vpn enabled=yes require-client-certificate=yes

Creazione utenti e password

Creiamo ora l’utente e la password:

/ppp secret
add name=vpn password=0123456789 profile=open_vpn service=ovpn

Ovviamente questa operazione andrà ripetuta per tutti gli utenti che dovranno collegarsi alla vpn.

Creazione regole del Firewall

Come ultimo passaggio andremo a permettere l’accesso in INPUT alla porta tcp 1194 sul nostro server vpn:

/ip firewall filter
add action=accept chain=input comment=VPN dst-port=1194 protocol=tcp

Impostare dei routing per raggiungere i client della rete

Nel caso in cui sia necessario raggiungere i PC presenti nella rete alle spalle del nostro server OpenVPN, è necessario aggiungere al file di configurazione del client (client.ovpn) alcune direttive di routing. Allo stesso modo è possibile passare altri parametri come DNS o DHCP, per consentire al client di usufruire degli stessi servizi come se fosse nella rete aziendale.

route 192.168.1.0 255.255.255.0 172.16.21.1
dhcp-option DNS 192.168.1.1 
dhcp-option DNS 8.8.8.8 

Grazie a queste direttive, che vanno ovviamente adattate alla propria situazione, possiamo raggiungere la rete locale alle spalle della RouterBoard, che dovrà comunque avere le corrette regole di firewalling impostate.

Verifichiamo il funzionamento della VPN

Facciamo ora la prova dal nostro client ad autenticarci sulla vpn. Attenzione avendo scelto la procedura con chiavi e certificati da fornire al momento della connessioni è importante sapere che al momento della connessione ci verrà richiesta la password id esportazione della chiave (che non è la password dell’utente vpn passata con la direttiva atuh.cfg) per poter accedere alla chiave del client. 

Per comodità quella richiesta di password può essere tolta direttamente dal prompt di Windows usando il comando openss.exe

> openssl.exe rsa -in client.key -out client.key
Enter pass phrase for client.key: password
writing RSA key

A questo punto possiamo attivare la OpenVPN client sul nostro PC:

Si apre la finestra di debug della connessione. Per essere certi che la connessione sia correttamente stabilita, in basso nella finestra dovremo avere l’IP assegnato dal Mikrotik e l’icona diventerà verde

Ora siamo connessi proviamo a fare un ping verso il server VPN. A questo punto possiamo raggiungere gli host della rete alle spalle della nostra RouterBoard.

Risorse e documentazione

https://wiki.mikrotik.com/wiki/OpenVPN