Qu’est ce que c’est ?
OpenVPN c’est un tunnel IP (UDP ou TCP au choix) authentifié et chiffré avec la bibliothèque OpenSSL.
Quels sont les avantages ?
- Facilité pour passer les réseaux NATés (pas de configuration à faire)
- Logiciel clients multi-plateforme.
Installation du serveur OpenVPN
Nous allons détailler l’installation du serveur OpenVPN sur une distribution Debian-like.
On commence par installer OpenVPN à partir des dépôts officiels:
# aptitude install openvpn
On copie ensuite les fichiers de configurations :
# mkdir /etc/openvpn/easy-rsa/ # cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/ # chown -R $USER /etc/openvpn/easy-rsa/
Configuration du serveur OpenVPN
A l’aide des scripts installés dans le répertoire /etc/openvpn/easy-rsa/ nous allons configurer OpenVPN pour utiliser une authentification par clés et certificats.
On commence par éditer le fichier /etc/openvpn/easy-rsa/vars :
export KEY_COUNTRY="FR" export KEY_PROVINCE="06" export KEY_CITY="Nissa" export KEY_ORG="sheebypanda.com" export KEY_EMAIL="dtc@hadopi.fr"
Ensuite on lance la séquence suivante qui va générer les clés (.key) et les certificats (.crt) :
cd /etc/openvpn/easy-rsa/ source vars ./clean-all ./build-dh ./pkitool --initca ./pkitool --server server openvpn --genkey --secret keys/ta.key
On copie ensuite les clés et les certificats utiles pour le serveur dans le répertoire /etc/openvpn/ :
# cp keys/ca.crt keys/ta.key keys/server.crt keys/server.key keys/dh1024.pem /etc/openvpn/
Puis on génère un répertoire /etc/openvpn/jail dans lequel le processus OpenVPN sera chrooté (afin de limiter les dégâts en cas de faille dans OpenVPN) puis un autre répertoire qui contiendra la configuration des clients :
# mkdir /etc/openvpn/jail # mkdir /etc/openvpn/clientconf
Enfin on créé le fichier de configuration /etc/openvpn/server.conf :
# Serveur TCP/443 mode server proto tcp port 443 dev tun # Cles et certificats ca ca.crt cert server.crt key server.key dh dh1024.pem tls-auth ta.key 0 cipher AES-256-CBC # Reseau server 10.8.0.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 4.4.4.4" push "dhcp-option DNS 8.8.8.8" keepalive 10 120 # Securite user nobody group nogroup chroot /etc/openvpn/jail persist-key persist-tun comp-lzo # Log verb 3 mute 20 status openvpn-status.log ; log-append /var/log/openvpn.log
Ce fichier permet de créer un serveur VPN SSL routé basée sur le protocole TCP et utilisant le port HTTPS (443) enfin de maximiser sont accessibilité depuis des réseaux sécurisés par des Firewalls. Les clients obtiendrons une nouvelle adresse IP dans le range 10.8.0.0/24.
On teste la configuration en saisissant la commande suivante:
# openvpn server.conf
On doit obtenir les messages suivants :
Initialization Sequence Completed
Si le serveur démarre correctement, on peut terminer la configuration sur serveur OpenVPN en décommentant la dernière ligne du fichier /etc/openvpn/server.conf :
log-append /var/log/openvpn.log
On lance le serveur avec la commande :
# /etc/init.d/openvpn start
À ce stade un client va pouvoir se connecter au serveur VPN. Par contre impossible d’aller plus loin car l’adresse 10.8.0.x ne sera par routée en dehors de votre serveur. Il faut donc configurer le serveur pour jouer le rôle de routeur entre l’interface VPN (tun0) et l’interface physique (eth0) et de NATeur entre les adresses en 10.8.0.x et son adresse IP réelle.
Configuration du routage:
# sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
Pour rendre ce paramètrage de routage permanant (même après un reboot), il faut ajouter la ligne suivante au fichier /etc/sysctl.conf:
net.ipv4.ip_forward = 1
Configuration du NAT:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Le serveur est maintenant prêt à accueillir ses clients.
Création d’un compte client OpenVPN
Imaginons que l’on veuille créer une clés pour le client « client1 », alors il suffis de saisir les commandes suivantes sur le serveur:
cd /etc/openvpn/easy-rsa source vars ./build-key client1
Le script ./build-key va générer 3 fichiers dans le répertoire /etc/openvpn/easy-rsa/keys:
- client1.crt: Certificat pour le client
- client1.csr: Certificat à garder sur le serveur
- client1.key: Clés pour le client
On copie les fichiers nécessaires dans un sous répertoire du répertoire /etc/openvpn/clientconf/ préalablement créé:
# mkdir /etc/openvpn/clientconf/client1/ # cp /etc/openvpn/ca.crt /etc/openvpn/ta.key keys/client1.crt keys/client1.key /etc/openvpn/clientconf/client1/
On va ensuite dans le répertoire /etc/openvpn/clientconf/client1/:
cd /etc/openvpn/clientconf/client1/
Puis on créé le fichier client.conf (il faut remplacer A.B.C.D par l’adresse publique de votre serveur VPN que vous pouvez obtenir avec la commande « wget -qO- whatismyip.org »):
# Client client dev tun proto tcp-client remote A.B.C.D 443 resolv-retry infinite cipher AES-256-CBC # Cles ca ca.crt cert client1.crt key client1.key tls-auth ta.key 1 # Securite nobind persist-key persist-tun comp-lzo verb 3
Pour assurer la compatibilité avec le client Windows OpenVPN, on fait une copie du fichier client.conf vers client.ovpn:
# cp client.conf client.ovpn
On devrait ainsi avoir les fichiers suivants dans le répertoire /etc/openvpn/clientconf/client1/ :
- ca.crt: Certificat du serveur
- client.conf: Fichier de configuration du client OpenVPN (Linux, BSD, MacOS X)
- client.ovpn: Fichier de configuration du client OpenVPN (Windows)
- client1.crt: Certificat du client
- client1.key: Clés du client
- ta.key: Clés pour l’authentification
Il ne reste plus qu’à mettre ces fichiers dans une archive ZIP et de la transmettre sur le PC client:
# zip client1.zip *.*
Source
Ce tutoriel est honteusement simplifié et copié à partir de l’excellent blog de Nicolargo.
comment criée openvpn client en windows 7