« Openvpn » : différence entre les versions
(Création de l'article et enregistrement avant pause.) |
Aucun résumé des modifications |
||
(3 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Category:vpn]] | [[Category:vpn]] | ||
{{chantier}} | |||
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 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. | ||
Ligne 7 : | Ligne 8 : | ||
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 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. | 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= | =Tunnel de niveau 3= | ||
==Installation du paquet== | ==Installation du paquet== | ||
Ligne 12 : | Ligne 14 : | ||
apt install openvpn | apt install openvpn | ||
''Note: le paquet '''openssl''', installé par défaut dans Debian, est également nécessaire.'' | ''Note: le paquet '''openssl''', installé par défaut dans Debian, est également nécessaire.'' | ||
==Paramètres IP== | ==Paramètres IP== | ||
Les paramètres IP n'ont pas besoins d'être modifiés. | Les paramètres IP n'ont pas besoins d'être modifiés. | ||
Ligne 27 : | Ligne 30 : | ||
'''Redémarrer l'interface pour appliquer les paramètres''' | '''Redémarrer l'interface pour appliquer les paramètres''' | ||
ifdown eth0 && ifup eth0 | ifdown eth0 && ifup eth0 | ||
==Configuration du service== | ==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. | 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=== | ===Préparation des fichiers=== | ||
====Fichiers de génération des clés==== | ====Fichiers de génération des clés==== | ||
'''Copie de l'outil easy-rsa dans notre répertoire de travail''' | '''Copie de l'outil easy-rsa dans notre répertoire de travail''' | ||
cp -ra /usr/share/easy-rsa /etc/openvpn/ | cp -ra /usr/share/easy-rsa /etc/openvpn/ | ||
'''Configuration du fichier de génération des clés''' | '''Configuration du fichier de génération des clés''' | ||
vim /etc/openvpn/easy-rsa/vars | vim /etc/openvpn/easy-rsa/vars | ||
Dans ce fichier, modifier les valeurs comme suit: | Dans ce fichier, modifier les valeurs comme suit: | ||
<source lang="bash"> | <source lang="bash"> | ||
Ligne 50 : | Ligne 57 : | ||
export KEY_CITY="Paris" | export KEY_CITY="Paris" | ||
export KEY_ORG="Quenelleplus" | export KEY_ORG="Quenelleplus" | ||
export KEY_EMAIL="plus@ | export KEY_EMAIL="plus@jamaisca.be" | ||
export KEY_OU="Cuisine" | export KEY_OU="Cuisine" | ||
</source> | </source> | ||
cd /etc/openvpn/easy-rsa/ | cd /etc/openvpn/easy-rsa/ | ||
{{attention|Un bug récent d''''EasyRSA''' (depuis Debian Stretch) empêche le chargement de ce fichier car ce con pointe sur une configuration d''''OpenSSL''' ne portant pas le bon nom. Il suffit de la copier en la renommant.}} | |||
cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf | |||
'''Chargement du fichier de configuration''' | '''Chargement du fichier de configuration''' | ||
source vars | source vars | ||
'''Purger les anciennes clés (ne sert à rien | |||
'''Purger les anciennes clés (même si ça ne sert à rien, l'outil ''build-ca'' refuse de fonctionner si on ne le fait pas...)''' | |||
./clean-all | ./clean-all | ||
====Génération des clés serveur==== | |||
'''Création du répertoire contenant les clés''' | |||
mkdir /etc/openvpn/serveur-clés/ | |||
cd /etc/openvpn/easy-rsa/ | |||
'''Générer l'autorité de certification racine''' | |||
./build-ca | |||
{{Info|Cette commande va générer les fichiers utiles '''ca.crt''' et '''ca.key'''.}} | |||
'''Générer le certificat du serveur''' | |||
./pkitool --server serveur | |||
{{Info|Cette commande va générer les fichiers utiles '''serveur.crt''', '''serveur.csr''' et '''serveur.key'''.}} | |||
'''Générer la clé statique''' | |||
openvpn --genkey --secret keys/ta.key | |||
'''Générer la clé Diffie Hellman (très long, ne pas lancer avant la débauche ou vous allez faire des heures supplémentaires)''' | |||
./build-dh | |||
'''Copier les clés dans le répertoire d'usage''' | |||
cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/easy-rsa/keys/ca.key /etc/openvpn/easy-rsa/keys/dh4096.pem /etc/openvpn/easy-rsa/keys/serveur.csr /etc/openvpn/easy-rsa/keys/serveur.crt /etc/openvpn/easy-rsa/keys/serveur.key /etc/openvpn/easy-rsa/keys/ta.key /etc/openvpn/serveur-clés/ | |||
====Fichier de configuration serveur==== | ====Fichier de configuration serveur==== | ||
Ce fichier définit l'ensemble des paramètres du serveur OpenVPN. | Ce fichier définit l'ensemble des paramètres du serveur OpenVPN. | ||
vim /etc/openvpn/server.conf | vim /etc/openvpn/server.conf | ||
<source lang="bash"> | <source lang="bash"> | ||
############### CONFIG SERVEUR ############### | ############### CONFIG SERVEUR ############### | ||
Ligne 86 : | Ligne 126 : | ||
# Réseau IP des clients VPN | # Réseau IP des clients VPN | ||
server 10.10.10.0 255.255.255.0 | server 10.10.10.0 255.255.255.0 | ||
push "dhcp-option DNS | push "dhcp-option DNS 80.67.169.12" # Paramètre DNS principal | ||
push "dhcp-option DNS | push "dhcp-option DNS 80.67.169.40" # Paramètre DNS secondaire | ||
push "redirect-gateway def1 bypass-dhcp" # Routage intégral du trafic via le tunnel VPN | push "redirect-gateway def1 bypass-dhcp" # Routage intégral du trafic via le tunnel VPN | ||
Ligne 103 : | Ligne 143 : | ||
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) | 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 | #Configuration personnalisée par utilisateur | ||
#client-config-dir ccd | #client-config-dir ccd | ||
#N'autorise que les utilisateurs | #N'autorise que les utilisateurs ayants une configuration personnalisée | ||
#ccd-exclusive | #ccd-exclusive | ||
script-security 2 | #script-security 2 | ||
up /root/nat.sh | #up /root/nat.sh | ||
</source> | </source> | ||
''' | |||
'''Tester le bon fonctionnement de la configuration''' | |||
openvpn /etc/openvpn/server.conf | |||
Le fichier journal ''/etc/openvpn/openvpn.log'' doit indiquer ''Initialization Sequence Completed'' sur sa dernière ligne. | |||
====Fichier de configuration client==== | ====Fichier de configuration client==== | ||
Le fichier de configuration client est spécifique à chaque client. | |||
Créer le répertoire d'accueil des fichiers clients | |||
mkdir -p /etc/openvpn/utilisateurs/{client1,client2} | |||
Éditer le fichier pour l'utilisateur client1 | |||
vim /etc/openvpn/utilisateurs/client1/client.ovpn | |||
<source lang="bash"> | |||
############### CLEFS ET CERTIFICATS ############### | |||
cert client1.crt | |||
key client1.key | |||
ca ca.crt | |||
tls-auth ta.key 1 | |||
tls-client | |||
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 | |||
persist-key | |||
persist-tun | |||
;tls-remote <X509> | |||
############### RESEAU ############### | |||
remote adresse.ip.publique.serveur 1194 | |||
redirect-gateway def1 | |||
dev tun | |||
resolv-retry infinite | |||
proto udp | |||
############### AUTRES ############### | |||
verb 4 | |||
log openvpn.log | |||
comp-lzo | |||
pull | |||
nobind | |||
############### Script ############### | |||
#script-security 2 | |||
</source> | |||
====Génération des clés client==== | |||
=Tunnel de niveau 2= | =Tunnel de niveau 2= | ||
==Test== | ==Test== |
Dernière version du 28 mai 2018 à 22:43
EN CHANTIER
Article en cours d'écriture et/ou de test. Certains éléments peuvent être incomplets et mener à un résultat non fonctionnel.Merci de ne pas rager.
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@jamaisca.be"
export KEY_OU="Cuisine"
cd /etc/openvpn/easy-rsa/
ATTENTION
Un bug récent d'EasyRSA (depuis Debian Stretch) empêche le chargement de ce fichier car ce con pointe sur une configuration d'OpenSSL ne portant pas le bon nom. Il suffit de la copier en la renommant.cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
Chargement du fichier de configuration
source vars
Purger les anciennes clés (même si ça ne sert à rien, l'outil build-ca refuse de fonctionner si on ne le fait pas...)
./clean-all
Génération des clés serveur
Création du répertoire contenant les clés
mkdir /etc/openvpn/serveur-clés/ cd /etc/openvpn/easy-rsa/
Générer l'autorité de certification racine
./build-ca
INFORMATION
Cette commande va générer les fichiers utiles ca.crt et ca.key.Générer le certificat du serveur
./pkitool --server serveur
INFORMATION
Cette commande va générer les fichiers utiles serveur.crt, serveur.csr et serveur.key.Générer la clé statique
openvpn --genkey --secret keys/ta.key
Générer la clé Diffie Hellman (très long, ne pas lancer avant la débauche ou vous allez faire des heures supplémentaires)
./build-dh
Copier les clés dans le répertoire d'usage
cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/easy-rsa/keys/ca.key /etc/openvpn/easy-rsa/keys/dh4096.pem /etc/openvpn/easy-rsa/keys/serveur.csr /etc/openvpn/easy-rsa/keys/serveur.crt /etc/openvpn/easy-rsa/keys/serveur.key /etc/openvpn/easy-rsa/keys/ta.key /etc/openvpn/serveur-clés/
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 80.67.169.12" # Paramètre DNS principal
push "dhcp-option DNS 80.67.169.40" # 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ée par utilisateur
#client-config-dir ccd
#N'autorise que les utilisateurs ayants une configuration personnalisée
#ccd-exclusive
#script-security 2
#up /root/nat.sh
Tester le bon fonctionnement de la configuration
openvpn /etc/openvpn/server.conf
Le fichier journal /etc/openvpn/openvpn.log doit indiquer Initialization Sequence Completed sur sa dernière ligne.
Fichier de configuration client
Le fichier de configuration client est spécifique à chaque client.
Créer le répertoire d'accueil des fichiers clients
mkdir -p /etc/openvpn/utilisateurs/{client1,client2}
Éditer le fichier pour l'utilisateur client1
vim /etc/openvpn/utilisateurs/client1/client.ovpn
############### CLEFS ET CERTIFICATS ###############
cert client1.crt
key client1.key
ca ca.crt
tls-auth ta.key 1
tls-client
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
persist-key
persist-tun
;tls-remote <X509>
############### RESEAU ###############
remote adresse.ip.publique.serveur 1194
redirect-gateway def1
dev tun
resolv-retry infinite
proto udp
############### AUTRES ###############
verb 4
log openvpn.log
comp-lzo
pull
nobind
############### Script ###############
#script-security 2