Files
2026-06-09 18:40:21 +02:00

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 ./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
# 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

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

🔗 Pages Liées