Server Openvpn su Mikrotik con Ros 7.x

Questa è una configurazione completa di un server Openvpn su RouterOS 7.x, provata con la 7.6, 7.7, e 7.8 al momento. Si basa su autenticazione mista con un certificato lato server, un certificato lato client (uguale per tutti i client) e poi username e password. E` pensata per l'uso con diversi pc portatili, non come punto-punto. Notare che al momento in RouterOS non è possibile attivare più di un server openvpn con più profili / porte / subnet assegnate, eccetera. Si possono creare più utenti dello stesso server, ma per esempio non è possibile creare un server openvpn dedicato a un link punto-punto e un altro server openvpn dedicato ai pc portatili remoti. (o almeno io non ho capito come farlo)

Creare i certificati necessari

I certificati necessari sono tre, ovvero la CA, il certificato per il server, e quello per i client. La procedura di creazione consiste in due passi, uno per crearli e uno per firmarli. La procedura di firma richiede tempo. Se dopo aver dato un comando di firma si riceve un errore di timeout, abbiate pazienza e controllate il carico di CPU, la firma non e` fallita, sta solo lavorando in background. Quando la cpu va a zero, vedrete che il vostro certificato è stato firmato correttamente anche se avete avuto un errore in console.

Chiaramente come common name potete usare quello che vi sembra più sensato. Se avete un hostname pubblico per il vostro server vpn potete usare quello quando create il certificato server.

Attenzione: alla versione 7.6 del Ros pare che la data di validità non possa superare il gennaio 2038 (bug della data unix a 32 bit), ergo qualsiasi valore mettiamo per la validità dei certificati, ci troveremo sempre con la data valida al massimo fino al 2038, e la cosa sarà visibile in quanto il numero dei giorni di validità sarà sempre tale che l'ultimo giorno valido sarà in gennaio 2038. Non ho idea se in un futuro update la cosa verrà sistemata.

Esportare i certificati

Dobbiamo esportare il certificato della CA e inoltre certificato e chiave del client, da caricare sui PC che saranno i nostri client.

Per farlo, dobbiamo per forza crittare con una password la chiave del client in fase di export, altrimenti non verrà esportata.

Ora i files (un cert per la CA, e un cert e una key per il client) sono disponibili sotto "files" dentro al winbox (o interfaccia web) e possiamo scaricarli sul nostro PC.

Configuriamo un pool di IP per le interfacce punto-punto di openvpn

Configuriamo un pool di ip dedicato alla punto-punto di openvpn. La topologia supportata attualmente è solo "subnet", quindi il server assegna 4 ip per ogni client, con una /24 quindi possiamo servire al massimo 64 client. Ovviamente qui usiamo una subnet che non usiamo in altri posti. L'ip "1" lo tengo fuori dal pool e lo userò come ip locale del nostro server vpn

Creiamo un gruppo di interfacce per metterci dentro gli utenti della vpn

Questo passo serve a creare un gruppo di interfacce (i gruppi di default sono LAN e WAN) che chiameremo "Openvpn" che servirà a poter definire delle regole di firewall per tutto il traffico che passa per la nostra VPN. Il gruppo sarà legato al profilo PPP (che creeremo immediatamente dopo questo passo) e potrà essere usato appunto nelle regole di firewall per poter applicare regole al traffico da/per la VPN. Il RouterOS di solito gestisce le interfacce facendo riferimento agli account PPP usati per permettermi di fare una regola diversa di firewall per ogni utente che si connette. E` anche comodo, ma in certi casi è molto più comodo definire un profilo comunue per tutti gli utenti openvpn. Notare che al momento non è possibile attivare più di un server openvpn con più profili / porte / subnet assegnate, eccetera.

Configuriamo un profilo PPP per openvpn

Questo profilo usa il pool che abbiamo precedentemente creato per assegnare ip dinamici ai client. Assegna al server l' ip 192.168.222.1 che è l' ip "1" del pool, e dice ai client di usare quello come DNS (ovviamente se vi serve diverso lo farete diverso). Assegna tutti i client alla lista di interfacce (dinamica) OVPN che abbiamo creato prima, così poi nel firewall potremo applicare delle regole.

Attiviamo il server openvpn

Attiviamo il server openvpn, con protocollo UDP e porta 1194 (il default). Uso come algoritmi crittografici quelli più sicuri, anche se questo può comportare una perdita di prestazioni. Ovviamente se dovete stabilire connessioni con client che non li supportano dovrete adattarvi di conseguenza (dalla versione 7.8 si usa "cipher=aes256-gcm")

Creiamo uno o più utenti

Creiamo gli utenti che accederanno al server openvpn:

Configurazioni del firewall

Ricordiamoci di aprire la 1194/udp da internet per fare connettere i nostri client. Qui sotto c'e` un esempio per accettare la 1194 udp, pero` occorre ricordarsi che la regola andrà messa prima del drop generale delle connessioni non volute, ergo va spostata verso l'inizio delle regole. Questa riga così com'è la mette in terza posizione dall'alto il che POTREBBE andare bene.

Ora accettiamo il traffico (dentro la vpn) dai client openvpn al nostro Mikrotik (utile se vogliamo entrare in ssh o con il winbox). Notare che per default questo traffico è bloccato, solo dalla LAN si può accedere all' ssh o mediante la winbox.

Per il forward (per esempio dai client openvpn alla LAN o alla WAN) il firewall di default del Mikrotik ha solo una regola che blocca il traffico entrante dalla WAN, il che significa che per default il forward dai client Openvpn è consentito. Se volessimo consentirlo esplicitamente, comunque, potremmo fare una regola tipo questa, da mettere ovviamente prima del drop:

Configurazione del client (linux, windows, ecc)

Sul client copiamo i files (il certificato della CA, il certificato e la chiave del client) che abbiamo esportato prima, poi come configurazione possiamo usare una cosa di questo genere:

Importante: Notare che il server almeno con la versione attuale del firmware (7.6) non ha alcun modo di fare dei push delle configurazioni ai client (se si escludono ip e dns) quindi nel file di configurazione del client dobbiamo inserire a mano le rotte verso gli ip raggiungibili dietro la VPN. A questo serve il comando route che nel nostro esempio punta agli ip della LAN dietro al server VPN.

Per finire, il file "user-pass.txt" conterrà username e password (prima riga lo username, seconda riga la password, senza altro), a meno che non vogliamo fare in modo che l'utente debba ogni volta inserirle a mano.

Quando si stabilisce la connessione verrà chiesta la password di sblocco della chiave privata del client (quella impostata in fase di esportazione) e poi user/password per l'account utente della vpn. Volendo potremo togliere la password dalla chiave e lasciare solo user e password dell'utente.

Per togliere la password dalla chiave privata del client usiamo il comando

Mikrotik/Openvpn server (last edited 2024-01-22 17:22:54 by Kurgan)