La sécurité des accès Internet ouverts laisse souvent à désirer. Pour naviguer en toute liberté sur le Web, une des meil­leures solutions est d’installer un VPN (virtual private network). Si l’on installe un serveur VPN personnel, on a tout de même accès à son réseau local depuis n’importe quelle connexion Internet. Pour installer un réseau virtuel et privé, il est d’abord né­ces­saire de disposer d’un or­di­na­teur qui joue le rôle de serveur. Le Raspberry Pi constitue pour ce faire une option bon marché.

Installer un serveur VPN : tour d’horizon des fonc­tion­na­li­tés

Un VNP est installé sur un réseau local (LAN), auquel il est également possible d’avoir accès depuis l’extérieur. Ceci permet de créer un réseau virtuel de com­mu­ni­ca­tion, à travers lequel sont trans­mises les requêtes et les réponses entre le serveur VPN et les clients VPN (c’est-à-dire les appareils connectés au serveur).

Avec un VPN per­son­na­lisé, il est donc possible d’accéder au réseau local depuis tout réseau Internet. Ceci vous permet d’accéder aux données dans le LAN, de vous connecter à distance à divers appareils (comme une im­pri­mante ou un fax), et d’utiliser votre connexion locale à distance. Grâce à une connexion chiffrée à votre serveur VPN, il est possible de naviguer de manière plus sécurisée sur le Net, comme si vous surfiez sur des réseaux wifi publics ouverts non protégés.

Pour qu’une telle connexion sécurisée soit rendue possible, il est in­dis­pen­sable d’installer un serveur VPN sur votre or­di­na­teur et votre réseau local, et qu’il soit en per­ma­nence connecté à Internet. L’or­di­na­teur fonc­tionne ainsi comme l’hôte du réseau virtuel privé, et les dif­fé­rents appareils (or­di­na­teur portable, smart­phone et tablette) sont connectés au serveur grâce à un programme client. À partir de là, si vous accédez via un client à une connexion Internet qui se trouve en dehors de votre propre LAN, sur votre serveur VPN, il va s’agir d’une connexion chiffrée, également appelée tunnel VPN.

Ce tunnel VPN, qui commence avec le client et se termine avec votre serveur VPN, s’étend tout le long de la connexion Internet. C’est la raison pour laquelle le tunnel est bien plus sécurisé que les con­nexions ouvertes standard. Les pirates ont donc du mal à pénétrer dans les tunnels et à in­ter­rompre la connexion. Un VNP personnel permet donc, même au sein des réseaux wifi ouverts, de protéger vos données sensibles (les données bancaires notamment).

Installer un serveur VPN avec le Raspberry Pi et OpenVPN : les avantages

Trans­for­mer un Raspberry Pi en serveur VPN est une opération par­ti­cu­liè­re­ment in­té­res­sante d’un point de vue éco­no­mique, car le prix d’achat du nano-or­di­na­teur et des ac­ces­soires né­ces­saires est re­la­ti­ve­ment faible. Par ailleurs, la con­som­ma­tion d’énergie sur le long terme est bien moindre que celle d’un serveur classique. C’est donc une solution qui offre gé­né­ra­le­ment un bon rapport qualité-prix, même s’il existe depuis de nom­breuses al­ter­na­tives au Raspberry Pi. OpenVPN peut servir de VPN pour dif­fé­rentes raisons. Il s’agit d’abord d’un programme VPN gratuit et très populaire, com­pa­tible avec de très nombreux systèmes d’ex­ploi­ta­tion (Windows, OS X, Android, iOS, Linux et d’autres). Par ailleurs, le programme convainc avec son ins­tal­la­tion facile et sa grande stabilité.

De quoi a-t-on besoin pour installer un serveur VPN sur un Raspberry Pi ?

Pour suivre notre tutoriel vous aurez besoin des éléments suivants :

  • Un Raspberry Pi (nous con­seil­lons le modèle 2 ou un modèle ultérieur)
  • Une micro carte SD sur laquelle vous aurez installé le système d’ex­ploi­ta­tion Raspbian Jessie
  • Une connexion Internet continue (de pré­fé­rence avec un câble), ainsi qu’une ali­men­ta­tion (micro cable UBS) pour le Raspberry Pi.

Il s’agit ensuite de décider si l’on souhaite installer un serveur VPN di­rec­te­ment sur le Raspberry Pi (avec moniteur, souris et clavier connectés), ou à travers un client SSH. La main­te­nance du serveur à distance au moyen du SSH est la version con­seil­lée dans la plupart des cas, car vous pouvez ainsi accéder au serveur VPN à partir d’un autre or­di­na­teur.  Il existe à cette fin plusieurs pro­grammes largement répandus, tels que PuTTY et WinSCP (pour Windows), ou OpenSSH (pour les systèmes d’ex­ploi­ta­tion Unix), qui vous per­met­tent de gérer et contrôler le Raspberry Pi. Il s’agit ensuite de connecter le logiciel SSH au Raspberry Pi en spé­ci­fiant son adresse IPv4 dans le client (c’est-à-dire l’or­di­na­teur à partir duquel vous souhaitez accéder au Raspberry Pi), et les relier l’un à l’autre. Vous pouvez par exemple inscrire l’adresse IP de votre Raspberry Pi dans le na­vi­ga­teur.

Ajuster les adresses IP

Pour utiliser un client SSH, il est re­com­mandé d’assigner une adresse IP fixe privée au Raspberry Pi au sein du réseau local. Dans le cas contraire, il sera né­ces­saire de changer votre adresse IP dynamique à chaque fois que vous sou­hai­te­rez accéder au nano-or­di­na­teur via SSH et y connecter le client. Plus important encore, il est essentiel de lier une adresse IP privée statique pour pouvoir utiliser OpenVNP : le serveur VNP doit être ac­ces­sible en per­ma­nence par le réseau local à la même adresse.

De plus, vous devez maintenir le serveur VNP ac­ces­sible en per­ma­nence depuis Internet à la même adresse. Toutefois, une connexion Internet classique dispose en général d’une adresse IP publique dynamique, qui se re­nou­velle au plus tard toutes les 24h, afin d’éviter que le serveur soit ac­ces­sible cons­tam­ment grâce à la même adresse IP. Si votre connexion Internet n’a pas d’adresse IP publique statique, vous pouvez établir un DNS dynamique (DDNS). 

Dans un autre article, vous pourrez obtenir des ren­seig­ne­ments sur la marche à suivre pour attribuer une adresse IP statique à un Raspberry Pi, et les dif­fé­rentes options qui existent pour installer un DDNS. Si vous souhaitez maintenir votre Raspberry Pi en ligne en tant que serveur permanent, il est re­com­mandé de veiller à le mettre à jour et vérifier ré­gu­liè­re­ment son niveau de sécurité.

Installer un serveur VNP sur un Raspberry Pi avec OpenVPN

L’ins­tal­la­tion avec OpenVNP peut main­te­nant débuter. Pour ce faire, commencez par ouvrir le terminal (la console) de votre Raspberry Pi.

Pré­pa­ra­tion du Raspberry Pi

Avant de débuter l’ins­tal­la­tion avec OpenVPN en elle-même, il est re­com­mandé de re­cher­cher et d’installer sur votre Raspberry Pi toutes les mises à jour dis­po­nibles : pour ce faire, il suffit d’entrer les commandes suivantes sur la console :

sudo apt-get update
sudo apt-get upgrade

Si vous n’avez pas encore changé les iden­ti­fiants par défaut de votre Raspberry Pi (nom d’uti­li­sa­teur « Pi » et mot de passe « Raspberry »), il est temps de le faire, sinon n’importe qui pourra accéder à votre système, lo­ca­le­ment ou sur le réseau via SSH. Grâce à la commande ci-dessous, vous accéderez à la con­fi­gu­ra­tion de votre nano-or­di­na­teur, et pourrez choisir un mot de passe sécurisé.

sudo raspi-config

Installer OpenVPN et mettre en place des fichiers easy-rsa

Commencez par utiliser la commande ci-dessous pour installer le programme OpenVPN et OpenSSL, qui permet de sécuriser la connexion Internet :

sudo apt-get install openvpn openssl

Après avoir installé OpenVPN, copiez les scripts tout prêts « easy-rsa » dans le fichier de con­fi­gu­ra­tion OpenVPN. C’est ici que vous pourrez créer de nombreux cer­ti­fi­cats et des clés. La commande suivante fonc­tionne seulement sous Raspbian Jessie (pour les systèmes d’ex­ploi­ta­tion Wheezy pré­cé­dents, le script se trouve à l’em­pla­ce­ment « /usr/share/doc/openvpn/examples/easy-rsa/2.0 ») :

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

Ouvrez ensuite le fichier suivant dans la console : « /etc/openvpn/easy-rsa/vars », et entrez-y la commande ci-dessous :

sudo nano /etc/openvpn/easy-rsa/vars

Il s’agit main­te­nant d’ajuster ce fichier. Vous pouvez modifier les pa­ra­mètres en rem­pla­çant l’in­té­gra­lité de la ligne « export EASY_RSA="`pwd` » par la commande suivante :

export EASY_RSA="/etc/openvpn/easy-rsa"

La longueur de la clé peut également être ajustée, ce qui détermine le niveau de sécurité du chif­fre­ment. Un Raspberry 3 dispose d’assez de puissance pour supporter sans problème une clé d’une longueur de 2048 bits. Avec la version 2 en revanche, ce chif­fre­ment dégrade con­si­dé­ra­ble­ment la vitesse, et il est par con­sé­quent re­com­mandé d’utiliser un chif­fre­ment de 1024 bits seulement : c’est à vous d’apprécier, selon votre uti­li­sa­tion, quel paramètre parmi la vitesse de connexion ou le niveau de chif­fre­ment est le plus important. Un chif­fre­ment de 4096 bits est quant à lui utile dans certains cas seulement. On peut changer la longueur de la clé et ajuster la quantité de bits dans la ligne « export KEY_SIZE=2048 ».

Ensuite, retournez dans le dossier de con­fi­gu­ra­tion « easy-rsa », accordez les droits root et intégrez les pa­ra­mètres réglés pré­cé­dem­ment dans les variables de l’en­vi­ron­ne­ment en exécutant le script « vars » grâce à la commande « source ». Enfin, vous pouvez rendre le fichier de con­fi­gu­ra­tion obtenu ac­ces­sible via un lien sym­bo­lique intitulé « openssl.cnf ».

cd /etc/openvpn/easy-rsa
sudo su
source vars
ln -s openssl-1.0.0.cnf openssl.cnf

Cer­ti­fi­cats et clés pour installer OpenVPN

Commencez par réi­ni­tia­li­ser les clés et créez ensuite les premiers fichiers de clés pour OpenVPN.

./clean-all
./build-ca OpenVPN

Le programme vous demande ensuite de rentrer les deux lettres cor­res­pon­dant à votre « nom de pays » : entrez FR pour la France. Les champs suivants ne sont pas es­sen­tiels, et vous pouvez di­rec­te­ment confirmer en pressant la touche « entrée ».

Ensuite, voici comment générer les fichiers clés pour le serveur :

./build-key-server server

Entrez à nouveau le code à deux lettres cor­res­pon­dant au pays, et laissez les champs suivants vides. Enfin, confirmez la requête, et générez le cer­ti­fi­cat en appuyant deux fois sur la touche « Y ».

La section suivante concerne l’ins­tal­la­tion d’un ou plusieurs clients VPN. Il faut créer un cer­ti­fi­cat et une clé pour chaque appareil auquel vous souhaitez accéder depuis le serveur VPN. Le processus est similaire à celui utilisé pour installer le cer­ti­fi­cat et la clé sur le serveur (entrer le code pays et le confirmer deux fois). Vous pouvez attribuer un nom spé­ci­fique à chacun des appareils : ceci permet ensuite de créer un client pour un « laptop », une « tablet » ou un « smart­phone », grâce à la commande ci-dessous :

./build-key laptop
./build-key smartphone
./build-key tablet
…

Si vous souhaitez attribuer un mot de passe aux clients, il faudra remplacer la commande ci-dessus par celle-ci :

./build-key-pass laptop
./build-key-pass smartphone
./build-key-pass tablet
…

Voici ensuite comment compléter la gé­né­ra­tion du cer­ti­fi­cat grâce à la commande pour l’échange de clés Diffie-Hellman :

./build-dh

Cette étape peut prendre du temps. Une fois que le processus est complété, fermez votre session d’uti­li­sa­teur root :

exit

Générer les fichiers de con­fi­gu­ra­tion pour le serveur OpenVPN

Ces fichiers sont générés grâce à la commande suivante :

sudo nano /etc/openvpn/openvpn.conf

Le fichier vide contient désormais plusieurs commandes, ex­pli­quées ci-dessous. En premier lieu, activez le routage par tunnel IP via « dev tun », et sé­lec­tion­nez le protocole de transport UDP, en sé­lec­tion­nant « proto udp » Si vous souhaitez utiliser le protocole TCP, sé­lec­tion­nez « proto tcp »). La ligne suivante vous permet de dé­ter­mi­ner si le serveur OpenVNP est ac­ces­sible sur port 1194, mais ce paramètre peut être modifié.

dev tun
proto udp
port 1194

Ensuite, créez un cer­ti­fi­cat root (ca) SSL/TLS, un cer­ti­fi­cat digital (cert) et une clé digitale (key) grâce au fichier « easy-rsa ». Veillez à entrer le bon chif­fre­ment de bits (1024, 2048 etc.).

ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
dh /etc/openvpn/easy-rsa/keys/dh2048.pem

C’est main­te­nant le moment de préciser que le Raspberry Pi est utilisé en tant que serveur. Pour ce faire, il faut nommer l’adresse IP et le masque réseau de façon à ce qu’ils soient attribués au VPN.

server 10.8.0.0 255.255.255.0

La commande « redirect-gateway def1 bypass-dhcp » permet de diriger l’in­té­gra­lité du trafic IP vers le tunnel IP. Si vous avez des exigences élevées en ce qui concerne le niveau de sécurité, vous pouvez les ex­pé­ri­men­ter lors du pa­ra­mé­trage ; si toutefois ceci cause des problèmes ou ralentit la na­vi­ga­tion, il est re­com­mandé d’annuler cette con­fi­gu­ra­tion. Les ins­truc­tions ci-dessous, en revanche, devront être utilisées dans tous les cas, car c’est grâce à elles que vous pourrez renommer les serveurs publics DNS avec lesquels fonc­tion­nera votre serveur VPN. Dans la commande suivante, un serveur de IONOS est désigné par « 217.237.150.188 », et un serveur de Google par « 8.8.8.8 ». Vous pouvez toutefois modifier ces codes comme vous le souhaitez en spé­ci­fiant les adresses IPv4 d’autres serveurs DNS. Dans la commande « log-append /var/log/openvpn », assurez-vous que l’in­for­ma­tion de connexion est écrite dans le fichier « /var/log/openvpn ».

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 217.237.150.188"
push "dhcp-option DNS 8.8.8.8"
log-append /var/log/openvpn

Avec « persist-key », les fichiers clés ne sont pas lus à nouveau, et les pilotes des réseaux TAP et TUN ne sont pas re­dé­mar­rés. Après le démarrage d’un programme, les droits du démon OpenVPN sont res­treints par « user nobody » et « group nogroup ». Avec « status /var/log/openvpn-status.log », vous créez un fichier de statut qui rapporte l’état de votre connexion. Il est également re­com­mandé de concilier la précision des in­for­ma­tions de connexion grâce à la commande « verb ». Si vous choi­sis­sez « 0 », vous ne recevrez aucune no­ti­fi­ca­tion, à l’exception des messages d’erreur. Une valeur comprise entre 1 et 4 est adaptée à une uti­li­sa­tion normale, et des valeurs su­pé­rieures sont à utiliser en cas de ré­so­lu­tion de problèmes. Il s’agit ensuite de pa­ra­mé­trer la commande « client à client », qui non seulement détecte le serveur, mais également les autres clients VPN, et d’activer la com­pres­sion LZO avec « comp-lzo » (cet élément doit également être activé dans le fichier de con­fi­gu­ra­tion du client).

persist-key
persist-tun
user nobody
group nogroup
status /var/log/openvpn-status.log
verb 3
client-to-client
comp-lzo

Sau­ve­gar­dez les mo­di­fi­ca­tions avec « Ctrl + O » et sortez de l’éditeur avec « Ctrl + X ».

Créer un script pour un accès Internet avec un client

Pour accéder à votre réseau local grâce à un tunnel VPN, il faut créer une re­di­rec­tion. Il convient pour cela de créer d’abord un fichier « /etc/init.d/rpivpn » :

Sudo nano /etc/init.d/rpivpn

Dans ce fichier, copiez les com­men­taires suivants afin de créer un titre pour le script Init Linux :

#! /bin/sh
### BEGIN INIT INFO
# Provides:          rpivpn
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: VPN initialization script
### END INIT INFO

Ensuite, activez « ip forward » en écrivant « 1 » dans ce dossier :

echo 'echo "1" > /proc/sys/net/ipv4/ip_forward' | sudo -s

Puis créez une re­di­rec­tion pour les paquets VNP en utilisant le filtre de paquets « iptables ».

iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT

Il s’agit ensuite de pa­ra­mé­trer les commandes qui au­to­ri­sent vos clients VNP à accéder au LAN et à Internet. Voici comment procéder :

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

En­re­gis­trez et fermez à nouveau le fichier avec « Ctrl + O » et « Ctrl + X ».

Pour que la re­di­rec­tion soit effective, il faut ensuite assigner les droits adaptés au script, et l’installer en tant que script Init.

sudo chmod +x /etc/init.d/rpivpn
sudo update-rc.d rpivpn defaults

Ensuite, exécutez le script et re­dé­mar­rez le serveur VPN.

sudo /etc/init.d/rpivpn
sudo /etc/init.d/openvpn restart

Terminer l’ins­tal­la­tion des clients

La dernière étape consiste à regrouper les cer­ti­fi­cats et les clés de chaque client dans des paquets res­pec­tifs. Pour ce faire, il faut leur accorder les droits root en ouvrant le dossier « /etc/openvpn/easy-rsa/keys/ », créer le fichier de con­fi­gu­ra­tion client, et entrer les commandes suivantes dans le fichier « laptop ». La con­fi­gu­ra­tion est identique pour chaque client, il suffit de changer le nom de l’appareil dont il est question.

sudo su
cd /etc/openvpn/easy-rsa/keys
nano laptop.ovpn

Dans le fichier client « opvn », entrez les commandes suivantes :

dev tun
client
proto udp
remote x.x.x.x 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert laptop.crt
key laptop.key
comp-lzo
verb 3

Il faut toutefois ajuster le contenu des fichiers ci-dessus. À la quatrième ligne, remplacez « x.x.x.x » par l’adresse IP de votre four­nis­seur DDNS (si vous utilisez une adresse publique statique, vous pouvez sim­ple­ment l’insérer ici), suivie par le port grâce auquel le serveur VPN doit être ac­ces­sible. Aux troisième et quatrième rangs, entrez le nom de votre client (ici, « laptop »). Après avoir inséré ces mo­di­fi­ca­tions, sau­ve­gar­dez-les avec « Ctrl + O », puis fermez l’éditeur avec « Ctrl + X ».

Enfin, copiez le fichier de con­fi­gu­ra­tion avec les cer­ti­fi­cats et les clés dans un fichier zip. Si vous n’avez pas encore installé de pack zip sur votre Raspberry Pi, vous pouvez le faire grâce à la commande suivante :

apt-get install zip

Pour créer un fichier zip, utilisez les commandes ci-dessous en vous assurant que chaque ligne comprend le bon nom de client.

zip /home/pi/raspberry_laptop.zip ca.crt laptop.crt laptop.key laptop.ovpn

Il faut ensuite ajuster les droits des fichiers et terminer l’ins­tal­la­tion par « exit ».

chown pi:pi /home/pi/raspberry_laptop.zip
exit

Il s’agit ensuite de trans­fé­rer le fichier zip du Raspberry Pi au client (par exemple via un programme SCP ou SFTC), puis d’installer le client sur l’appareil. Vous pouvez désormais utiliser l’appareil pour accéder au client et à son réseau à partir de n’importe quelle connexion Internet.

Installer un serveur VPN sur un Raspberry Pi : une méthode qui paie

Installer un VNP est beaucoup moins coûteux que ce que l’on imagine. Dans la mesure où le Raspberry Pi consomme peu d’énergie, les frais de fonc­tion­ne­ment ne sont pas élevés. Il est par ailleurs possible de gérer la puissance de chacun des com­po­sants du serveur (Raspberry Pi, Micro carte SD, etc.)

Par ailleurs, un serveur VPN sur Raspberry Pi est très per­for­mant, et vous permet d’accéder à la connexion locale de votre or­di­na­teur depuis n’importe quelle connexion Internet. La connexion VPN chiffrée vous permet de naviguer de façon beaucoup plus sécurisée sur le Web, que ce soit sur des réseaux Wifi sécurisés ou non, ou bien dans le cadre des datas de votre contrat mobile. Il est difficile de trouver une connexion mobile qui offre ce niveau de pro­tec­tion.

Aller au menu principal