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 openssl–1.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 | Sì |
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 | Sì |
pc0.crt | Solo PC0 | Certificato del client | No |
pc0.key | Solo PC0 | Chiave del client | Sì |
client{n}.crt | Solo client{n} | Certificato univoco del client | No |
client{n}.key | Solo client{n} | Chiave univoca del client | Sì |
ta.key | Server e tutti client | auth-tls | Sì |
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
Reference: https://openvpn.net/community-resources/how-to/
Categorised as: Linux | Networking | Work
Comments are disabled on this post