Files
wiki/Catalogue-Self-Hosted/apps/app-swag.md
T
2026-06-09 18:40:21 +02:00

153 lines
6.1 KiB
Markdown

---
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](https://docs.linuxserver.io/general/swag/) |
| **GitHub** | [linuxserver/docker-swag](https://github.com/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\|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é)
```yaml
# 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 `./config` contient 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
1. **Créer** le dossier `./config` local
2. **Renseigner** `URL`, `SUBDOMAINS` et `VALIDATION` (http ou dns)
3. **DNS plugin** : créer un token API chez le registrar (Cloudflare par ex.) et le coller dans `./config/dns-conf/cloudflare.ini`
4. **Lancer** : `docker compose up -d`
5. **Activer les vhosts** : décommenter les fichiers `proxy-confs/*.conf` ou créer ses propres vhosts dans `./config/nginx/proxy-confs/`
6. **Fail2ban** : activer les jails souhaitées dans `./config/fail2ban/jail.local`
```bash
# 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](https://docs.linuxserver.io/general/swag/)
- [Liste des reverse-proxy-confs](https://github.com/linuxserver/reverse-proxy-confs)
- [Communauté LinuxServer.io](https://discord.gg/linuxserver)
- [Wiki selfh.st](https://selfh.st/apps/?tag=Reverse+Proxy)
## 🔗 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