Documentation VPN Contexte et choix de la solution Contexte Le centre de formation ITIS étant à la recherche d'une solution d'accès à distance sécurisé, nous lui avons proposé la mise en place d'une solution d'accès à distance à l'infrastructure du centre de formation. Le but étant d'avoir une solution permettant aux étudiants de se connecter à l'infrastructure mise en place pour le contexte de l'examen depuis un site distant et ce aussi bien sous Windows que sous Linux. L'ensemble de nos projets sont des machines virtuelles ou des conteneurs hébergés sur un Proxmox. Proxmox Virtual Environment est une solution de virtualisation libre basée sur l'hyperviseur Linux KVM. Choix de la solution Pour cela nous avons du faire des choix lors de la conception du projet afin de répondre aux exigences que nous offraient l'infrastructure aussi bien d'un point de vu physique que logique. De plus nous sommes attachés à utiliser au maximum le milieu libre, aussi bien pour le système d'exploitations que pour les services. Nous nous sommes donc tournés vers un serveur sous Debian 8, en raison de ses performances pour un minimum de ressources, configurable facilement et dans la lignée de notre infrastructure et de nos connaissances. De plus, le choix d'utiliser OpenVPN nous a semblé normal et dans la continuité de nos précédents choix étant donné que c'est un logiciel libre permettant de créer des réseaux privés virtuels. Virtual Private Network Qu'est ce qu'un VPN? Un Virtual Private Network, ou Réseau Privé Virtuel, est une solution permettant de créer un accès à distance avec des ordinateurs ou un réseau et de manière sécurisée en utilisant le chiffrement. Il existe divers protocoles afin de créer des VPN tel que SSL/TLS ( utliser par OpenVPN ), SSH, L2TP, etc... Comment son crypté les données échangées? Le chiffrement RSA est un algorithme de cryptographie asymétrique permettant, via un échange de clés publiques et privées, de transmettre des données cryptées. Deux intervenants, Alice et Bob par convention, souhaitent s'échanger des données, pour ce faire, Alice va envoyer à Bob une clé publique générée à l'aide de sa clé privée. Bob va donc recevoir la clé privée et utiliser celle-ci afin de crypter son message avant de l'envoyer à Alice. Alice en possession du message crypté par la clé publique transmisse à Bob, va pouvoir la décrypter grâce à la clé privée qu'elle possède et qui avait servit à généré la clé publique de l'échange. Si une tierce personne, Eve, récupère le message codé ou la clé publique, celle-ci ne peut pas décoder le message à cause de l'absence de la clé privée d'alice. Cette méthode de cryptographie est l'une des plus sure et des plus utilisées actuellement notamment dans les échanges commerciaux.
Tun ou Tap? Le mode tun d'un VPN simule un tunnel VPN de niveau 3 ( du modèle OSI ) et permet le routing. Le mode tap utilise le niveau 2 du modèle OSI et permet la création d'un bridge. Notre choix entre le tun et le tap c'est orienté vers le tun Installation Une fois le serveur Debian 8 installé et configuré, nous avons installé le packet openvpn : apt-get install -y openvpn Le packet openvpn comporte Easy-RSA, un gestionnaire de clé RSA basé sur OpenSSL et dépendant d'openvpn décrit dans la partie Comment son crypté les données échangées?. Puis nous avons récupéré les scripts de création de certificats et de clés récupérés lors de l'installation afin de les placer dans notre répertoire principale OpenVPN via : cp -a /usr/share/easy-rsa /etc/openvpn Puis nous avons modifié le fichier vars, placé dans le répertoire que nous venons de copier /etc/openvpn/easy-rsa, qui contient les caractéristiques des futurs certificats et clés générer par Easy-RSA. Une fois les champs renseignés, il faut redéfinir le fichier vars pour qu'easy-rsa l'utilise en tant que fichier source lors de la génération des certificats et clés, source vars puis./clean-all Certificats Qu'est ce qu'un certificat? Un certificat est une carte d'identité numérique appartenant à une personne ou une machine l'authentifiant, il est utilisé lors des échanges chiffrés.
Les certificats Le premier certificat créé est le certificat d'autorité, certificat démontrant l'autorité du serveur à créer et gérer les certificats et clés du serveur et de ceux qui seront en communication avec lui, grâce au script :./build-ca Toutes nos clés et tous nos certificats seront placés dans /etc/openvpn/easy-rsa/keys. Nous avons ensuite généré la clé Diffie-Hellman, qui est une méthode de cryptographie asymétrique permettant un échange de clés entre deux personnes sécurisé, via :./build-dh Nous générons ensuite le certificat du serveur :./build-key-server openvpn-server Tous les certificats et clés dont le serveur a besoin étant en place, nous nous attarderons sur les clés et certificats clients après la configuration du serveur au moment de la connexion de ceux-ci. Configuration Pour configurer notre serveur, nous nous sommes servi du fichier de configuration par défaut d'openvpn que nous avons modifié pour le faire correspondre à nos besoins et nous l'avons déplacer dans notre répertoire OpenVPN :
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files /server.conf.gz > /etc/openvpn/server.conf. Il suffit de décommenter les lignes user nobody et group nogroup ainsi que d'indiquer les chemins des certificats : ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/openvpn-server.crt key /etc/openvpn/easy-rsa/keys/openvpn-server.key # This file should be kept secret Ainsi que : dh /etc/openvpn/easy-rsa/keys/dh2048.pem
De plus, le serveur deviendra la passerelle par défaut des clients connectés dessus grâce à: push «redirect-rgateway def1 bypass-dhcp» Lancement du service Lancement Une fois le fichier de configuration opérationnel, il suffit de lancer le service openvpn : openvpn /etc/openvpn/server.conf On voit apparaître le tunnel SSL/TLS dans les interfaces réseaux du serveur :
Il faut ensuite modifier la règle de routage dans le fichier /etc/sysctl.conf en décommentant la ligne du forwarding de l'ipv4 Puis il faut recharger la configuration : sysctl -p /etc/sysctl.conf Configuration du firewall Notre infrastructure possède un firewall mis en place pour un de nos camarades. C'est un serveur Debian 8 sur lequel est installé et configuré un firewall Iptables. L'ensemble de la configuration du serveur ayant déjà été faite par notre camarade, il ne nous restait plus qu'à modifier le fichier de configuration présent à la racine de l'utilisateur principale ( sysadmin ), ajoutant une ligne afin de rediriger le trafic entrant sur le port 1194 depuis l'extérieur vers le serveur OpenVPN et ce, grâce au portforwarding.
Client Linux Avant de passer sur le poste client, il faut générer une clé pour le client. Il faudra répéter l'opération pour chaque nouveau poste client susceptible de se connecter via le serveur VPN. Pour cela on utilise le script présent dans /etc/openvpn/easy-rsa./build-key client-test Ici nous utilisons client-test, mais une nomination précise sera mise en place après les test. De plus, il est possible de définir un mot de passe pour chaque utilisateur dans le champ challenge password Une fois les certificats clients créés, nous les récupérons depuis le poste client sur le serveur en sftp via Filezilla ou via un terminal. Puis nous installons openvpn sur le poste client : sudo apt-get install openvpn
Puis comme pour le serveur nous récupérons le fichier de configuration par défaut d'openvpn que nous plaçons dans /etc/openvpn et nous créons un répertoire keys dans lequel nous plaçons les clés récupérées préalablement sur le serveur : cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn mkdir -p /etc/openvpn/keys cd /etc/openvpn/keys cp /tmp/ca.crt. cp /tmp/client-test.key. cp /tmp/client-test.crt. Il faut ensuite éditer le fichier client.conf et renseigner notre serveur ( l'adresse IP de celui ci ainsi que le port en interne du serveur 1194 qui est le port par défaut d'openvpn ) ainsi que les chemins des certificats : remote 192.168.0.11 1194 ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/client-test.crt key /etc/openvpn/easy-rsa/keys/client-test.key Une fois ceci fait, nous lançons le client OpenVPN openvpn /etc/openvpn/client.conf Nous pouvons vérifier que le lancement se déroule correctement grâce à l'ouverture du tunnel dans les interfaces réseaux.
Un ping du tunnel 10.8.0.1 nous montre que la connexion VPN est bien établie.