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 :
- Curve25519 pour l'échange de clé
- ChaCha20 pour la cryptographie symétrique
- Poly1305 pour le code d'authentification de message
- SipHash pour les tables de hachage
- BLAKE2s pour les fonctions de hachages
- UDP pour des échanges plus rapides
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 bloc100.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 :