Masquer les derniers auteurs
| author | version | line-number | content |
|---|---|---|---|
![]() |
1.1 | 1 | 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. |
| 2 | |||
| 3 | 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. | ||
| 4 | |||
| 5 | Déploiement : dans la stack swag, voir [[Reverse proxy>>Wiki Batcave John.Infrastructure.ServeurPrincipal.ReverseProxy.WebHome]]. | ||
| 6 | |||
| 7 | == Fichiers == | ||
| 8 | |||
| 9 | |=Fichier|=Contenu | ||
| 10 | |##<APPDATA>/authelia/config/configuration.yml##|Configuration principale | ||
| 11 | |##<APPDATA>/authelia/config/users_database.yml##|Comptes utilisateurs | ||
| 12 | |##<APPDATA>/authelia/secrets/##|Secrets lus via les variables ##*_FILE## (mot de passe SMTP…) | ||
| 13 | |##<APPDATA>/authelia/data/db.sqlite3##|Base : sessions, appareils de double authentification, bannissements | ||
| 14 | |||
| 15 | Toute modification demande un ##docker restart authelia##. | ||
| 16 | |||
| 17 | == Configuration en place == | ||
| 18 | |||
| 19 | {{code language="yaml"}} | ||
| 20 | theme: auto | ||
| 21 | server: | ||
| 22 | address: "tcp://0.0.0.0:9091/authelia" | ||
| 23 | log: | ||
| 24 | level: info | ||
| 25 | session: | ||
| 26 | cookies: | ||
| 27 | - domain: <DOMAINE> | ||
| 28 | authelia_url: https://auth.<DOMAINE> | ||
| 29 | default_redirection_url: https://dash.<DOMAINE> | ||
| 30 | name: authelia_session | ||
| 31 | same_site: lax | ||
| 32 | inactivity: 15m | ||
| 33 | expiration: 8h | ||
| 34 | storage: | ||
| 35 | local: | ||
| 36 | path: /data/db.sqlite3 | ||
| 37 | authentication_backend: | ||
| 38 | file: | ||
| 39 | path: /config/users_database.yml | ||
| 40 | watch: false | ||
| 41 | password: | ||
| 42 | algorithm: sha2crypt | ||
| 43 | sha2crypt: | ||
| 44 | variant: sha512 | ||
| 45 | iterations: 50000 | ||
| 46 | salt_length: 16 | ||
| 47 | notifier: | ||
| 48 | smtp: | ||
| 49 | address: "submission://<SERVEUR_SMTP>:587" | ||
| 50 | username: "<COMPTE_SMTP>" | ||
| 51 | sender: "<EXPEDITEUR>" | ||
| 52 | {{/code}} | ||
| 53 | |||
| 54 | * Session : déconnexion après 15 minutes d'inactivité, et au plus tard après 8 heures. | ||
| 55 | * ##watch: false## : les modifications de ##users_database.yml## ne sont prises en compte qu'au redémarrage. | ||
| 56 | * 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. | ||
| 57 | * Le notificateur est indispensable : Authelia envoie par courriel le lien de validation avant l'enregistrement d'un appareil de double authentification. | ||
| 58 | |||
| 59 | == Règles d'accès == | ||
| 60 | |||
| 61 | 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. | ||
| 62 | |||
| 63 | |=Service|=Règle | ||
| 64 | |Portail Authelia (##auth.##)|Accès libre | ||
| 65 | |Dashy (##dash.##)|Accès libre, sauf ##/cors-proxy## : un facteur | ||
| 66 | |Tableau de bord SWAG (##dashboard.##)|Un facteur | ||
| 67 | |SearXNG|Un facteur | ||
| 68 | |Joplin, application web|Deux facteurs | ||
| 69 | |n8n, webhooks et retour OAuth|Accès libre | ||
| 70 | |n8n, interface|Un facteur | ||
| 71 | |networking-toolbox|Un facteur | ||
| 72 | |Jellystat|Un facteur | ||
| 73 | |Sshwifty|Un facteur | ||
| 74 | |Portainer|Un facteur | ||
| 75 | |AdGuard Home|Un facteur | ||
| 76 | |||
| 77 | === Syntaxe d'une règle === | ||
| 78 | |||
| 79 | {{code language="yaml"}} | ||
| 80 | access_control: | ||
| 81 | default_policy: deny | ||
| 82 | rules: | ||
| 83 | - domain: "n8n.<DOMAINE>" # un domaine, une liste, ou un joker "*.<DOMAINE>" | ||
| 84 | resources: # expressions régulières sur le chemin | ||
| 85 | - "^/webhook" | ||
| 86 | policy: bypass | ||
| 87 | - domain: "portainer.<DOMAINE>" | ||
| 88 | subject: # restreindre à des utilisateurs ou groupes | ||
| 89 | - "group:admins" | ||
| 90 | - "user:<UTILISATEUR>" | ||
| 91 | networks: # restreindre à des réseaux d'origine | ||
| 92 | - "192.168.0.0/16" | ||
| 93 | methods: # restreindre à des méthodes HTTP | ||
| 94 | - GET | ||
| 95 | - POST | ||
| 96 | policy: two_factor | ||
| 97 | {{/code}} | ||
| 98 | |||
| 99 | |=Politique|=Effet | ||
| 100 | |##bypass##|Aucune authentification | ||
| 101 | |##one_factor##|Identifiant et mot de passe | ||
| 102 | |##two_factor##|Mot de passe puis second facteur (TOTP, clé de sécurité) | ||
| 103 | |##deny##|Toujours refusé | ||
| 104 | |||
| 105 | Les options ##subject##, ##networks## et ##methods## ne sont pas utilisées ici. | ||
| 106 | |||
| 107 | == Options disponibles, non utilisées ici == | ||
| 108 | |||
| 109 | === Protection contre la force brute (regulation) === | ||
| 110 | |||
| 111 | Absente de la configuration : Authelia applique ses valeurs par défaut. | ||
| 112 | |||
| 113 | {{code language="yaml"}} | ||
| 114 | regulation: | ||
| 115 | modes: | ||
| 116 | - ip # bannir l'adresse IP (mode recommandé) ; "user" bannit le compte | ||
| 117 | max_retries: 3 # 0 désactive la régulation | ||
| 118 | find_time: 2m # fenêtre d'analyse des échecs | ||
| 119 | ban_time: 5m # durée du bannissement | ||
| 120 | {{/code}} | ||
| 121 | |||
| 122 | CrowdSec bloque déjà les adresses abusives en amont, au niveau de SWAG. | ||
| 123 | |||
| 124 | === Double authentification par code (TOTP) === | ||
| 125 | |||
| 126 | {{code language="yaml"}} | ||
| 127 | totp: | ||
| 128 | disable: false | ||
| 129 | issuer: <DOMAINE> # nom affiché dans l'application d'authentification | ||
| 130 | algorithm: sha1 | ||
| 131 | digits: 6 | ||
| 132 | period: 30 | ||
| 133 | skew: 1 | ||
| 134 | {{/code}} | ||
| 135 | |||
| 136 | 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. | ||
| 137 | |||
| 138 | === Clés de sécurité et passkeys (WebAuthn) === | ||
| 139 | |||
| 140 | {{code language="yaml"}} | ||
| 141 | webauthn: | ||
| 142 | disable: false | ||
| 143 | display_name: <NOM_AFFICHE> | ||
| 144 | timeout: 60s | ||
| 145 | user_verification: preferred | ||
| 146 | {{/code}} | ||
| 147 | |||
| 148 | Second facteur par clé matérielle (FIDO2) ou par passkey. | ||
| 149 | |||
| 150 | === Mémoriser la connexion === | ||
| 151 | |||
| 152 | {{code language="yaml"}} | ||
| 153 | session: | ||
| 154 | cookies: | ||
| 155 | - domain: <DOMAINE> | ||
| 156 | remember_me: 1M # case « Se souvenir de moi » ; -1 la désactive | ||
| 157 | {{/code}} | ||
| 158 | |||
| 159 | === Politique de mots de passe === | ||
| 160 | |||
| 161 | {{code language="yaml"}} | ||
| 162 | password_policy: | ||
| 163 | standard: | ||
| 164 | enabled: true | ||
| 165 | min_length: 12 | ||
| 166 | require_uppercase: true | ||
| 167 | require_lowercase: true | ||
| 168 | require_number: true | ||
| 169 | require_special: true | ||
| 170 | {{/code}} | ||
| 171 | |||
| 172 | Variante ##zxcvbn## : évaluation de la robustesse réelle du mot de passe plutôt que des règles de composition. | ||
| 173 | |||
| 174 | === Réinitialisation du mot de passe === | ||
| 175 | |||
| 176 | {{code language="yaml"}} | ||
| 177 | authentication_backend: | ||
| 178 | password_reset: | ||
| 179 | disable: true # retire le lien « Mot de passe oublié » du portail | ||
| 180 | {{/code}} | ||
| 181 | |||
| 182 | === Autres possibilités === | ||
| 183 | |||
| 184 | |=Option|=Usage | ||
| 185 | |##authentication_backend.ldap##|Utilisateurs dans un annuaire LDAP au lieu du fichier | ||
| 186 | |##storage.mysql## / ##storage.postgres##|Base dans MariaDB ou PostgreSQL au lieu de SQLite | ||
| 187 | |##session.redis##|Sessions dans Redis, pour plusieurs instances d'Authelia | ||
| 188 | |##notifier.filesystem##|Messages écrits dans un fichier au lieu d'être envoyés : pratique pour tester sans SMTP | ||
| 189 | |##identity_providers.oidc##|Authelia comme fournisseur OpenID Connect, pour la connexion unique d'applications compatibles (Portainer, Nextcloud…) | ||
| 190 | |||
| 191 | == Utilisateurs == | ||
| 192 | |||
| 193 | Générer l'empreinte d'un mot de passe : | ||
| 194 | |||
| 195 | {{code language="bash"}} | ||
| 196 | docker exec -it authelia authelia crypto hash generate sha2crypt | ||
| 197 | {{/code}} | ||
| 198 | |||
| 199 | ##users_database.yml## : | ||
| 200 | |||
| 201 | {{code language="yaml"}} | ||
| 202 | users: | ||
| 203 | <UTILISATEUR>: | ||
| 204 | displayname: "<NOM>" | ||
| 205 | password: "<EMPREINTE>" | ||
| 206 | email: <EMAIL> | ||
| 207 | groups: | ||
| 208 | - admins | ||
| 209 | {{/code}} | ||
| 210 | |||
| 211 | Puis ##docker restart authelia##. La double authentification s'enregistre depuis le portail, après validation par courriel. | ||
| 212 | |||
| 213 | == Commandes utiles == | ||
| 214 | |||
| 215 | {{code language="bash"}} | ||
| 216 | docker exec authelia authelia validate-config --config /config/configuration.yml # vérifier la configuration | ||
| 217 | docker exec authelia authelia storage user totp delete <UTILISATEUR> --config /config/configuration.yml # forcer un nouvel enregistrement TOTP | ||
| 218 | docker logs authelia --tail 50 | ||
| 219 | {{/code}} | ||
| 220 | |||
| 221 | == Sauvegarde == | ||
| 222 | |||
| 223 | ##<APPDATA>/authelia## (configuration, utilisateurs, secrets, base) est sauvegardé par le script de [[Sauvegarde>>Wiki Batcave John.Infrastructure.Sauvegarde.WebHome]]. |
