Outils pour utilisateurs

Outils du site


netadmin:vpn:config-test-openvpn

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
netadmin:vpn:config-test-openvpn [2017/12/12 11:15] yoannnetadmin:vpn:config-test-openvpn [2021/02/01 21:51] (Version actuelle) – modification externe 127.0.0.1
Ligne 3: Ligne 3:
 ====== Mise en place d'une 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. Un hôte virtuel apache associée à l'interface loopback du serveur sera accessible.+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 ===== ===== Serveur =====
  
-Ajout temporarie d'une IP sur l'interface loopback+Ajout temporaire d'une IP sur l'interface loopback
 <code bash> <code bash>
 $ sudo ip addr add $ sudo ip addr add
Ligne 17: Ligne 17:
 </code> </code>
  
-===== Configuration =====+===== Configuration du serveur =====
  
-easy-rsa contient un ensemble de scripts assistant la génération des certificats serveur et clients.+==== 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'':
  
 <code bash> <code bash>
Ligne 33: Ligne 37:
  
 <code bash> <code bash>
-# sourcer le fichier définissant les variables+# sourcer le fichier exportant les variables
 source ./vars source ./vars
 +
 # par précaution supprimer les fichiers temporaires # par précaution supprimer les fichiers temporaires
 ./clean-all ./clean-all
-# construire clés et certificat pour l'autorité de certification racine+ 
 +# construire clés et certificat pour le CA ou Autorité de Certification racine
 ./build-ca ./build-ca
 </code> </code>
  
-Après validation des valeurs par défaut, les fichiers suivants ont été créés:+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.key**: la clé privée de l'autorité de certification racine.
   * **ca.crt**: le certificat de l'autorité de certification racine.   * **ca.crt**: le certificat de l'autorité de certification racine.
Ligne 47: Ligne 53:
   * **serial** identifiant du dernier certificat émis   * **serial** identifiant du dernier certificat émis
  
-Le certificat de l'autorité de certification racine en place, on peut générer les clés et certificat pour le serveur:+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: 
 +<code bash> 
 +./build-key-server servername 
 +</code> 
 + 
 +Pour chaque client on générera un clé: 
 + 
 +<code bash> 
 +./build-key client-name 
 +</code> 
 + 
 + 
 +<note> 
 +Chaque client doit avoir un **Common Name** unique permettant de l'identifier auprès du serveur OpenVPN. 
 +</note> 
 + 
 +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. 
 + 
 +<code bash> 
 +./build-dh 
 +</code> 
 + 
 +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. 
 + 
 +<code bash> 
 +mkdir /etc/openvpn/keys 
 +cp keys/ca.crt keys/severname.crt keys/servername.key keys/df2048.pem /etc/openvpn/keys 
 +</code> 
 + 
 +==== Configuration du service ==== 
 + 
 +Créer le fichier de configuration du serveur **/etc/openvpn/server.conf** avec le contenu suivant: 
 + 
 +<file txt 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 
 +</file> 
 + 
 + 
 +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). 
 + 
 +<note> 
 +Pour de l'encapsulation de protocoles de niveau 2 tels que IPX/SPX ou NetBIOS il faudrait créer un device **tap** 
 +</note> 
 +  * **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: 
 + 
 +<code bash> 
 +cat /proc/sys/net/ipv4/ip_forward 
 +
 +</code> 
 + 
 +Si la valeur 1 n'est pas retournée, modifier le fichier /etc/sysctl.conf. Confère wiki 
 + 
 +Démarrage manuel du serveur: 
 + 
 +<code bash> 
 +cd /etc/openvpn 
 +openvpn --config server.conf 
 +</code> 
 + 
 +Le fonctionnement normal du serveur retournera sur la console: 
 +<file> 
 +... Initialization Sequence Completed 
 +</file> 
 + 
 +===== Client ===== 
 + 
 +<file> 
 +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 
 +</file> 
 + 
 +Lancement manuel du client de la même façon que coté serveur: 
 + 
 +<code bash> 
 +cd /etc/openvpn 
 +openvpn --config client.conf 
 +</code> 
 + 
 +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**: 
 + 
 +<file> 
 +proto tcp 
 +port 26356 
 +</file> 
 + 
 +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: 
 + 
 +<file> 
 +dev vpn 
 +dev-type tun 
 +</file> 
 + 
 +===== Fichiers de configuration finalisés ===== 
 + 
 +==== Serveur ==== 
 + 
 +Sur le serveur le fichier de configuration du service openvpn a maintenant la forme suivante: 
 + 
 +<file txt 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 
 +</file> 
 + 
 +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 
 + 
 +<file txt 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" 
 +</file> 
 + 
 +==== Client ==== 
 + 
 +Le fichier de configuration finalisé coté client a la forme suivante: 
 +<file> 
 +# 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 
 +</file>
  
 +===== Références =====
  
 +  * GNU/Linux Magasine HS n°92, VPN
 +  * https://unix.stackexchange.com/questions/195569/changing-openvpn-device-name#196796
netadmin/vpn/config-test-openvpn.1513077313.txt.gz · Dernière modification : 2021/02/01 21:51 (modification externe)