Openvpn

De Wiki doc

Version datée du 7 octobre 2017 à 12:57 par Ycharbi (discussion | contributions) (Création de l'article et enregistrement avant pause.)
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)

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">

  1. 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

  1. Dans combien de jours la clé privé de l'autorité racine expire ?

export CA_EXPIRE=36500

  1. 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">

                              1. 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

                              1. 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

                          1. PARAMETRES RESEAU #############
  1. 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

                              1. 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

                              1. 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)

  1. Configuration personnalisé par utilisateur
  2. client-config-dir ccd
  3. N'autorise que les utilisateurs ayans une configuration personnalisé
  4. 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/

Génération des clés

Fichier de configuration client

Tunnel de niveau 2

Test