---
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
