Bonjour à tous, dans ce dernier tutoriel avant la fin du monde et aussi avant les fêtes de fin d’années, nous allons voir comment mettre en place un VPN sécurisé avec la solution OpenVPN sous Debian 6.
Qu’est-ce que OpenVPN ?
OpenVPN est un logiciel libre permettant de créer un réseau privé virtuel (VPN).
La particularité d’OpenVPN est qu’il permet une connexion client-serveur l’aide d’une clé privée partagée à l’avance et de certificats. Il utilise pour cela la bibliothèque d’authentification OpenSSL ainsi que le protocole SSLv3/TLSv1.
OpenVPN est disponible pour tous les systèmes d’exploitations, que ce soit Linux, Mac OSx ou Windows.
Mise en place de la platerforme de test
Pour effectuer ce tutoriel nous allons avoir besoins de deux machines virtuelles:
- La première qui fera office de serveur VPN
- La seconde qui fera office de machine de test pour tester le fonctionnement de la route vers le réseau interne.
En gros, voici à quoi notre infrastructure va ressembler.
Configuration des machines virtuelles sous VMWare
La première machine virtuelle que nous allons appeler « vpn-server » devra posséder:
- Une carte réseaux en NAT (simulation ip publique)
- Une carte réseau en mode lan, que nous appeler simplement LAN
La seconde machine virtuelle que nous allons appeler « lan-server » ne possédera qu’une seule carte réseau en mode lan et sur le même lan que la première machine virtuelle soit LAN.
Maintenant nous allons faire en sorte que nos deux machine virtuelles puissent communiquer entre elles sur le LAN.
Configuration de la machine vpn-server>
Sur cette machine nous allons commencer par configurer les NIC (Network Interface Cards)
eth0 étant la carte configuré en NAT et eth1 étant la carte configuré sur le LAN.
Voici donc le fichier /etc/network/interfaces associé:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 auto eth0 iface eth0 inet dhcp metric 1 auto eth1 iface eth1 inet static address 192.168.60.1 netmask 255.255.255.0 gateway 192.168.60.1 metric 2
On relance les interfaces réseaux avec la commande:
service networking restart
Et on active l’ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward
Attention l’IP forward sera desactivé au redémarage de la machine pour qu’il sois pris en compte automatiquement éditez le fichier /etc/sysctl.
Configuration de la machine « lan-server »
Sur la seconde machine virtuelle nous allons configurer la NIC de la façon suivante:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 192.168.60.2 netmask 255.255.255.0 gateway 192.168.60.1
On redémarre la NIC avec la commande suivante:
service networking restart
Et on tente de pinger la machine vpn-server :
ping 192.168.60.1
Si le ping est OK c’est que vos machines communiquent entre elles.
Installation et configuration de OpenVPN
Sur vpn-server, nous allons installer le package OpenVPN disponible dans les dépôts de Debian:
apt-get update apt-get install openvpn
Une fois OpenVPN installé nous allons pouvoir mettre en place les différentes clefs et certificats nécéssaires à la mise en place de notre VPN.
On copie Easy-RSA dans le dossier d’OpenVPN
cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa
On créer les certificats nécéssaires à l’utilisation d’OpenVPN
Tout d’abord on va dans le dossier easy-rsa et on édite le fichier vars.
cd /etc/openvpn/easy-rsa nano vars
A la fin du fichier remplissez les différents champs à votre convenance:
Voici le mien par exemple:
export KEY_COUNTRY="CA" export KEY_PROVINCE="QC" export KEY_CITY="Montreal" export KEY_ORG="denisrosenkranz.comn" export KEY_EMAIL="cert@denisrosenkranz.com"
Enregistrez le fichier et tapez les commandes suivantes:
. ./vars ./clean-all ./build-dh
On créer notre CA avec la commande suivante:
./build-ca Generating a 1024 bit RSA private key ..............................................................++++++ .......................................++++++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [CA]: State or Province Name (full name) [QC]: Locality Name (eg, city) [Montreal]: Organization Name (eg, company) [denisrosenkranz.comn]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [denisrosenkranz.comn CA]: Name []: Email Address [cert@denisrosenkranz.com]:
Une fois cela fait nous pouvons créer nos clef et certificats pour notre serveur et pour nos clients.
Création de la clef et du certfificat pour le serveur:
./build-key-server vpn-server Generating a 1024 bit RSA private key .............++++++ ..........................................................++++++ writing new private key to 'vpn-server.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [CA]: State or Province Name (full name) [QC]: Locality Name (eg, city) [Montreal]: Organization Name (eg, company) [denisrosenkranz.comn]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [vpn-server]: Name []: Email Address [cert@denisrosenkranz.com]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'CA' stateOrProvinceName :PRINTABLE:'QC' localityName :PRINTABLE:'Montreal' organizationName :PRINTABLE:'denisrosenkranz.comn' commonName :PRINTABLE:'vpn-server' emailAddress :IA5STRING:'cert@denisrosenkranz.com' Certificate is to be certified until Dec 18 14:34:45 2022 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
Et enfin nous allons créer un certificat client:
./build-key vpn-client Generating a 1024 bit RSA private key ...........................................++++++ .....................++++++ writing new private key to 'vpn-client.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [CA]: State or Province Name (full name) [QC]: Locality Name (eg, city) [Montreal]: Organization Name (eg, company) [denisrosenkranz.comn]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [vpn-client]: Name []: Email Address [cert@denisrosenkranz.com]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'CA' stateOrProvinceName :PRINTABLE:'QC' localityName :PRINTABLE:'Montreal' organizationName :PRINTABLE:'denisrosenkranz.comn' commonName :PRINTABLE:'vpn-client' emailAddress :IA5STRING:'cert@denisrosenkranz.com' Certificate is to be certified until Dec 18 14:36:01 2022 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
Et voila nos certificat et nos clefs sont crées maintenant nous allons pouvoir configurer notre serveur VPN.
Dans le dossier /etc/openvpn nous allons créer le fichier server.conf, ce fichier sera donc le fichier de configuration
nano /etc/openpvn/server.conf
Votre fichier devrais ressember à ceci:
#IP de l'interface auquel les clients VPN vont se connecter local 192.168.10.128 port 1194 proto udp dev tun #Chemin des différents certificats ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/vpn-server.crt key /etc/openvpn/easy-rsa/keys/vpn-server.key dh /etc/openvpn/easy-rsa/keys/dh1024.pem #Adresse réseau qui sera attributés aux clients VPN server 192.168.87.0 255.255.255.0 #On "pousse" la route 192.168.60.0 pour que nos client VPN puissent se connecter au réseau local push "route 192.168.60.0 255.255.255.0"
Enfin vous pouvez lancer votre serveur VPN ave la commande suivante:
service openvpn restart
Maintenant que nous allons notre serveur OpenVPN fonctionnel nous allons pouvoir se connecter à partir d’un client.
Configuration d’un client OpenVPN sous Windows
Pour pouvoir se connecter à notre serveur VPN sous windows, il faut installer le client OpenVPN que vous trouverez à l’adresse suivante:
http://openvpn.net/index.php/download.html
Installez le logiciel.
Une fois le logiciel installé, récupérez sur votre serveur VPN les fichier suivants de trouvant dans le dossier /etc/openvpn/easy-rsa/keys à l’aide d’un client sftp (WinSCP, FileZilla etc..):
- ca.crt
- vpn-client.key
- vpn-client.crt
Et copiez les dans le dossier C:\Program Files\OpenVPN\config ou C:\Program Files (x86)\OpenVPN\config (dépendant de votre système d’exploitation).
Dans ce même dossier créez un fichier client.ovpn et l’editer de la façon suivante:
client dev tun proto udp remote 192.168.10.128 1194 ca ca.crt cert vpn-client.crt key vpn-client.key
Enregistrez le fichier et lancez OpenVPN GUI
Si ce message s’affiche c’est que vous êtes correctement connecté au VPN.
Maintenant, à partir de votre machine Windows, essayez de faire un ping sur 192.168.60.1 et sur 192.168.60.2
Si vous obtenez ceci c’est que tout est OK !
Vous pouvez aussi essayer de vous connecter en SSH sur 192.168.60.2
Voila ce tutoriel est terminé.
Je vous souhaites à tous de bonnes fêtes de fin d’année et une joyeuse fin du monde !
(9 commentaires)
1 ping
Passer au formulaire de commentaire
Bjr monsieur merci pour le tuto, mais lorsque je redemarre le serveur , ca m’affiche fail to restart!
Bonjour,Merci pour votre super tutoriel,dans le cas ou j’ai pas une addres IP-Public (192.168.10.128)comment je peux faire ??
Bonjour,
D’abord merci pour ce tuto qui ma permis de mettre en place OpenVPN, parcontre j’ai un problème :
Lorsque je veux ping la machine server depuis le poste client (qui lui à bien une adresse IP attribué par le VPN) ca me met une defaillance générale
(problème de route?)
Ensuite j’aimerais associer OpenVPN avec un RADIUS et AD (les 2 de chez windows….) y a t-il de grosse manip a faire sur OpenVPN?
Cédric
And to think I was going to talk to soeomne in person about this.
Tout d’abord merci pour ce tuto :)
J’ai cependant une petite question :
Comment s’effectue la configuration IP des clients ?
Le serveur OpenVPN fait-il office de serveur DHCP ou on doit configurer l’IP en « dur » sur le client ?
(pour le subnet définit dans la ligne « server 192.168.87.0 255.255.255.0 »
Author
Salut,
Les adresses IP sont attribuées automatiquement aux client via la plage IP suivante:
La première adresses attribuée sera 192.168.87.1 et la dernière sera 192.168.87.254.
Efficace, merci !
Avec cette configuration es-ce que plusieurs clients simultanés peuvent se connecter au serveur ?
Author
Bien sur, il suffit de générer des certificats pour chaque clients.
Dans le dossier /etc/openvpn/easy-rsa
Tu tape les commandes suivantes:
Tu récupère dans le dossier keys les fichiers
ca.crt
vpn-client2.crt
vpn-client2.key
Et tu configure ton client VPN comme dans le tuto avec ces nouveaux certificats.
Voici par exemple les log d’OpenVPN avec deux clients connectés:
[…] Installation d’un VPN avec OpenVPN : http://denisrosenkranz.com/… […]