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:
# 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"
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
############### 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
Création du répertoire contenant les clés
mkdir /etc/openvpn/serveur-clés/