Wireguard sous FreeBSD
Wireguard Késako ?
Wireguard est un gestionnaire de VPN qui fonctionnent sur le principe des clés asymétriques. Avec Wireguard nous pouvons nous connecter à un réseau distant de manière sécurisée et chiffrée.(par exemple pour sécuriser ses données sur un wifi public ou accéder à un segment de réseau qui ne dispose pas d'IP publiques.
Le contexte
Le protocole utilisé depuis les débuts de SCANI pour les VPN d'administration du réseau était PPTP (pour des questions de simplicité de mise en œuvre). Il était par ailleurs installé sur des équipements qui ont aujourd'hui d'autres missions principales. Enfin, avec le temps qui passe, le support de PPTP tend à être abandonné par les éditeurs logiciels, il était donc temps de revoir cette copie.
L'installation de wireguard rentre dans le cadre de la première brique du projet VPN de SCANI qui consiste à assurer la joignabilité des parties privées du réseau depuis des connexions tierces. Cette première brique comprend aussi l'installation d'instances OpenVPN et mpd5/L2TP+IPSec afin d'offrir le plus grand choix de connectivité VPN.
La seconde brique consistera à reproduire l'exercice pour l'autre usage principal des VPNs : permettre aux membres de SCANI d'accéder à internet à partir d’adresses IP SCANI.
Prérequis
- Un FreeBSD 13 / Linux (RockyLinux, Ubuntu)
- Une adresse IP publique
- Un café
Le commencement
Avant de commencer nous devons mettre à jour notre distribution FreeBSD
pkg update
pkg upgrade
On installe maintenant Wireguard. Automatiquement (et pas comme linux) le paquet va installer Wireguard-Tools et Kmod.
pkg install wireguard
Configuration de Wireguard
Tout d'abord nous devons configurer deux clés, une privé et une public. Nous nous rendons dans /usr/local/etc/wireguard
dans ce dossier il y'a rien et devons créer nous même notre configuration WG0.
Nous devons changer l'umask du dossier Wireguard pour assurer une création des fichiers avec les bons droits :
umask 077
Créer les clés
Pour créer notre clé privée nous devons utiliser l'outil WG Genkey.
wg genkey > private
Nous pouvons ouvrir le fichier private généré et copier la clé.
Création de l'interface wg0
Pour que Wireguard fonctionne nous devons crée une interface réseau virtuelle uniquement dédié à Wireguard.
On créer notre fichier wg0.conf et on entre la configuration :
[Interface]
Address = 10.8.0.1/24 #Ici on peut choisir l'adresse que l'on veut, elle sert uniquement dans notre tunel VPN.
PrivateKey = #Notre clé Privé
ListenPort = 51820 #On peut choisir le port que l'on veut (Attention toutefois si vous avez une box ou un firewall d'ouvrir le port)
Une fois notre fichier sauvegarder on peut démarrer notre Wireguard et automatiquement notre interface réseau sera monter.
sysrc wireguard_interfaces=wg0
service wireguard enable
service wireguard start
Création des utilisateurs
Pour pouvoir nous connecter dessus il nous faut des utilisateurs sur et qui seront restreint à utiliser la configuration fixé.
Comme pour l'interface wg0 nous devons créer une clé privé mais aussi une clé public.
On peut créer un dossier par utilisateur, mais il va falloir refaire un umask 077 par dossier créer.
wg genkey > kiu.priv
chmod 600 kiu.priv
wg pubkey < kiu.priv > kiu.pub
Nous pouvons ouvrir les 2 clés et les copier pour faire la configuration de notre utilisateur.
Pour que notre utilisateurs soit pris en compte nous devons le mettre dans notre fichier de configuration wg0 :
#Peer Kiu
[Peer]
PublicKey = #notre clé public
AllowedIPs = 10.8.0.2/32
Laisser passer le traffic
Pour que l'on ce connecte à notre serveur, il nous faut avant tout que les paquet soit bien transmis. Pour ce faire nous devons activer le routage.
Dans le fichier /etc/rc.conf il faut rajouter toute en bas les lignes : gateway_enable="yes" et pf_enable="yes"
Maintenant il faut que l'on NAT tout nos paquet. Par conséquent nous devons crée un fichier pf.conf dans la racine de /etc et mettre dedans :
nat on em0 from 10.8.0.0/24 to any -> 0.0.0.0 #<- notre ip public
On reboot la machine pour que tout soit activer.
Vérification que tout fonctionne
Sur Windows et sous MacOS il existe une application Wireguard qui sert à pouvoir ce connecter avec interface graphique. Pour Linux, on peut le faire mais en ligne de code.
On créer une nouvelle interface dans le logiciel et on met dedans :
[Interface]
PrivateKey = #Notre clé privé Kiu
Address = 10.8.0.2/32
DNS = 80.67.169.12, 80.67.169.40
[Peer]
PublicKey = #Clé Public de notre wg0
AllowedIPs = 0.0.0.0/0
Endpoint = 0.0.0.0:51820 #0.0.0.0 = notre ip public
Et on se connecte et tadaaaaaa !
On voit bien notre Wireguard ce connecter et envoyer tout notre trafic dessus.
Parler aux antennes sans envoyer tout le trafic vers Wireguard
Si nous voulons juste parler aux antennes de Scani sans passer tout le trafic dans Wireguard il faut dans notre configuration client enlever le 0.0.0.0/0 et mettre 192.168.0.0/16 . A partir de ce moment, nous pouvons parler aux antennes en gardant notre IP public.
La sécurité ...
Wireguard fait partie des VPN qui n'ont jamais été compromis mais nous pouvons augmenter sa sécurité grâce à la fonction PresharedKey. Cette fonction permet de ce connecter avec son VPN avec une clé d'identification. Sans cette clé, jamais Wireguard passera du trafic sur l'interface.
Créer la clé PresharedKey :
wg genpsk > kiu.psk
Une fois cette clé créer, nous pouvons la mettre dans le fichier wg0 et dans notre client Wireguard :
#Fichier wg0
#Peer Kiu
[Peer]
PublicKey = #notre clé public
AllowedIPs = 10.8.0.2/32
PresharedKey = #Notre clé PresharedKey
#Coté client Wireguard
[Interface]
PrivateKey = #Notre clé privé Kiu
Address = 10.8.0.2/32
DNS = 80.67.169.12, 80.67.169.40
[Peer]
PublicKey = #Clé Public de notre wg0
AllowedIPs = 0.0.0.0/0
Endpoint = 0.0.0.0:51820 #0.0.0.0 = notre ip public
PresharedKey = #Clé PresharedKey