🔐 Traefik 2, crĂ©er une authentification web basique

Traefik permet d'ajouter une authentification simple par couple identifiant/mot de passe. Cet article vous montre comment le faire.

🔐 Traefik 2, crĂ©er une authentification web basique

Traefik permet d'ajouter une authentification dite "basique" pour vos services web grĂące Ă  un couple identifiant/mot de passe. En effet, certaines applications n'ont pas de mĂ©canisme d'authentification interne (par exemple Prometheus), l'exposition de ces services web sans authentification peut ĂȘtre critique.

Version Date Commentaires
1 05/2022 Création de l'article
1.1 05/2023 Mise à jour de la syntaxe, ajout du contexte d'exécution, mise à jour des numéros de version, ajout d'un bloc exemple d'utilisation du middleware
1.2 06/2023 Reformulations, mise Ă  jour des chemins
1.3 08/2023 Mise Ă  jour des versions

Objectif : Utiliser l'authentification (HTTP Basic auth) avec Traefik

Environnement : Debian 12, Docker 24.x, docker compose (plugin) 2.20.x, Traefik 2.10.

Contexte d'exécution :

jho@vmi866042:/opt/docker/dc$ tree
.
├── conf
│   ├── acme.json
│   ├── traefik.yml
│   ├── traefikdynamic
│   │   ├── dynamic.yml
├── docker-compose.yml
└── logs
    ├── traefikAccess.log
    ├── traefik.log
RĂ©sultat de la commande "tree" dans le dossier /opt/docker/dc
  • dossier oĂč se trouvent tous les fichiers et dossiers pour cet exemple : /opt/docker/dc
  • emplacement du fichier de configuration principal de Traefik : /opt/docker/dc/conf/traefik.yml
  • dossier oĂč se trouvent les configurations de Traefik (fichiers dynamiques) : /opt/docker/dc/conf/traefikdynamic
  • emplacement du fichier comportant tous les certificats gĂ©nĂ©rĂ©s par let's encrypt (ou autre) : /opt/docker/dc/conf/acme.json
  • dossier oĂč se trouvent les journaux d'Ă©vĂ©nements (logs) : /opt/docker/dc/logs/

J'utiliserai une configuration dite "dynamique" (rappel sur les configurations sur le site).

Pour ajouter une authentification basique, nous allons utiliser un "middleware", une configuration intermédiaire, qui effectue une opération à la volée avant de rediriger vers le service ciblé. Traefik propose plusieurs types de middlewares, dont voici les listes :

traefik middlewares architecture
Schéma récapitulatif de l'utilisation des middleware dans Traefik

Une authentification basique nĂ©cessite un identifiant et un mot de passe. Seul le mot de passe doit ĂȘtre chiffrĂ©, et nous utiliserons l'algorithme BCrypt pour cela. Ajoutons dans un premier temps le middleware, puis configurons le tableau de bord Traefik avec ce middleware, dans le fichier de configuration dynamique (fichier  /opt/docker/dc/conf/traefikdynamic/general.yml) :

http:
  middlewares:
    authentification:
      basicAuth:
        users: # admin / admin
        - admin:$2y$10$KbBxnjLyBfFi355gJKhgJuXzGUaWbSRvNnvB2R9WDKpLFG1NEdcdi
Fichier /srv/docker/dc/conf/traefikdynamic/general.yml

Le chiffrement des mots de passe d'authentification pour Traefik se fait via MD5, SHA1 ou BCrypt. Ici, ce sera du BCrypt, en utilisant le site web "bcrypt.fr" pour générer les hash. L'utilisation de la commande htpasswd est aussi envisageable (en installation le paquet apache2-utils) = htpasswd -nbB admin Le-Motdepa$$e.

Dans cet exemple, l'utilisateur créé (admin) a pour mot de passe "admin". Comme il s'agit d'une configuration dynamique, il n'est pas nécessaire de redémarrer Traefik. Il est important de noter que cette méthode d'authentification est relativement simple et ne remplace pas une suite de mécanismes de sécurité complets.

Vous pouvez réutiliser ce middleware pour toutes les ressources derriÚre Traefik, pour chaque définition de routeur que vous souhaitez protéger. Il vous suffit d'ajouter le nom du middleware dans les définitions de vos routeurs, comme dans l'exemple ci-dessous :

---
http:
  services:
    sc-prometheus:
      loadBalancer:
        servers:
        - url: "http://prometheus:9090"

  routers:
    rt-prometheus:
      entryPoints:
      - websecure
      middlewares:
      - authentification
      service: sc-prometheus
      rule: Host (`prometheus.prive.hommet.local`)

Il est également important de prendre en compte d'autres mesures de sécurité pour renforcer la protection de vos services web. Par exemple, vous pouvez configurer TLS pour sécuriser les communications avec Traefik et les services protégés. De plus, Traefik prend en charge d'autres méthodes d'authentification telles que l'authentification OAuth, JWT et les certificats SSL. Vous pouvez explorer ces options pour renforcer la sécurité de vos applications.

En résumé, en ajoutant une authentification basique à Traefik à l'aide d'un middleware, vous pouvez protéger vos services web qui n'ont pas de mécanisme d'authentification interne. Cependant, il est important de compléter cette mesure par d'autres mesures de sécurité et de choisir des méthodes de chiffrement plus robustes, comme l'algorithme BCrypt.