Mirror the French docs onto the English structure

This commit is contained in:
Djeex
2026-09-05 16:55:39 +02:00
parent 86f04ed794
commit 1894ac7ead
74 changed files with 6322 additions and 1588 deletions
@@ -0,0 +1,2 @@
title: Obsolète
icon: i-lucide-trash-2
@@ -0,0 +1,239 @@
---
title: Wireguard 14
description: Ancien guide WireGuard 14 conservé à titre archivé, voir le guide WireGuard à jour pour une installation actuelle.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
## Introduction
L'utilisation d'un VPN permet d'accéder à distance aux ressources locales du serveur sans les exposer sur internet. C'est notamment une manière propre de sécuriser l'accès à la console SSH, plutot que d'exposer le port sur internet. C'est pouvoir se connecter à son réseau où que l'on soit, de maniere sécurisée, et de faire dialoguer des machines qui sont sur des réseaux différents.
Ici nous utiliserons [Wireguard](https://www.wireguard.com/), un serveur VPN sécurisé et très performant, à l'aide des conteneurs :
- [wg-easy](https://github.com/wg-easy/wg-easy) pour le serveur, qui propose une interface web très simple pour controler les connexions et télécharger les fichiers de conf (notamment par QR code pour les téléphones)
- [Wireguard](https://docs.linuxserver.io/images/docker-wireguard/?h=wireguard) pour les clients linux
Il existe aussi des clients Windows, MacOS, iOS et Android.
Le principe est le suivant :
- Sur internet, n'importe qui peut contacter n'importe quel box internet et donc essayer de contacter n'importe quel serveur exposé.
- Votre serveur est sur votre réseau local. Il est accessible depuis le réseau local mais pas depuis internet, mis à part les services exposés (comme nous l'avons fait avec Dockge). Pour accéder aux ressources non exposées, vous devez être connecté sur le meme réseau que votre serveur et donc etre chez vous. De plus, vous devez laisser ouvert les ports utilisés par vos services à travers le pare feu de votre serveur.
- Nous souhaitons ici au contraire, depuis n'importe où, pouvoir accéder de maniere securisée aux services non exposés sur internet du serveur, comme la console SSH qui permet de se connecter à la machine par exemple.
- Nous souhaitons aussi accéder aux services d'autres serveurs, et par exemple relier de maniere sécurisée deux instances de Dockge pour tout controler depuis la meme interface.
Pour cela nous allons créer un **réseau privé virtuel**, ou VPN, c'est à dire un tunnel sécurisé auquel personne n'a accès à part les machines que vous relierez entre elles. Elles feront partie d'un nouveau réseau et pourront dialoguer entre elle comme dans un réseau local.
D'autre part, vous pourrez ajouter votre téléphone, un ordinateur portable ou n'importe quel appareil au réseau pour pouvoir utiliser vos ressources depuis vos appareils quotidiens, où que vous soyiez.
![picture](/img/serveex/vpn.svg)
Dans cette illustration, la machine 1 est sur deux réseaux :
- son réseau local (tous les appareils liés à la box, avec une adresse IP du type `192.168.x.x ` donc ici la machine 1 et la machine 2)
- le réseau du VPN (tous les appareils reliés au VPN, avec une seconde adresse IP du type `10.8.x.x` donc ici la machine 1 et 4)
On peut aussi faire en sorte que les machines reliées au réseau virtuel partagent les acces à leur réseau local. Ici nous ne le ferons pas, pour des raisons de sécurité, et de complexité en terme de sous-réseau (si les deux machines distantes ont des machines locales qui utilisent la meme adresse IP locale, par exemple `192.168.1.1`, cela posera des conflits).
Ainsi, sur le réseau virtuel, seules les machines directement reliées pourront dialoguer entre elle depuis ce réseau. Elles ne pourront pas dialoguer avec une machine situées sur un autre réseau local et non reliée au VPN.
## Côté serveur
::note
📋 __A vérifier au préalable :__
- Vérifiez si le port `51820 UDP` estlibre sur votre serveur, et bien routé dans le NAT de la box `Source 51820 UDP -> Destination 51820 UDP -> Serveur`. En effet, votre serveur étant derrière votre box, le port de votre box doit etre joignable et rediriger vers le port de votre serveur connecté à votre VPN.
- Vérifiez aussi que le port `51821 TCP` est libre sur le serveur pour accéder à la web ui.
::
::warning
__Attention :__ Cette documentation utilise la version `14` de [wg-easy](https://wg-easy.github.io/wg-easy/latest/). La version `15`comporte des breaking changes qui ne sont pas compatibles avec les configurations proposées ici.
::
Structure des dossiers
```text [Arborescence]
root
└── docker
└── wg-easy
├── config
│ └── etc_wireguard
├── compose.yaml
└── .env
```
Le conteneur sera en mode `HOST`, c'est à dire qu'il occupera les ports de votre host comme s'il n'etait pas dans un conteneur mais directement installé sur la machine, sans passer par un sous-réseau.
Ouvrez Dockge, cliquez sur `compose` et nommez la stack `wg_easy`.
Copiez la configuration suivante :
```yaml [compose.yaml]
---
services:
wg-easy:
network_mode: host
env_file:
- .env
environment:
- LANG=en
- WG_HOST=${HOST}
- PASSWORD_HASH=${PW}
- WG_DEFAULT_ADDRESS=${ADDRESS}
- WG_HIDE_KEYS=never
- WG_ALLOWED_IPS=${IPS}
- WG_DEFAULT_DNS=
- UI_TRAFFIC_STATS=true
- UI_CHART_TYPE=1
image: ghcr.io/wg-easy/wg-easy:14
container_name: wg-easy
volumes:
- /srv/docker/wg_easy/config/etc_wireguard:/etc/wireguard
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
```
::tip{icon=""}
✨ __Astuce :__
- Vous pouvez personnaliser le port de wireguard avec `WG_PORT` au lieu du port par defaut `51820`
- Ajoutez le label de watchtower afin d'automatiser les mises à jour
```yaml [compose.yaml]
services:
wg-easy:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
::
Dans `.env` :
```properties [.env]
HOST=
PW=
ADDRESS=
IPS=
```
| Variable | Valeur | Exemples |
|---------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|
| `HOST`{lang=properties} | IP publique de votre box internet (elle doit etre fixe) | `80.72.136.27` |
| `PW`{lang=properties} | Hash du mot de passe, [à générer ici](https://bcrypt-generator.com/). **ATTENTION:** doubler les `$` | `$$2a$$12$$FF6T4QqSP9Ho`|
| `ADDRESS`{lang=properties} | Plage d'adresse que le DHCP du VPN peut attribuer, le `x` doit etre présent, on peut changer les autres chiffres ou les remplacer par `x` aussi | `10.8.0.x` |
| `IPS`{lang=properties} | les IPs qui doivent etre routées par les clients vers le VPN. Dans notre cas, on veut que seul le traffic vers le serveur et clients du VPN soit routé, on veut pas de leurs réseau local et on veut conserver l'accès à internet direct sans passer par le VPN.Si vous voulez tout de meme ajouter toutes les machines connectées aux appareils en local, ajoutez la plage `192.168.0.0/16` en séparant les deux plages par une virgule. | `10.8.0.0/24` |
Puis déployez la stack.
### Activation du forwarding depuis l'host
Pour que l'host autorise les clients à communiquer entre eux, vous devez activer les paramèttres suivants :
```bash [Terminal]
sudo sysctl net.ipv4.ip_forward=1
sudo sysctl net.ipv4.conf.all.src_valid_mark=1
```
### Recuperation des fichiers de conf
Afin de configurer les clients, vous devez télécharger les fichiers de conf générés par l'host :
- Connectez vous via le web en local sur `http://ipduserveur:51821`
- Créez un client
- Téléchargez le fichier de conf
- Renommez le en `wg0.conf`
::caution
En cas d'échec, vérifiez les règles du pare-feu.
::
## Sur le serveur client
---
::note
Nous partons du principe que le serveur client est un serveur linux avec Docker installé
::
Structure des dossiers
```text [Arborescence]
root
└── docker
└── wireguard
└── config
│ └── wg_confs
└── compose.yaml
```
Creez le dossier `/srv/docker/wireguard/config/wg_confs`.
::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __Astuce pour les allergiques au terminal :__
vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::
```bash [Terminal]
sudo mkdir -p /srv/docker/wireguard/config/wg_confs
```
Copiez le fichier` wg0.conf` téléchargé précédemment.
::tip{icon=""}
✨ __Astuce :__ Le moyen le plus simple est de transférer le fichier par sftp dans le dossier `/home/nomdutilisateur` puis de le copier dans le bon dossier :
```bash [Terminal]
sudo cp ~/wg0.conf /srv/docker/wireguard/config/wg_confs
::
Creez le `compose.yaml` dans `/srv/docker/wireguard `:
```bash [Terminal]
sudo nano /srv/docker/wireguard/compose.yaml
```
Appuyez sur `i` pour rentrer en modification et copiez la configuration ci-dessous
```yaml [compose.yaml]
---
services:
wireguard:
image: lscr.io/linuxserver/wireguard:latest
container_name: wireguard
network_mode: host
cap_add:
- NET_ADMIN
- SYS_MODULE #optional
environment:
- TZ=Europe/Paris
volumes:
- /srv/docker/wireguard/config:/config
- /lib/modules:/lib/modules #optional
restart: unless-stopped
```
Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.
Lancez le conteneur :
```bash [Terminal]
cd /srv/docker/wireguard
sudo docker compose up -d
```
::note
A répéter pour chaque client
::
## Autres appareils
- **Téléphone :** installer wireguard et scanner le QR code via le webui (http://ipduserveur:51821)
- **PC :** Installer wireguard client et mettre directement le fichier de conf téléchargé via le webui
::warning
__Attention :__ Si des machines clientes sont sur le meme réseau local que le serveur (derriere la box), éditez le fichier `wg0.conf` uploadé sur cette machine en changeant avec l'adresse locale du serveur : `Endpoint = ipduserveur:51820`{lang=properties}
::
Et voilà ce que cela peut donner !
![picture](/img/serveex/wireguard.svg)
@@ -0,0 +1,248 @@
---
title: File Browser
description: Installer File Browser pour parcourir et gérer les fichiers de votre serveur depuis une interface web, exposée en toute sécurité avec SWAG.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
::warning{to="/serveex/files/file-browser-quantum"}
Remplacé par **File Browser Quantum**. Le projet d'origine a un historique de CVE sérieuses (une RCE par CSRF menant à un compte admin dérobé, du XSS stocké, du path traversal, du contournement d'authentification...) et a été officiellement archivé en septembre 2026, les mainteneurs laissant définitivement non corrigés des problèmes connus de gestion de session et d'exécution de commandes. Ne déployez pas cette version, surtout pas exposée sur internet.
::
[File Browser](https://github.com/filebrowser/filebrowser) est une interface web qui permet d'accéder aux fichiers de votre serveur et de les modifier.
![File Browser](/img/serveex/filebrowser.png)
## Installation
::steps{level="3"}
### Déployer la stack
Ouvrez Dockge, cliquez sur `compose`, nommez la stack `filebrowser`, puis copiez-collez ce qui suit :
```yaml [compose.yaml]
---
services:
filebrowser:
container_name: filebrowser
volumes:
- /srv/docker/filebrowser/config:/config/
- /chemin/vers/vos/dossiers:/vosdossiers #ajoutez les dossiers à parcourir, comme /srv/docker:/srv/docker par exemple
ports:
- 8010:80
image: filebrowser/filebrowser:s6
```
::tip{icon=""}
✨ __Astuce :__ ajoutez le label watchtower à chaque conteneur pour automatiser les mises à jour.
```yaml [compose.yaml]
services:
filebrowser:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
```
::
Déployez le conteneur et allez sur `http://ipdevotreserveur:8010`. Et voilà ! Votre interface web File Browser est en route !
### Terminé !
::
::caution
__Si ça ne marche pas :__ vérifiez les règles de votre pare-feu.
::
## Exposer File Browser avec Swag
::warning
File Browser ne gère pas l'authentification multifacteur. L'exposer publiquement pourrait mettre vos systèmes en danger. Ne le faites que si vous utilisez une solution d'authentification robuste comme [TinyAuth](/serveex/security/tinyauth) ou [Authentik](/serveex/advanced/authentik/). Sinon, ne l'exposez pas avec SWAG. Utilisez plutôt un VPN comme [Wireguard](/serveex/core/wireguard).
::
Vous voudrez peut-être accéder à File Browser à distance depuis tous vos appareils. Pour cela, nous allons l'exposer à travers Swag.
::note
__Au préalable :__ nous partons du principe que vous avez déjà créé un sous-domaine du type `files.mondomaine.fr` dans votre [zone DNS](/general/networking/dns), pointant vers `mondomaine.fr` avec un `CNAME`. À moins d'utiliser Cloudflare Zero Trust, nous partons aussi du principe que vous avez déjà redirigé le port `443` de votre box vers le port `443` de votre serveur avec les [règles NAT](/general/networking/nat).
::
::steps{level="3"}
### Ajouter le réseau de File Browser à SWAG
Dans Dockge, allez sur la stack SWAG et modifiez le fichier compose pour y ajouter le réseau de File Browser :
```yaml [compose.yaml]
---
services:
swag:
container_name: # ...
# ...
networks: # Rattache le conteneur au réseau personnalisé
# ...
- filebrowser # Nom du réseau déclaré dans la stack
networks: # Définit le réseau personnalisé
# ...
filebrowser: # Nom du réseau déclaré dans la stack
name: filebrowser_default # Nom réel du réseau externe
external: true # Précise qu'il s'agit d'un réseau externe
```
::note
Nous partons ici du principe que le nom du réseau de File Browser est `filebrowser_default`. Vous pouvez confirmer que la connexion fonctionne en accédant au tableau de bord de SWAG sur http://ipdevotreserveur:81.
::
Redémarrez la stack en cliquant sur « deploy » et attendez que SWAG soit complètement initialisé.
### Créer le fichier subdomain.conf
Dans les dossiers de Swag, créez le fichier `files.subdomain.conf`.
```bash [Terminal]
sudo nano /srv/docker/swag/config/nginx/proxy-confs/files.subdomain.conf
```
Et collez la configuration suivante :
```nginx [files.subdomain.conf]
## Version 2023/12/19
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name files.*;
include /config/nginx/ssl.conf;
client_max_body_size 0;
#if ($lan-ip = yes) { set $geo-whitelist yes; }
#if ($geo-whitelist = no) { return 404; }
if ($geo-blacklist = no) { return 404; }
# enable for ldap auth (requires ldap-location.conf in the location block)
#include /config/nginx/ldap-server.conf;
# enable for Authelia (requires authelia-location.conf in the location block)
#include /config/nginx/authelia-server.conf;
# enable for Authentik (requires authentik-location.conf in the location block)
#include /config/nginx/authentik-server.conf;
location / {
# enable the next two lines for http auth
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
# enable for ldap auth (requires ldap-server.conf in the server block)
#include /config/nginx/ldap-location.conf;
# enable for Authelia (requires authelia-server.conf in the server block)
#include /config/nginx/authelia-location.conf;
# enable for Authentik (requires authentik-server.conf in the server block)
#include /config/nginx/authentik-location.conf;
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app filebrowser;
set $upstream_port 80;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
}
```
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
### Terminé !
::
Et voilà ! File Browser est maintenant exposé !
## Protéger File Browser avec TinyAuth
Ajoutez la vérification forward-auth de [TinyAuth](/serveex/security/tinyauth) directement dans `files.subdomain.conf`, de la même façon que dans [le tutoriel TinyAuth](/serveex/security/tinyauth#protecting-an-app-via-reverse-proxy) :
```nginx [files.subdomain.conf]{26-38,41-42}
## Version 2023/12/19
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name files.*;
include /config/nginx/ssl.conf;
client_max_body_size 0;
#if ($lan-ip = yes) { set $geo-whitelist yes; }
#if ($geo-whitelist = no) { return 404; }
if ($geo-blacklist = no) { return 404; }
# enable for ldap auth (requires ldap-location.conf in the location block)
#include /config/nginx/ldap-server.conf;
# enable for Authelia (requires authelia-location.conf in the location block)
#include /config/nginx/authelia-server.conf;
# enable for Authentik (requires authentik-location.conf in the location block)
#include /config/nginx/authentik-server.conf;
location /tinyauth {
internal;
proxy_pass http://tinyauth:3000/api/auth/nginx;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Uri $request_uri;
}
location @tinyauth_login {
return 302 https://tinyauth.mondomaine.fr/login?redirect_uri=$scheme://$http_host$request_uri;
}
location / {
auth_request /tinyauth;
error_page 401 = @tinyauth_login;
# enable the next two lines for http auth
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
# enable for ldap auth (requires ldap-server.conf in the server block)
#include /config/nginx/ldap-location.conf;
# enable for Authelia (requires authelia-server.conf in the server block)
#include /config/nginx/authelia-location.conf;
# enable for Authentik (requires authentik-server.conf in the server block)
#include /config/nginx/authentik-location.conf;
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app filebrowser;
set $upstream_port 80;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
}
```
::note{to="/serveex/security/tinyauth#exposing-tinyauth-with-swag"}
Le bloc `location /tinyauth` s'exécute dans le conteneur de SWAG lui-même, SWAG doit donc être sur le réseau Docker de TinyAuth pour le joindre par son nom (`tinyauth` ici). Cela devrait déjà être en place depuis **l'exposition de TinyAuth**. Si vous rencontrez une erreur, revérifiez que le fichier compose de SWAG a toujours ce réseau rattaché.
::
::tip{icon=""}
✨ __Astuce :__ vous pouvez protéger cette application avec [Authentik](/serveex/advanced/authentik) plutôt que TinyAuth, en ouvrant `files.subdomain.conf` et en décommentant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un provider dans Authentik](/serveex/advanced/authentik#protecting-an-app-via-reverse-proxy).
::