Tutoriel Linux : obfusquer le trafic Wireguard

Mettre en place un tunnel Wireguard entre des machines et un serveur est très utile mais cela n’est pas discret.

En effet, s’il est impossible pour un intervenant extérieur de visualiser en clair le trafic vu qu’il est chiffré, la nature Wireguard du trafic est par contre très facile à déterminer.

Dans un environnement réseau sous surveillance interdisant le trafic Wireguard, celui-ci sera facilement bloqué. La solution pour passer quand même est d’obfusquer le trafic en l’encapsulant dans un tunnel d’obfuscation.

Celui que nous allons utiliser dans ce tutoriel est wg-obfuscator, qui obfusque le trafic pour le faire ressembler à une visio-conférence, soit une nature de trafic moins sujet à des filtrages.

Rappel : l’installation de Wireguard sans obfuscation a déjà été couverte dans cet article.

Installation et utilisation de wg-obfuscator

L’installation se fait grâce à un conteneur docker, il faut donc que votre serveur soit prêt à lancer des services docker. Si ce n’est pas le cas, vous trouverez le guide d’installation docker sous Ubuntu ici et celui de Devuan ici.

Configuration côté serveur : dans un répertoire dédié, créer un fichier docker-compose.yml contenant :

services:
  wg-obfuscator:
    image: clustermeerkat/wg-obfuscator:latest
    container_name: wg-obfuscator-client
    restart: unless-stopped
    network_mode: host
    volumes:
      - ./wgobfuscator.conf:/etc/wg-obfuscator/wg-obfuscator.conf

Dans le même répertoire, créer un fichier wgobfuscator.conf contenant (remplacer la clé partagée par celle que vous souhaitez) :

[server]
source-lport = 3333
target = 127.0.0.1:51820
key = LaCleSecretePartageeEntreClientEtServeur
masking = STUN
verbose = 3
max-clients = 10
idle-timeout = 300
max-dummy = 8

Le fichier /etc/wireguard/wg0.conf doit contenir :

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = CléPrivéeDuServeur
MTU = 1280

[Peer]
PublicKey = CléPubliqueDuClient1
AllowedIPs = 10.8.0.2/32

Pour lancer le service d’obfuscation, on lance depuis le répertoire contenant docker-compose.yml et wgobfuscator.conf un classique :

docker compose up -d

Si besoin, on ouvre sur le firewall le port 3333 UDP :

sudo ufw allow 3333/udp

Configuration côté client Linux : dans un répertoire dédié, on crée un fichier docker-compose.yml avec pour contenu :

services:
  wg-obfuscator:
    image: clustermeerkat/wg-obfuscator:latest
    container_name: wg-obfuscator-client
    restart: unless-stopped
    network_mode: host
    volumes:
      - ./wgobfuscator.conf:/etc/wg-obfuscator/wg-obfuscator.conf

Dans le même répertoire, on crée un fichier wgobfuscator.conf contenant (remplacez la clé partagée par la même que celle que vous avez mise sur le serveur. Remplacez également serveur par le nom DNS de votre serveur) :

[client]
source-lport = 3333
target = serveur:3333
key = LaCleSecretePartageeEntreClientEtServeur
masking = STUN
verbose = 3
max-dummy = 8

Sur le client, le fichier /etc/wireguard/wg0.conf doit contenir :

[Interface]
PrivateKey = <clé_privée_client>
Address = 10.8.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = <clé_publique_serveur>
AllowedIPs = 10.8.0.0/24
Endpoint = 127.0.0.1:3333
PersistentKeepalive = 25

Sur le client on lance l’obfuscateur par un classique :

docker compose up -d

Maintenant que le conteneur d’obfuscation est lancé des 2 côtés, on peut établir le lien wireguard en tapant sur le client :

sudo wg-quick up wg0

On peut tester la connectivité depuis le client par la commande :

ping 10.8.0.1

Et voilà, le tunnel Wireguard est encapsulé dans wg-obfuscator et le trafic sortant de la machine ressemble comme deux gouttes d’eau à un appel vidéo.

Pour vérifier la bonne configuration, on peut taper sur le client la commande :

sudo wg show

La sortie de cette commande montrera que wireguard envoie son trafic au conteneur local sur 127.0.0.1 et non directement au serveur Wireguard sur le serveur :

interface: wg0
public key: <...>
private key: (hidden)
listening port: 51820
peer:
endpoint: 127.0.0.1:3333
allowed ips: 10.8.0.0/24
latest handshake: X seconds ago
transfer: 1.23 KiB received, 4.56 KiB sent

Au final, avec ces installations et paramétrages, on a bâti l’architecture obfusquée suivante :

Cool, non ? 😉

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *