Table des matières

, ,

Mise en place d'une config test openvpn

On cherche à connecter un poste client au travers d'un réseau non sécurisé au serveur. Dans cet exemple simple on crée un VPN entre deux VMs appartenant au même réseau.

Serveur

Ajout temporaire d'une IP sur l'interface loopback

$ sudo ip addr add

Installer les paquets openvpn easy-rsa

$ sudo apt-get install openvpn easy-rsa

Configuration du serveur

Génération des clés

easy-rsa contient un ensemble de scripts assistant la génération des certificats racine, serveur et clients.

On commence par mettre a jour le fichier contenant les variables: ./vars:

$ cd /user/share/easy-rsa
# Configuration
$ sudo vim vars
...
# sourcer le fichier exportant les variables
source ./vars
 
# par précaution supprimer les fichiers temporaires
./clean-all
 
# construire clés et certificat pour le CA ou Autorité de Certification racine
./build-ca

Après validation, les fichiers suivants ont été créés dans le répertoire ./keys:

Le certificat de l'autorité de certification racine existant, on peut générer les clés et certificats pour le serveur et les clients:

Pour le serveur:

./build-key-server servername

Pour chaque client on générera un clé:

./build-key client-name
Chaque client doit avoir un Common Name unique permettant de l'identifier auprès du serveur OpenVPN.

Génération du fichier dhparam pour l'échange de clés. Basé sur l'algorithme Diffie-Hellman, la génération peut prendre un certain temps.

./build-dh

Créer le dossier /etc/openvpn/keys et y copier:

mkdir /etc/openvpn/keys
cp keys/ca.crt keys/severname.crt keys/servername.key keys/df2048.pem /etc/openvpn/keys

Configuration du service

Créer le fichier de configuration du serveur /etc/openvpn/server.conf avec le contenu suivant:

server.conf
mode server
proto udp
dev tun
topology subnet
ca keys/ca.crt
cert keys/ovpngw.crt
key keys/ovpngw.key
dh keys/dh2048.pem
server 10.50.0.0 255.255.255.0
keepalive 10 120
comp-lzo
persist-key
persist-tun
verb 3

A propos des directives du fichier ci-dessus:

Pour de l'encapsulation de protocoles de niveau 2 tels que IPX/SPX ou NetBIOS il faudrait créer un device tap

Vérifier que la machine agira bien en passerelle en transmettant les paquets entre ces différentes interfaces. Vérifier la configuration du noyau:

cat /proc/sys/net/ipv4/ip_forward
1

Si la valeur 1 n'est pas retournée, modifier le fichier /etc/sysctl.conf. Confère wiki

Démarrage manuel du serveur:

cd /etc/openvpn
openvpn --config server.conf

Le fonctionnement normal du serveur retournera sur la console:

... Initialization Sequence Completed

Client

client
dev tun
proto udp
remote 192.168.1.99 1194
nobind
persist-key
persist-tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/client-name1.crt
key /etc/openvpn/keys/client-name1.key
comp-lzo
verb 3

Lancement manuel du client de la même façon que coté serveur:

cd /etc/openvpn
openvpn --config client.conf

A ce stade, la connexion est fonctionnelle.

Modifications de la configuration minimale

Lors de l'établissement de la liaison les logs mettent en avant:

Ajouter les routes

Avec la configuration minimale, le tunnel est fonctionnel mais coté client les routes n'ont pas été mises a jour. Pour que le réseau soit accessible au client, il faut déclarer au serveur lesquelles de ses routes on souhaite qu'il mette à jour sur le client pour que celui-ci puisse accéder au sous réseau (directive push).

Il est possible de changer le protocole et le port d’écoute du serveur avec les directives proto et port:

proto tcp
port 26356

Le fichier périphérique de l'interface peut être renommé. Cela peut améliorer la clarté ou facilité la création de règles iptables:

dev vpn
dev-type tun

Fichiers de configuration finalisés

Serveur

Sur le serveur le fichier de configuration du service openvpn a maintenant la forme suivante:

serveur.conf
# Configuration du serveur openvpn
mode server
proto tcp
port 31100
 
dev vpn
dev-type tun
 
topology subnet
ca keys/ca.crt
cert keys/poseidon.crt
key keys/poseidon.key
dh keys/dh2048.pem
 
# Adresse de réseau à exploiter.
# Définit le pool d'adresses à fournir aux clients
server 10.50.0.0 255.255.255.0
keepalive 10 120
 
# Chemin des fichiers de configuration clients
# permet de redefinir la config générale par client
client-config-dir ./client-cfg
 
# Décommenter la directive pour autoriser les communications
# entre clients
#client-to-client
 
# Limiter le nombre de conexions au serveur
#max-clients 10
 
# Renforcement de la securité par defaut
#tls-version-min 1.2
# Méthode de chiffrement du canal de controle
tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA
#tls-cipher TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA
#tls-cipher TLS-RSA-WITH-AES-256-CBC-SHA
#tls-cipher TLS-RSA-WITH-CAMELLIA-256-CBC-SHA
#tls-cipher TLS-RSA-WITH-3DES-EDE-CBC-SHA
#tls-cipher TLS-DHE-RSA-WITH-AES-128-CBC-SHA
#tls-cipher TLS-DHE-RSA-WITH-SEED-CBC-SHA
#tls-cipher TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA
#tls-cipher TLS-RSA-WITH-AES-128-CBC-SHA
#tls-cipher TLS-RSA-WITH-SEED-CBC-SHA
#tls-cipher TLS-RSA-WITH-CAMELLIA-128-CBC-SHA
#tls-cipher TLS-RSA-WITH-RC4-128-SHA
#tls-cipher TLS-RSA-WITH-RC4-128-MD5
#tls-cipher TLS-RSA-WITH-DES-CBC-SHA
 
# Méthode de chiffrement du canal de données
cipher AES-256-CBC
# hachage via SHA-256
auth SHA256
 
comp-lzo
persist-key
persist-tun
 
# Paramétrages des logs
log /var/log/openvpn.log
verb 3
# Condense la répétition de memes entrées dans les logs
mute 20
 
# Fichier listant les connexions actives
status /var/log/openvpn-client-list.txt

Il utilise les certificats présents dans le sous dossier ./keys/ et des fichier de configuration propres au clientsdans le dossier ./client-cfg/ si l'on souhaite redéfinir le paramétrages par défaut. Pour exemple, un fichier vm01.lan redefinit les paramétrage du client CN=vm01.lan

vm01.lan
# Fichier de redefinition de la configuration  du client vm01.lan
 
# Ne tient pas compte de la configuration générale
push-reset
 
# Redéfinition de la configuration pour le client
ifconfig-push 10.50.0.33 255.255.255.0
 
# Pousse les routes sur le client
# NB: ces routes doivent exister sur le serveur
push "route 10.50.0.0 255.255.255.0"
push "route 172.16.3.0 255.255.255.0"

Client

Le fichier de configuration finalisé coté client a la forme suivante:

# Configuration du client
client
proto tcp

remote serveur.lan 31100
remote-cert-tls server

dev vpn
dev-type tun



nobind
tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA
#tls-cipher TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA
#tls-cipher TLS-RSA-WITH-AES-256-CBC-SHA
#tls-cipher TLS-RSA-WITH-CAMELLIA-256-CBC-SHA
#tls-cipher TLS-RSA-WITH-3DES-EDE-CBC-SHA
#tls-cipher TLS-DHE-RSA-WITH-AES-128-CBC-SHA
#tls-cipher TLS-DHE-RSA-WITH-SEED-CBC-SHA
#tls-cipher TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA
#tls-cipher TLS-RSA-WITH-AES-128-CBC-SHA
#tls-cipher TLS-RSA-WITH-SEED-CBC-SHA
#tls-cipher TLS-RSA-WITH-CAMELLIA-128-CBC-SHA
#tls-cipher TLS-RSA-WITH-RC4-128-SHA
#tls-cipher TLS-RSA-WITH-RC4-128-MD5
#tls-cipher TLS-RSA-WITH-DES-CBC-SHA

cipher AES-256-CBC
auth SHA256

persist-key
persist-tun

ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/vm01.lan.crt
key /etc/openvpn/keys/vm01.lan.key

comp-lzo
verb 3

Références