Installation swag avec Docker

Introduction

Swag (Secure Web Application Gateway) est un serveur Web HTTPS qui fait office de Reverse Proxy. Il contient aussi un service anti intrusion (fail2ban) configurable.

Swag permet un accès sécurisé à vos services hébergés sur OMV depuis l’extérieur. Il fait office de passerelle unique HTTTPS pour tous les accès sur votre réseau depuis l’extérieur. L’aiguillage s’effectue en interne avec une redirection de port vers le service demandé. Cette redirection de port s’effectue avec un nom de domaine en lui rajoutant soit un sous domaine, soit un répertoire à la fin de l’URL.

Pour cette installation j’utilise l’image officielle qui est présente ici : https://github.com/linuxserver/docker-swag

Remarque : J’ai créé au préalable un utilisateur omdocker (voir l’article création d ‘un utilisateur Docker pour le détail). J’ai créé aussi un répertoire qui contiendra tous mes installations docker. dans ce blog, j’utiliserais pour exemple le chemin /volume/docker.

Remarque : Le prérequis pour utiliser Swag est d’avoir un nom de domaine. Dans cet article j’utilise le service gratuit de DuckDNS. Vous pouvez consulter l’article sur l’installation de DuckDNS en Docker pour l’utiliser. Swag est compatible avec de nombreux services de DNS dynamique. Consulter la documentation pour avoir la liste complète.

Nous allons créer aussi le répertoire swag en ligne de commande sur le NAS (connexion en SSH) dans notre répertoire docker : /volume/docker. Cette étape est facultative, le containeur créera le répertoire automatiquement lors du déploiement si celui ci n’existe pas.

$ cd /volume/docker
$ mkdir swag

Le fichier de configuration

Si vous souhaitez sécuriser le lancement de ‘swag‘, je vous engage à parcourir l’article securiser docker

Il est importent de bien respecter l’indentation des fichiers de configurations : pas de tabulation. Attention aussi à la version du fichier, il y a des légères évolutions de syntaxe d’une version à l’autre.

Le fichier yml en détails. Il faut remplacer pour votre configuration :

  • port 8881 : numéro de port pour accéder à l’interface avec votre navigateur.
  • PUID et PGID : celui de votre utilisateur Docker (omdocker pour ce blog),
  • TZ : Votre zone de temps,
  • VALIDATION : Votre service de DNS dynamique,
  • DUCKDNSTOKEN : Spécifique à une validation avec le service Duck DNS,
  • URL : Votre domaine.
  • ports : J’ai laissé le port externe par défaut 443 et définis un port interne 10443. Le port 81 est optionnel
  • DOCKER_MODS : Cette ligne est optionnelle et correspond permet de rajouter deux modules. Voir les modules optionnels à la fin de l’article.

Remarque : La section ‘labels‘ a été défini pour indiquer que les mises à jour d’images sont surveillées et notifiées par le containeur Watchtower.

version: "2.1"
services:
  swag:
    image: linuxserver/swag
    container_name: swag
    cap_add:
      - NET_ADMIN
    environment:
      - PUID=1003
      - PGID=100
      - TZ=Europe/Paris
      - URL=subdomain.duckdns.org
      - SUBDOMAINS=wildcard
      - VALIDATION=duckdns
      - DUCKDNSTOKEN=votreToken
      - EMAIL=email
      - DOCKER_MODS=linuxserver/mods:swag-dashboard|linuxserver/mods:swag-dbip # optionnel
    volumes:
      - /srv/disk1/docker/swag:/config
    labels:
      - com.centurylinklabs.watchtower.monitor-only=true
    ports:
      - 10443:443 # nginx
      - 10081:81 # dashboard
    restart: unless-stopped 

Vous copiez le contenu de ce fichier dans votre interface de gestion Portainer en allant dans ‘Stacks‘ et ‘Add stack‘.

Pile swag
La pile ‘swag

Donnez un nom à votre pile, par exemple ‘duckdns‘, puis déployer cotre containeur en cliquant en bas sur « Deploy the stack‘.

Après une phase de téléchargement de l’image, puis d’installation de l’application, vous devriez arriver sur cet écran si tout s’est bien passé :

Containeur swag
Le containeur ‘swag‘ est installé et est en fonctionnement.

Redirection du port 443 sur votre Box

Dans le fichier de configuration de swag, nous lui avons indiqués utilisés un port interne ‘10443‘ et un port externe ‘443‘. Nous devons donc autoriser les connections entrantes sur le port 443 sur la box Internet et la rediriger vers le port 10443 sur OMV.

Voici un exemple de configuration de redirection, pour une Livebox Orange :

Règle de redirection
Ajout d’une règle de redirection pour ‘swag

Modules optionnels de swag

Il est possible de rajouter des fonctionnalités à swag grâce à des modules docker. Il en existe de plusieurs sortes mais je vais présenter ici les deux qui me semble les plus intéressants.

Tableau de bord de swag

L’image officielle de ce module est décrit ici : https://github.com/linuxserver/docker-mods/tree/swag-dashboard

Ce module ajoute un tableau de bord graphique qui analyse tous les logs et containeurs utilisant le service swag. Nous pouvons nous connecter à cette interface localement avec l’adresse IP du NAS et le port spécifié dans le fichier de configuration (81 par défaut, 10081 ici) : http://votreip:10081

Tableau de bord swag
Tableau de bord de ‘swag

Blocage géographique par pays

L’image officielle de ce module est décrit ici : https://github.com/linuxserver/docker-mods/tree/swag-dbip

Remarque : si vous rajouter le module après coup dans la configuration de la pile, pensez à relancer le containeur swag pour qu’il déploie tous les fichiers nécessaires.

Ce module permet de rajouter un blocage géographique pour les containeurs utilisant le service swag. Une fois le blocage activé et configuré dans swag, il faudra encore dans chaque fichier de configuration ‘nginx’ des containeurs rajouter deux lignes de codes.

Nous allons déjà activé et configuré le blocage dans swag. dans un 1er temps, il faut ouvrir le fichier ‘nginx.conf‘ qui se trouve dans le répertoire /volume/docker/swag/nginx/.

$ sudo nano /volume/docker/swag/nginx/nginx.conf

Nous allons lui spécifier d’inclure le fichier de configuration de blocage géographique. Pour cela, nous rajoutons la ligne de code suivante juste après l’ancre ‘http’ situé à la ligne 24.

include /config/nginx/dbip.conf;

fichier nginx.conf
Fichier de configuration ‘nginx.conf

Nous sauvegardons CTRL+O et nous quittons CTRL+X.

Nous allons maintenant configuré ce fichier de blocage géographique ‘dbip.conf‘ qui se trouve dans le même répertoire /volume/docker/swag/nginx/

$ sudo nano /volume/docker/swag/nginx/dbip.conf

Fichier blocage géographique
Fichier de blocage géographique ‘dbip.conf

Je bloque tout par défaut dans la ‘whitelist’ et j’autorise que les connexions venant de France et de Belgique.

Il nous reste maintenant dans les fichiers de configurations ‘nginx’ des containeurs de lui indiquer que nous souhaitons utiliser le blocage géographique. Cela ce fait en rajoutant manuellement ces deux lignes de code juste avant la section ‘location / {‘ vers la ligne 22 :

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

Par exemple avec le fichier de configuration ‘bitwarden.subdomain.conf‘ du containeur ‘bitwarden’.

Configuration fichier nginx containeur
Fichier de configuration nginx du conteneur ‘bitwarden

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *