Installation d’un VPN WireGuard avec IPtables
WireGuard est un VPN très léger et simple à configurer, il fonctionne sur un système P2P. Il est disponible sur de nombreux supports comme Windows ou Android et d’une stabilité incroyable ! Dans ce tuto, on va installer et configurer WireGuard et IPtables pour que le serveur NAT tous le flux venant du client.
On commence par installer les paquets requis, WireGuard
pour le VPN, IPtables
pour filtrer et surtout nater le flux et IPtables-persistent
pour que la configuration IPtables soient persistante après un redémarrage du système
root@CT-WIREGUARD:~# apt-get install wireguard iptables iptables-persistent
Nous allons créer le répertoire /opt/wireguard-keys
afin d’y stocker les clés
root@CT-WIREGUARD:~# mkdir /opt/wireguard-keys
Rendez-vous dans le répertoire que nous venons de créer
root@CT-WIREGUARD:~# cd /opt/wireguard-keys
Puis on génère la clé privée et la publique
root@CT-WIREGUARD:~# wg genkey | tee privatekey | wg pubkey > publickey
Afin de protéger nos clés, on modifie les droits du dossier et son contenu
root@CT-WIREGUARD:~# chmod -R 600 /opt/wireguard-keys
On affiche les clés que nous venons de générer, la clé privé sera utilisée dans la configuration de notre serveur WireGuard et la publique servira lors de la configuration du client
root@CT-WIREGUARD:~# cat privatekey
root@CT-WIREGUARD:~# cat publickey
Afin de configurer WireGard, nous allons créer et modifier le fichier wg0.conf
root@CT-WIREGUARD:~# nano /etc/wireguard/wg0.conf
[Interface]
Address = 10.10.10.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = clé_privée_générée_sur_le_serveur
[Peer]
PublicKey = clé_publique_générée_sur_le_client
AllowedIPs = 10.10.10.0/24
Explication :
- Address
Il s’agit de l’adresse IP de l’interface du VPN côté serveur - SaveConfig
Indique que la configuration de l’interface doit être sauvegardée - ListenPort
Permet de définir le port réseau du service WireGuard - PrivateKey
Doit avoir pour valeur la clé privée qui a été générée sur le serveur - PublicKey
Doit avoir pour valeur la clé publique qui a été générée sur le client (Nous reviendrons modifier cette valeur plus tard dans le tuto après avoir généré cette clé) - AllowedIPs
Défini les adresses IP qui seront routées à travers le tunnel VPN vers le client
Maintenant que l’interface est configurée on va l’activer au démarrage du poste. A ce stade là, il n’y a pas d’intérêt à la démarrer maintenant car nous reviendrons dessus pour configurer la clé publique du client
root@CT-WIREGUARD:~# systemctl enable wg-quick@wg0
Nous configurons maintenant IPtables
.
Pour ne pas s’embrouiller avec les commandes, on va simplement modifier le fichier de persistance rules.v4
car nous redémarrerons le serveur plus tard pour confirmer que le VPN monte bien et que tout est fonctionnel après un reboot. Attention, ici ens18
est le nom de mon interface réseau. Pensez bien à remplacer le nom de cette interface par la votre.
root@CT-WIREGUARD:~# nano /etc/iptables/rules.v4
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i wg0 -j ACCEPT
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o ens18 -j MASQUERADE
-A POSTROUTING -s 10.10.10.0/24 -o ens18 -j MASQUERADE
COMMIT
Il s’agit là d’une configuration basique de IPtables
, libre à vous de la peaufiner pour rendre tout ça plus sécurisé.
Etant donné que notre serveur WireGuard va effectuer du routage, on active la fonction forward
en décommentant la ligne correspondante et en s’assurant que la valeur est bien égale à 1
root@CT-WIREGUARD:~# nano /etc/sysctl.conf
net.ipv4.ip_forward=1
Nous reviendrons sur le serveur après la configuration du client.
Dans cet exemple j’utilise un client Windows, mais ça fonctionne très bien en mobile ou sous linux, les configurations sont identiques
Après avoir installé et lancé de client WireGuard, il faut cliquer sur la petite flèche à côté de « Ajouter le tunnel » située en bas à gauche
Vous constaterez que lorsque la fenêtre d’ajout du tunnel s’ouvre, une clé publique et privée sont générées automatiquement
On va modifie tout ça par :
[Interface]
PrivateKey = mK9FTWiSqWnoTM5OsLUuyfQWHdVTdQ7AiFZ53a/hS2o=
Address = 10.10.10.5/24
[Peer]
PublicKey = clé_publique_générée_sur_le_serveur
AllowedIPs = 10.10.10.0/24, 192.168.1.0/24, 172.16.1.0/24
Endpoint = IP-PUBLIQUE:51820
Explication :
- PrivateKey Doit avoir pour valeur la clé privée qui a été générée par le client ( se fait automatiquement)
- Address Il s’agit de l’adresse IP de l’interface du VPN côté client
- PublicKeys Doit avoir pour valeur la clé publique qui a été générée sur le serveur
- AllowedIPs Défini les adresses IP qui seront routées à travers le tunnel VPN vers le serveur. J’ai mis plusieurs adresses pour bien comprendre qu’il est possible de contacter plusieurs réseaux via ce tunnel
- Endpoint Défini l’adresse à laquelle le client doit s’accrocher lorsqu’il démarre et le port configuré sur le serveur précédemment
On constate qu’il y’a un champ grisé « Clé publique », celle-ci a été générée automatiquement lors de l’ouverture de la fenêtre de création du tunnel. Il faut copier cette clé sur le serveur
root@CT-WIREGUARD:~# nano /etc/wireguard/wg0.conf
[Interface]
Address = 10.10.10.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = clé_privée_générée_sur_le_serveur
[Peer]
PublicKey = clé_publique_générée_sur_le_client
AllowedIPs = 10.10.10.0/24
Reste plus qu’à redémarrer le serveur et tout est fonctionnel
root@CT-WIREGUARD:~# reboot
0 Commentaires