0 Votes

Authelia

Modifié par john le 2026/09/19 20:10

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

FichierContenu
<APPDATA>/authelia/config/configuration.ymlConfiguration principale
<APPDATA>/authelia/config/users_database.ymlComptes utilisateurs
<APPDATA>/authelia/secrets/Secrets lus via les variables *_FILE (mot de passe SMTP…)
<APPDATA>/authelia/data/db.sqlite3Base : sessions, appareils de double authentification, bannissements

Toute modification demande un docker restart authelia.

Configuration en place

theme: auto
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.

ServiceRègle
Portail Authelia (auth.)Accès libre
Dashy (dash.)Accès libre, sauf /cors-proxy : un facteur
Tableau de bord SWAG (dashboard.)Un facteur
SearXNGUn facteur
Joplin, application webDeux facteurs
n8n, webhooks et retour OAuthAccès libre
n8n, interfaceUn facteur
networking-toolboxUn facteur
JellystatUn facteur
SshwiftyUn facteur
PortainerUn facteur
AdGuard HomeUn facteur

Syntaxe d'une règle

access_control:
 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
PolitiqueEffet
bypassAucune authentification
one_factorIdentifiant et mot de passe
two_factorMot de passe puis second facteur (TOTP, clé de sécurité)
denyToujours 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.

regulation:
 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)

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)

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

session:
 cookies:
    - domain: <DOMAINE>
     remember_me: 1M   # case « Se souvenir de moi » ; -1 la désactive

Politique de mots de passe

password_policy:
 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

authentication_backend:
 password_reset:
   disable: true   # retire le lien « Mot de passe oublié » du portail

Autres possibilités

OptionUsage
authentication_backend.ldapUtilisateurs dans un annuaire LDAP au lieu du fichier
storage.mysql / storage.postgresBase dans MariaDB ou PostgreSQL au lieu de SQLite
session.redisSessions dans Redis, pour plusieurs instances d'Authelia
notifier.filesystemMessages écrits dans un fichier au lieu d'être envoyés : pratique pour tester sans SMTP
identity_providers.oidcAuthelia comme fournisseur OpenID Connect, pour la connexion unique d'applications compatibles (Portainer, Nextcloud…)

Utilisateurs

Générer l'empreinte d'un mot de passe :

docker exec -it authelia authelia crypto hash generate sha2crypt

users_database.yml :

users:
 <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 validate-config --config /config/configuration.yml   # vérifier la configuration
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.