[Tuto] Installer SWAG en Docker ( Reverse Proxy )

J'ai réussi à faire quelque test
pas terrible comme résultat
1679580456048.png
 
Voici le code de la page login
1679580794479.png
Message automatiquement fusionné :

Sur un autre container ou je fais tourner NPM, le proxy fonctionne parfaitement.
Mais je souhaite securié le tout avec Fail2ban et Swag serait parfait pour ça.
 
la configuration du proxy conf NPM est tout simple
Mais ne fonctionne pas sur Swag
Perl:
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name app.lesterrasses.store;
    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    location /macarte {

    include /config/nginx/proxy.conf;
    include /config/nginx/resolver.conf;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Scheme $scheme;
    proxy_set_header X-Forwarded-Proto  $scheme;
    proxy_set_header X-Forwarded-For    $remote_addr;
    proxy_set_header X-Real-IP          $remote_addr;
    proxy_pass http://10.1.50.2:80/Carte/;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    proxy_http_version 1.1;
    
    }

 }
 
Je suis pas sur que le proxy arrive a renvoyer vers un dossier de la sorte. Je n'ai jamais essayé.

Si tu redirige uniquement vers la racine cela fonctionne ?
Exemple :
NGINX:
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name 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 / {

        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app 10.1.50.2;
        set $upstream_port 80;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }

}

Ps : Essaye d'utiliser la fonction pour poster des bloc de code, c'est beaucoup plus "jolie" a lire, et permet de ne pas casser la mise en forme
Mes sites web se situent dans des repertoires, donc je vois effectivement la page d'accueil d’apache mais pas mon site, il faudrait pouvoir ajouter après l'ip le répertoire du site "/Carte"

Sur NPM ça fonctionne mais je perd tous les avantages de SWAG :(
 
Bonjour à tous et merci pour ces retours.
Je vais essayer de vous répondre rapidement, malheureusement aujourd’hui ça va être impossible..
Pour rappel c'est un serveur WEBDEV qui tourne à cette adresse donc effectivement les CSS , images etc sont certainement en dur :unsure:
Message automatiquement fusionné :


qu'appel tu redirection vers les "static" ?
même le code du bouton connexion ne fonctionne pas :rolleyes:
Nginx a la possibilité de desservir les fichiers statiques (CSS, images, icônes etc) sans devoir faire appel au code du site.
Par exemple pour python, il n'a pas besoin d'aller faire un appel à l'application, juste besoin de savoir où aller chercher les fichiers statiques (static en anglais).
Ne connaissant pas WordPress, je ne peux guère t'en dire plus désolé.

Mais tu écris plus haut que tu as certainement des adresses codées en dur. Faudra peut être revoir ça pour avoir un chemin relatif.
 
Merci pour ton retour, mais ce n'est pas du WordPress mais du WebDev
Les adresses sont effectivement codées en dur, je présume, sur WebDev mais alors pourquoi sur NPM qui utilise aussi NGINX tout fonctionne à merveille.
Je devrais peut etre voir dans la config proxy.conf ? j'avoue que je ne sais plus trop quoi faire :unsure:
 
Bonsoir,
@EVOTk : quelles sont les images dans la configuration de Gotify ? Car les liens ne sont plus fonctionnels...
1679864299550.png
 
Les voici en pièce jointe, j'updaterai le tuto 😉
 

Pièces jointes

  • true.png
    true.png
    15.7 KB · Affichages: 1
  • warn.png
    warn.png
    9.8 KB · Affichages: 1
  • false.png
    false.png
    22 KB · Affichages: 1
  • J'aime
Réactions: MilesTEG
Les notifications de Fail2ban n'arrivent pas sur Gotify :cry:
 
Après pas mal de temps à essayer divers trucs, j'ai enfin trouvé ce qui clochait !
Ne pas mettre de / final à la variable : GOTIFY_URL=https://gotify.url
et mettre ${URL} à la place de '$URL" ici :
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"

Et supprimer les balises BBCODE qui se sont incrustées dans le code XD

Voilà mon Fail2Gotify.sh :
Bash:
#!/bin/bash

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

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

URL=${GOTIFY_URL}/message?token=${GOTIFY_TOKEN}

if [ "$1" == "start" ]; then
    GOTIFY_PRIORITY=${GOTIFY_PRIORITY_SUCCESS}
    MESSAGE="Démarrage de la prison $2 ✅"
fi

if [ "$1" == "stopped" ]; then
    GOTIFY_PRIORITY=${GOTIFY_PRIORITY_ERROR}
    MESSAGE="Arrêt de la prison $2 🛑"
fi

if [ "$1" == "ban" ]; then
    GOTIFY_PRIORITY=${GOTIFY_PRIORITY_ERROR}
    MESSAGE="Bannissement de l'ip $3 dans la prison $2 🚫"
fi

if [ "$1" == "unban" ]; then
    GOTIFY_PRIORITY=${GOTIFY_PRIORITY_SUCCESS}
    MESSAGE="Débannissement de l'ip $3 dans la prison $2 ❎"
fi

/usr/bin/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


J'ai aussi modifié un peu le gotifyEmbed.local :
Config Apache:
[Definition]
# Notify on Startup
actionstart = bash /data/Fail2Gotify.sh start <name>

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

#
actioncheck =

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

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

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

Et enfin, dans mon jail.local, j'ai juste modifié la commande action, le banaction reste comme je l'avais personnalisé, il ne faut d'ailleurs pas le supprimer :
INI:
action = gotifyEmbed
         %(action_mwl)s


Et voilà le résultat :
1679892833658.png
 
  • J'aime
Réactions: EVO
un support sur SWAG ne concernant pas une installation via ce tutoriel, merci de poster votre question dans Applications.
Tu me vouvoies maintenant @EVOTk ? 😅

Sinon, je suis en train de faire des essais avec le fail2ban intégré à SWAG.

Déjà, première chose j'ai réussi à faire en sorte d'envoyer des emails avec cette version de f2b ! 🥳🎉
1681399469943.png
Ça plus les notifications Gotify :
1681399554495.png


Je suis bien heureux ^^

Je vous ferais un topo sur comment j'ai réussi à faire en sorte que l'envoi d'emails fonctionne en passant par le serveur smtp d'OVH.

Et sur l'essai que je viens de faire avec calibre-web, entrer plus de 3 fois des ID de connexion erroné, j'ai bel et bien été banni, et l'accès à calibre-web n'était plus possible ensuite !
Donc ça fonctionne bien avec le f2b intégré à SWAG. Je ne comprends pas pourquoi ça ne fonctionne plus avec l'image de crazy-max...

Du coup, je vais finaliser l'ajout des jails dans le jail.local (car tous mes essais du jour pour tenter de faire fonctionner les fichiers de jail.d/ ont échoué...

Bref, voilà une bonne étape de faite : refaire fonctionner un fail2ban ! :D

Je ferais un topo plus tard sur tout ça :)
 
  • J'aime
Réactions: Nincha et EVO
Alors, la fatigue aidant à ne plus avoir la motivation de finir le paquet de copies, je vais faire mon petit retour ^^

En préambule, lorsque je parlerais du conteneur Fail2ban, il s'agira de celui créé à partir de l'image de crazy-max (voir lien juste au-dessous). Sinon SWAG fera référence à SWAG, donc le fail2ban intégré sera celui de SWAG.

Alors, pour que l'envoi d'emails de notification par le fail2ban de swag fonctionne, j'ai épluché les fichiers du dépôt de crazy-max à savoir : le dockerfile et le entrypoint.sh.
Je savais qu'il y avait le binaire ssmtp de présent dans son image et absente de celle de SWAG, mais je ne savais pas si c'était juste ce binaire qui faisait que l'envoi d'email via un serveur SMTP comme celui de gmail ou d'OVH fonctionnait.

Bref, en épluchant les deux fichiers mentionnés ci-dessus, j'ai vu que le binaire ssmtp pouvait être installé dans l'image SWAG via un de leurs mods : linuxserver/mods:universal-package-install. (J'en avais déjà une vague idée...).
Il faut donc ajouter ce docker-mod à ceux potentiellement déjà présents dans le docker-compose et la ligne spécifiant quel paquet installer :

Code:
      - DOCKER_MODS=linuxserver/mods:swag-auto-reload|linuxserver/mods:swag-dashboard|linuxserver/mods:swag-maxmind|ghcr.io/gilbn/theme.park:swag|linuxserver/mods:swag-crowdsec|linuxserver/mods:universal-package-install
      - INSTALL_PACKAGES=ssmtp
Pendant mes recherches dans le conteneur Fail2Ban (image crazy-max), j'ai pu trouver le dossier /etc/ssmtp/ et les deux fichiers dedans :

  • [B]ssmtpd.conf[/B] : ce fichier contenait des variables construites à partir des variables d'environnement qu'on a mis à la création du conteneur : j'ai pu voir dans le entrypoint.sh comment était construit ce fichier ssmtpd.conf.
    Je mettrais le contenu du fichier qui fonctionne avec SWAG plus bas.
  • revaliases : ce fichier était "vide", que des lignes commentées.
En effectuant une recherche sur le fichier ssmtpd.conf, je suis tombé sur cet article : https://doc.ubuntu-fr.org/ssmtp.

Il donne des infos sur les variables présentes dans le fichier ssmtpd.conf et j'ai adapté un peu ce qui était présent dans le fichier de mon conteneur Fail2ban.

Pour que le binaire ssmtp fonctionne, il faut lui fournir les fichiers de configuration. Donc, nouvelle ligne dans le fichier docker-compose.yml pour ajouter un point de montage dans la partie volume :

YAML:
volumes:
      - /volume4/docker/swag_macvlan/config:/config
      - /volume4/docker/swag_macvlan/etc-ssmtp:/etc/ssmtp
Maintenant, le contenu des deux fichiers à placer dans /volume4/docker/swag_macvlan/etc-ssmtp.
Alors, chose étrange, ce n'est pas le fichier ssmtpd.conf qu'il faut placer mais un fichier ssmtp.conf, dans le d ! Même contenu cependant.

  • Fichier ssmtp.conf :#
  • Config Apache:
    # /etc/ssmtp.conf -- a config file for sSMTP sendmail.
    #
    # The person who gets all mail for userids < 1000
    # Make this empty to disable rewriting.
    # root=postmaster
    # The place where the mail goes. The actual machine name is required
    # no MX records are consulted. Commonly mailhosts are named mail.domain.com
    # The example will fit if you are in domain.com and you mailhub is so named.
    # mailhub=mail
    # Where will the mail seem to come from?
    #rewriteDomain=localhost
    # The full hostname
    #hostname="localhost"
    
    
    mailhub=ssl0.ovh.net:587
    hostname=Fail2ban-SWAG
    FromLineOverride=YES
    UseTLS=YES
    UseSTARTTLS=YES
    AuthUser=monmail@mon-ndd.ovh
    AuthPass=Mon_Supper_Password-de-la-mort-qui-tue-sans_2FA...
    root=monmail@mon-ndd.ovh
  • Fichier revaliases (je ne suis pas sûr que celui-là serve vraiment... mais je l'ai personnalisé avec l'articule de ubuntu-fr) :# sSMTP aliases
  • Config Apache:
    #
    # Format:    local_account:outgoing_address:mailhub
    #
    # Example: root:your_login@your.domain:mailhub.your.domain[:port]
    # where [:port] is an optional port number that defaults to 25.
    
    root:monmail@mon-ndd.ovh:ssl0.ovh.net:587
    #Other System user: (for Apache)
    #www-data:monmail@mon-ndd.ovh:ssl0.ovh.net:587
Voilà voilà ! Il m'a fallu pas mal de recréation et de redémarrage de SWAG, et de réactivation/désactivation du conteneur Fail2ban
🤣


PS : j'ai aussi personnalisé les mails d'envois en ajoutant une mention SWAG ^^

PPS : et enfin, pour avoir une notification email qui ne contient pas un nom aléatoire de machine, j'ai ajouté ça hostname: DS920Plus--SWAG au docker-compose, et j'ai aussi mis quelques DNS (mais pas sûr que ça soit utile) :

YAML:
---
version: "2.4"
services:
  swag:
    image: lscr.io/linuxserver/swag:latest     # https://github.com/linuxserver/docker-swag
    container_name: swag

    hostname: DS920Plus--SWAG
    
    dns:
      - 192.168.2.203
      - 192.168.2.210
      - 1.1.1.1
      - 9.9.9.9
 
Bonjour,

petite question liée à Swag. J'essaye de creer un fichier à partir des fichiers "_template.subdomain.conf.sample" disponibles dans le dossier "proxy-conf". Jusque là pas de problème. Sauf que lorsqu'on redemmarage le conteneur Swag, il efface ce fichier personnaliser que je viens de créer. auriez-vous une idée pour contourner ce problème ?
 
Bonjour,

petite question liée à Swag. J'essaye de creer un fichier à partir des fichiers "_template.subdomain.conf.sample" disponibles dans le dossier "proxy-conf". Jusque là pas de problème. Sauf que lorsqu'on redemmarage le conteneur Swag, il efface ce fichier personnaliser que je viens de créer. auriez-vous une idée pour contourner ce problème ?
Ton fichier de configuration doit impérativement avoir .conf pour extension. Il te faut enlever le .sample sinon au redémarrage du conteneur, il disparaitra comme tu le constates.
 
Bonjour j'ai une petite question à propos de swag et fail2ban.

J'ai mis en place mon reverse proxy avec différents services derrière comme nextcloud puis mis en place des politiques de banissement et autorisé swag à aller regarder les logs de ces différents services pour détecter toute tentave d'intrusion. Mais le problème est que dans tous les logs des services comme nextcloud c'est l'ip interne à mon serveur utiliser par swag (172.27.0.1) qui apparait à chaque fois. Je ne peut donc pas bannir les ip qui font trop d'erreur de connexion.

Alors j'aimerais savoir comment faire pour que swag transmette bien l'ip externe de chaque personnes et non la sienne.