0 Votes

Code source wiki de SWAG

Modifié par john le 2026/09/20 00:06

Masquer les derniers auteurs
john 1.1 1 Reverse proxy du serveur : nginx préconfiguré par LinuxServer.io, avec obtention et renouvellement automatiques du certificat Let's Encrypt, fail2ban intégré et un système de mods pour ajouter des fonctions. Toutes les requêtes venant d'Internet passent par lui.
2
3 Stack et intégration avec Authelia et CrowdSec : voir [[Reverse proxy>>Wiki Batcave John.Infrastructure.ServeurPrincipal.ReverseProxy.WebHome]].
4
5 == Certificat ==
6
7 |=Variable|=Valeur|=Rôle
8 |##URL##|##<DOMAINE>##|Domaine principal
9 |##SUBDOMAINS##|##wildcard##|Certificat valable pour tous les sous-domaines (##*.<DOMAINE>##)
10 |##VALIDATION##|##duckdns##|Preuve de propriété du domaine par un enregistrement DNS, via DuckDNS
11 |##DUCKDNSTOKEN##|##<JETON>##|Jeton DuckDNS, le même que celui du conteneur [[DuckDNS>>Wiki Batcave John.Infrastructure.ServeurPrincipal.DuckDNS.WebHome]]
12 |##ONLY_SUBDOMAINS##|##false##|Le domaine nu est aussi couvert
13 |##EMAIL##|##<EMAIL>##|Avertissements de Let's Encrypt
14
15 Le renouvellement est automatique. Vérifier la date d'expiration :
16
17 {{code language="bash"}}
18 echo | openssl s_client -connect 127.0.0.1:443 -servername <DOMAINE> 2>/dev/null | openssl x509 -noout -dates
19 {{/code}}
20
21 Autres possibilités : ##VALIDATION=http## (sans DNS, mais pas de certificat wildcard), ##VALIDATION=dns## avec ##DNSPLUGIN## (Cloudflare, OVH…), ##CERTPROVIDER=zerossl##, ##EXTRA_DOMAINS## pour d'autres domaines, ##STAGING=true## pour tester sans consommer le quota de Let's Encrypt.
22
23 == Mods ==
24
25 Déclarés dans ##DOCKER_MODS##, séparés par ##|## :
26
27 |=Mod|=Rôle
28 |##swag-dashboard##|Tableau de bord sur le port 81 : proxy-confs actifs, statistiques de trafic (GoAccess), état de fail2ban
29 |##swag-crowdsec##|Bouncer CrowdSec (voir [[CrowdSec>>Wiki Batcave John.Infrastructure.ServeurPrincipal.CrowdSec.WebHome]])
30
31 Mods utiles, non installés :
32
33 |=Mod|=Rôle
34 |##swag-auto-reload##|Recharge nginx à chaque modification dans ##/config/nginx##
35 |##swag-auto-proxy## (avec ##universal-docker##)|Crée le proxy d'un conteneur portant le label ##swag=enable## ; labels ##swag_port##, ##swag_url##, ##swag_auth=authelia##, ##swag_auth_bypass=/api##
36 |##swag-maxmind## ou ##swag-dbip##|Géolocalisation des adresses, pour bloquer ou autoriser des pays
37 |##swag-cloudflare-real-ip##|Vraies adresses des visiteurs derrière le proxy Cloudflare
38
39 == Fichiers ==
40
41 Dans ##<APPDATA>/swag/config/nginx/## :
42
43 |=Fichier ou dossier|=Rôle
44 |##nginx.conf##|Configuration générale de nginx
45 |##ssl.conf##|Réglages TLS et en-têtes de sécurité, inclus par chaque proxy-conf
46 |##proxy.conf##|En-têtes transmis au service (IP d'origine, protocole, WebSocket), délais
47 |##resolver.conf##|Résolveur DNS interne de Docker, pour trouver les conteneurs par leur nom
48 |##authelia-server.conf## / ##authelia-location.conf##|Intégration d'Authelia
49 |##authentik-*##, ##ldap-*##, ##tinyauth-*##|Équivalents pour d'autres systèmes d'authentification, non utilisés
50 |##site-confs/default.conf##|Site par défaut, pour les noms non reconnus
51 |##proxy-confs/##|Un fichier par service publié
52 |##real-ip.conf##, ##stream.conf##|Adresse réelle derrière un autre proxy ; proxy TCP/UDP
53
54 Chaque fichier existe aussi en ##.sample## : à chaque mise à jour, SWAG remet les modèles à jour sans toucher aux fichiers actifs. Comparer de temps en temps les deux versions pour intégrer les évolutions.
55
56 Après toute modification :
57
58 {{code language="bash"}}
59 docker exec swag nginx -t # vérifier la syntaxe
60 docker exec swag nginx -s reload # appliquer
61 {{/code}}
62
63 == Proxy-confs actifs ==
64
65 Un fichier ##<SERVICE>.subdomain.conf## par service. Les préfixes numériques (##10-##, ##20-##…) fixent l'ordre de chargement. Un fichier renommé en ##.disabled## (ou toute extension autre que ##.conf##) est ignoré.
66
67 Services publiés : adguard, castopod-test, changedetection, code, copyparty, dashboard, dashy, dawarich, flus, glances, immich, jellyfin, jellystat, joplin, joplin-app, n8n, networking-toolbox, nextcloud, osint (web-check), passbolt, portainer, searx, ssh (Sshwifty), vikunja, wallabag, wallos, xwiki.
68
69 Exemple commenté de proxy-conf écrit à la main : voir [[Reverse proxy>>Wiki Batcave John.Infrastructure.ServeurPrincipal.ReverseProxy.WebHome]].
70
71 == TLS et en-têtes de sécurité ==
72
73 Dans ##ssl.conf## : TLS 1.2 et 1.3 uniquement.
74
75 Les en-têtes de sécurité proposés par SWAG sont tous commentés, donc inactifs :
76
77 |=En-tête|=Effet
78 |##Strict-Transport-Security##|Impose le HTTPS au navigateur pour les visites suivantes (HSTS)
79 |##Content-Security-Policy##|Passage automatique en HTTPS des ressources ; interdit l'affichage du site dans un cadre d'un autre site
80 |##X-Frame-Options##|Même protection contre l'affichage dans un cadre, ancienne méthode
81 |##X-Content-Type-Options##|Empêche le navigateur de deviner le type des fichiers
82 |##Referrer-Policy##|Ne transmet l'adresse de provenance qu'au même site
83 |##Permissions-Policy##|Désactive certaines fonctions de suivi du navigateur
84 |##Alt-Svc##|Annonce HTTP/3
85
86 Pour les activer, les décommenter dans ##ssl.conf## puis recharger nginx. Précautions : HSTS est mémorisé longtemps par les navigateurs (le site ne pourra plus être servi en HTTP), et les restrictions de cadre peuvent casser un service affiché dans un autre (un tableau de bord qui intègre des pages, par exemple). Tester service par service.
87
88 == fail2ban intégré ==
89
90 SWAG contient son propre fail2ban, qui bannit à partir des journaux de nginx, en complément de CrowdSec.
91
92 |=Prison|=Bannit
93 |##nginx-http-auth##|Les échecs d'authentification HTTP basique
94 |##nginx-badbots##|Les robots malveillants connus
95 |##nginx-botsearch##|Les recherches de pages d'administration ou de fichiers sensibles
96 |##nginx-deny##|Les accès refusés par une règle ##deny##
97 |##nginx-unauthorized##|Les réponses 401 répétées
98 |##nginx-444-copyparty##|Prison personnalisée pour copyparty
99
100 {{code language="bash"}}
101 docker exec swag fail2ban-client status # prisons actives
102 docker exec swag fail2ban-client status <PRISON> # adresses bannies
103 docker exec swag fail2ban-client set <PRISON> unbanip <IP> # débannir
104 {{/code}}
105
106 Configuration : ##<APPDATA>/swag/config/fail2ban/##. ##DISABLE_F2B=true## désactive ce fail2ban.
107
108 == Sauvegarde ==
109
110 ##<APPDATA>/swag## (configuration, proxy-confs, certificats) est sauvegardé par le script de [[Sauvegarde>>Wiki Batcave John.Infrastructure.Sauvegarde.WebHome]].