Outils pour utilisateurs

Outils du site


Panneau latéral

Mycélium

Documentation

Travaux

Membres

Wiki

documentation:technique:vpn:client

Client VPN

Cette page décrit comment configurer un nouveau client VPN, de sa machine à notre serveur.

Voici les différentes étapes :

  1. Générer un certificat et une clé privée sur le poste du client
  2. Signer le certificat avec notre CA, et le retourner
  3. Attribuer une IP fixe au client dans le serveur OpenVPN
  4. Configurer OpenVPN sur le poste du client

Générer un certificat et une clé privée

Cette étape est à réaliser sur le poste du client.

Sous Debian Stretch et plus

Pré-requis

Assurez-vous d'avoir les paquets suivant d'installés :

Création du certificat et de la clé

  1. Lancer un terminal, en tant qu'un utilisateur, et se placer dans un dossier qui a du sens pour le client (par exemple dans ~/Documents/Mycélium/VPN)
  2. Initialiser le dossier qui contiendra les certificats, avec easy-rsa : make-cadir ./client-ca
  3. Aller dans ce dossier pour la suite des opérations : cd ./client-ca
  4. Initialiser le dossier et l'environnement Easy-RSA : ./easyrsa init-pki
  5. Créer le certificat et la clé du client, en remplaçant adherent1 par le nom du client : ./easyrsa gen-req adherent1 nopass

À la fin, on se retrouve avec un dossier pki/, qui contient :

  • la clé privée du client : pki/private/adherent1.key
  • le certificat, qu'on va envoyer au serveur dans /tmp afin de le signer : pki/reqs/adherent1.req

Signer le certificat du client

Cette étape est à réaliser sur russule, où se trouve notre CA intermédiaire pour le VPN.

  • Se connecter en tant que certificats et aller dans le dossier où se trouve easy-rsa :
ssh certificats@russule
cd ~/openvpn
  • Importer la requête de signature de certificat du client et la signer :
./easyrsa import-req /tmp/adherent1.req adherent1
./easyrsa sign-req client adherent1

Vous aurez besoin du mot de passe de notre Certificat d'Autorité, il est situé dans le dépot Git mycelium-pass. Référez-vous à son README ou à Gestion des secrets au sein de Mycélium au besoin.

À la fin, le fichier pki/issued/adherent1.crt a été créé, il est à retourner au client.

Récupérer le certificat du client signé et celui du serveur

De retour sur le poste du client, dans le dossier où a été généré le certificat et la clé :

  1. Créer le dossier qui contiendra les certificats signés : mkdir pki/signed
  2. Déplacer le certificat adherent1.crt signé par notre CA dans pki/signed
  3. Définir un mot de passe sur ce certificat : ./easyrsa set-rsa-pass adherent1

Récupérez également les fichiers suivants depuis le serveur VPN :

  1. /etc/openvpn/server/ca.crt
  2. /etc/openvpn/server/ta.key

Copiez-les dans le répertoire client/mycélium côté client.

Attribuer une IP fixe au client

Cette étape est à réaliser sur le serveur VPN.

  1. Créer un nouveau fichier portant le nom du client dans /etc/openvpn/server/ccd
  2. Attribuer une IP au client (ex. 80.67.16.10), et ajouter dans ce nouveau fichier la ligne : ifconfig-push 80.67.16.10 255.255.255.0

TODO Discuter et définir d'une façon d'assigner les adresses IPs

TODO Vérifier ces étapes après la mise en place de notre bloc d'adresse IPs publiques

TODO Définir également l'adresse IPv6

Configurer OpenVPN sur le client

Sous Gnome avec NetworkManager

Il faut que le paquet network-manager-openvpn-gnome soit installé. On peut ensuite configurer le vpn automatiquement via un script, ou manuellement.

Automatique (script)

On peut fabriquer un fichier qui contient tout ce qu'il faut pour le fonctionnement du client (conf, certificats et fichiers associés), avec ce script rangé dans notre dépot git : scripts/openvpn/create_ovpn.sh À priori, depuis l'interface graphique d'openvpn gnome, on peut fournir le fichier ainsi généré.

Manuel

Ajouter ensuite une nouvelle connexion de type OpenVPN, en spécifiant dans l'onglet VPN :

  • Général
    • Passerelle : vpn.mycelium-fai.org
  • Authentification
    • Type : Certificats (TLS)
    • Certificat de l'utilisateur : <choisir le fichier adherent1.crt>
    • Certificat du CA : <choisir le fichier ca.crt (propre au serveur)>
    • Clé privée : <choisir le fichier adherent1.key>

Cliquer ensuite sur Avancé…, puis dans l'onglet :

  • Général :
    • Cocher Utiliser la compression de données LZO
  • Sécurité :
    • Chiffrement : AES-256-CBC
  • Authentification TLS :
    • Cocher Verify peer (server) certificate usage signature
      • Remote peer certificate TLS type : Serveur
    • Cocher Utiliser une ahtneitification TLS supplémentaire
      • Fichier de clé : <choisir le fichier ta.key (propre au serveur)>
      • Direction de la clé : 1

Comme service avec systemd

Il faut que le paquet openvpn soit installé.

En tant que root, se placer dans le dossier /etc/openvpn/client, puis :

Créer un fichier mycelium.conf avec le contenu suivant en adaptant les valeurs (i.e: remplacer adherent1) :

client
dev tun
proto udp
remote vpn.mycelium-fai.org
port 1194
nobind
persist-key
persist-tun
ca mycelium/ca.crt
key mycelium/adherent1.key
cert mycelium/adherent1.crt
tls-auth mycelium/ta.key 1
auth SHA512
remote-cert-tls server
cipher AES-256-CBC
comp-lzo
verb 3

redirect-gateway def1
tls-client
route-delay 2
  • Créer un dossier mycelium, et y déposer les fichiers adherent1.key et adherent1.crt générés précédemment, ainsi que ca.crt et ta.key propres au serveur

Le client OpenVPN peut recevoir les informations liées au serveur DNS, mais n'est pas capable nativement de les appliquer. Il faudra pour cela par exemple passer par un script up. Plusieurs solutions sont proposées sur le wiki d'Arch Linux notamment.

Démarrage du VPN

Si vous vous connectez au VPN manuellement, sur demande :

sudo systemctl start openvpn-client@mycelium.service
sudo systemd-tty-ask-password-agent

Si vous souhaitez que la connexion au VPN soit amorcée au démarrage de la machine, il vous faudra inscrire le mot de passe en dur dans un fichier.

Dans le fichier mycelium.config, ajoutez la ligne :

askpass /etc/openvpn/client/mycelium/auth.txt

Créez ensuite ce fichier, et y renseigner le mot de passe :

vim /etc/openvpn/client/mycelium/auth.txt
chmod 600 /etc/openvpn/client/mycelium/auth.txt
sudo systemctl enable openvpn-client@mycelium.service
documentation/technique/vpn/client.txt · Dernière modification: 2020/03/25 12:29 par hoccau