Table des matières
Ajouter un nouveau client à notre serveur OpenVPN
Pour faire suite a l'article (qui n'existe pas encore )sur le serveur, voici comment ajouter un nouveau client.
Prérequis :
- un serveur OpenVPN correctement configuré (hébergé sur une debian wheezy, mais une distribution
inférieureautre fera l'affaire aussi - un client dans mon cas sous linuxmint 17, mais la encore peu de choses vont changer dans la suite
- Utiliser une configuration globale système (avec connexion automatique au VPN au démarrage) ce que nous allons faire
- Utiliser une configuration plus orientée poste nomade avec une connexion VPN à la demande via network-manager
Nous allons nous intéresser au premier cas
- une clef avec passphrase
- une connexion manuelle
Et bien sur si le pire arrivait, notifier au plus vite votre administrateur système (ca tombe bien ca devrait être vous ;) ) et révoquer dans les plus brefs délais les certificats perdus/volés
Prérequis
Poste client
- Sur notre poste client il nous faudra … openvpn ;p :
# apt-get install openvpn
Générer le certificat
Nous allons supposer ici que vous utilisez easy-rsa pour la gestion de votre PKI OpenVPN, ce qui est souvent le cas par défaut. Sinon vous devriez savoir adapter la suite.
- Depuis le serveur :
- importer votre configuration easy-rsa :
# cd /etc/openvpn/easy-rsa # source ./vars
- générer un certificat pour ce futur nouveau client que nous allons baptiser “nouveauClient” dans la suite (remplacer ce nom par le votre) :
# ./pkitool nouveauClient
ce qui devrait vous afficher quelque chose de similaire à :
# ./pkitool nouveauClient Generating a 1024 bit RSA private key .....................++++++ ....................................++++++ writing new private key to 'nouveauClient.key' ----- Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'FR' stateOrProvinceName :PRINTABLE:'MaProvince' localityName :PRINTABLE:'MaVille' organizationName :T61STRING:'Chez_oam' commonName :PRINTABLE:'nouveauClient' emailAddress :IA5STRING:'root@mondomaine.com' Certificate is to be certified until Jan 11 10:29:19 2025 GMT (3650 days) Write out database with 1 new entries Data Base Updated
- Le certificat est généré dans le sous répertoire “keys”, pour s'en convaincre un petit ls :
# ls /etc/openvpn/easy-rsa/keys/nouveauClient.* /etc/openvpn/easy-rsa/keys/nouveauClient.crt /etc/openvpn/easy-rsa/keys/nouveauClient.csr /etc/openvpn/easy-rsa/keys/nouveauClient.key
Configuration du client
- Transférer les fichiers suivants sur votre poste client en utilisant un moyen “sécurisé” : clef USB, scp, …. :
- le certificat et sa clef (respectivement fichiers nouveauClient.crt et nouveauClient.key)
- le certificat de votre serveur (pour savoir de quel fichier il s'agit, vous pouvez utiliser la commande
# grep "^ca" /etc/openvpn/server.conf
qui devrait vous donner quelque chose comme :
# grep "^ca" /etc/openvpn/server.conf ca keys/ca.crt
- Déposer ces fichiers dans le répertoire /etc/openvpn/, de telle sorte que vous devriez y trouver les fichiers suivants :
# ls /etc/openvpn/ nouveauClient.crt nouveauClient.key ca.crt update-resolv-conf
- Ecrire le fichier de configuration /etc/openvpn/client.conf qu'il faudra bien sur adapter a vos besoins :
# cat << EOF > /etc/openvpn/client.conf client remote vpn.mondomaine.com 1194 proto udp nobind persist-key persist-tun dev-type tun dev vpn-chezoam user nobody group nogroup ca ca.crt cert nouveauClient.crt key nouveauClient.key comp-lzo verb 4 EOF
- on définit le mode client, l'adresse/port/protocole du serveur (ici vpn.mondomaine.com en udp sur le port 1194 : vous devriez vouloir changer au moins le nom du serveur)
- le mode de l'interface réseau utilisé : j'ai choisi tun. On peut aussi noter que j'aime bien nommer cette interface avec un nom explicite : “vpn-chezoam”
- Il faut bien sur adapter les noms “nouveauClient.crt” et “nouveauClient.key” des directives cert et key à votre client
- Enfin j'active la compression lzo (qui doit aussi être activée coté serveur)
- Et un peu de verbosité parce que ça ne fait pas de mal
C'en est fini de la configuration coté client : il ne reste plus qu'à configurer notre serveur pour ce nouveau client.
Configuration du serveur
Le serveur utilise un “client configuration directory” (aka ccd). Il faut donc ajouter un nouveau fichier dans ce répertoire pour notre nouveau client.
C'est le moment d'assigner une IP à notre nouveau client avec la directive ifconfig-push Chaque paire d'adresse de ifconfig-push représente les adresses virtuelles du client et du serveur. Elles doivent être prises dans des sous réseaux /30 pour être compatibles avec les clients windows (et plus spécifiquement le driver TAP windows).
Si la phrase ci dessus est du chinois, sachez juste qu'il faut prendre les couples d'adresses dans les couples suivants :
[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18] [ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38] [ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58] [ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78] [ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98] [101,102] [105,106] [109,110] [113,114] [117,118] [121,122] [125,126] [129,130] [133,134] [137,138] [141,142] [145,146] [149,150] [153,154] [157,158] [161,162] [165,166] [169,170] [173,174] [177,178] [181,182] [185,186] [189,190] [193,194] [197,198] [201,202] [205,206] [209,210] [213,214] [217,218] [221,222] [225,226] [229,230] [233,234] [237,238] [241,242] [245,246] [249,250] [253,254]
Je vais donc choisir [13,14] (qui sont bien sur libres sur le réseau OpenVPN auquel je veux associer ce nouveauClient : 192.168.3.0/24) :
# cat << EOF > /etc/openvpn/ccd/nouveauClient
ifconfig-push 192.168.3.13 192.168.3.14
EOF
Finalisation
Tout devrait maintenant être en place pour nous permettre de tenter une connexion. Pour ce faire, sur votre client :
# service openvpn restart
Vous pouvez vérifier les logs coté client et serveur (dans /var/log/syslog) pour découvrir pourquoi si jamais la connexion échoue
Un peu plus loin
Utiliser le ccd pour passer moins de paramètres a certains clients
On peut utiliser le fichier ccd de chaque client pour lui ajouter des paramètres donnés par le serveur, mais on peut aussi dire au serveur de ne lui en donner que quelques-uns. Par exemple si sur un des clients vous ne voulez pas qu'il ait la route vers un sous réseau interne définie dans la conf générale de votre serveur.
Il faut pour cela utiliser push-reset dans le fichier ccd qui flush ce qui va être envoyé du serveur vers ce client spécifique. Cete directive fait néanmoins un peu trop le ménage et il faut donc lui redonner la route vers le sous réseau du serveur openvpn lui meme (ici 192.168.3.0/24), comme par exemple dans l'exemple suivant :
$ cat ccd/monClient
push-reset
push "route 192.168.3.0 255.255.255.0"
ifconfig-push 192.168.3.201 192.168.3.202
Relancer des services apres la connexion du client openvpn
Il peut être utile de (re)lancer un script et/ou des services une fois le client connecté, par exemple un service qui doit se binder sur l'ip VPN (monitoring nagios, munin, backup, ….)
Pour se faire:
- ajouter du contenu dans le fichier client.conf :
# cat << EOF >> /etc/openvpn/client.conf # on ajoute un script de restart pour nrpe et munin-node script-security 2 # run /etc/openvpn/up.sh when the connection is set up up /etc/openvpn/up.sh EOF
- créer notre script et le remplir, par exemple :
# cat << EOF > /etc/openvpn/up.sh #!/bin/bash # # restart services so they can bind to VPN ip address # service munin-node restart service nagios-nrpe-server restart EOF
- rendre ce script exécutable :
# chmod +x /etc/openvpn/up.sh
- Il ne reste plus qu'a relancer le client openvpn et attendre que la connexion s'établisse avant de regarder le resultat :
# service openvpn restart