• 15 heures
  • Facile

Ce cours est visible gratuitement en ligne.

Vous pouvez obtenir un certificat de réussite à l'issue de ce cours.

J'ai tout compris !

TP : mettez en place votre propre serveur OpenVPN sous Linux

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Ce chapitre facultatif sert de guide à la réalisation d'un serveur OpenVPN à distance sur dédié ou VPS sous Linux.

Prérequis

Pour commencer ce TP, vous aurez besoin de :

  • un serveur VPS ou dédié sous Linux accessible par SSH (coûts minimum : 3 euros par mois, en général autour de 5 euros par mois), idéalement basé sur Debian ou Ubuntu (dans la suite de ce chapitre sera basée sur ces distributions) ;

  • PuTTY (ou n'importe quel client SSH de votre choix) et savoir comment accéder à votre serveur avec ;

  • WinSCP (ou n'importe quel client capable de télécharger des fichiers sur votre serveur) ;

  • le client OpenVPN installé sur vos ordinateurs (ce qui est le cas si vous avez suivi les chapitres précédents).

Dans un premier temps, assurez-vous que votre serveur est à jour :

apt-get update && apt-get upgrade

Ensuite, installez OpenVPN :

apt-get install openvpn easy-rsa

Générerez les clés du serveur

Vous devez ensuite générer les couples de clés privées et publiques qu'utilisera votre VPN. Récupérons les scripts de easy-rsa (facilitant leurs générations) :

cp -r /usr/share/easy-rsa /etc/openvpn

Commencez par générer le paramètre de clé Diffie-Hellman (utilisé pour l'échange des clés de chiffrements lorsque vous connecterez votre ordinateur à votre VPN) :

openssl dhparam -out /etc/openvpn/dh2048.pem 2048

Rendez-vous dans ce dossier :

cd /etc/openvpn/easy-rsa/2.0/

Si ce dossier n'existe pas, allez juste dans /etc/openvpn/easy-rsa/.

Pour éviter toute erreur pendant l’exécution des prochains scripts, mettez-vous en root si vous ne l'êtes pas déjà. Pour cela, si votre distribution supporte la commande sudo, vous devriez pouvoir faire :

sudo su

Maintenant tapez les commandes suivantes :

source ./vars
./clean-all
./build-ca
./build-key-server server

Générez les clés des clients

Maintenant que nous disposons des clés du serveur, il faut générer les clés… des clients !

En effet, par défaut (et à l'inverse des serveurs OpenVPN que vous croisez en général sur Internet) OpenVPN ne prend en charge qu'une connexion par identifiant. Chaque client doit donc avoir sa propre clé (difficile si vous voulez que beaucoup de monde se connecte à votre serveur sans vous fatiguer :p) !

Nous allons donc créer les clés pour les clients.

./build-key client

Remplacez client par le nom que vous voulez pour l'identifier, par exemple "PC1" ou "monSmartphone".

Configurez le serveur

Maintenant que nous avons tout ce dont nous avons besoin, vous allez devoir déplacer quelques fichiers :

cd keys
cp ca.crt /etc/openvpn/
mv server.crt /etc/openvpn/
mv server.key /etc/openvpn/

Il nous faut maintenant créer des fichiers de configuration ! Retournez dans le dossier d'OpenVPN :

cd /etc/openvpn/

puis créez un fichier server.conf avec votre éditeur de texte favori (nano, vim...). Copiez-collez le fichier suivant.

port 443
# en cas de souci, commentez proto udp et décommentez proto tcp
;proto tcp
proto udp
##
dev tun
ca ca.crt
cert server.crt
key server.key
push "redirect-gateway def1 bypass-dhcp"
# remplacez les IP ci-dessous par celles des serveurs DNS désirés
# ici celles actuellement fournies par OpenDNS
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
##
# si vous avez généré une clé d'une taille différente de 2048, renommez dh2048.pem en fonction
dh dh2048.pem
##
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
# commenté par défaut, la commande ci-dessous permet d'autoriser une même clé pour plusieurs clients
;duplicate-cn
##
keepalive 10 120
# Modifier le réglage ci-dessous permet de choisir le cipher utilisé,
# le même réglage doit être présent dans la config client
;cipher BF-CBC        # Blowfish (default)
;cipher AES-128-CBC   # AES
;cipher DES-EDE3-CBC  # Triple-DES
##
comp-lzo
# en cas de problème d'autorisation, commentez les lignes ci-dessous (déconseillé)
user nobody
group nobody # remplacez par "group nogroup" sous certaines Debian
##
persist-key
persist-tun
status openvpn-status.log
verb 0

À présent, demandez à Linux d'autoriser la redirection d'IP, puis ajoutez une règle au pare-feu :

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

Pour rendre ce changement permanent, éditez /etc/sysctl.conf et décommentez ou ajoutez la ligne suivante :

net.ipv4.ip_forward=1

Ceci rendra permanent le changement pour ip_forward. Pour rendre permanent la règle iptables, il va falloir installer le paquet suivant :

apt-get install iptables-persistent

Pendant son installation, il vous demandera si vous souhaitez conserver les règles actuellement en place en IPv4 et IPv6, répondez "Oui".

Vous pouvez à présent lancer OpenVPN côté serveur à l'aide d'une de ces commandes (selon votre distribution) :

/etc/init.d/openvpn start

ou

service openvpn start

Configurez le client

Maintenant, côté client, il va vous falloir récupérer certains fichiers !

Utilisez WinSCP pour vous connecter à votre serveur et rendez-vous dans le dossier où les clés ont été générées, puis récupérez les fichiers suivants :

  • client.crt ;

  • client.key ;

  • ca.crt.

Maintenant, nous allons unifier ces clés dans un fichier .ovpn. Commencez par créer un fichier texte sur votre ordinateur client et nommez le client.ovpn.

Copiez-collez ce code à l'intérieur de votre fichier, puis remplacez bien my-server par l'IP de votre serveur à la ligne 8 !

client
dev tun
# en cas de soucis, commentez proto udp et décommentez proto tcp
;proto tcp
proto udp
# remplacez ci-dessous my-server par l'adresse IP de votre serveur
# remplacez également si nécessaire 443 par le port configuré côté serveur
remote my-server 443
##
ca inline
cert inline
key inline
resolv-retry infinite
nobind
# Modifier le réglage ci-dessous permet de choisir le cipher utilisé,
# le même réglage doit être présent dans la config server
;cipher BF-CBC        # Blowfish (default)
;cipher AES-128-CBC   # AES
;cipher DES-EDE3-CBC  # Triple-DES
##
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
mute 20
<ca>

</ca>
<cert>

</cert>
<key>

</key>

Ouvrez vos fichiers précédemment récupérés à l'aide d'un éditeur de texte.

  • Copiez l'intégralité du contenu de ca.crt entre <ca> et </ca> dans le fichier client.ovpn que vous venez de créer.

  • Copiez l'intégralité du contenu de client.crt entre <cert> et </cert>.

  • Copiez l'intégralité du contenu de client.key entre <key> et </key>.

Vous devriez à présent pouvoir utiliser cette configuration pour vous connecter à votre propre VPN ! :)

Exemple de certificat de réussite
Exemple de certificat de réussite