Installer Authelia avec Docker
Guide d'installation de Authelia.
Au sommaire :
- 1-Qu'est-ce que Authelia ?
- 2-Prérequis
- 3-Configuration
- 4-Créer un utilisateur
- 5-Créer un middleware
- 6-Déploiement
- 7-SFA et MFA
1-Qu'est-ce que Authelia ?
Authelia est un serveur d'authentification et d'autorisation qui remplit le rôle de gestion des identités et des accès (IAM).
L’intérêt d'utiliser Authelia est qu'il est open-source. Aucun frais de licence à avancer et vous pouvez héberger votre propre instance à domicile.
Ensuite, vous allez pouvoir sécuriser l’accès de vos applications en local et sur l'internet public avec de l'authentification à un facteur (SFA) ou multi-facteurs (MFA).
Authelia est compatible sur l'authentification basé sur le temps (Google Authenticator), les notifications push (Duo) ainsi que les clés U2F (Yubikey).
Encore mieux, Authelia va vous simplifier l'administration des comptes utilisateurs en vous permettant de vous authentifier avec un compte unique via le SSO (Single Sign On ou Authentification Unique) basé sur le système d’authentification décentralisé OpenID.
Enfin, Authelia est compatible avec la majorité des reverse proxy à l'exception Apache et IIS.
Pour les besoins de ce guide, nous allons utiliser Traefik.
2-Prérequis
Il vous faudra une machine virtuelle sous Ubuntu Server 22.04 LTS.
Voici le guide pour ceux qui veulent repartir de zéro.
Si vous voulez gagner du temps, utilisez un template cloud-init.
Ensuite, suivez ce guide pour installer Docker, Docker Compose et préparer vos variables d'environnement.
Enfin, pour exposer l'application sur l'internet public, il vous faudra déployer Traefik.
3-Configuration
Dans "appdata", commencez par créer un dossier que vous nommerez "authelia".
mkdir authelia
Ensuite, créez le fichier "configuration.yml"
touch configuration.yml
Nous allons partir sur une configuration épurée à l'extrême pour pouvoir permettre aux débutants de s'en sortir avec ce guide.
Il faut savoir que nombre de paramètres sont configurés par défaut dans Authelia donc si vous n'apportez aucune modification, il est pas nécessaire de citer lesdites options dans le fichier "configuration.yml".
Voici les codes couleurs que vous trouverez dans la documentation :
- En bleu : le paramètre par défaut.
- En vert : "not required" ou non requis qui signifie qu'il n'est pas obligatoire d'indiquer l'option dans le fichier "configuration.yml" sauf si vous modifiez la valeur par défaut.
- En rouge : "required" ou requis donc obligation d'indiquer les informations nécessaires.
Ouvrez le fichier avec votre éditeur préféré (nano ou vim) puis ajouter les options au fur et à mesure.
Commençons par configurer quelques options dites "diverses".
Indiquez un secret pour pouvoir créer des jetons JWT qui sont utilisés par le processus de vérification de l'identité (obligatoire).
Tapez la commande suivante pour en générer un.
docker run authelia/authelia:latest authelia crypto rand --length 64 --charset alphanumeric
Puis ajoutez-le.
jwt_secret: <votre_secret>
Choisissez un thème d'affichage. Par défaut c'est "light" mais pour ma part, je choisi le thème "dark" pour ne pas fatiguer mes yeux.
theme: dark
Indiquez l'adresse de redirection qui est le nom de domaine que vous avez attribuer à Authelia.
default_redirection_url: https://authelia.<votre_nom_de_domaine>
Passons à la partie "authentication_backend".
Indiquez le nom du fichier "users_database" qui va contenir la liste de vos utilisateurs.
Par défaut, Authelia propose l'algorithme argon2 mais en propose d'autres comme scrypt, pbkdf2, sha2crypt et bcrypt.
authentication_backend:
file:
path: /config/users_database.yml
Passons à la partie "access_control".
La politique par défaut est "deny" (refuser) pour des raisons de sécurité et de performances.
Cela veut dire que c'est à vous de lister les applications que vous souhaitez sécuriser via Authelia puis d'ajouter le label Traefik dans votre fichier compose pour pouvoir effectuer la redirection vers l'authentification.
Pour ce guide, on va se servir d'une simple application de test de bande passante nommé "librespeed" qui ne dispose d''aucune gestion des comptes utilisateurs.
On va testé à la fois
- Le SFA avec comme authentification le compte et le mot de passe que vous allez créer dans le fichier "user_database.yml".
- Le MFA pour mettre la sécurité au maximum via une authentification basé sur le temps avec Google Authenticator.
access_control:
rules:
- domain:
- "librespeed.sussudio.ovh"
policy: two_factor
Passons à la partie "session".
Indiquez le nom de domaine que le cookie est censé protéger et générez un secret avec la commande suivante.
docker run authelia/authelia:latest authelia crypto rand --length 64 --charset alphanumeric
Puis ajoutez le à la ligne correspondante.
session:
secret: <votre_secret>
domain: sussudio.ovh
Passons à la partie "storage" et le choix de la base de données.
Pour ce guide, nous allons utiliser la version "lite" qui propose du SQLite donc pas besoin de conteneur de base de données dédié et c'est largement suffisant pour un usage domestique.
Il vous faudra indiquer le chemin de la base de données et générer une clé de chiffrement avec la même commande suivante.
docker run authelia/authelia:latest authelia crypto rand --length 64 --charset alphanumeric
Ajoutez le à la ligne correspondante.
storage:
encryption_key: <la_clé_de_chiffrement>
local:
path: /config/db.sqlite3
Enfin, finalisons la configuration avec la partie "notification".
On va éviter d'utiliser un serveur SMTP et plutôt utiliser un fichier "notification.txt" (beaucoup plus simple à mettre en place) pour récupérer le lien permettant d'associer notre smartphone à Authelia.
notifier:
filesystem:
filename: /config/notification.txt
Si vous avez bien suivi mes consides, vous devriez obtenir cette configuration.
jwt_secret: nAGPN9TIfWsSWUYU6IALnctwoqMjTeXmXellHhCTD9nvgCbYreKX4d4N4mihOu0o
default_redirection_url: https://authelia.sussudio.ovh
theme: dark
authentication_backend:
file:
path: /config/users_database.yml
access_control:
rules:
- domain:
- "emulatorjs.sussudio.ovh"
policy: two_factor
session:
secret: 3lSGS4x011mwfEhp9u8mJMW8Alvwu5ElklWjcxWD5KTxFcAD7W9rTCsrL3Ca3Yoh
domain: sussudio.ovh
storage:
encryption_key: lGvkBjKuhaY1gwLqd9RUHQ3aDvmvKSlx7VUTZgDWYZ5Z3bG6Az83ERP49qGHLg0P
local:
path: /config/db.sqlite3
notifier:
filesystem:
filename: /config/notification.txt
Comme indiqué plus haut, beaucoup de paramètres sont configurés par défaut donc faisons un rapide détour des options que je n'ai pas citer mais qui peuvent vous servir selon vos besoins.
Je vous en parle pour que vous puissiez en savoir plus sur comment tourne Authelia et pas vous laisser dans l'ignorance.
L'authentification basé sur le temps est activé par défaut contrairement aux notifications push, ça nous sera utile avec l'application Google Authenticator.
Ensuite l'adresse IP et le port d'écoute sont 0.0.0.0:9091.
Pour information, 0.0.0.0 est l'adresse IP dans les environnements conteneurisés.
Les logs sont de base configurés sur "info".
Il y en a d'autres que je n'ai pas vu mais ça fera l'objet d'un guide avancée.
4-Créer un utilisateur
Il va falloir maintenant créer un utilisateur pour pouvoir vous authentifier. Créez le fichier "users_database.yml" et ajouter ce bloc.
users:
<votre_nom>:
displayname: <votre_nom>
password: >votre_mot_de_passe>
email: <votre_adresse_mail>
groups:
- admins
- dev
Il faudra indiquer :
- Le nom de l'utilisateur
- Le nom d'affichage de l'utilisateur
- Un mot de passe
- Une adresse email
Par défaut, le compte appartiendra aux groupes "admins" et "dev"
Pour générer un mot de passe, lancez la commande la commande suivante puis ajoutez le à la ligne "password".
docker run authelia/authelia:latest authelia hash-password <votre_mot_de_passe>
Maintenant que vous avez créé le compte utilisateur, passons à Traefik.
5-Créer un middleware
Il va falloir créer un middleware pour rediriger les utilisateurs vers le portail d'authentification de Authelia.
Pour ceux qui veulent en savoir plus sur les middlewares, voici un excellent article qui vulgarise la chose.
Pour réussir cette étape, suivez bien mon guide de déploiement de Traefik (voir le lien plus haut).
Allez dans le dossier de Traefik (home/<username>/appdata/traefik) et ajoutez ce bloc tel quel dans le fichier "dynamic.yml".
authelia:
forwardAuth:
address: "http://authelia:9091/api/verify?rd=https%3A%2F%2Fauthelia.sussudio.ovh%2F"
Indiquez l'adresse de redirection suivante : http://authelia:9091/api/verify?rd=https%3A%2F%2Fauthelia.<votre_nom_de_domaine>%2F
Puis ajoutez à la suite une chaîne de middleware sauf que là on va uniquement faire appel au middleware "authelia".
Note : l'option "chain" dans Traefik permet d'utiliser plusieurs middleware en même temps et de simplifier la configuration compose en évitant les labels à répétition pour chaque application.
chain-authelia:
chain:
middlewares:
- authelia
À la fin ça devrait ressembler à ça (attention à l'indentation).
```python
http:
middlewares:
authelia:
forwardAuth:
address: "http://authelia:9091/api/verify?rd=https%3A%2F%2Fauthelia.sussudio.ovh%2F"
chain-authelia:
chain:
middlewares:
- authelia
Maintenant, tout est fin prêt, il est temps de déployer tout ça.
6-Déploiement
Commencez par créer un dossier "docker" à la racine du dossier utilisateur"
mkdir -p ~/docker
Créez un fichier nommé "compose.yml"
touch ~/docker/compose.yml
Ouvrez le fichier "compose.yml" et copiez cette configuration.
version: "3.9"
networks:
web:
services:
authelia:
image: authelia/authelia
container_name: authelia
volumes:
- ${APPDATA}/authelia:/config
networks:
- web
labels:
- traefik.enable=true
- traefik.http.routers.authelia.entrypoints=websecure
- traefik.http.routers.authelia.rule=Host(`authelia.<votre_nom_de_domaine>`)
- traefik.http.routers.authelia.tls.certresolver=letsencrypt
ports:
- 9091:9091
restart: unless-stopped
healthcheck:
disable: true
environment:
- TZ=${TZ}
Puis à la suite, ajoutez la configuration du conteneur Librespeed.
librespeed:
image: lscr.io/linuxserver/librespeed:latest
container_name: librespeed
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- ${APPDATA}/librespeed:/config
networks:
- web
restart: unless-stopped
labels:
- traefik.enable=true
- traefik.http.routers.librespeed.entrypoints=websecure
- traefik.http.routers.librespeed.tls.certresolver=letsencrypt
- traefik.http.routers.librespeed.rule=Host(`librespeed.sussudio.ovh`)
- traefik.http.routers.librespeed.service=librespeed-svc
- traefik.http.services.librespeed-svc.loadbalancer.server.port=80
- 'traefik.http.routers.librespeed.middlewares=chain-authelia@file'
Rien d'extraordinaire au niveau de la configuration si vous avez suivi le guide sur Traefik.
Vous verrez que la partie "labels" est similaire à celle de Authelia à un petit détail, j'ai ajouter le middleware de redirection vers le portail d'authentification.
Déployez le fichier compose.
docker compose create && docker compose up -d
7 - SFA et MFA
Si vous avez suivi l'ensemble des guides vu plus haut et celui-ci, l'application devrait récupérer son certificat SSL et vous devriez normalement être redirigé vers le portail d'authentification.
Si vous indiquez "one_factor", le compte utilisateur suffira pour accéder à l'application mais si vous indiquez "two_factors" comme je l'ai indiquer dans le fichier "users_database.yml", vous allez devoir indiquer un code temporaire fourni par votre application Google Authenticator.
Cliquez sur "Enregistrer l'appareil".
L'application indique que vous allez recevoir un mail.
Mais comme on a vu plus haut, on a pas mis en place de serveur SMTP mais un simple fichier "notification.txt".
Donc allez dans le dossier de Authelia et affichez le contenu du fichier avec la commande "cat".
cat notification.txt
Cliquez sur le lien.
Et scannez le QR Code avec votre application Google Authenticator sur votre smartphone.
Actualisez la page puis entrez le code à 6 chiffres qui se renouvelle toutes les 30 secondes par défaut.
Et si tout se passe bien, vous accéderez à votre application.
Félicitation!!!! Vous allez pouvoir utiliser du SFA et du MFA sans avoir besoin de serveur SMTP ou de base de données compliqué à administrer.
Auhelia est idéal pour sécuriser l'accès de vos applications sur l'internet public mais aussi en local.
Ce guide est volontairement simplifié à l'extrême pour que vous puissiez avoir une instance fonctionnelle et prête à l'emploi.
Pour ma part; je vais éplucher la documentation comme il doit pour vous fournir de prochains tutoriels à ce sujet.
Sources
Au départ, je me suis basé sur le guide de SmartHomeBeginner (un excellent site que je vous conseille vivement) qui m'avait permis de découvrir et mettre en place Traefik v1 en 2020.
Beaucoup de bonnes informations mais la configuration était loin de me satisfaire, il fallait que je la personnalise davantage.
Je suis ensuite voir du côté de Youtube dont les meilleures vidéos sur Authelia sont signés TechnoTim et IbraCorp mais idem, à part avoir appris 2-3 astuces, je n'était toujours pas satisfait de ma configuration.
Du coup, je me suis plonger dans la documentation fournis par le site web et cela m'a permis de vous proposer ce guide.