Wireguard

Par ce salop de FanfanlaTulipe, sur la base d'un tutoriel de ses amis anonymes

Wireguard est un protocole de communication et un logiciel open source permettant de créer un VPN. Il a été conçu avec des objectifs de simplicité, de performance et de robustesse d'un point de vue sécurité. D'après la plupart des études, il est plus performant qu'IPsec et OpenVPN.

D'un point de vue cryptographique, Wireguard utilise :

Pour la suite de ce guide, l'appareil qui fait office de serveur sera sous Debian et le client sous Arch Linux.

Installation

Serveur

sudo apt install wireguard wireguard-tools

Client

yay -S wireguard wireguard-tools

Configuration

Ce système étant basé sur un biclé pour l'authentification, nous allons généré sur les deux machines un couple clé publique/privée.

umask 0077
wg genkey > private
wg pubkey < private > public

Pour les deux machines, il faudra créer un fichier de configuration, nous le mettrons dans /etc/wireguard/wg0.conf.

De plus, il faut choisir un bloc d'adresses privées (RFC 1918) pour choisir les deux IPv4 de nos machines. Nous utiliserons le bloc 192.168.66.0/24 ainsi que les adresses 192.168.66.1 pour le serveur et 192.168.66.10 pour le client.

Notes du Kuro décoiffé
Il peut être judicieux d'utiliser un bloc 100.64.0.0/10, afin d'avoir des IPs 'privées' sans collision avec les blocs RFC 1918. En effet, ce bloc n'est utilisé que par les opérateurs et n'est pas accessible sur Internet (RFC 6598).

Enfin, vous devrez choisir un port d'écoute pour le serveur. Il n'y a de port particulié à choisir, essayer simplement de prendre un port élevé pour éviter un scan Shodan.

Côté Serveur

[Interface]
Address = 192.168.66.1/24               # IP du serveur
PrivateKey = <clé privée du serveur>
ListenPort = <port d'écoute>
DNS = 1.1.1.1                           # Optionnel
SaveConfig = true                       # Optionnel, permet d'enregistrer dans ce fichier les modifications faites à la volée.
PostUp = /sbin/sysctl -w net.ipv4.ip_forward=1
PostUp = /sbin/sysctl -w net.ipv6.conf.all.forwarding=1
PostUp = /sbin/iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = /sbin/iptables -A FORWARD -o wg0 -j ACCEPT
PostUp = /sbin/iptables -t nat -A POSTROUTING -o <interface_de_sortie> -j MASQUERADE
PostDown = /sbin/iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = /sbin/iptables -D FORWARD -o wg0 -j ACCEPT
PostDown = /sbin/iptables -t nat -D POSTROUTING -o <interface_de_sortie> -j MASQUERADE

[Peer]                                  # Votre client
PublicKey = <clé publique du client>
AllowedIPs = 192.168.66.10/32           # IPs autorisées à utiliser ce serveur

Pensez à rendre ce fichier lisible uniquement par root, pour éviter la fuite de la clé privée du serveur.

Si vous utilisez un pare-feu, pensez à le mettre en jour en conséquence :

iptables -A INPUT -p udp --dport <port d'écoute> -m conntrack --ctstate NEW,ESTABLISHED,RELATED -m comment --comment Wireguard -j ACCEPT

Côté Client

[Interface]
Address = 192.168.66.10/32              # IP du client
PrivateKey = <clé privée du client>
DNS = 1.1.1.1                           # Optionel, mais recommandé pour ne pas faire fuiter l'adresse dans une requête DNS

[Peer]                                  # Le serveur
PublicKey = <clé publique du serveur>
Endpoint = <ip publique du serveur>
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepAlive = 30                # Optionnel, envoi de donnée périodique pour maintenir la session ouverte

De même, pensez à rendre ce fichier lisible uniquement par root.

Mise en place du tunnel

Pour activer le tunnel, exécuter la commande suivante sur les deux machines :

wg-quick up wg0

Vous pouvez voir le status du tunnel avec :

wg show

Vous pouvez vérifier que votre IP et votre localisation sont masquées avec les sites suivants :