Installer Wireguard-UI avec Nginx Proxy

Testez-le maintenant pour 1 euro seulement !
Vous avez de grands projets d’hébergement avec beaucoup de ressources ? Avec le CloudServer (VPS) de hosting.fr, ce n’est pas un problème. Grâce à notre vaste gamme d’outils d’hébergement, vous bénéficiez d’une liberté absolue. Bien entendu, vous pouvez choisir librement le système d’exploitation en appuyant sur un bouton.
Réserver un serveur cloud maintenant

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).

N'hésitez pas à vous inscrire à notre newsletter



Nous vous remercions de votre inscription à la newsletter hosting.fr.
Détails du contrat VPN Proxy Wireguard Installation