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érieure autre fera l'affaire aussi
  • un client dans mon cas sous linuxmint 17, mais la encore peu de choses vont changer dans la suite
Coté client il existe 2 manières de faire :
  • 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

Nous allons configurer une connexion VPN automatique sans mot de passe avec notre réseau. Ne faites pas ceci sur une machine susceptible de se faire voler ou d'être perdue. Sur ce type de machine il faudra préférer :
  • 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
Ceci est une configuration standard :
  • 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
Noter ici que l'on utilise le nom du client “nouveauClient” et donc qu'il ne faut pas mettre d'extension à ce fichier, mais le nommer en accord avec votre nom de client

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
Il va sans dire qu'il ne faut pas donner les droits de modifier ce script a n'importe qui étant donné qu'il sera lancé en root ;-)

Références

sysadmin/openvpn_client.txt · Dernière modification: 2015/07/24 20:49 par james
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0