Outils pour utilisateurs

Outils du site


netadmin:vpn:config-test-openvpn

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:

  • ca.key: la clé privée de l'autorité de certification racine.
  • ca.crt: le certificat de l'autorité de certification racine.
  • index.rxt la liste des certificats OpenSSL
  • serial identifiant du dernier certificat émis

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:

  • Le certificat de l'autorité de certification racine.
  • Le certificat serveur.
  • La clé privée du serveur.
  • Le fichier dh2048.pem.
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:

  • dev tun Création d'un tunnel au niveau 3 OSI (encapsulation du protocole au niveau du routage IP).
Pour de l'encapsulation de protocoles de niveau 2 tels que IPX/SPX ou NetBIOS il faudrait créer un device tap
  • topology subnet la topologie par défaut net30 est inutile ici. Beaucoup plus complexe, net30 offre de la rétrocompatibilité avec les machines Windows.
  • server 10.50.0.0. 255.255.255.0 cette seule directive aura pour conséquences:
    • De passer en mode sécurisé TLS
    • De fournir automatiquement la topologie définie plus haut aux clients
    • Initialiser automatiquement les paramètres réseau serveur et clients ici les adresses du réseau 10.50.0/24 seront utilisées.
  • keepalive 10 120 renvoi un ping après 10 secondes d'inactivité et relancer la connexion après 120 secondes sans activité.
  • persist-key pas de renégociation après redémarrage de connexion.
  • persist-tun pas de fermeture/réouverture du device tun à chaque redémarrage de connexion.

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:

  • Que méthode de chiffrement (cipher BF-CBC 128 bits) est relativement faible et peut être améliorée.
  • Que l'algorithme d'authentification SHA-1 peut être modifié car considéré peu fiable à ce jour.
  • Le warning “No server certificate verification method has been enabled” indique que le client n' a fait qu'une vérification partielle du certificat fournit par le serveur pouvant conduire a une attaque man in the middle. Pour une vérification en profondeur, ajouter la directive remote-cert-tls server dans la configuration client.

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

netadmin/vpn/config-test-openvpn.txt · Dernière modification : 2021/02/01 21:51 de 127.0.0.1