Openvpn
OpenVPN permet de monter un tunnel VPN entre plusieurs machines. Que ce soit dans le cadre de connexion client-serveur ou serveur-serveur. Dans tout les cas, la session sera négocié via TLS et utilisera des clés asymétriques pour chiffrer la communication.
OpenVPN permet deux mode de connexion:
- Mode tunnel (TUN)
- Mode pond (TAP)
Le mode tunnel permet de faire passer tout les protocoles appartenant aux couches supérieurs au niveau 3 du modèle OSI. Il est plus adapté à des connexions client-serveur. Le mode pont permet de faire passer n'importe quel protocole de niveau 3. Il est plus adapté aux connexions serveur-serveur.
Tunnel de niveau 3
Installation du paquet
OpenVPN est disponible dans les dépôts Debian.
apt install openvpn
Note: le paquet openssl, installé par défaut dans Debian, est également nécessaire.
Paramètres IP
Les paramètres IP n'ont pas besoins d'être modifiés.
Voici une configuration valide
vim /etc/network/interfaces
auto eth0 iface eth0 inet static address 192.168.1.29 network 192.168.1.0 broadcast 192.168.1.255 netmask 255.255.255.0 gateway 192.168.1.15
Redémarrer l'interface pour appliquer les paramètres
ifdown eth0 && ifup eth0
Configuration du service
Afin de générer les clés qui nous servirons pour chiffrer les communications, nous utiliserons l'utilitaire easy-rsa. À savoir que cet outil n'est pas nécessaire pour générer les clés puisque openssl peut être utilisé à la place (il est même obligatoire afin d'utiliser des clés à courbe elliptique). Cette façon de faire sera expliqué plus loin.
Préparation des fichiers
Fichiers de génération des clés
Copie de l'outil easy-rsa dans notre répertoire de travail
cp -ra /usr/share/easy-rsa /etc/openvpn/
Configuration du fichier de génération des clés
vim /etc/openvpn/easy-rsa/vars
Dans ce fichier, modifier les valeurs comme suit: <source lang="bash">
- La taille de votre clé, à défaut de faire de l'elliptique, ont prend la valeur max (génération de la clé très longue ! Avec un Raspberry PI, ça prend 23h à faire !)
export KEY_SIZE=4096
- Dans combien de jours la clé privé de l'autorité racine expire ?
export CA_EXPIRE=36500
- Dans combien de jours les certificats expires ?
export KEY_EXPIRE=36500
export KEY_COUNTRY="FR" export KEY_PROVINCE="75" export KEY_CITY="Paris" export KEY_ORG="Quenelleplus" export KEY_EMAIL="plus@jamaisça.be" export KEY_OU="Cuisine" </source>
cd /etc/openvpn/easy-rsa/
Chargement du fichier de configuration
source vars
Purger les anciennes clés (ne sert à rien en l'état mais peu servir...)
./clean-all
Fichier de configuration serveur
Ce fichier définit l'ensemble des paramètres du serveur OpenVPN.
vim /etc/openvpn/server.conf
<source lang="bash">
- CONFIG SERVEUR ###############
mode server # Met OpenVPN en mode serveur port 1194 # Indique le port d’écoute proto udp # Utilise le protocole TCP dev tun # Indique l’interface d’écoute # tun est créée automatiquement
- CLEFS ET CERTIFICATS ###############
ca /etc/openvpn/serveur-clés/ca.crt cert /etc/openvpn/serveur-clés/serveur.crt key /etc/openvpn/serveur-clés/serveur.key dh /etc/openvpn/serveur-clés/dh4096.pem tls-server tls-auth /etc/openvpn/serveur-clés/ta.key 0 cipher AES-256-CBC tls-version-min 1.2 tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256:TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA
- PARAMETRES RESEAU #############
- Réseau IP des clients VPN
server 10.10.10.0 255.255.255.0 push "dhcp-option DNS 8.8.8.8" # Paramètre DNS principal push "dhcp-option DNS 8.8.4.4" # Paramètre DNS secondaire push "redirect-gateway def1 bypass-dhcp" # Routage intégral du trafic via le tunnel VPN
- LOGS ###############
verb 4 # Niveau de verbosité du journal log openvpn.log # Emplacement du journal status openvpn-status.log # Emplacement du journal d'état du serveur
- AUTRES ###############
keepalive 10 120 # Ping toute les 10s et arrêt au bout de 2min comp-lzo # Activation compression (à activer également coté client) persist-key # Évite la renégociation des clés après un redémarrage de connexion persist-tun # Ne pas fermer et ré-ouvrir l'interface tun/tap lors d'un redémarrage de connexion (afin de ne pas relancer d'éventuels scripts associés)
- Configuration personnalisé par utilisateur
- client-config-dir ccd
- N'autorise que les utilisateurs ayans une configuration personnalisé
- ccd-exclusive
script-security 2 up /root/nat.sh </source> Création du répertoire contenant les clés
mkdir /etc/openvpn/serveur-clés/