Mise en place d’un VPN – OpenVPN, Debian
Je me suis penché il y’a peu sur la mise en place d’un VPN, et ce pour plusieurs raisons :
- des problèmes de peering impactaient un jeu en ligne auquel je joue, provoquant moult déconnexions et autres latences abominables,
- les dérives sécuritaires de notre gouvernement m’ont convaincu que je devais me préparer à être capable de chiffrer l’intégralité de mon trafic internet,
- j’étais curieux de le faire depuis un moment déjà.
Bref me voilà donc parti en consultation intensive des comparatifs d’offres de VPN, et de documentation technique sur le sujet. Un article de Bluetouff m’a convaincu qu’il était important d’avoir le contrôle total des deux extrémités du VPN.
J’ai donc recherché du côté des offres de serveurs dédiés et particulièrement les VPS offrant généralement des performance suffisante à un prix à peine plus élevé que celui des abonnements VPN haut de gamme.Coté VPS, l’offre minimale d’AutoVPS fourni les performances matérielles nécessaires à la création d’un VPN pour plusieurs utilisateurs, et les serveurs sont localisés en Allemagne, ce qui répond à mon problème de peering les serveurs de MMOs étant généralement hébergés en Allemagne. D’autres offres existent très certainement sur le marché, mais comme celle-ci correspond à mes critères de coûts, de localisation géographique des serveurs et de réactivité du support, je n’ai pas poussé la recherche plus avant.
Première étape : l’installation du serveur. Elle se fait de façon, rapide, et automatique, pas de soucis particulier de ce côté là.
Une fois le serveur installé et démarré, il convient de modifier le mot de passe de root, puis de créer un utilisateur que nous allons utiliser pour nous connecter en ssh sur le serveur. Cet utilisateur étant bien entendu ajouté à la liste des Sudoers (fichier « /etc/sudoers ») avec tout les droits.
Pour vous éviter de chercher, n’oubliez pas de modifier le fichier « /etc/network/interfaces » pour avoir l’interface ethernet en auto (ligne « auto eth0″ dans le fichier ci-dessous). Et ce, tout simplement pour avoir l’interface ethernet qui redémarre proprement si vous fait un « /etc/init.d/networking restart ».
duncane@vp:~$ cat /etc/network/interfaces 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 iface eth0 inet dhcp auto eth0 duncane@vp:~$
Il faut ensuite installer le paquet dont nous allons avoir besoin à l’aide de la commande suivante, si des dépendances sont nécessaires, elles seront automatiquement installées avec le paquet.
sudo apt-get install openvpn
L’installation du serveur est maintenant complète, il ne reste plus qu’à le configurer.
Seconde étape : génération des certificats OpenSSL permettant l’établissement du tunnel crypté.
cd ~ mkdir sslkeys cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/ cp *.* ~/sslkeys cd ~/sslkeys nano vars
Une fois dans la phase d’édition du fichiers vars, il faut aller à la fin et modifier le bloc :
# These are the default values for fields # which will be placed in the certificate. # Don't leave any of these fields blank. export KEY_COUNTRY="" export KEY_PROVINCE="" export KEY_CITY="" export KEY_ORG="" export KEY_EMAIL=""
Avec la consigne que je reprend simplement du fichier : Ne pas laisser de champs vide dans cette partie.
La génération des certificats qui vont être utilisés pour le cryptage se fait via la suite de commande suivante. Le « .(espace) » avant le ./vars n’est pas une faute, on peut également le remplacer par un « source vars » qui permet de rendre l’export des variables contenu dans le fichier que vous avez édité durable (mais non permanent).
. ./vars ./clean-all ./build-ca ./build-key-server NomDuServeurVPN ./build-key NomDeLUtilisateur ./build-dh openvpn --genkey --secret keys/ta.key
Nous nous retrouvons avec les fichiers suivants :
ca.crt
ca.key
NomDuServeurVPN.crt
NomDuServeurVPN.key
NomDeLUtilisateur.crt
NomDeLUtilisateur.csr
NomDeLUtilisateur.key
ta.key
dh1024.pem
6 de ces fichiers sont nécessaires au serveur OpenVPN pour pouvoir fonctionner, et il vous faut les mettre dans le dossier /etc/openvpn
sudo cp ./keys/ca.crt /etc/openvpn/ sudo cp ./keys/ca.key /etc/openvpn/ sudo cp ./keys/NomDuServeurVPN.crt /etc/openvpn/ sudo cp ./keys/NomDuServeurVPN.key /etc/openvpn/ sudo cp ./keys/dh1024.pem /etc/openvpn/ sudo cp ./keys/ta.key /etc/openvpn
Les fichiers suivants sont à copier sur le client (via scp par exemple).
ca.crt
NomDeLUtilisateur.crt
NomDeLUtilisateur.key
ta.key
Troisième étape : configuration du daemon OpenVPN.
cd /usr/share/doc/openvpn/examples/sample-config-files/ gunzip server.conf.gz cp server.conf /etc/openvpn/ cd /etc/openvpn/ nano server.conf
Une fois dans le fichier de configuration de votre serveur, les éléments principaux à trouver sont les suivants :
# Ports en écoute
port 443
# TCP or UDP server?
proto tcp
# ==> port 443 + tcp = HTTPS
# Type d’interface réseau virtuelle créée
dev tun
# Nom des fichiers servant à l’authentification des clients via OpenSSL
ca ca.crt
cert NomDuServeurVPN.crt
key NomDuServeurVPN.key # This file should be kept secret
dh dh1024.pem
tls-auth ta.key 0
# Adresse du réseau virtuel (Le serveur aura l’adresse 10.8.0.1) et persistance du pool
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
# Remplacement de la default gateway sur le client
push "redirect-gateway def1 bypass-dhcp"
keepalive 10 120
# Activation de la compression
comp-lzo
# uset et group pour le processus
user openvpn
group openvpn
# Ces lignes permettent de rendre persistante la connexion
persist-key
persist-tun
# Output a short status file showing
# current connections, truncated
# and rewritten every minute.
status openvpn-status.log
# Niveau de log
verb 1
Quatrième étape : la configuration du client : Elle est relativement succincte, vous trouverez celle que j’emploie ici.
client
dev tun
proto tcp
remote ip.du.serveur.vpn 443
resolv-retry infinite
persist-key
persist-tun
ca ca.crt
cert NomDeLUtilisateur.crt
key NomDeLUtilisateur.key
tls-auth ta.key 1
comp-lzo
verb 3
Sous Windows Vista et Seven, il se peut que vous ayez le message d’erreur, indiquant que les routes n’ont pas pu être crées. Il suffit dans ce cas d’ajouter les lignes suivantes à la configuration du client.
route-method exe
route-delay 2
Cinquième et dernière étape : Activation de l’IP Masquerading. La dernière étape à faire, sur le serveur, pour que vous puissiez vous connecter à Internet à travers votre tunnel VPN est la suivante :
echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
Pour rendre ce paramètre permanent dans le serveur, il vous faut éditer le fichier « /etc/sysctl.conf » et configurer le paramètre :
net.ipv4.conf.default.forwarding=1
Une fois ces étapes remplies, il vous suffit d’utiliser votre client OpenVPN pour vous connecter, et votre IP publique est dorénavant celle du serveur VPN.
A bientôt pour de nouvelles aventures.
Tags: liberté, Sécurité informatique, VPN
Bonjour,
Merci pour cette article, pour les VPS on peut trouver chez hetzner en allemagne des vps de bonne qualité a bon prix, a 8 euros on a l’equivalent d’un 20 euros en france
Effectivemen Hetzner fourni aussi des services de ce type à bas prix, mais avec un support en anglais/allemand.
AutoVPS fourni un support en français, OVH également, et Dedibox fourni des serveurs à environ 15€ par mois.