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 : github.com/linuxserver/docker-swag
Remarque : J’ai créé au préalable un utilisateur omdocker (voir l’article création d ‘un utilisateur Docker. J’ai créé aussi un répertoire qui contiendra tous mes installations docker. dans ce blog, j’utiliserais pour exemple le chemin /volume/docker.
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.
mkdir swag
Le fichier de configuration
Si vous souhaitez sécuriser le lancement de ‘swag‘, je vous engage à parcourir l’article sécuriser 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 :
- /volume/docker/ : Le chemin qui contient les installations de tous vos containeurs,
- PUID et PGID : celui de votre utilisateur Docker (omdocker chez moi),
- 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.
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‘.
Donnez un nom à votre pile, par exemple ‘swag‘, 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é :
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 :
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écrite ici :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
Blocage géographique par pays
L’image officielle de ce module est décrite ici : github.com/linuxserver/docker-mods/tree/swag-dbip
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/.
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.
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/
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 ($geo-whitelist = no) { return 404; }
Par exemple avec le fichier de configuration ‘bitwarden.subdomain.conf‘ du containeur ‘bitwarden’ :