Installer Wireguard-UI avec Nginx Proxy
Introduction
Wireguard-UI est une interface web pour gérer les connexions VPN Wireguard.
Prérequis
- Vous disposez d’un serveur Cloud hosting.fr ayant une entrée DNS valide, par exemple
demo.mustermann-domain.fr. - Un shell privilégié sur le système.
Configuration
Wireguard-UI peut être installé à la fois via Docker et directement. Étant donné qu’un serveur VPN doit être aussi simple que possible pour minimiser la complexité et la surface d’attaque, nous utiliserons ici la variante directe. De plus, un serveur web nginx garantit des connexions sécurisées par TLS (Let’s Encrypt) à l’interface web.
Info : Au moment de la rédaction de cet article, la dernière version de Wireguard UI date d’environ un an. Si ce projet n’est plus maintenu activement, l’accès à l’interface web doit être sécurisé en plus (par exemple, avec une authentification de base via le serveur web nginx).
Préparations
Wireguard-UI doit s’exécuter en tant qu’utilisateur distinct, donc nous avons besoin d’un nouvel utilisateur système.
adduser wireguard-ui --system --group --home /opt/wireguard-ui
Installer Wireguard
Pour utiliser Wireguard, il faut d’abord installer les outils nécessaires.
apt update
apt install wireguard-tools
Installer Wireguard-UI
Wireguard-UI est maintenant téléchargé depuis Github et décompressé. Assurez-vous de télécharger la dernière version.
cd /opt/wireguard-ui
wget https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.6.2/wireguard-ui-v0.6.2-linux-amd64.tar.gz
tar -xvf wireguard-ui-v0.6.2-linux-amd64.tar.gz
rm wireguard-ui-v0.6.2-linux-amd64.tar.gz
chown wireguard-ui:wireguard-ui wireguard-ui
Maintenant, Wireguard-UI doit obtenir le droit de modifier le fichier de configuration Wireguard /etc/wireguard/wg0.conf
chgrp -R wireguard-ui /etc/wireguard/
chmod g+x /etc/wireguard/
chmod g+rw /etc/wireguard/wg0.conf
Un fichier d’unité Systemd pour Wireguard-UI est maintenant créé. Pour cela, nous créons le fichier /etc/systemd/system/wireguard-ui.service avec le contenu suivant :
[Unit]
Description=Une interface web pour configurer wireguard
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=exec
ExecStart=/opt/wireguard-ui/wireguard-ui -bind-address 127.0.0.1:8001
WorkingDirectory=/opt/wireguard-ui/
User=wireguard-ui
Group=wireguard-ui
NoNewPrivileges=yes
PrivateTmp=yes
PrivateDevices=yes
DevicePolicy=closed
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectControlGroups=yes
ProtectSystem=strict
ProtectHome=yes
MemoryDenyWriteExecute=yes
ReadWritePaths=/etc/wireguard/wg0.conf
ReadWritePaths=/run /opt/wireguard-ui/db
[Install]
WantedBy=multi-user.target
Mettez à jour la configuration Systemd et démarrez le service.
systemctl daemon-reload
systemctl enable wireguard-ui.service
systemctl start wireguard-ui.service
Une vérification avec systemctl status wireguard-ui.service devrait maintenant produire une sortie similaire.
● wireguard-ui.service - Une interface web pour configurer wireguard
Loaded: loaded (/etc/systemd/system/wireguard-ui.service; disabled; preset: enabled)
Active: active (running) since Fri 2025-01-24 23:34:31 UTC; 3s ago
Main PID: 154486 (wireguard-ui)
Tasks: 8 (limit: 38467)
Memory: 10.3M
CPU: 92ms
CGroup: /system.slice/wireguard-ui.service
└─154486 /opt/wireguard-ui/wireguard-ui -bind-address 127.0.0.1:8001
Changer le mot de passe admin de Wireguard-UI
L’interface web pour la configuration de Wireguard est maintenant démarrée et accessible via localhost. Pour des raisons de sécurité, il est conseillé de changer le mot de passe admin avant que le service ne soit accessible publiquement. Pour cela, nous établirons une nouvelle connexion SSH avec ssh -L 127.0.0.1:8001:127.0.0.1:8001 root@demo.mustermann-domain.fr. Ensuite, vous pouvez accéder à l’interface dans le navigateur à http://127.0.0.1:8001. Connectez-vous avec admin:admin et cliquez en haut à gauche sur Administrateur : admin pour changer le mot de passe.
Configurer Systemd pour l’interaction de Wireguard-UI avec Wireguard
Pour le moment, Wireguard-UI peut modifier le fichier de configuration /etc/wireguard/wg0.conf, mais les modifications ne sont pas encore prises en compte par Wireguard. Pour cela, Wireguard doit être automatiquement redémarré au besoin.
Créez le fichier /etc/systemd/system/wgui-update.service avec le contenu suivant :
[Unit]
Description=Redémarrer WireGuard
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart wg-quick@wg0.service
[Install]
RequiredBy=wgui-update.path
Créez le fichier /etc/systemd/system/wgui-update.path avec le contenu suivant :
[Unit]
Description=Surveiller /etc/wireguard/wg0.conf pour les changements
[Path]
PathModified=/etc/wireguard/wg0.conf
[Install]
WantedBy=multi-user.target
Ensuite, rechargez Systemd et activez Wireguard-UI :
systemctl daemon-reload
systemctl enable wgui-update.{path,service}
systemctl start wgui-update.{path,service}
Pare-feu et routage
Pour que les connexions via Wireguard vers des cibles Internet fonctionnent, le forwarding doit être activé. Pour rediriger uniquement le trafic Wireguard, des règles iptables appropriées doivent être configurées.
Modifiez le fichier /etc/network/interfaces comme suit (ajoutez les lignes pre-up) :
auto lo
iface lo inet loopback
auto enx<mac>
iface enx<mac> inet static
address <IP>
gateway <GW>
pre-up /usr/sbin/iptables -P FORWARD DROP
iface <mac> inet6 static
address <IP6>
gateway <GW6>
pre-up /usr/sbin/ip6tables -P FORWARD DROP
Créez le fichier /etc/sysctl.d/99-forward.conf avec le contenu suivant :
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
Dans l’interface Wireguard-UI, des règles iptables doivent maintenant être configurées. Dans l’interface web, cliquez sur “Serveur Wireguard” dans le menu principal. Sous le script Post Up, entrez ce qui suit :
/usr/sbin/iptables -A FORWARD -i wg0 -j ACCEPT && /usr/sbin/iptables -A FORWARD -o wg0 -j ACCEPT && /usr/sbin/iptables -t nat -A POSTROUTING -o <interfacename> -j MASQUERADE && /usr/sbin/ip6tables -A FORWARD -i wg0 -j ACCEPT && /usr/sbin/ip6tables -t nat -A POSTROUTING -o <interfacename> -j MASQUERADE
Sous le script Post Down, entrez ce qui suit :
/usr/sbin/iptables -D FORWARD -i wg0 -j ACCEPT && /usr/sbin/iptables -D FORWARD -o wg0 -j ACCEPT && /usr/sbin/iptables -t nat -D POSTROUTING -o <interfacename> -j MASQUERADE && /usr/sbin/ip6tables -D FORWARD -i wg0 -j ACCEPT && /usr/sbin/ip6tables -t nat -D POSTROUTING -o <interfacename> -j MASQUERADE
Interfacename est le nom de l’interface réseau (configuré dans /etc/network/interfaces). Le nom peut être consulté par exemple avec ip route list default.
Facultatif, dans Global Settings -> DNS Servers, vous pouvez entrer les résolveurs du serveur Wireguard. Pour hosting.fr, c’est 95.129.51.51 et 80.244.244.244.
Enfin, activez la connexion Wireguard dans Systemd :
systemctl enable wg-quick@wg0.service
Installer Nginx
Si l’interface web doit être accessible via Internet, Nginx doit être installé et adapté. Installez Nginx avec des certificats Let’s Encrypt Installer.
Créez la configuration Nginx pour Wireguard-UI.
Pour cela, le fichier /etc/nginx/sites-enabled/demo.mustermann-domain.fr doit être modifié :
server {
server_name demo.mustermann-domain.fr;
include snippets/mozilla-modern.conf;
. . .
# autoriser le téléchargement de fichiers volumineux
client_max_body_size 50000M;
# Définir les en-têtes
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# définir le timeout
proxy_read_timeout 600s;
proxy_send_timeout 600s;
send_timeout 600s;
location / {
proxy_pass http://127.0.0.1:8001;
}
}
Ensuite, vérifiez la configuration Nginx avec nginx-t pour sa validité et redémarrez le serveur web (systemctl restart nginx.service).
L’interface web et le serveur Wireguard sont maintenant accessibles via le domaine configuré (par exemple demo.mustermann-domain.fr).