Clark's Home page

Tecnicismi vari di un Sysadmin Linux ma anche qualcosa della sua vita

OpenVPN su Devuan Linux —

Dopo tanti anni e con il cambiamento a Devuan come Distro di riferimento è arrivato il momento di riscrivere due note su OpenVPN.
Non è cambiato moltissimo ad onor del vero ma qualcosa si, e quindi come promemoria riscrivo il procedimento.
L’installazione segue il solito metodo con apt-get install che si tira dietro tutte le dipendenze necessarie.
Creo un symlink a easy-rsa nella directory /etc/openvpn con ln -s /usr/share/easy-rsa/
Entrato in easy-rsa edito il vars e lo modifico in questo modo:

export KEY_COUNTRY=”IT”
export KEY_PROVINCE=”MI”
export KEY_CITY=”Milano”
export KEY_ORG=”tipistrani”
export KEY_EMAIL=”lamia@email”
export KEY_OU=”System and Networking”

In questo modo mi evito di scriverli ogni volta che genero un certificato.
. ./vars

**************************************************************
No /etc/openvpn/easy-rsa/openssl.cnf file could be found
Further invocations will fail
**************************************************************

Primo problema, rapida ricerca in rete e la soluzione è più banale di quanto mi aspettassi, vale a dire un altro symlink ln s openssl1.0.0.cnf openssl.cnf

ATTENZIONE NOTA INSERITA DOPO AVERCI PESTATO IL MUSO ED ESSERMI FATTO MOLTO MALE

editare il file openssl.cnf e modificare queste due voci
default_days = 3650 # how long to certify for
default_crl_days= 3650 # how long before next CRL
soprattutto la seconda che ha valore di default 30 e che se non modificata dopo 30 giorni blocca di fatto la connessione.

 

host:/etc/openvpn/easy-rsa# . ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
noi:/etc/openvpn/easy-rsa# ./clean-all
noi:/etc/openvpn/easy-rsa# ./build-ca
Generating a RSA private key
.+++++
………………………………………………………………..+++++
writing new private key to ‘ca.key’
—–
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.
—–
Country Name (2 letter code) [IT]:
State or Province Name (full name) [MI]:
Locality Name (eg, city) [Milano]:
Organization Name (eg, company) [tipistrani]:
Organizational Unit Name (eg, section) [System and Networking]:
Common Name (eg, your name or your server’s hostname) [tipistrani CA]:
Name [EasyRSA]:
Email Address [lamia@email]:
Si genera la directory keys come al solito che contiene per ora ca.crt ca.key index.txt serial
Dato che l’esperienza mi ha insegnato che le macchine vanno a $escort e di solito nel momento meno opportuno o che più banalmente si rifanno con una versione differente di SO e che la memoria umana da per scontate troppe cose ad esempio che in /etc/openvpn non ci sono le chiavi e i certificati ma un link a un’altra directory che le contiene e che quando si rifà/recupera una macchina la dir /etc e’ la prima che si salva io muovo le chiavi in /etc/openvpn con un mv keys/ /etc/openvpn  e creo all’interno di /usr/share/easy-rsa/ un symlink alla directory mossa con ln -s /etc/openvpn/keys e proseguo nella generazione del necessario.

./build-key-server server (qui ci metto il nome della macchina che farà da server)
Generating a RSA private key
…………………………………………………………………………………+++++
…….+++++
writing new private key to ‘server.key’
—–
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.
—–
Country Name (2 letter code) [IT]:
State or Province Name (full name) [MI]:
Locality Name (eg, city) [Milano]:
Organization Name (eg, company) [tipistrani]:
Organizational Unit Name (eg, section) [System and Networking]:
Common Name (eg, your name or your server’s hostname) [noi]:
Name [EasyRSA]:
Email Address [lamia@email]:

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Can’t open /etc/openvpn/easy-rsa/keys/index.txt.attr for reading, No such file or directory
139743276810304:error:02001002:system library:fopen:No such file or directory:../crypto/bio/bss_file.c:74:fopen(‘/etc/openvpn/easy-rsa/keys/index.txt.attr’,’r’)
139743276810304:error:2006D080:BIO routines:BIO_new_file:no such file:../crypto/bio/bss_file.c:81:
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
countryName :PRINTABLE:’IT’
stateOrProvinceName :PRINTABLE:’MI’
localityName :PRINTABLE:’Milano’
organizationName :PRINTABLE:’tipistrani’
organizationalUnitName:PRINTABLE:’System and Networking’
commonName :PRINTABLE:’server’
name :PRINTABLE:’EasyRSA’
emailAddress :IA5STRING:’lamia@email’
Certificate is to be certified until Jan 12 10:25:07 2030 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Si può cominciare a generare i certificati e le chiavi per i client

/etc/openvpn/easy-rsa# ./build-key pc0
Generating a RSA private key
……………………………………………………………….+++++
………………………+++++
writing new private key to ‘pc0.key’
—–
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.
—–
Country Name (2 letter code) [IT]:
State or Province Name (full name) [MI]:
Locality Name (eg, city) [Milano]:
Organization Name (eg, company) [tipistrani]:
Organizational Unit Name (eg, section) [System and Networking]:
Common Name (eg, your name or your server’s hostname) [pc0]:
Name [EasyRSA]:
Email Address [lamia@email]:

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
countryName :PRINTABLE:’IT’
stateOrProvinceName :PRINTABLE:’MI’
localityName :PRINTABLE:’Milano’
organizationName :PRINTABLE:’tipistrani’
organizationalUnitName:PRINTABLE:’System and Networking’
commonName :PRINTABLE:’pc0′
name :PRINTABLE:’EasyRSA’
emailAddress :IA5STRING:’lamia@email’
Certificate is to be certified until Jan 12 10:49:08 2030 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
E a seguire per tutti i client necessari.
Genero i parametri Diffie Hellman
./build-dh

Da ultimo genero la chiave per l’auth tls con

:/etc/openvpn/keys/ openvpn –genkey –secret ta.key

Nome file Serve su Scopo Segreto
ca.crt Server e tutti i client Certificato principale CA certifica tutti i seguenti No
ca.key Solo la macchina che firma i certificati Chiave principale CA cripta tutit i seguenti
dh2048.pem Solo sul server Parametro Diffie Hellman aumenta la crittografia No
{n}.pem Solo sul server Parametro Diffie Hellman univoco del client aumenta la crittografia
server.crt Solo sul server Certificato del server No
server.key Solo sul server Chiave del server
pc0.crt Solo PC0 Certificato del client No
pc0.key Solo PC0 Chiave del client
client{n}.crt Solo client{n} Certificato univoco del client No
client{n}.key Solo client{n} Chiave univoca del client
ta.key Server e tutti client auth-tls

La tabella sopra riportata è copiata pari pari dal sito di openvpn e spiega benissimo a cosa servono e dove vanno i files che sono stati generati.
I server come in precedenza devono essere due, uno per i client linux/android/apple e uno per i client windows, a questo proposito ci siamo accorti col tempo che i client windows quando erano in giro per il mondo usando le wifi che potevano collegandosi  con il protocollo UDP avevano un bel po di problemini e abbiamo deciso di provare a passare a TCP anche con loro, infatti se i client linux possono usare senza problemi sia tcp che udp e i device tun o tap indifferentemente, i device android e apple usano solo tcp e il device tun.

Di seguito le configurazioni per i vari casi sia server che client, aggiungo che abbiamo inserito il Diffie Hellman anche in azienda cosa che prima non usavamo.

Server linux per client linux/android/apple

Server linux per client Windows

Client per linux

Client per windows

Client per android

Client per apple

ccd per linux
ccd per windows

Reference: https://openvpn.net/community-resources/how-to/


Categorised as: Linux | Networking | Work

Comments are disabled on this post


Comments are closed.