6.1 KiB
title: SWAG created: 2026-06-06 updated: 2026-06-06 type: app tags: [catalogue, reverse-proxy, nginx, lets-encrypt, linuxserver, auto-hebergement] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Reverse+Proxy, https://docs.linuxserver.io/general/swag/]
🛡️ SWAG (Secure Web Application Gateway)
Image Docker de LinuxServer.io bundlant Nginx + Certbot + Fail2ban + scripts d'auto-hébergement. Réputation : référence absolue pour l'auto-hébergement Nginx depuis une décennie.
📋 Informations Générales
| Champ | Valeur |
|---|---|
| Site web | docs.linuxserver.io/general/swag |
| GitHub | linuxserver/docker-swag |
| License | GPL-3.0 |
| Langage | Shell, Nginx config |
| Étoiles GitHub | 3.6k ⭐ |
| Dernière MAJ | 2026-05 |
| Catégorie | cat-reverse-proxy, Web Server, Sécurité |
📝 Description
SWAG (Secure Web Application Gateway) est une image Docker maintenue par LinuxServer.io qui package Nginx, Certbot (client Let's Encrypt), Fail2ban et de nombreux scripts utilitaires dans un seul conteneur clé-en-main. C'est l'une des images les plus utilisées de l'écosystème self-hosted.
L'objectif est simple : fournir un reverse proxy Nginx prêt à l'emploi avec HTTPS automatique, sans avoir à construire soi-même l'image, gérer le renouvellement des certificats ou configurer Fail2ban. SWAG supporte nativement les DNS challenge pour obtenir des certs wildcard via une dizaine de providers (Cloudflare, Porkbun, Hetzner, OVH, etc.), ce qui le rend utilisable même derrière un NAT ou sans ports ouverts.
Public cible : utilisateurs qui veulent la robustesse de Nginx sans la complexité de configuration. Particulièrement adapté aux setups non-Docker (VMs, bare-metal) ou aux stacks mixtes. Concurrent direct de Nginx Proxy Manager (NPM) et Caddy, SWAG s'en distingue par sa flexibilité brute (on édite le nginx.conf directement) et par son intégration native Fail2ban.
🚀 Installation
Option 1 : Docker Compose (recommandé)
# docker-compose.yml
version: '3.8'
services:
swag:
image: lscr.io/linuxserver/swag:latest
container_name: swag
restart: unless-stopped
cap_add:
- NET_ADMIN
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Paris
- URL=example.com
- SUBDOMAINS=www,api,app
- VALIDATION=http
- DNSPLUGIN=cloudflare
- EMAIL=admin@example.com
- ONLY_SUBDOMAINS=true
ports:
- 443:443
- 80:80
volumes:
- ./config:/config
networks:
- proxy
networks:
proxy:
external: true
💡 Le volume
./configcontient les certificats, les vhosts Nginx et la config Fail2ban — sauvegardez-le impérativement.
Option 2 : Variante Traefik (déconseillée)
SWAG peut coexister avec Traefik si on le cantonne à un rôle spécifique (ex : reverse proxy pour des services non-Docker), mais c'est un anti-pattern. Préférez SWAG seul ou Traefik seul dans la même stack.
⚙️ Configuration Initiale
- Créer le dossier
./configlocal - Renseigner
URL,SUBDOMAINSetVALIDATION(http ou dns) - DNS plugin : créer un token API chez le registrar (Cloudflare par ex.) et le coller dans
./config/dns-conf/cloudflare.ini - Lancer :
docker compose up -d - Activer les vhosts : décommenter les fichiers
proxy-confs/*.confou créer ses propres vhosts dans./config/nginx/proxy-confs/ - Fail2ban : activer les jails souhaitées dans
./config/fail2ban/jail.local
# Exemple vhost custom pour un service
cat > ./config/nginx/proxy-confs/app1.subdomain.conf <<EOF
server {
listen 443 ssl;
server_name app1.*;
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set \$upstream_app app1;
proxy_pass http://\$upstream_app:8080;
}
EOF
🔀 Alternatives
Open Source
- app-nginx-proxy-manager — GUI web pour Nginx (moins flexible mais plus accessible)
- app-caddy — HTTPS automatique, config minimaliste
- app-traefik — Auto-discovery Docker, idéal pour stacks conteneurisées
- app-caddymanager — Web UI pour gérer plusieurs Caddy
Comparaison SWAG vs NPM vs Caddy
| Critère | SWAG | NPM | Caddy |
|---|---|---|---|
| HTTPS auto | ✅ (Certbot) | ✅ (Let's Encrypt) | ✅ (Natif) |
| Interface web | ❌ (fichiers) | ✅ (GUI) | ❌ (fichiers/API) |
| Flexibilité Nginx | ✅ Totale | ⚠️ Moyenne | ❌ (Caddyfile) |
| Fail2ban intégré | ✅ Natif | ❌ | ❌ |
| DNS challenge | ✅ 14+ providers | ⚠️ Limité | ⚠️ Limité |
| RAM consommée | ~30 MB | ~200 MB | ~30 MB |
| Wildcard certs | ✅ | ⚠️ Plugin | ✅ |
Propriétaires (ce que SWAG remplace)
- Cloudflare Tunnel (en partie, pour la partie reverse proxy)
- Let's Encrypt + Nginx manuel
- Cert-manager Kubernetes (en setup simple)
🔒 Sécurité
- ✅ Fail2ban préinstallé avec jails SSH, Nginx auth, Nginx bot
- ✅ Modsecurity WAF optionnel (config OWASP CRS dispo)
- ✅ HTTPS forcé par défaut via HSTS
- ✅ DNS challenge : pas besoin d'exposer le port 80
- ✅ CrowdSec : support communautaire
- ⚠️ Pas d'auth centralisée : à combiner avec app-authentik ou Authelia pour protéger les apps
📚 Ressources
- Documentation officielle LinuxServer
- Liste des reverse-proxy-confs
- Communauté LinuxServer.io
- Wiki selfh.st
🔗 Pages Liées
- cat-reverse-proxy — Catégorie Reverse Proxy
- app-nginx-proxy-manager — Concurrent principal (GUI)
- app-caddy — Alternative moderne
- app-traefik — Concurrent Docker-native
- comparatif-reverse-proxy — Comparaison détaillée
- securisation-home-lab — Sécurité
- tls-https — HTTPS / TLS