153 lines
6.1 KiB
Markdown
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
|