TUTO: Protégez vos communications avec votre VPN personnel

Publié
Commentaires Aucun

Textpattern
Nous sommes de plus en plus nombreux à utiliser internet en mobilité. Une tablette, un PC portable, un téléphone, nous sont maintenant indispensables pour acceder en permanence à l’info, à nos services, à toutes nos données personnelles. En France, à l’etranger ou dans nos déplacements de tous les jours, il n’est pas rare de se connecter sur le premier point d’accès wifi disponible.
C’est une chance incroyable de pouvoir manipuler ses photos, acceder à ses réseaux sociaux, se connecter à sa banque, et autre recherche web.
Un wifi gratuit c’est bien, mais quid de la sécurité des données qui y transitent sans parler du stockage de vos habitudes de navigation ?

Textpattern

Une des solutions pour sécuriser ses données s’appelle VPN ou réseau virtuel privé.
Avec un VPN ou tunnel, vous pouver utiliser le wifi en toute sécurité car vos données sont encapsulées dans une couche cryptée, et vu de l’extérieur, on ne voit que des données cryptées passer.

Textpattern

Il existe des Services de VPN gratuit, mais à la sortie du VPN vos données sont visibles par l’opérateur du VPN.
Il existe des services de VPN payants, mais le problème de confidentialité est le même, et pourquoi payer alors que l’on a toutes les briques pour maitriser ça soit même.

Textpattern

Nous allons donc voir comment monter un VPN vers un petit serveur à domicile, vos périphériques auront une adresse virtuelle dans votre réseau à la maison.
Ainsi, quand vous etes connecté à votre VPN, il est possible de visualiser les images de vos cameras, d’allumer vos pc à distance et en toutes securité, de lire des fichiers sur votre NAS, etc.

Le Principe

  • Votre périphérique est connecté au WIFI ou au réseau mobile
  • Le client openvpn installé sur votre périphérique se connecte à votre serveur VPN et obtient une nouvelle adresse IP sur un réseau virtuel.
  • Tout votre trafic réseau se fait maintenant en crypté en utilisant le nouveau réseau
  • Votre serveur openvpn relaie vos paquets sur son réseau physique
  • Le wifi ou l’opérateur téléphonique voit bien votre connexion vers votre serveur VPN, mais il ne peut ouvrir les paquets et il ne sait pas ce que vous faites ni sur quels site vous naviguez
  • Votre trafic vers vos periphériques à la maison est possible, vous pouvez par exemple imprimer un document depuis votre téléphone vers l’imprimante du domicile, copier un fichier vers ou depuis le domicile, voir les images de votre camera à domicile, etc.
  • Votre trafic vers internet sort par votre box internet en utilisant la carte réseau du serveur VPN

Installons notre VPN

Pour cela, nous allons utiliser un simple Raspberry pi connecté à votre box internet
On considère dans la suite de l’article, que vous avez un raspberry avec un système raspian fonctionnel
Vous etes connectés sur le raspberry en ssh avec le compte root

Textpattern

Pour créer le VPN, nous allons utiliser le package Open VPN

on commence par l’installer :

apt-get install openvpn
  • Qui dit sécurité dit certificat, alors on crée les certificats serveur et client

Certificats TLS

Pour le chiffrement et l’authentification du VPN, nous allons générer des certificats TLS.

Avec raspbian il faut créer l’architecture à la main

mkdir /etc/openvpn/easy-rsa/

cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/ 

  • Il faut ensuite éditer le fichier

nano /etc/openvpn/easy-rsa/vars 
  • pour y modifier les lignes suivantes (chacun y mettra bien sûr les données correspondant à sa situation) :
export KEY_COUNTRY="FR"
export KEY_PROVINCE="AL"
export KEY_CITY="Paris"
export KEY_ORG="mon nom"
export KEY_EMAIL="mon_nom@mon_email.com"
export KEY_0U="minimachines"
export KEY_SIZE=2048

  • On commente la ligne

#export KEY_NAME="EasyRSA"
  • on sauvegarde les modifications (F2 ou F3)
  • On peut alors initialiser l’infrastructure de clés (PKI, pour Public Key Infrastructure) :
 cd /etc/openvpn/easy-rsa/

source vars
./clean_all
./build-ca
NOTE: If you run ./clean—all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
Generating a 2&48 bit RSA private key
. . . .  . . . . . . . . ..+++
[...]
Country Name (Z latter code} [FR]:
State or Province Name (full name) [AL]:
Locality Name (eg, city) [Paris]:
Organization Name (eg, company) [mon nom]:
Organizational Unit Name (eg, section) [minimachines]:
Common Name (eg, your name or your server's hostname) [Minimachines.net]:
Name [EasyRSA}:
Email Address monnom©mon_email.com]

Les valeurs par défaut sont acceptées, car elles sont basées sur ce qui avait été modifié dans le fichier vars.

  • On génère ensuite le certificat TLS du serveur :
./build-key-server serveur-openvpn
[...]
Common Name (eg, your name or your server's hostname) [serveur-openvpn]:
[...]
A cha11enge password []:
An optionai company name []:
[...]
Certificate is to be certified until march 12 14:56:23 2026 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

  • On accepte les valeurs par défaut.

  • On génére le certificat pour le client “Client-ma_tablette” (PC, tablette, téléphone, etc.):
./build—key-pass client—ma_tablette
[...]
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
[...]
Commun Name (eg, your name or your server's hostname) [client-sebastien]:
[...]
Certificate is to be certified until Aug 29 14:59:09 2025 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

Ici, on a demandé la création d’une clé avec mot de passe, que l’on renseigne alors au début de la génération

Attention, rien ne s’affiche pendant qu’on tape le mot de passe.

Il est possible, mais non recommandé de générer une clé sans mot de passe, on utilise alors la commande
bc. ./build-key.

  • Répéter cette opération pour chaque client qui se connectera à ce serveur OpenVPN.
  • Enfin, il faut générer des paramètres Diffie Hellman (attention sur un raspberry c’est très long) :
./build-dh
Generating DH parameters, 2648 bit long safe prime, generator 2

This is going to take a long time
n... +.u+;.“..n.++*++*

On a maintenant généré les fichiers de certificat qui ont été placés dans le sous-répertoire keys .
Parmi ces fichiers, les seuls confidentiels sont ceux qui portent l’extension .key, ce sont les clés privées.

Les clés des clients doivent etre installées sur vos périphériques.
Il ne faut pas diffuser ces clés qui permettent de ce connecter à votre VPN

Configuration du serveur

Sur Debian, la configuration du serveur OpenVPN doit être faite dans un fichier portant l’extension .conf et situé dans le répertoire /etc/openvpn.

Cela permet au système de lancer le serveur automatiquement.

Il faut créer le fichier /etc/openvpn/vpn_serveur.conf:

nano /etc/openvpn/vpn_serveur.conf

Il faut taper le texte suivant (vous pouvez faire un copié collé si le répertoire dans lequel vous avez placé les cles et les certificats est le même que celui de l’exemple,
et si vous avez gardé les mêmes noms) :

port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/serveur-openvpn.crt
key /etc/openvpn/easy-rsa/keys/serveur-openvpn.key
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /etc/openvpn/monserveur_ipp.txt
push "redirect-gateway defl bypass-dhcp"
keepalive 10 120
persist-key
persist-tun
status /etc/openvpn/monserveur_status.log
verb 3

Explication de ces paramètres…

  • on définit le port d’écoute ainsi que le protocole : UDP 1194 (c’est le port par défaut d’OpenVPN) ;
  • on indique le protocole réseau, ici udp
  • ensuite, on demande de créer un périphérique de type tun (encapsulation de niveau 3) ;
  • on indique alors les fichiers correspondant au certificat SSL ;
  • puis on précise la plage réseau à mettre en place : les adresses virtuelles distribuées sur le VPN iront de 10.8.0.1 à 10.8.0.254 ;
  • les adresses atribuées aux clients seront stockées dans le fichier /srv/openvpn/monserveur_status.log
  • on force la passerelle par défaut des clients (c’est ce paramètre qui permettra de faire passer toutes les communications dans le VPN, les cachant ainsi en local) ;

Puis on configure quelques paramètres particuliers :

  • la périodicité des tests de la connexion VPN,
  • la nécessité de conserver en mémoire la clé TLS et le périphérique tun actif,
  • le fichier dans lequel écrire l’état courant du VPN et enfin
  • la verbosité des logs (qui sont par défaut envoyés à syslog).

Comme vous voulez surfer au travers de votre serveur VPN, le serveur va faire office de passerelle pour le client lorsqu’il est connecté au VPN,

il est nécessaire de mettre en place du NAT source et d’activer la retransmission de paquets.

Cela veut dire que tous les paquets qui arrivent sur la carte reseau virtuelle (qui viennent donc de votre client openvpn) du serveur VPN seront envoyés sur l’adresse physique du serveur

Voici les commandes à taper dans la console ssh pour configurer iptables

apt-get install iptables (pour installer iptables si vous ne l'avez pas déjà)

iptables -t nat -o eth0 -s 10.8.0.0/24 -A POSTROUTING -j SNAT --to—source 192.168.1.170  (adresse de votre serveur VPN en interne par exemple 192.168.1.170) 
echo 1 > /proc/sys/net/ipv4/ip_forward

  • ll n’y a plus qu‘a lancer le serveur :

/etc/init.d/openvpn start

On remarque qu’une nouvelle carte réseau (virtuelle) est apparue

ip -a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether b8:27:eb:54:27:ab brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.170/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
4: tun0:  mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
    link/none 
    inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
       valid_lft forever preferred_lft forever

On constate aussi que le serveur écoute bien sur le port 1194 en UDP

Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:5555            0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:1723            0.0.0.0:*               LISTEN      -               
tcp        0      0 192.168.1.170:22      192.168.1.1:41500     ESTABLISHED -               
tcp        0      0 192.168.1.170:44601   192.168.1.254:445     ESTABLISHED -               
tcp        0      0 192.168.1.170:22      192.168.1.1:42222     ESTABLISHED -               
udp        0      0 0.0.0.0:1194            0.0.0.0:*                           -               
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           -               

Configuration de la box internet

Il vous reste maintenant à configurer votre box internet pour envoyer les paquets VPN venant de l’extérieur vers votre raspberry

Par exemple sur une box free, cliquer sur :

  • paramètres de la freebox
  • gestion des ports
  • et configurer comme suit

Textpattern
192.168.1.170 = adresse du serveur openvpn (raspberry)

Installation et configuration des clients

Pour Android :

Copier les certificats et clés client sur le périphérique android

  • le certificat de l’autorité de certification (ca.crt)
  • le certificat du client (client-xxx.crt)
  • 1a clé du client (client-xxx.key)

Installer l’application openvpn Client :
Client openvpn Android Client openvpn Android

Les images fournies sur le googleplay expliquent la configuration
On entre l’adresse publique de sa box comme adresse du serveur VPN, le port(1194) et le protocol UDP

Pour connaitre l’IP publique de sa box cliquer ici depuis un ordinateur a la maison

On entre les certificats créés quand on a installé le serveur VPN (ca.crt, client.crt et client.key) dans la page de configuration
Dans l’application, cliquer sur “Authentication”, puis “Certificate”
Textpattern

Ajouter vos certificats :

  • CERTIFICATE” puis “IMPORT CERTIFICATE” et là choisir votre Client.crt
  • PRIVATE KEY” puis “IMPORT CERTIFICATE” key et là choisir votre Client.key
  • CERTIFICATION AUTHORITIES” puis appuyer sur “+” et choisir votre ca.crt

On configure les options de routage
Textpattern

Pour Windows :

Suivre l’installation du client décrite ici : Installation du client openVPN windows

Configuration du client Ubuntu 15.10 :

On installe le paquet qui permet à NetworkManager (l’infrastructure qui gère l’icône du réseau a droite de la barre des taches du bureau) de gérer un VPN OpenVPN, ce sera la seule manipulation que l’on fera en ligne de commandes :

sudo apt-get install network-manager-openvpn-gnome

Il faut également transférer, les clés du serveur au poste de travail :

  • le certificat de l’autorité de certification (ca.crt)
  • le certificat du client (client-xxx.crt)
  • 1a clé du client (client-xxx.key)

Les étapes suivantes sont :

  • dans le menu de configuration du réseau, demander à configurer un VPN :
  • dans la fenêtre qui apparaît, Cliquer sur le bouton Ajouter:
  • sélectionner une connexion de type OpenVPN, puis cliquer sur Créer… :

apparaît alors la fenêtre de configuration de la connexion VPN,dans laquelle il faut configurer :

  • un nom personnalisé pour la connexion ;
  • l’adresse lP (ou nom DNS) de la passerelle ;
  • les deux certificats et la clé privée du client ;

Textpattern

Si nécessaire, entrez le mot de passe de la clé, tel qu’il a été défini lors de sa génération.

Voila, la connexion est configurée il vous reste à vous connecter

Textpattern

Auteur
Catégories Faites le vous même

Commentaires

Commentaires fermés pour cet article.

← Plus anciens Plus récents →