Skip to main content

Installation de Wireguard

De nos jours le big data aspire toutes nos données personnelles, ou non, de manière vampirique. Au-delà de porter atteinte à notre vie privée, il est même capable parfois d’agir sur notre libre-arbitre. À cela s’ajoute le nombre croissant de cyberattaques, les diverses censures appliqués dans certains pays ou encore la surveillance de masse ou le tracking en ligne. Garder son anonymat apparaît comme un vrai casse-tête. C’est à ce moment que les VPN ou réseau privé virtuel interviennent. Ces tunnels de connexion privés et chiffré protègent notre trafic web privé contre une partie des interférences, de l'espionnage et de la censure. Notre adresse IP est masquée et nos données sont chiffrées. Ces outils sont pour des usages illégaux me diriez vous. Eh Non ! À vrai dire, de nombreuses entreprises les utilisent pour assurer des connexions sécurisées à leurs serveurs et les particuliers qui voyagent et se déplacent tout le temps y trouvent un outil idéal pour accéder au contenu de leurs pays, leurs messageries et bien plus encore.

Dans cette démarche de préserver nos données quoi de mieux qu’installer sont propre serveur VPN. C’est ce que nous allons voir en installant WireGuard VPN sur un serveur tournant sur Debian 10.

Pourquoi WireGuard ?

  • Il est léger et extrêmement rapide comparé à OpenVPN
  • Il est Cross-platform, et fonctionne tout aussi bien sur Linux, Windows, Android, iOS que BSD et OpenWRT.
  • Le code du VPN étant bien organisé et très léger, il permet une meilleure maintenabilité et une meilleure sécurité.
  • Posséder un serveur VPN WireGuard peut permettre de posséder une IP statique, très utiles dans certains cas.
  • WireGuard fournit un cryptage solide et est facile à mettre en place.

Voyons voir comment héberger notre propre serveur WireGuard VPN et s’y connecter sur un client Windows.

Mise à jour du kernel linux en 5.9

Mettez à jour votre kernel Linux si ce n'est pas fait ! Passons au 5.9 Pour cela: Ajouter les paquets d’installations backports (déjà inclus sur Debian 11):

echo "deb http://deb.debian.org/debian buster-backports main" | sudo tee /etc/apt/sources.list.d/buster-backports.list

On refresh le tout:

sudo apt update

Ensuite:

sudo apt install linux-image-5.9.0-0.bpo.5-amd64 linux-headers-5.9.0-0.bpo.5-amd64 -y

Puis redémarrez votre machine

sudo reboot
Installation du serveur wireguard

Nous lançons ensuite l'installation de wireguard:

sudo apt update
sudo apt -t buster-backports install wireguard

Si vous voyez une erreur dkms.conf ne vous inquiétez pas ignorez la.
On génère les clés publiques et privées pour le serveur elle seront stockées dans le répertoire /etc/wireguard/:

wg genkey | sudo tee /etc/wireguard/server-private.key | wg pubkey | sudo tee /etc/wireguard/server-public.key

Création du fichier de configuration wireguard

On crée le fichier de configuration avec notre éditeur de texte préféré, l'interface réseau s'appellera wg0

sudo nano /etc/wireguard/wg0.conf

On édite ensuite le fichier et créons notre configuration:

[Interface]
Address = 10.10.10.1/24

# L’adresse sur laquelle le serveur VPN va écouter 51820 par defaut
ListenPort = 51820 

# Clé privée de votre serveur VPN obtenue précédemment dans /etc/wireguard/server-private.key
PrivateKey = [VOTRE CLE PRIVEE]

Sauvegarder le fichier et quitter ensuite nous allons mettre à jour les permissions pourque seulement l'utilisateur root puisse lire les fichiers.

sudo chmod 600 /etc/wireguard/ -R

Autoriser l'IP Forwarding sur le Serveur

Cela va permettre au serveur VPN d'acheminer les packets entre les clients VPN et internet.
Editons le fichier sysctl.conf:

sudo nano /etc/sysctl.conf

Décommentez ensuite cette lignes:

net.ipv4.ip_forward = 1

Une fois cela fait, fermez et sauvegardez le fichier. Pour appliquer les changements apporter au fichier de configuration et les prendre en compte lors des prochains reboot on utilise la commande:

sudo sysctl -p

Cela devrait vous renvoyer la ligne que nous avons précédemment décommentée

Configurer le "masquage" des IPs clients sur le serveur

Nous allons faire en sorte que notre serveur devienne un routeur virtuel pour les clients VPN. On utilisera UFW (Uncomplicated Firewall) qui permet une manipulation plus simple des règles de parfeu. Si UFW n'est pas installé vous pouvez utiliser la commande:

sudo apt install ufw

Pour commencer n'oubliez pas d'autoriser le traffic via votre port SSH dans l'exemple 22:

sudo ufw allow 22/tcp

Ensuite nous allons chercher le nom de l'interface réseau principale de notre réseau:

ip addr

Dans mon cas elle s'appellera eth0 sur mon serveur Debian

1: lo [etc...]
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

On va ensuite ajouter une commande iptables dans le fichier de configuration UFW

sudo nano /etc/ufw/before.rules

Ajoutez ensuite les lignes suivantes tout à la fin de votre fichier. Pensez à remplacer eth0 par le nom de votre interface réseau. La ligne (-A) ajoutera une règle à la fin de la chaîne POSTROUTING de la table nat. Cela reliera votre réseau privé virtuel à Internet tout en cachant également votre réseau du monde extérieur. Ainsi seul l'IP de votre serveur VPN sera visible. Tout comme votre routeur à la maison (Livebox, Freebox, etc ...) cache votre réseau domestique privé.

# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE 

# End each table with the 'COMMIT' line or these rules won't be processed
COMMIT

wg3.JPG

Par défaut UFW interdit le forwarding des paquets. Il va falloir autoriser le transfert pour notre réseau privé. Trouvez la ligne ou il est écris ufw-before-forward dans le fichier et ajoutez les lignes suivantes. Elles permettent d'accepter le transfert de paquets si l'IP source ou l'IP de destination est dans la plage d'ip 10.10.10.0/24.

# allow forwarding for trusted network
-A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT

wg2.JPG

Sauvegardez le fichier et quittez ! Nous allons ensuite activer UFW si vous l'aviez déjà activé auparavant remplacer le commande ci dessous par: sudo systemctl restart ufw

sudo ufw enable

Pour vérifier que notre nouvelle règle est bien appliquée vous pouvez utiliser la commande:

sudo iptables -t nat -L POSTROUTING

Vous devriez avoir la ligne suivante apparaître (Sinon n'hésitez pas à redémarrer UFW et vérifier les étapes précédentes):

MASQUERADE  all  --  anywhere 

Mise en place d'un résolveur DNS sur le serveur

Comme nous avons spécifié le serveur VPN comme serveur DNS pour le client, nous devons installer un résolveur DNS. Nous pouvons installer bind9.

sudo apt install bind9

Une fois installé BIND9 démarre automatiquement. Vous pouvez vérifier son bon fonctionnement avec la commande:

sudo systemctl status bind9

Si il n'est pas en marche vous pouvez le démarrer avec la commande:

sudo systemctl start bind9

On va ensuite modifier le fichier de configuration pour permettre aux clients VPN d'envoyer des requêtes DNS de manière récursive. On ouvre le fichier de configuration avec notre éditeur préféré:

sudo nano /etc/bind/named.conf.options

Ajouter la ligne suivante vers la fin allow-recursion { 127.0.0.1; 10.10.10.0/24; };
Votre fichier devrait ressembler à cela:

options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        // forwarders {
        //      0.0.0.0;
        // };

        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================
        dnssec-validation auto;

        listen-on-v6 { any; };

        allow-recursion { 127.0.0.1; 10.10.10.0/24; };
};

Une fois cela fait il suffit de sauvegarder le fichier et redémarrer BIND9 pour que le changement prenne effet.

sudo systemctl restart bind9

Ensuite il va falloir utiliser la commande suivante pour autoriser les clients VPN à se connecter au port 53:

sudo ufw insert 1 allow in from 10.10.10.0/24

Puis on ouvre le port de Wireguard dans notre parefeu. Ici notre port est 51820.

sudo ufw allow 51820/udp
Démarrer le serveur wireguard

On démarrer une première fois Wireguard:

sudo wg-quick up /etc/wireguard/wg0.conf

On l'arrête:

sudo wg-quick down /etc/wireguard/wg0.conf

Pour démarrer Wireguard automatiquement au démarage du serveur:

sudo systemctl enable [email protected]

Puis on le start une bonne fois pour toute:

sudo systemctl start [email protected]

Vérifier son status tourne avec la commande suivante:

sudo systemctl status [email protected]
Installation du client

Vous pouvez télécharger la version client de Windows sur la page de téléchargement du site de Wireguard

Une fois le client lancé cliquez en bas à gauche sur Ajouter un tunnel vide (Add empty tunnel en anglais).

wg0.JPG

Donnez ensuite un nom au tunnel, la clée privée et public apparaîssent. Créez ensuite l'interface comme ci dessous et notez votre clé publique pour la suite:

[Interface]
Address = 10.10.10.2/24
DNS = 10.10.10.1
PrivateKey = [CLE PRIVE DU CLIENT]

[Peer]
PublicKey = [CLE PUBLIQUE DU SERVEUR]
AllowedIPs = 0.0.0.0/0
Endpoint = [IP PUBLIQUE DU SERVEUR]:[PORT WIREGUARD]
PersistentKeepalive = 25

wg1.JPG

  • Address correspond à l'adresse IP du client VPN
  • DNS spécifie 10.10.10.1 (Le serveur VPN) comme le serveur DNS. Il est possible de spécifié plusieurs adresse de serveurs DNS par exemple: DNS = 10.10.10.1 8.8.8.8
  • Privatekey La clé privé du client Wireguard
  • PublicKey La clé publique du serveur Wireguard qui se trouve sur votre serveur sous /etc/wireguard/server-public.key
  • AllowedIPs 0.0.0.0/0 représente tout internet. Cela signifie que tout le traffic vers Internet sera transféré vers notre serveur VPN.
  • Endpoint L'adresse IP publique et le port Wireguard de votre serveur VPN.
  • PersistentKeepalive: Envoyer un paquet vide toutes les 25 secondes pour maintenir la connexion active. Si ce paramètre n'est pas activé le serveur VPN ne pourra peut être pas ping le client.
Ajouter le client sur notre serveur VPN

Retourner sur le fichier de configuration serveur de wireguard:

sudo nano /etc/wireguard/wg0.conf

Puis ajouter à la suite la connexion avec le client:

##################### CLIENTS #####################

[Peer]
PublicKey = [CLE PUBLIQUE DU CLIENT VPN]
AllowedIPs = 10.10.10.2/32
  • PublicKey La clé publique du client Wireguard que vous avez notez précédemment.
  • AllowedIPs Les adresses IP que le client VPN est autorisé à utiliser. Dans cette exemple ce client ne pourra utiliser que l'adresse 10.10.10.2 dans notre tunnel VPN

Sauvegardez les changements et redémarrer le service Wireguard:

sudo systemctl restart [email protected]

Voilà ! Notre serveur wireguard est activé ! Il ne vous reste plus qu'à vous connecter et tester votre vpn attention aux leaks IPv6 si elle est activée !