Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
netadmin:vpn:config-test-openvpn [2017/12/12 11:15] – yoann | netadmin: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. | + | On cherche à connecter un poste client au travers d'un réseau non sécurisé au serveur. |
===== Serveur ===== | ===== Serveur ===== | ||
- | Ajout temporarie | + | Ajout temporaire |
<code bash> | <code bash> | ||
$ sudo ip addr add | $ sudo ip addr add | ||
Ligne 17: | Ligne 17: | ||
</ | </ | ||
- | ===== Configuration ===== | + | ===== Configuration |
- | 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 | ||
+ | |||
+ | On commence par mettre a jour le fichier contenant les variables: '' | ||
<code bash> | <code bash> | ||
Ligne 33: | Ligne 37: | ||
<code bash> | <code bash> | ||
- | # sourcer le fichier | + | # sourcer le fichier |
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' | + | |
+ | # construire clés et certificat pour le CA ou Autorité | ||
./build-ca | ./build-ca | ||
</ | </ | ||
- | Après validation | + | Après validation, les fichiers suivants ont été créés |
* **ca.key**: la clé privée de l' | * **ca.key**: la clé privée de l' | ||
* **ca.crt**: le certificat de l' | * **ca.crt**: le certificat de l' | ||
Ligne 47: | Ligne 53: | ||
* **serial** identifiant du dernier certificat émis | * **serial** identifiant du dernier certificat émis | ||
- | Le certificat de l' | + | Le certificat de l' |
+ | |||
+ | Pour le serveur: | ||
+ | <code bash> | ||
+ | ./ | ||
+ | </ | ||
+ | |||
+ | Pour chaque client on générera un clé: | ||
+ | |||
+ | <code bash> | ||
+ | ./build-key client-name | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | Chaque client doit avoir un **Common Name** unique permettant de l' | ||
+ | </ | ||
+ | |||
+ | Génération du fichier **dhparam** pour l' | ||
+ | |||
+ | <code bash> | ||
+ | ./ | ||
+ | </ | ||
+ | |||
+ | Créer le dossier **/ | ||
+ | * Le certificat | ||
+ | * Le certificat serveur. | ||
+ | * La clé privée du serveur. | ||
+ | * Le fichier dh2048.pem. | ||
+ | |||
+ | <code bash> | ||
+ | mkdir / | ||
+ | cp keys/ca.crt keys/ | ||
+ | </ | ||
+ | |||
+ | ==== Configuration du service ==== | ||
+ | |||
+ | Créer le fichier de configuration du serveur **/ | ||
+ | |||
+ | <file txt server.conf> | ||
+ | mode server | ||
+ | proto udp | ||
+ | dev tun | ||
+ | topology subnet | ||
+ | ca keys/ | ||
+ | cert keys/ | ||
+ | key keys/ | ||
+ | dh keys/ | ||
+ | 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' | ||
+ | </ | ||
+ | * **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/ | ||
+ | * **keepalive 10 120** renvoi un ping après 10 secondes d' | ||
+ | * **persist-key** pas de renégociation après redémarrage de connexion. | ||
+ | * **persist-tun** pas de fermeture/ | ||
+ | |||
+ | 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 / | ||
+ | 1 | ||
+ | </ | ||
+ | |||
+ | Si la valeur 1 n'est pas retournée, modifier | ||
+ | |||
+ | Démarrage manuel du serveur: | ||
+ | |||
+ | <code bash> | ||
+ | cd / | ||
+ | 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 / | ||
+ | cert / | ||
+ | key / | ||
+ | comp-lzo | ||
+ | verb 3 | ||
+ | </ | ||
+ | |||
+ | Lancement manuel du client de la même façon que coté serveur: | ||
+ | |||
+ | <code bash> | ||
+ | cd / | ||
+ | openvpn --config client.conf | ||
+ | </ | ||
+ | |||
+ | A ce stade, la connexion est fonctionnelle. | ||
+ | |||
+ | |||
+ | ===== Modifications de la configuration minimale ===== | ||
+ | |||
+ | Lors de l' | ||
+ | |||
+ | * Que méthode de chiffrement (cipher BF-CBC 128 bits) est relativement faible et peut être améliorée. | ||
+ | * Que l' | ||
+ | * Le warning "No server certificate verification method has been enabled" | ||
+ | |||
+ | ==== 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' | ||
+ | |||
+ | < | ||
+ | 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: | ||
+ | |||
+ | <file txt serveur.conf> | ||
+ | # Configuration du serveur openvpn | ||
+ | mode server | ||
+ | proto tcp | ||
+ | port 31100 | ||
+ | |||
+ | dev vpn | ||
+ | dev-type tun | ||
+ | |||
+ | topology subnet | ||
+ | ca keys/ | ||
+ | cert keys/ | ||
+ | key keys/ | ||
+ | dh keys/ | ||
+ | |||
+ | # Adresse de réseau à exploiter. | ||
+ | # Définit le pool d' | ||
+ | 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 ./ | ||
+ | |||
+ | # Décommenter la directive pour autoriser les communications | ||
+ | # entre clients | ||
+ | # | ||
+ | |||
+ | # Limiter le nombre de conexions au serveur | ||
+ | # | ||
+ | |||
+ | # Renforcement de la securité par defaut | ||
+ | # | ||
+ | # 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 / | ||
+ | verb 3 | ||
+ | # Condense la répétition de memes entrées dans les logs | ||
+ | mute 20 | ||
+ | |||
+ | # Fichier listant les connexions actives | ||
+ | status / | ||
+ | </ | ||
+ | |||
+ | Il utilise les certificats présents dans le sous dossier **./keys/** et des fichier de configuration propres au clientsdans le dossier **./ | ||
+ | |||
+ | <file txt vm01.lan> | ||
+ | # Fichier de redefinition de la configuration | ||
+ | |||
+ | # 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 / | ||
+ | cert / | ||
+ | key / | ||
+ | |||
+ | comp-lzo | ||
+ | verb 3 | ||
+ | </ | ||
+ | ===== Références ===== | ||
+ | * GNU/Linux Magasine HS n°92, VPN | ||
+ | * https:// |