J'utilise Wireguard comme serveur VPN.
Deux VPNs sont créés:
- Un VPN pour moi uniquement me permettant d'accéder à tout le réseau local
- Un VPN pour ma famille permettant d'accéder à la machine
rubeus-public
Il faut donc faire le setup sur les deux machines puisqu'un firewall bloque l'accès au réseau local à la machine rubeus-public
qui n'a alors accès qu'au NAS.
Note: Lien utile => https://gist.github.com/qdm12/4e0e4f9d1a34db9cf63ebb0997827d0d, https://www.developpez.net/forums/d1275817/systemes/linux/securite/iptables-forward-drop/
Aucun setup hors ansible
Sauf si ajout d'utilisateurs
Il faut tout d'abord installer deux packages:
$ sudo apt install wireguard wireguard-tools
On s'assure que l'ip forwarding est activée:
$ cat /etc/sysctl.conf
# Si ce n'est pas le cas, ajouter la ligne suivante dans ce fichier:
net.ipv4.ip_forward=1
# Puis appliquer
$ sudo sysctl -p
On va tout d'abord générer une clé publique et une clé privée pour le serveur, en tant que root:
$ cd /etc/wireguard
$ umask 077
$ wg genkey | tee private.key | wg pubkey > public.key
Puis on créé le fichier de configuration `/etc/wireguard/wg0.conf:
[Interface]
Address = 192.168.XX.1/24
ListenPort = <PORT DE WIREGUARD>
PrivateKey = <Contenu du fichier private.key>
# Clients
Dans la section interface il va falloir rajouter deux configurations, PostUp
et PostDown
. Il s'agit des commandes exécutées par wireguard à ces moments permettant de router les packets correctement via iptables.
Pour le serveur local il faut utiliser les lignes suivantes:
# On autorise le transit des packets en provenance de l'interface wg0 à destination de tout autre interface
PostUp = iptables -A FORWARD -i %i -j ACCEPT
# On autorise le transit des packets à destination de l'interface wg0 peu importe leur source
PostUp = iptables -A FORWARD -o %i -j ACCEPT
# Permet de faire passer les packets du VPN sur le réseau local (Ils sont transformé pour avoir l'ip du serveur en source sur l'interface de sortie)
PostUp = iptables -t nat -A POSTROUTING -o enp2s0f0 -j MASQUERADE
# On supprime les règles précédemment créées
PostDown = iptables -D FORWARD -i %i -j ACCEPT
PostDown = iptables -D FORWARD -o %i -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o enp2s0f0 -j MASQUERADE
Pour le serveur public il faut utiliser les lignes suivantes:
# On refuse le transit des packets en provenance de l'interface wg0 à destination de tout autre interface
PostUp = iptables -A FORWARD -i %i -j DROP
# On refuse le transit des packets à destination de l'interface wg0 peu importe leur source
PostUp = iptables -A FORWARD -o %i -j DROP
# On supprime les règles précédemment créées
PostDown = iptables -D FORWARD -i %i -j DROP
PostDown = iptables -D FORWARD -o %i -j DROP
Pour ajouter des utilisateurs (Générer des clés privées) il faut suivre le guide correspondant dans ce dépôt.
Il faut ensuite allumer le serveur pour le tester:
$ sudo wg-quick up wg0
# Vérifier que tout marche bien avec
$ sudo wg show
Si tout est bon, on peu l'activer au démarrage de la machine:
$ sudo systemctl enable --now wg-quick@wg0
Il faut peut-être dans certains cas charger le module du kernel:
$ sudo modprobe wireguard