Openvpn

De Wiki doc

Révision datée du 7 octobre 2017 à 13:57 par Ycharbi (discussion | contributions) (Création de l'article et enregistrement avant pause.)
(diff) ← Version précédente | Voir la 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:

# 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/

Génération des clés

Fichier de configuration client

Tunnel de niveau 2

Test