0 Votes

Code source wiki de ReverseProxy

Version 2.1 par john le 2026/09/19 20:11

Afficher les derniers auteurs
1 Point d'entrée unique du serveur : toutes les requêtes venant d'Internet passent par SWAG, qui les filtre avec CrowdSec et les authentifie avec Authelia avant de les transmettre aux services.
2
3 == Composants ==
4
5 |=Composant|=Rôle
6 |SWAG|Nginx, certificat wildcard Let's Encrypt (validation DNS DuckDNS), mods dashboard et bouncer CrowdSec
7 |CrowdSec|Analyse les journaux de SWAG et de l'hôte, décide des blocages
8 |Authelia|Authentification unique devant les services
9
10 Les trois conteneurs sont sur le réseau Docker externe ##proxy##, partagé avec tous les services publiés.
11
12 == Stack ==
13
14 {{code language="yaml"}}
15 networks:
16 proxy:
17 external: true
18
19 services:
20 crowdsec:
21 image: docker.io/crowdsecurity/crowdsec:latest
22 container_name: crowdsec
23 environment:
24 - TZ=Europe/Paris
25 - GID=1000
26 - CUSTOM_HOSTNAME=<HOSTNAME>
27 - COLLECTIONS=crowdsecurity/nginx crowdsecurity/http-cve crowdsecurity/whitelist-good-actors
28 volumes:
29 - <APPDATA>/crowdsec/config:/etc/crowdsec
30 - <APPDATA>/crowdsec/data:/var/lib/crowdsec/data
31 - <APPDATA>/swag/config/log/nginx:/var/log/swag:ro
32 - <APPDATA>/swag/config/crowdsec/ban.html:/var/lib/crowdsec/lua/templates/ban.html:ro
33 - /var/run/docker.sock:/var/run/docker.sock:ro
34 - /var/log:/var/log/host:ro
35 networks: [proxy]
36 restart: unless-stopped
37 security_opt:
38 - no-new-privileges=true
39
40 swag:
41 image: lscr.io/linuxserver/swag:latest
42 container_name: swag
43 restart: unless-stopped
44 cap_add:
45 - NET_ADMIN
46 ports:
47 - "80:80"
48 - "443:443"
49 - "81:81"
50 environment:
51 - PUID=1000
52 - PGID=1000
53 - TZ=Europe/Paris
54 - URL=<DOMAINE>
55 - SUBDOMAINS=wildcard
56 - VALIDATION=duckdns
57 - DUCKDNSTOKEN=<TOKEN_DUCKDNS>
58 - ONLY_SUBDOMAINS=false
59 - EMAIL=<EMAIL>
60 - DOCKER_MODS=linuxserver/mods:swag-dashboard|ghcr.io/linuxserver/mods:swag-crowdsec
61 - CROWDSEC_LAPI_URL=http://crowdsec:8080
62 - CROWDSEC_API_KEY=<CLE_BOUNCER>
63 - CROWDSEC_SITE_KEY=<TURNSTILE_SITE_KEY>
64 - CROWDSEC_SECRET_KEY=<TURNSTILE_SECRET_KEY>
65 - CROWDSEC_CAPTCHA_PROVIDER=turnstile
66 volumes:
67 - <APPDATA>/swag/config:/config
68 networks: [proxy]
69
70 authelia:
71 image: authelia/authelia
72 container_name: authelia
73 restart: unless-stopped
74 environment:
75 - TZ=Europe/Paris
76 - AUTHELIA_NOTIFIER_SMTP_PASSWORD_FILE=/config/secrets/smtp_password
77 volumes:
78 - <APPDATA>/authelia/config:/config
79 - <APPDATA>/authelia/data:/data
80 - <APPDATA>/authelia/secrets:/config/secrets:rw
81 networks:
82 proxy:
83 aliases: [authelia]
84 {{/code}}
85
86 {{warning}}
87 Le port 81 sert au tableau de bord SWAG. Il ne doit jamais être redirigé sur la box : seuls 80 et 443 sont ouverts vers Internet.
88 {{/warning}}
89
90 == Publier un nouveau service ==
91
92 Le conteneur du service doit être sur le réseau ##proxy##. Ensuite, dans ##<APPDATA>/swag/config/nginx/proxy-confs/## :
93
94 {{code language="bash"}}
95 cp <SERVICE>.subdomain.conf.sample <SERVICE>.subdomain.conf
96 {{/code}}
97
98 Dans le fichier copié :
99
100 * vérifier que ##$upstream_app## correspond au nom du conteneur et ##$upstream_port## à son port interne ;
101 * décommenter les lignes Authelia pour protéger le service.
102
103 Sans sample fourni par SWAG, partir d'un sample existant et l'adapter. Ne pas redéclarer les directives déjà présentes dans ##proxy.conf## (voir [[Dépannage>>Wiki Batcave John.Infrastructure.ServeurPrincipal.Depannage.WebHome]]).
104
105 SWAG recharge nginx automatiquement quand un proxy-conf change.
106
107 == CrowdSec ==
108
109 {{code language="bash"}}
110 docker exec crowdsec cscli metrics # activité et journaux analysés
111 docker exec crowdsec cscli decisions list # IP bloquées
112 docker exec crowdsec cscli decisions delete --ip <IP> # débloquer une IP
113 docker exec crowdsec cscli alerts list # dernières alertes
114 docker exec crowdsec cscli bouncers list # le bouncer SWAG doit apparaître
115 docker exec crowdsec cscli hub update && docker exec crowdsec cscli hub upgrade
116 {{/code}}
117
118 Générer une nouvelle clé pour le bouncer SWAG, à reporter dans ##CROWDSEC_API_KEY## :
119
120 {{code language="bash"}}
121 docker exec crowdsec cscli bouncers add swag-bouncer
122 {{/code}}
123
124 == Authelia ==
125 Voir la page [[Authelia>>Wiki Batcave John.Infrastructure.ServeurPrincipal.Authelia.WebHome]].