Installer et configurer un serveur OpenVPN sous Ubuntu

phil
Administrateur
Messages : 41
Inscription : 18 sept. 2011, 19:41
Contact :

Installer et configurer un serveur OpenVPN sous Ubuntu

Message par phil »

Information :
Les opérations décrites ici ont été réalisées sur Ubuntu 12.04 LTS
  • 1/ Installation d'OpenVPN Server
On installe le paquet openvpn depuis apt :

Code : Tout sélectionner

sudo apt-get install openvpn
Information :
Les ports par défaut pour OpenVPN sont :
  • 1194 TCP
  • 1194 UDP
Il est possible de les modifier dans les fichiers de configuration.
Suite à l'installation, différents outils sont disponible. Pour des raisons de simplicité, nous allons créer un répertoire pour ces outils dans le dossier de configuration d'OpenVPN (dans /etc/openvpn) et travailler directement dans celui-ci.
On commence donc par créer ledit répertoire, et par copier les outils de configuration :

Code : Tout sélectionner

sudo mkdir /etc/openvpn/easy-rsa/
sudo cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
sudo chown -R $USER /etc/openvpn/easy-rsa/
Ces outils nous seront utiles pour créer les clés d'authentification pour le serveur et les clients.
  • 2/ Génération des clés d'authentification
Principe :
FIX ME :
La première étape pour construire une configuration OpenVPN est d'établir une infrastructure de clés publiques (ou PKI, pour Private Keys Infrastructure).
Cela consiste en :
  1. Un certificat ainsi qu'une clé pour l'Autorité de Certification. Cela servira à signer les clés du serveur et des clients
  2. Des paramètres Diffie Hellman (http://fr.wikipedia.org/wiki/%C3%89chan ... ie-Hellman)
  3. Une clé et un certificat pour le serveur
  4. Une clé et un certificat pour chaque client
OpenVPN fonctionne avec une authentification bidirectionnelle basée sur des certificats. Cela signifie que le client doit authentifier le certificat du serveur et que le serveur doit aussi authentifier le certificat du client avant que la connexion soit considérée comme sûre.
Pour plus d'informations, voir ici : http://openvpn.net/index.php/open-sourc ... o.html#pki
Plaçons nous dans le répertoire nouvellement créé.

Code : Tout sélectionner

cd /etc/openvpn/easy-rsa/
Pour créer des clés et des certificats, il faut renseigner quelques information concernant le serveur (comme le pays, la ville, l'adresse mail de l'administrateur, etc...). Pour cela, il faut éditer le fichier /etc/openvpn/easy-rsa/vars :

Code : Tout sélectionner

nano ./vars
Les lignes à modifier sont à la fin du fichier. Il s'agit de :

Code : Tout sélectionner

export KEY_COUNTRY="FR"
export KEY_PROVINCE="69"
export KEY_CITY="Lyon"
export KEY_ORG="NA"
export KEY_EMAIL=mail@host.domain
Attention :
Aucune de ces lignes ne doit être laissée vide !
Attention :
Les commandes suivantes vont utiliser OpenSSL. Cependant, sous Ubuntu 12.04 LTS (et potentiellement les versions ultérieures), il faut renommer le fichier utilisé pour la configuration d'OpenSSL :

Code : Tout sélectionner

mv openssl-1.0.0.cnf openssl.cnf
Ensuite, il faut initialiser les outils de génération des clés avec les variables que l'on vient de renseigner :

Code : Tout sélectionner

. ./vars
./clean-all
Le "point espace point" est voulu dans la première commande.
La seconde commande va supprimer tout ce qui se trouve dans le répertoire "keys" (défini par la variable "KEY_DIR" du fichier vars, par défaut "/etc/openvpn/easy-rsa/keys" dans la configuration correspondante à ce tutoriel).
Enfin, il faut lancer la génération du certificat de l'autorité de certification :

Code : Tout sélectionner

./build-ca
Pendant l'exécution de cette commande, les paramètres du certificat seront demandés. La plupart auront déjà des valeurs par défaut (donc pas besoin de les renseigner) : celles renseignées dans le fichier vars.
FIX ME :
Le seul paramètre à renseigner obligatoirement est "Common Name" (avec, par exemple, le nom du serveur).
Y'a-t-il une règle de nommage en particulier ?
Une fois que le certificat de l'Autorité de Certification est généré, il faut générer les paramètres Diffie Hellman :

Code : Tout sélectionner

./build-dh
Ensuite, il faut générer le certificat et la clé du serveur :

Code : Tout sélectionner

./build-key-server <nom-du-serveur>
Comme à l'étape précédente, la plupart des paramètres demandés ont une valeur par défaut. Lorsque le "Common Name" est demandé, il faut entrer la même valeur que <nom-du-serveur>.
Cette commande se termine par 2 questions ("Sign the certificate? [y/n]" et "1 out of 1 certificate requests certified, commit? [y/n]") auxquelles il faut répondre positivement ("y").

Un certain nombre de fichiers ont été générés dans le répertoire keys. Voici ceux qui sont importants :
[tr][td]Nom de fichier[/td]
[td]Rôle[/td]
[td]Secret[/td]
[td]Utilisé par[/td][/tr]
[tr][td]ca.crt[/td]
[td]Certificat de l'Autorité de Certification[/td]
[td]Non[/td]
[td]Le serveur + tous les clients[/td][/tr]
[tr][td]ca.key[/td]
[td]Clé de l'Autorité de Certification[/td]
[td]Oui[/td]
[td]La machine de l'Autorité de Certification uniquement (ici, le serveur)[/td][/tr]
[tr][td]dh1024.pem[/td]
[td]Paramètres Diffie Hellman[/td]
[td]Non[/td]
[td]Le serveur uniquement[/td][/tr]
[tr][td]server.crt[/td]
[td]Certificat du serveur[/td]
[td]Non[/td]
[td]Le serveur uniquement[/td][/tr]
[tr][td]server.key[/td]
[td]Clé du serveur[/td]
[td]Oui[/td]
[td]Le serveur uniquement[/td][/tr][/table]
Il ne reste plus qu'à déplacer les fichiers aux bons emplacements, en prenant garde de faire transiter les fichiers secrets par des canaux sécurisés. Dans le cadre de ce tutoriel, les fichiers seront placés dans /etc/openvpn :

Code : Tout sélectionner

cd keys
cp ca.crt dh1024.pem server.crt server.key /etc/openvpn
FIX ME :
Où doit être placé le fichier ca.key ? Peut-on supprimer les fichiers du répertoire keys sans compromettre la création des clés pour les clients ?
FIX ME :
Voir ce que sont les autres fichiers !
Voilà pour la génération des clés du serveur. D'autres clés devront être générées pour les clients, mais ce point sera abordé dans le paragraphe concernant les clients.
  • 3/ Configuration du serveur
Dans la majorité des cas, le fichier de configuration fourni en exemple avec l'installation d'OpenVPN est un bon point de départ. Pour les cas un peu plus pointus, une lecture approfondie des commentaires du fichier d'exemple ainsi que de la documentation d'OpenVPN est fortement recommandée.
La première étape est de copier le fichier d'exemple de configuration du serveur à la bonne place (le fichier est compressé, la décompression sera faite en même temps) :

Code : Tout sélectionner

sudo -s
zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
exit
Dans sa configuration par défaut (avec le fichier fraichement copié), le serveur va créer un VPN avec une interface routée (dev TUN), qui écoutera le port UDP 1194 et donnera aux clients une adresse IP en 10.8.0.0. Les seules modifications à faire impérativement dans ce fichier sont les chemins vers les clés et certificats créés précédemment. Dans la configuration actuelle, ces fichiers doivent se trouver directement dans /etc/openvpn.
Il faut donc éditer le fichier de configuration et vérifier les lignes correspondantes.

Code : Tout sélectionner

cd /etc/openvpn/
nano server.conf
Trouver les lignes suivantes et renseigner les chemins adéquats (relatifs à l'emplacement du fichier de configuration) (normalement, ceux proposés par défaut sont bons) :

Code : Tout sélectionner

ca  ca.crt
cert server.crt
key server.key
dh dh1024.pem
Enregistrer (ctrl+O) et quitter nano (ctrl+X).
Le serveur est désormais utilisable.
FIX ME :
  • X/ Configuration des clients
Voici une liste (pas forcément exhaustive) de clients pour OpenVPN : http://openvpn.net/index.php/access-ser ... w/357.html
Attention :
Le réseau du serveur doit avoir une adresse différente du réseau du client. Par exemple, si le serveur est situé sur un réseau en 192.168.1.X, les clients connectés sur un réseau distant également en 192.168.1.X ne pourront pas accéder au serveur (plus d'infos ici : http://openvpn.net/index.php/open-sourc ... #numbering)
Chaque appareil client aura besoin des éléments suivants :
  • Le certificat de l'autorité de certification (ca.crt), le même que sur le serveur,
  • Le certificat du client (client.crt par exemple),
  • La clé (secrète) du client (client.key), à lui transmettre via un canal sécurisé,
  • Un fichier de configuration (.conf ou .ovpn suivant le système client).
    • X.1/ Génération des fichiers nécessaires au client
Le certificat de l'autorité de certification se récupère sur le serveur (/etc/openvpn/ca.crt pour l'exemple de ce tuto).
Le certificat et la clé du client se génèrent grâce au script "build-key" disponible dans le dossier "easy-rsa" (voir le paragraphe 2/ pour la localisation de ce dossier).
Dans le répertoire "easy-rsa", exécuter les commandes suivantes (en root):

Code : Tout sélectionner

. ./vars
(pour initialiser les variables avec le contenu du fichier vars)

Code : Tout sélectionner

./build-key <client-name>
(pour générer le certificat et la clé)
Renseigner les champs demandés et répondre "yes" aux 2 question à la fin pour signer le certificat.
Les fichiers se trouvent dans le sous répertoire "keys".
Le fichier de configuration peut être basé sur le fichier d'exemple "client.conf". Il faut modifier les directives ca, cert et key pour pointer vers les fichiers adéquats SUR LE CLIENT (généralement, on les met au même endroit que le fichier de configuration, il suffit donc de mettre le bon nom de fichier).
On peut aussi en profiter pour vérifier que les directives comp (pour la compression), cipher (pour le chiffrement), et qques autres sont bien cohérentes avec le fichier de configuration du serveur.
    • X.2/ Configuration des clients
Les 4 fichiers évoqués dans le paragraphe précédent doivent être maintenant transférés vers le client, de préférence par un canal sécurisé.
L'emplacement des fichiers sur le disque du client dépend du système utilisé et du logiciel client VPN.
  • Pour iOS, avec openVPN-connect :
    • Copier les 4 fichiers dans le répertoire de l'application via iTunes
    • Lancer openVPN-connect sur le périphérique iOS, la nouvelle configuration doit apparaitre dans l'application
  • Pour Mac OS X, avec Tunnelblick :
    • Copier les 4 fichiers dans un dossier
    • Renommer le dossier avec le nom de la configuration et ajouter ".tblk" à la fin du nom. Le dossier sera perçu comme un fichier ouvrable par Tunnelblick.
    • Double-cliquer sur le dossier pour installer la configuration
  • Pour Windows, avec OpenVPN Client :
    • Copier les 4 fichiers dans un dossier (par exemple, <OpenVPN Client install dir>\etc\profile)
    • Ouvrir OpenVPN Connect
    • Cliquer sur le + de la section "Connection Profiles", choisir "Local file" et cliquer sur "Import"
    • Naviguer jusqu'au fichier de configuration précédemment copié, et le sélectionner
    • Modifier les propriétés affichées si besoin, et cliquer sur "Save"
    • Cliquer sur le profil pour se connecter
Répondre