[Tuto] Installer SWAG en Docker ( Reverse Proxy )

EVO

Administreur
Membre du personnel
25 Novembre 2019
9 278
1 844
293
/var/run/docker.sock
Bonjour,
Voici un petit tuto, pour ceux qui souhaiterai installer SWAG de chez linuxserver en Docker.

vBXJZJt.png

SWAG, c'est quoi ? :giggle:
SWAG - Secure Web Application Gateway (anciennement connu sous le nom deletsencrypt, sans lien avec Let's Encrypt™) configure un serveur Web Nginx et un proxy inverse avec prise en charge de php et un client certbot intégré qui automatise les processus gratuits de génération et de renouvellement de certificat de serveur SSL (Let's Encrypt et ZeroSSL). Il contient également fail2ban pour la prévention des intrusions.

Retrouvez plus d'informations sur SWAG ici : SWAG : reverse proxy, certificat HTTPS, Fail2ban…


Disclamer :
Le but de ce tuto sera de rendre cette installation facile et accessible a tous, bien que loin d’être un expert de docker/docker compose, n’hésiter pas à répondre à ce sujet avec vos interrogations, .. Pour ceux qui sont plus a l'aise avec ce genre d'installation, n'hésiter pas a proposer des améliorations, ou des conseils, ...

Pour un support sur SWAG ne concernant pas une installation via ce tutoriel, merci de poster votre question dans Applications.


Pré-requis :
Avoir Docker et Docker Compose installé sur sa machine.
Ce connecter en SSH à votre Serveur/NAS, si vous ne savez pas le faire, vous trouverez ici un tuto explicatif : [Tuto] Acceder à son NAS en lignes de commande.

A modifier selon votre installation :
Toute mon installation, va ce faire dans un dossier partagé "docker" situé sur "volume1"
Je vais donc installer SWAG dans /volume1/docker/swag
Les PUID/PGID de mon compte utilisateur sont : PUID=9999 PGID=111 **
Le nom de domaine utilisé pour l'exemple sera : [B]tutoevo.fr[/B] chez OVH

** Pour connaitre le PUID/GUID de l'utilisateur : [Tuto] Connaitre le PUID / PGID d'un utilisateur.

Sommaire :
1/ Créer les dossiers nécessaires
2/ Configuration et Création du fichier "docker-compose.yml"
___a/ Méthode DuckDNS
___b/ Méthode OVH
5/ Démarrage du conteneur
6/ Les sous-domaines ( à venir ! )
7/ Activation du HSTS
8/ Fail2ban

a/ Commandes utiles
b/ Mise en place de Fail2ban sur Jellyfin
c/ Mise en place de Fail2ban sur Vaultwarden
d/ Recevoir des notifications sur Gotify
e/ Mise en place de Fail2ban sur Matomo
9/ Mise en place de Crowdsec
10/ Faire une redirection si le conteneur/destination n'est pas disponible
11/ Ajout du blocage géographique sur SWAG



Aller go :)


1/ Créer les dossiers nécessaires
Sur le NAS nous allons devoir créer un dossier swag contenant un dossier config/ ce dernier contiendra tous les fichiers de configuration nécessaire au fonctionnement du conteneur SWAG.

Vous pouvez le créer en SSH avec cette commande : mkdir -p /volume1/docker/swag/config

Ensuite, avec la commande cd /volume1/docker/swag, rendez-vous dans le dossier principal de SWAG que nous venons de créer.

Note : A partir de maintenant, toute les commandes du tutoriel partirions du principe que vous les executer depuis le dossier /SWAG




2/ Configuration et Création du fichier "docker-compose.yml"

___a/ Méthode DuckDNS

______1/ Modification du fichier docker-compose

Sur votre ordinateur, créer un fichier docker-compose.yml, copier dedans le contenu suivant :

Code:
---
version: "2.1"
services:
  swag:
    image: lscr.io/linuxserver/swag
    container_name: swag
    cap_add:
      - NET_ADMIN
    environment:
      - PUID=9999
      - PGID=111
      - TZ=Europe/Paris
      - URL=tutoevo.duckdns.org
      - VALIDATION=duckdns
      - SUBDOMAINS=wildcard
      - DUCKDNSTOKEN=mon-super-token-duckdns
    volumes:
      - ./config:/config
    ports:
      - 443:443
      - 80:80
    restart: unless-stopped

Vous devez modifier[/U] :
- PUID=9999, à modifier avec le PUID de votre utilisateur
- PGID=111, à modifier avec le PUID de votre utilisateur
- URL=tutoevo.duckdns.org, a modifier avec votre nom de domaine duckdns
- DUCKDNSTOKEN, vous devez récuperer votre token sur le site de DuckDNS https://www.duckdns.org

Une fois tous ceci modifié, on enregistre le fichier docker-compose.yml, et on le transfert sur le nas dans notre dossier SWAG.


______2/ Lancement du conteneur avec docker-compose
Toujours en SSH, et depuis notre dossier SWAG :

On lance la création du conteneur :
Code:
docker compose up -d

___b/ Méthode OVH
______1/ Modification du fichier docker-compose
Sur votre ordinateur, télécharger le fichier docker-compose.yml, disponible en fichier joint en bas de ce post.

Vous devez modifier
:
- PUID=9999, à modifier avec le PUID de votre utilisateur
- PGID=111, à modifier avec le PUID de votre utilisateur
- URL=tutoevo.fr, a modifier avec votre nom de domaine
- EMAIL, a modifier avec votre email ( permet de recevoir les notif d'expiration du/des certificats )

Ensuite, à modifier aussi mais cela est plus particulier suivant votre fournisseur du nom de domaine :
- VALIDATION=dns
- DNSPLUGIN=ovh

Pour la VALIDATION, je choisis "dns" car je souhaite une certificat de type "wildcard"
Pour DNSPLUGIN, je choisis, "ovh", car mon fournisseur de mon nom de domaine, est ovh. Voici la liste des fournisseurs possibles : aliyun, cloudflare, cloudxns, cpanel, digitalocean, dnsimple, dnsmadeeasy, domeneshop, gandi, gehirn, google, inwx, linode, luadns, netcup, njalla, nsone, ovh, rfc2136, route53, sakuracloud and transip.

Une fois tous ceci modifié, on enregistre le fichier docker-compose.yml, et on le transfert sur le nas dans notre dossier SWAG.



______2/ Premier lancement du conteneur avec docker-compose

Toujours en SSH, et depuis notre dossier SWAG :

On lance la création du conteneur :
Code:
docker compose up -d

On attend 1 min, puis .... Une fois le conteneur lancé, nous allons le stopper :
Code:
docker stop swag




______3/ Modifications des options DNS

______1Maintenant que le docker à été lancé une fois, le dossier docker/swag/config doit contenir toute une arborescence de fichiers.
Dans le fichier correspondant a notre choix de DNSPLUGIN ( chez moi ovh ), nous allons suivre les étapes nécessaire a la validation.

Nous allons donc dans config/dns-conf pour éditer le fichier ovh.ini :*
*Si vous avez choisi un autre plugin, si votre fournisseur est différent, vous devait éditer et suivre les instructions de fichier correspondant a votre fournisseur !
NgORt8l.png


Ici les instructions sont claires,
wYNMIh7.png

Je doit aller sur la page : https://github.com/certbot/certbot/blob/master/certbot-dns-ovh/certbot_dns_ovh/__init__.py#L20

Et renseigné les valeurs demandées.

Une fois, sur la page indiqué, de nouvelles consignes :
Bw1etU9.png


Je suis chez OVH EU, donc je vais a l'adresse : https://eu.api.ovh.com/createToken/
Et je rempli le formulaire comme préconisé par l'aide de SWAG :
LovEJQC.png


Puis je valide avec Create Keys
La page suivante va me fournir 3 clés :
application_key
application_secret
consumer_key

Il me suffira de remplacer les clés du fichiers ovh.ini par celle fourni par l'API. J'enregistre le fichier, et le ferme.




5/ Démarrage du conteneur
Maintenant que tout est prêt, nous relançons le conteneur :
Code:
docker start swag

Le 1er lancement peut être un peu long, car la modification du dns n'est pas instantanée, et le conteneur attend entre 30 et 60sec afin d'être sur que la modification soit faite, avant de lancer la procédure de validation.

Astuce :
Il est possible de voir les logs du conteneur avec :
Code:
docker logs swag

Une fois fini, votre reverse proxy / serveur web est fonctionnel !
La page par défaut du serveur web est dans /docker/swag/config/www





7/ Activation du HSTS
Votre certificat HTTPS doit être valide avant de faire ceci !!
Pour l'activation du HSTS ( plus d'info ici : https://gist.github.com/quietsy/58590a640dd4f7a89696c68b0e6a8691#hsts ), rien de compliqué !

Editer votre fichier ssl.conf présent dans votre dossier /config/nginx/

et décommenter la ligne suivante :
Code:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

Sauvegarder, quitter et re-démarrer le conteneur !

8/ Fail2ban
fail2ban, inclu dans SWAG permet la prévention des intrusions.

a/ Commandes utiles
Voir les "prisons" actives :
docker exec -it swag fail2ban-client status

Voir les IPs bannies pour une "prison" :
docker exec -it swag fail2ban-client status <NOM_PRISON>

Sortir une IP d'une "prison" :
docker exec -it swag fail2ban-client set <JAIL-NAME> unbanip <ADRESSE_IP>

Bannir une IP dans une "prison" :
docker exec -it swag fail2ban-client set <JAIL-NAME> banip <ADRESSE_IP>

b/ Mise en place de Fail2ban sur Jellyfin

Ce passage ne sert plus a rien depuis la MAJ de SWAG du 9 janvier.

En effet, maintenant, SWAG log directement les erreurs de connexion dans le fichier nginx-unauthorized.conf dont par defaut, la "prison" ban automatiquement au bout de plusieurs echec.
Plus d'info : https://www.forum-nas.fr/threads/tuto-installer-swag-en-docker-reverse-proxy.15057/#post-112642

Pour archive, voici l'ancienne méthode :
Bien sur cela ne marche que si votre Jellyfin utilise le reverse proxy SWAG ;)
Toujours dans le dossier de SWAG :


Editer le fichier config/fail2ban/jail.local :
nano config/fail2ban/jail.local

A la fin du fichier rajouter :
Code:
[jellyfin]
enabled  = true
filter   = jellyfin
port     = http,https
logpath  = /config/log/nginx/access.log
maxretry = 4

Enregistrer, et fermer le fichier.

Créer le fichier config/fail2ban/filter.d/jellyfin.conf :
nano config/fail2ban/filter.d/jellyfin.conf

Dans le fichier, indiquer ceci :
Code:
[Definition]
failregex = ^<HOST> \- \S+ \[\] \"(GET|POST|CONNECT|PUT|DELETE) \/.*? \S+\" 401 .+$

Redémarrer votre conteneur SWAG : docker restart swag et voila c'est en place :) Si une personne fait 4 fois une erreur au moment de la connexion a l'interface web de jellyfin, il sera banni pendant le temps défiini dans votre fichier config/fail2ban/jail.local ( chez moi 600secondes soit 10min ).

c/ Mise en place de Fail2ban sur Vaultwarden
Bien sur cela ne marche que si votre Vaultwarden utilise le reverse proxy SWAG ;)

Rendez vous dans le dossier de configuration de SWAG, chez moi /volume1/docker/swag/config :
cd /volume1/docker/swag/config

Editer le fichier config/fail2ban/jail.local :
nano config/fail2ban/jail.local

A la fin du fichier rajouter :
Code:
[vaultwarden]
enabled  = true
filter   = vaultwarden
port     = http,https
logpath  = /config/log/nginx/access.log
maxretry = 4

Enregistrer, et fermer le fichier.

Créer le fichier config/fail2ban/filter.d/vaultwarden.conf :
nano config/fail2ban/filter.d/vaultwarden.conf

Dans le fichier, indiquer ceci :
Code:
[Definition]
failregex = ^<HOST>.*"(GET|POST|HEAD).*" (400|429) .+ \"https://vault\..+\" .+$
ignoreregex =
datepattern = {^LN-BEG}%%ExY(?P<_sep>[-/.])%%m(?P=_sep)%%d[T ]%%H:%%M:%%S(?:[.,]%%f)?(?:\s*%%z)?
              ^[^\[]*\[({DATE})
              {^LN-BEG}

Note : Cette définition ne fonctionne que si votre proxy a une adresse du type : https://vault..., si l'adresse de debut de votre reverse pour vaultwarden est différente, alors il faut adapter le script matomo.conf ci dessus en conséquence.

Redémarrer votre conteneur SWAG : docker restart swag et voila c'est en place :) Si une personne fait 4 fois une erreur au moment de la connexion a l'interface web de vaultwarden, il sera banni pendant le temps défini dans votre fichier config/fail2ban/jail.local ( chez moi 600secondes soit 10min ).

d/ Recevoir des notifications sur Gotify

Nous allons voir ici comment faire pour être notifié via Gotify. Bien sur, nous partons sur le fait que vous avez déja Gotify d'installé et fonctionnel :) Sinon c'est par ici : [Tuto] Installation de Gotify en Docker un NAS Synology

E3UIwMp.png

Nous allons créer notre fichier gotifyEmbed.conf avec la commande suivante : nano config/fail2ban/action.d/gotifyEmbed.conf

Dedans nous allons copier coller le code suivant :
JSON:
[Definition]
# Notify on Startup
actionstart = bash /config/fail2ban/Fail2Gotify.sh start <name>

# Notify on Shutdown
actionstop = bash /config/fail2ban/Fail2Gotify.sh stopped <name>

#
actioncheck =

# Notify on Banned
actionban = bash /config/fail2ban/Fail2Gotify.sh ban <name> <ip>

# Notify on Unbanned
actionunban = bash /config/fail2ban/Fail2Gotify.sh unban <name> <ip>

[Init]
# Name of the jail in your jail.local file. default = [your-jail-name]
name = default

On enregistre et on quitte l'edition avec Ctrl+X

Ensuite, nous allons créer le script de notification, avec la commande suivante : nano config/fail2ban/Fail2Gotify.sh

Dedans nous allons copier coller le code suivant :
Bash:
#!/bin/bash

## Variables Gotify
GOTIFY_URL=https://gotify.url
GOTIFY_TOKEN=xXxXxXxXxX
GOTIFY_PRIORITY_SUCCESS=2
GOTIFY_PRIORITY_ERROR=7

#Default values
GOTIFY_PRIORITY=${GOTIFY_PRIORITY_ERROR}
MESSAGE="OUPS"
TITLE="Fail2Ban"

if [ "$1" == "start" ]
then
GOTIFY_PRIORITY=${GOTIFY_PRIORITY_SUCCESS}
MESSAGE="Démarrage de la prison $2 ![](https://i.postimg.cc/SsjV5vjC/true50.png)"
fi

if [ "$1" == "stopped" ]
then
GOTIFY_PRIORITY=${GOTIFY_PRIORITY_ERROR}
MESSAGE="Arrêt de la prison $2 ![](https://i.postimg.cc/zBMp1FRM/false50.png)"
fi

if [ "$1" == "ban" ]
then
GOTIFY_PRIORITY=${GOTIFY_PRIORITY_ERROR}
MESSAGE="Bannissement de l'ip $3 dans la prison $2 ![](https://i.postimg.cc/HL6B6gWT/warn50.png)"
fi

if [ "$1" == "unban" ]
then
GOTIFY_PRIORITY=${GOTIFY_PRIORITY_SUCCESS}
MESSAGE="Débannissement de l'ip $3 dans la prison $2 ![](https://i.postimg.cc/SsjV5vjC/true50.png)"
fi

URL=${GOTIFY_URL}/message?token=${GOTIFY_TOKEN}
curl -s -S --data '{"message": "'"${MESSAGE}"'", "title": "'"${TITLE}"'", "priority":'"${GOTIFY_PRIORITY}"', "extras": {"client::display": {"contentType": "text/markdown"}}}' -X POST -H Content-Type:application/json "$URL"

exit 0

Plusieurs choses, a modifier :
, devra être remplacé par l'url de votre serveur Gotify
xXxXxXxXxX, par votre token Gotify

On enregistre et on quitte l'edition avec Ctrl+X

On rend le script executable avec la commande suivante : chmod +x config/fail2ban/Fail2Gotify.sh

Maintenant, il nous reste a faire en sorte que fail2ban active le script de notifications quand il fait une action, pour cela on edit le fichier jail.local avec la commande suivante : nano config/fail2ban/jail.local

Trouver la ligne :
Code:
banaction = iptables-allports

Remplacer la ligne par :
Code:
# Notifications Gotify
action = gotifyEmbed
         iptables-allports

Comme cela :
Hy5MsZY.png


On enregistre et on quitte l'edition avec Ctrl+X

Il ne nous reste maitenant seulement a redémarrer SWAG pour que les modifications soit effectivement, apres le redémarrage vous devez recevoir vos 1ere notifications :
1R2fCGl.png


e/ Mise en place de Fail2ban sur Matomo

Bien sur cela ne marche que si votre Matomo utilise le reverse proxy SWAG ;)

Editer le fichier config/fail2ban/jail.local :
nano config/fail2ban/jail.local

A la fin du fichier rajouter :
Code:
[matomo]
enabled  = true
filter   = matomo
port     = http,https
logpath  = /config/log/nginx/access.log
maxretry = 4

Enregistrer, et fermer le fichier.

Créer le fichier config/fail2ban/filter.d/matomo.conf :
nano config/fail2ban/filter.d/matomo.conf

Dans le fichier, indiquer ceci :
Code:
[Definition]
failregex = ^<HOST> \- \S+ \[\] \"POST \/.*? \S+\" 403 .+ \"https:\/\/matomo.+\" .+$
ignoreregex =
datepattern = {^LN-BEG}%%ExY(?P<_sep>[-/.])%%m(?P=_sep)%%d[T ]%%H:%%M:%%S(?:[.,]%%f)?(?:\s*%%z)?
              ^[^\[]*\[({DATE})
              {^LN-BEG}

Note : Cette définition ne fonctionne que si votre proxy a une adresse du type : https://matomo..., si l'adresse de debut de votre reverse pour matomo est différente, alors il faut adapter le script matomo.conf ci dessus en conséquence.

Redémarrer votre conteneur SWAG : docker restart swag et voila c'est en place :) Si une personne fait 4 fois une erreur au moment de la connexion a l'interface web de matomo, il sera banni pendant le temps défini dans votre fichier config/fail2ban/jail.local ( chez moi 600secondes soit 10min ).





9/ Mise en place de Crowdsec
Pour cette étape, il s'agit d'un sujet a part, voir : [Tuto] Installation et Configuration de CrowdSec avec le reverse proxy SWAG





10/ Faire une redirection si le conteneur/destination n'est pas disponible
Il peut être intéressant de faire une redirection dans le cas ou la destination ne sera pas disponible.
Par exemple, on peut renvoyer le visiteur vers une page de "status" en cas d'erreur.

Pour cela, éditer votre fichier de configuration de votre proxy, et apres la ligne :
Code:
proxy_pass $upstream_proto://$upstream_app:$upstream_port;

Créer une nouvelle ligne, et rajouter :
Code:
error_page 404 500 502 503 504 = @fallback;

Ici, le code est asser simple a comprendre, en cas d'erreur 404, 500, 502, 503 ou 504 alors on execute l'action fallback.

Maintenant, juste avant le derniere } de notre fichier, nous allons rajouter la définition de l'action fallback, donc mon cas :
Code:
    location @fallback {
        rewrite ^/(.*) https://status.ndd.fr/?;
    }

Ici, je souhaite rediriger le visiteur vers une page de status gérée via Uptime Kuma à l'adresse https://status.ndd.fr/

Exemple : voici ce que donne un exemple complet de configuration reverse proxy pour Jellyfin, avec la redirection en cas d'echec :
Code:
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name jellyfin.*;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    location / {

        include /config/nginx/proxy.conf;
        resolver 127.0.0.11 valid=30s;
        set $upstream_app jellyfin;
        set $upstream_port 8096;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;
        error_page 404 500 502 503 504 = @fallback;

    }
 
        location @fallback {
        rewrite ^/(.*) https://status.ndd.fr/?;
    }
}

Note : Dans Uptime Kuma, si vous souhaitez que votre conteneur ne soit pas vu comme en ligne ( a cause de la redirection "fallback" ), vous devez régler l'option "Max Redirect" sur 1. De cette façon, si l'adresse de votre conteneur se retrouve redirigé car non dispo, uptime kuma le verra "hors ligne".


11/ Ajout du blocage géographique sur SWAG

Il est possible d'ajouter a SWAG le blocage géographique. Pour cela, vous devez rajouter cette variable d'environnement au fichier docker-compose.yml :
DOCKER_MODS=linuxserver/mods:swag-dbip

Une fois le conteneur re-créé, editer votre fichier nginx/nginx.conf :
nano config/nginx/nginx.conf

Dans la section http, on rajoute :
include /config/nginx/dbip.conf;

Comme ceci :
d7xWfUc.png


Ensuite on edite le fichier nginx/dbip.conf:
nano config/nginx/dbip.conf

Avec l'aide de cette page Wikipedia : https://en.wikipedia.org/wiki/ISO_3166-2 nous allons pouvoir modifier comme nous le souhaitons les filtres $geo-whitelist et $geo-blacklist

Par exemple :
Code:
map $geoip2_data_country_iso_code $geo-whitelist {
    default no;
    FR yes;
}

map $geoip2_data_country_iso_code $geo-blacklist {
    default yes;
    CN no;
 }

La liste $geo-whitelist n'accepte rien, sauf les pays listé. Ici, seul les IPs française seront acceptées.

La liste $geo-blacklist accepte tout, sauf les pays listé. Ici, seul les IPs chinoise seront interdites.

Pour configurer l'utilisation de la geo-whitelist dans la configuration de votre proxy, il vous suffira de rajouter ces deux lignes :

Code:
     if ($lan-ip = yes) { set $geo-whitelist yes; }
     if ($geo-whitelist = no) { return 404; }

Exemple :
Code:
 server {
     listen 443 ssl;
     listen [::]:443 ssl;

     server_name some-app.*;
     include /config/nginx/ssl.conf;
     client_max_body_size 0;

     if ($lan-ip = yes) { set $geo-whitelist yes; }
     if ($geo-whitelist = no) { return 404; }

     location / {
[...]

Dans notre exemple, si l'ip du visiteur n'est pas française, alors une erreur 404 lui sera retourné.




2022-11-08 - Dans 8/c/ Fail2ban pour Vaultwarden changement du regex
2022-08-14 - Correction Paragraphe HSTS suite a https://www.forum-nas.fr/threads/tuto-installer-swag-en-docker-reverse-proxy.15057/post-119971
2022-06-17 - L'installation et la configuration de Crowdsec sont maintenant un tutoriel a part
2022-05-15 - Ajout de la procédure d'installation de Crowdsec
2022-04-29 - Correction d'une erreur dans Fail2Gotify.sh
2022-03-19 - Ajout de la méthode avec un nom de domaine DuckDNS
2022-03-13 - Ajout du point 8.e/ Mise en place de Fail2ban sur Matomo - Correction du regex de vaultwarden pour être plus sélectif. Ajout d'une erreur dans la mise en place des notifications Gotify qui avait pour résultat de ne pas réellement bannir l'ip. Mise en forme du post.
2022-03-11 - Ajout du point 8.d/ Recevoir des notifications sur Gotify
2022-03-09 - Ajout du blocage géographique sur SWAG
2022-02-14 - Ajout 9/ Faire une redirection si le conteneur/destination n'est pas disponible
2022-02-04 - Suppression de la partie b/ Mise en place de Fail2ban sur Jellyfin suite à la MAJ de SWAG
2022-01-29 - Correction du nom du fichier dans le paragraphe 8.c
2021-09-22 - Mise en forme + Ajout Fail2ban Jellyfin / Vaultwarden
2021-06-05 - Ajout d'une note sur l'activation du HSTS
 

Pièces jointes

  • docker-compose.yml
    docker-compose.yml
    528 bytes · Affichages: 729
  • warn50.png
    warn50.png
    1.4 KB · Affichages: 0
  • true50.png
    true50.png
    1.6 KB · Affichages: 0
  • false50.png
    false50.png
    1.7 KB · Affichages: 0
Dernière édition:
  • J'aime
Réactions: Bambusa29 et Prize
si je peux ajouter ma pierre à l'édifice, swag permet également de créer un nom de domaine wildcard (*.mondomaine.fr) pour cela il faut ajouter quelques manipulations

lors de la création du script API chez OVH j'ai pour ma part utilisé les commandes suivantes :

Code:
GET /domain/zone/
GET /domain/zone/DOMAINE.XX/status
GET /domain/zone/DOMAINE.XX/record
GET /domain/zone/DOMAINE.XX/record/*
POST /domain/zone/DOMAINE.XX/record
POST /domain/zone/DOMAINE.XX/refresh
DELETE /domain/zone/DOMAINE.XX/record/*

j'ai pour ma part restreint l'exécution du script à mon IP publique (disposant d'une IP fixe)

ce qui permet au script de mettre à jour les informations de domaine chez OVH

une fois le script d'API ok chez OVH, il faut se connecter sur son nom de domaine (ici chez OVH toujours) et renseigner un enregistrement DNS de type TXT qui aura comme entrée "_acme-challenge" :

Code:
IN TXT "_acme-challenge"

ça dira a let's encrypt de valider le nom de domaine tel que defini par le standard ACME, ici la validation étant faite par défi DNS-01, c'est ainsi que vous allez prouver que vous contrôlez le nom de domaine DNS pour votre nom de domaine en plaçant cette valeur spécifique dans un enregistrement TXT sous le nom domaine.

lorsque tout est ok et fichier ini configuré comme indiqué dans le tuto, lancer le docker et suivez les logs (j'utilise pour ma part PORTAINER qui refresh tout seul au démarrage mais il est possible de suivre les logs dans le dossier d'install log) si tout va bien vous allez avoir une nouvelle entrée dans votre DNS _acme-challenge.DOMAINE.XX :

Code:
_acme-challenge 60 IN TXT "CLE"

si tout va bien il va vous créer tous les fichiers qui vont bien pour ensuite intégrer le certificat wildcard où vous voulez, même dans le syno. Par défaut les fichiers sont dans /etc/letsencrypt/live mais ce dossier est un lien symbolique vers /etc/letsencrypt/archive/ donc si vous coupez le docker le lien n'existe plus.

vous aurez :
Code:
cert1.pem qui est le certificat
chain1.pem qui est le certificat intermédiaire
privkey1.pem qui est la clé privée
fullchain1.pem qui est le certificat complet

avec ça vous avez tout.

pour intégrer le wildcard dans le syno il suffit d'aller dans le PANNEAU DE CONFIGURATION - SECURITE - CERTIFICAT puis d'IMPORTER un certificat, le syno vous demandera alors les fichiers PRIVKEY, CERT et CHAIN

a noter :

FULLCHAIN n'est pas nécessaire, au contraire si vous importez CERT et FULLCHAIN vous distribuerez 2 fois votre certificat dans la chaine de vérification ce qui peut être une faille (pensez a faire des vérification SSLLABS)

CHAIN n'est pas obligatoire non plus SAUF si vous utilisez le serveur VPN par exemple du synology. en effet vous pouvez importer le certificat avec les fichiers CERT et PRIVKEY mais sans le fichier CHAIN, le serveur VPN synology vous dira qu'il ne peut pas démarrer sans que vous importiez le certificat avant.

une fois le certificat wildcard importé, le container swag vérifiera tous les jours si une mise à jour du certificat est nécessaire (toutes les nuits vers 2h) et si c'est nécessaire il le fera tout seul, il créera alors des fichiers *2.pem puis *3.pem etc etc.

restera alors à importer manuellement les fichiers tous les 3 mois, je ne me suis pas encore penché sur un script qui pourrait le faire automatiquement

en espérant avoir été assez clair, j'espère que l'admin pourra tester et mettre à jour son tuto pour avoir un truc complet oneshot
 
  • J'aime
Réactions: egin et Prize
Merci a toi pour ce retour très intéressant !

Je n'ai pas encore eu le temps d'aller plus loin dans mes investigations SWAG, il faut que je reprenne un peu le tuto ! ( mais j'ai eu a MAJ celui de rutorrent, entre autres ... ) et c'est vrai que celui-ci ne bouge pas beaucoup :D

Sache que si tu clic que "citer" pour mon premier message tu peu récupérer la mise en forme ( il te suffit de supprimer la balise QUOTE ) et tu peu le compléter puis le poster a la suite, je me ferait un plaisir de mettre a jour le post principal, bien évidement en te citant :)
 
Hello utilisateurs de SWAG !
Suite a une faille vulnérabilité dans nginx, il faut mettre a jour le fichier /config/proxy.conf
Si vous n'avez pas fait de modification dans ce fichier, alors il vous suffit de le supprimer et de re-démarrer le conteneur.
Si vous avez des modifications dans ce fichier, alors sauvegarder ce fichier avant de la supprimer de votre serveur, re-démarrer le conteneur pour avoir le nouveau fichier et re-appliquer vos modification a l'intérieur.

La MAJ cest uniquement le rajout d'une ligne : proxy_set_header Proxy "";

Voir la note de SWAG : https://github.com/linuxserver/docker-swag/releases/tag/1.21.0-ls94
Voir l'info de nginx : Mitigating the HTTPoxy Vulnerability with NGINX
 
Bonjour,

J'ai installé SWAG sur un serveur externe avant de le mettre sur mon NAS mais je n'ai pas réussi à activer la prison pour le SSH.
Quelqu'un a essayé ?
Mais il est vrai que le SSH s'exécute sur le serveur directement et non pas sur un réseau bridge en docker.
Merci d'avance.

EDIT : du coup j'ai mis un fail2ban directement sur le serveur pour le SSH.
 
Dernière édition:
Bonjour EVOTk,
Encore un magnifique tutoriel….
Quel est la différence avec nginx proxy manager?
Salut,
Il me semble que SWAG contient beaucoup plus de fournisseur pour la validation du certificats Wildcard via DNS.
SWAG n'a ni interface graphique, ni base de donnée, il est donc plus "léger".
SWAG inclu fail2ban
 
j'ai voulu installer swag en macvlan sur mon nas synology mais je vois pas comment passer dans le reverse proxie webstation ?
 
Hmm j'ai du mal m'exprimer actuellement mon ndd.tld pointe vers webstation (paquet synology) qui héberge mon site internet.
J'aimerais que swag pointe quand je tape mon ndd.tld sur le webstation du synology.
Bref je vois pas ce que je dois écrire dans le fichier nginx de swag
Message automatiquement fusionné :

J'ai arrêté d'utiliser le paquet webstation qui fournit également nginx, j'ai transféré piwigo dans un docker avec une base mariadb en docker également, j'ai réinjecté mon dump sql et quelques fichiers de l'ancien piwigo vers le nouveau. J'ai modifié le fichier
/config/nginx/site-confs/default et commenté les blocs location / pour utiliser un fichier de conf de type subfolder et maintenant cela fonctionne ?
 
Dernière édition:
  • J'aime
Réactions: EVO
Amis utilisateurs de SWAG, pour ceux qui l'aurait installé avant le 11 janvier, il faut mettre a jours vos fichiers :
/config/fail2ban/jail.local et /config/fail2ban/filter.d/nginx-unauthorized.conf

En effet, le 09 janvier, une nouvelle version du fichier jail.local est publié avec comme rajout :
Code:
[nginx-unauthorized]
enabled  = true
port     = http,https
filter   = nginx-unauthorized
logpath  = /config/log/nginx/unauthorized.log

Et le 09 janvier, le fichier nginx-unauthorized.conf suivi d'une modification le 11 janvier, ce fichier doit contenir ceci :
Code:
# A fail2ban filter for unauthorized log messages

[Definition]

failregex = ^(?!.*?(?i)plex)<HOST>.*"(GET|POST|HEAD).*" 401 .*$

ignoreregex =

Deux solutions s'offre a vous :

1/ Vous n'avez aucune personnalisation de ses fichiers, il vous suffit alors de les supprimer, supprimer le conteneur et son image docker, puis de re-créer le conteneur ( qui recupera la dernière version de l'image ) et de démarrer le conteneur pour que les dernières versions des fichiers soit automatiquement récupéré.

2/ Vous avez personnalisé ses fichiers, dans ce cas, vous trouverez ici ( jail.conf et nginx-unauthorized.conf ) les dernieres versions des fichiers, il vous faudra intégrer manuellement les modifications, puis redémarrer votre conteneur.
 
Dernière édition:
Salut EVO,
Cette suppression est valable pour tous les modules utilisant SWAG ou seulement pour Jellyfin ?
Merci :)
Salut,
En fait, c'est valable pour tous les services qui en cas d'erreur d'identification, créer une erreur "401" dans les logs du proxy. Suite a la MAJ de SWAG, ils sont maintenant, isolé dans le logs config/log/nginx/unauthorized.log et traité par fail2ban, via la prison config/fail2ban/filter.d/nginx-unauthorized.conf