Authelia
Portail d'authentification unique placé devant les services web. SWAG lui demande, pour chaque requête, si l'utilisateur est autorisé ; Authelia répond selon ses règles d'accès, et redirige vers son portail de connexion si nécessaire.
Il n'intervient que pour les services dont le proxy-conf SWAG contient les lignes Authelia. Les autres (Nextcloud, Passbolt…) gèrent leur propre authentification.
Déploiement : dans la stack swag, voir Reverse proxy.
Fichiers
| Fichier | Contenu |
|---|---|
| <APPDATA>/authelia/config/configuration.yml | Configuration principale |
| <APPDATA>/authelia/config/users_database.yml | Comptes utilisateurs |
| <APPDATA>/authelia/secrets/ | Secrets lus via les variables *_FILE (mot de passe SMTP…) |
| <APPDATA>/authelia/data/db.sqlite3 | Base : sessions, appareils de double authentification, bannissements |
Toute modification demande un docker restart authelia.
Configuration en place
server:
address: "tcp://0.0.0.0:9091/authelia"
log:
level: info
session:
cookies:
- domain: <DOMAINE>
authelia_url: https://auth.<DOMAINE>
default_redirection_url: https://dash.<DOMAINE>
name: authelia_session
same_site: lax
inactivity: 15m
expiration: 8h
storage:
local:
path: /data/db.sqlite3
authentication_backend:
file:
path: /config/users_database.yml
watch: false
password:
algorithm: sha2crypt
sha2crypt:
variant: sha512
iterations: 50000
salt_length: 16
notifier:
smtp:
address: "submission://<SERVEUR_SMTP>:587"
username: "<COMPTE_SMTP>"
sender: "<EXPEDITEUR>"
- Session : déconnexion après 15 minutes d'inactivité, et au plus tard après 8 heures.
- watch: false : les modifications de users_database.yml ne sont prises en compte qu'au redémarrage.
- Le mot de passe SMTP n'est pas dans ce fichier : il est lu depuis /config/secrets/smtp_password (variable AUTHELIA_NOTIFIER_SMTP_PASSWORD_FILE de la stack). Les autres secrets (session, stockage) sont gérés de la même façon.
- Le notificateur est indispensable : Authelia envoie par courriel le lien de validation avant l'enregistrement d'un appareil de double authentification.
Règles d'accès
Tout ce qui n'est pas listé est refusé (default_policy: deny). Les règles sont lues dans l'ordre : la première qui correspond s'applique, d'où les règles de chemin placées avant la règle générale d'un même domaine.
| Service | Règle |
|---|---|
| Portail Authelia (auth.) | Accès libre |
| Dashy (dash.) | Accès libre, sauf /cors-proxy : un facteur |
| Tableau de bord SWAG (dashboard.) | Un facteur |
| SearXNG | Un facteur |
| Joplin, application web | Deux facteurs |
| n8n, webhooks et retour OAuth | Accès libre |
| n8n, interface | Un facteur |
| networking-toolbox | Un facteur |
| Jellystat | Un facteur |
| Sshwifty | Un facteur |
| Portainer | Un facteur |
| AdGuard Home | Un facteur |
Syntaxe d'une règle
default_policy: deny
rules:
- domain: "n8n.<DOMAINE>" # un domaine, une liste, ou un joker "*.<DOMAINE>"
resources: # expressions régulières sur le chemin
- "^/webhook"
policy: bypass
- domain: "portainer.<DOMAINE>"
subject: # restreindre à des utilisateurs ou groupes
- "group:admins"
- "user:<UTILISATEUR>"
networks: # restreindre à des réseaux d'origine
- "192.168.0.0/16"
methods: # restreindre à des méthodes HTTP
- GET
- POST
policy: two_factor
| Politique | Effet |
|---|---|
| bypass | Aucune authentification |
| one_factor | Identifiant et mot de passe |
| two_factor | Mot de passe puis second facteur (TOTP, clé de sécurité) |
| deny | Toujours refusé |
Les options subject, networks et methods ne sont pas utilisées ici.
Options disponibles, non utilisées ici
Protection contre la force brute (regulation)
Absente de la configuration : Authelia applique ses valeurs par défaut.
modes:
- ip # bannir l'adresse IP (mode recommandé) ; "user" bannit le compte
max_retries: 3 # 0 désactive la régulation
find_time: 2m # fenêtre d'analyse des échecs
ban_time: 5m # durée du bannissement
CrowdSec bloque déjà les adresses abusives en amont, au niveau de SWAG.
Double authentification par code (TOTP)
disable: false
issuer: <DOMAINE> # nom affiché dans l'application d'authentification
algorithm: sha1
digits: 6
period: 30
skew: 1
Sans section totp, l'émetteur affiché est authelia.com. Les réglages en vigueur au moment de l'enregistrement d'un appareil sont conservés pour lui : les modifier ensuite n'impose pas de réenregistrer les appareils. Garder period et skew par défaut, beaucoup d'applications ne gèrent que ces valeurs.
Clés de sécurité et passkeys (WebAuthn)
disable: false
display_name: <NOM_AFFICHE>
timeout: 60s
user_verification: preferred
Second facteur par clé matérielle (FIDO2) ou par passkey.
Mémoriser la connexion
cookies:
- domain: <DOMAINE>
remember_me: 1M # case « Se souvenir de moi » ; -1 la désactive
Politique de mots de passe
standard:
enabled: true
min_length: 12
require_uppercase: true
require_lowercase: true
require_number: true
require_special: true
Variante zxcvbn : évaluation de la robustesse réelle du mot de passe plutôt que des règles de composition.
Réinitialisation du mot de passe
password_reset:
disable: true # retire le lien « Mot de passe oublié » du portail
Autres possibilités
| Option | Usage |
|---|---|
| authentication_backend.ldap | Utilisateurs dans un annuaire LDAP au lieu du fichier |
| storage.mysql / storage.postgres | Base dans MariaDB ou PostgreSQL au lieu de SQLite |
| session.redis | Sessions dans Redis, pour plusieurs instances d'Authelia |
| notifier.filesystem | Messages écrits dans un fichier au lieu d'être envoyés : pratique pour tester sans SMTP |
| identity_providers.oidc | Authelia comme fournisseur OpenID Connect, pour la connexion unique d'applications compatibles (Portainer, Nextcloud…) |
Utilisateurs
Générer l'empreinte d'un mot de passe :
users_database.yml :
<UTILISATEUR>:
displayname: "<NOM>"
password: "<EMPREINTE>"
email: <EMAIL>
groups:
- admins
Puis docker restart authelia. La double authentification s'enregistre depuis le portail, après validation par courriel.
Commandes utiles
docker exec authelia authelia storage user totp delete <UTILISATEUR> --config /config/configuration.yml # forcer un nouvel enregistrement TOTP
docker logs authelia --tail 50
Sauvegarde
<APPDATA>/authelia (configuration, utilisateurs, secrets, base) est sauvegardé par le script de Sauvegarde.