From 280e9494c60976b1798089fddffed1a661972f16 Mon Sep 17 00:00:00 2001 From: Benjamin Durham <33912370+Bencey@users.noreply.github.com> Date: Tue, 2 Nov 2021 14:48:36 +1300 Subject: [PATCH] Add Authelia (thanks @bencey!) --- manuscript/CHANGELOG.md | 1 + manuscript/ha-docker-swarm/authelia.md | 243 +++++++++++++++++++++++++ manuscript/images/authelia.png | Bin 0 -> 38699 bytes manuscript/images/authelia_login.png | Bin 0 -> 17450 bytes mkdocs.yml | 1 + 5 files changed, 245 insertions(+) create mode 100644 manuscript/ha-docker-swarm/authelia.md create mode 100644 manuscript/images/authelia.png create mode 100644 manuscript/images/authelia_login.png diff --git a/manuscript/CHANGELOG.md b/manuscript/CHANGELOG.md index c3da1b6..b8b53c1 100644 --- a/manuscript/CHANGELOG.md +++ b/manuscript/CHANGELOG.md @@ -8,6 +8,7 @@ hide: Recipe | Description | Date -------------------------|------------------------------------------------------------------------------------------------------------------|-------------- +[Authelia][authelia] | Authentication and two factor authorization server with Authelia | _1 Nov 2021_ [Prowlarr][prowlarr] | An indexer manager/proxy built on the popular arr .net/reactjs base stack to integrate with the [AutoPirate][autopirate] friends | _27 Oct 2021_ [Archivebox][archivebox] | Website Archiving service to save websites to view offline | _19 Oct 2021_ [Readarr][readarr] | [Autopirate][autopirate] component to grab and manage eBooks (*think "Sonarr/Radarr for books*") | _18 Oct 2021_ diff --git a/manuscript/ha-docker-swarm/authelia.md b/manuscript/ha-docker-swarm/authelia.md new file mode 100644 index 0000000..0947d3b --- /dev/null +++ b/manuscript/ha-docker-swarm/authelia.md @@ -0,0 +1,243 @@ +# Authelia + +[Authelia](https://github.com/authelia/authelia) is an open-source authentication and authorization server providing 2-factor authentication and single sign-on (SSO) for your applications via a web portal. It acts as a companion of reverse proxies like Nginx, Traefik, or HAProxy to let them know whether queries should pass through. Unauthenticated users are redirected to Authelia Sign-in portal instead. + +![Authelia Screenshot](../images/authelia.png) + +Features include + +* Multiple two-factor methods such as + * [Physical Security Key](https://www.authelia.com/docs/features/2fa/security-key) (Yubikey) + * OTP using Google Authenticator + * Mobile Notifications +* Lockout users after too many failed login attempts +* Highly Customizable Access Control using rules to match criteria such as subdomain, username, groups the user is in, and Network +* Authelia [Community](https://discord.authelia.com/) Support +* Full list of features can be viewed [here](https://www.authelia.com/docs/features/) + +--8<-- "recipe-tfa-ingredients.md" + +## Preparation + +### Setup data locations + +First, we create a directory to hold the data which authelia will serve: + +```bash +mkdir /var/data/config/authelia +cd /var/data/config/authelia +``` + +### Create config file + +Authelia configurations are defined in `/var/data/config/authelia/configuration.yml`. Some are required and some are optional. So begin by creating an empty configuration.yml file and add content to it as defined below. Optional configuration settings can be viewed on Authelia's [Documentation](https://www.authelia.com/docs/configuration/) + +!!! warning + Your variables may vary significantly from what's illustrated below, and it's best to read up and understand exactly what each option does. + +```yml +############################################################### +# Authelia configuration # +############################################################### + +host: 0.0.0.0 +port: 9091 +log_level: warn + +# This secret can also be set using the env variables AUTHELIA_JWT_SECRET_FILE +# I used this site to generate the secret: https://www.grc.com/passwords.htm +jwt_secret: SECRET_GOES_HERE + +# https://docs.authelia.com/configuration/miscellaneous.html#default-redirection-url +default_redirection_url: https://auth.example.com + +totp: + issuer: authelia.com + period: 30 + skew: 1 + +authentication_backend: + file: + path: /config/users_database.yml + # customize passwords based on https://docs.authelia.com/configuration/authentication/file.html + password: + algorithm: argon2id + iterations: 1 + salt_length: 16 + parallelism: 8 + memory: 1024 # blocks this much of the RAM. Tune this. + +# https://docs.authelia.com/configuration/access-control.html +access_control: + default_policy: one_factor + rules: + - domain: "*.example.com" + policy: one_factor + + - domain: "bitwarden.example.com" + policy: two_factor + +session: + name: authelia_session + # This secret can also be set using the env variables AUTHELIA_SESSION_SECRET_FILE + # Used a different secret, but the same site as jwt_secret above. + secret: SECRET_GOES_HERE + expiration: 3600 # 1 hour + inactivity: 300 # 5 minutes + domain: example.com # Should match whatever your root protected domain is + +regulation: + max_retries: 3 + find_time: 120 + ban_time: 300 + +storage: + local: + path: /config/db.sqlite3 + + +notifier: + smtp: + username: SMTP_USERNAME + # This secret can also be set using the env variables AUTHELIA_NOTIFIER_SMTP_PASSWORD_FILE + # password: # use docker secret file instead AUTHELIA_NOTIFIER_SMTP_PASSWORD_FILE + host: SMTP_HOST + port: 587 #465 + sender: SENDER_EMAIL + +# For testing purpose, notifications can be sent in a file. Be sure map the volume in docker-compose. +# filesystem: +# filename: /tmp/authelia/notification.txt + +``` + +### Create User Accounts + +Create `/var/data/config/authelia/users_database.yml` this will be where we can create user accounts and give them groups + +```yaml +users: + username: + displayname: "Funky Penguin" + password: "HASHED_PASSWORD" + email: myemail@example.com + groups: + - admins + - dev +``` + +To create a hashed password you can run the following command +`docker run authelia/authelia:latest authelia hash-password YOUR_PASSWORD` + +### Setup Docker Swarm + +Create a docker swarm config file in docker-compose syntax (v3), something like this: + +--8<-- "premix-cta.md" + +```yaml +version: "3.2" + +services: + authelia: + image: authelia/authelia + volumes: + - /var/data/config/authelia:/config + networks: + - traefik_public + deploy: + labels: + # traefik common + - traefik.enable=true + - traefik.docker.network=traefik_public + + # traefikv1 + - traefik.frontend.rule=Host:auth.example.com + - traefik.port=80 + - 'traefik.frontend.auth.forward.address=http://authelia:9091/api/verify?rd=https://auth.example.com/' + - 'traefik.frontend.auth.forward.trustForwardHeader=true' + - 'traefik.frontend.auth.forward.authResponseHeaders=Remote-User,Remote-Groups,Remote-Name,Remote-Email' + + # traefikv2 + - "traefik.http.routers.authelia.rule=Host(`auth.example.com`)" + - "traefik.http.routers.authelia.entrypoints=https" + - "traefik.http.services.authelia.loadbalancer.server.port=9091" + - "traefik.http.middlewares.authelia.forwardauth.address=http://authelia:9091/api/verify?rd=https://auth.example.com" + - "traefik.http.middlewares.authelia.forwardauth.trustForwardHeader=true" + - "traefik.http.middlewares.authelia.forwardauth.authResponseHeaders=Remote-User, Remote-Groups" + + # This simply validates that traefik forward authentication is working + whoami: + image: containous/whoami + networks: + - traefik_public + deploy: + labels: + # traefik + - "traefik.enable=true" + - "traefik.docker.network=traefik_public" + + # traefikv1 + - "traefik.frontend.rule=Host:whoami.example.com" + - "traefik.http.services.whoami.loadbalancer.server.port=80" + - "traefik.frontend.auth.forward.address=http://authelia:9091/api/verify?rd=https://auth.example.com" + - "traefik.frontend.auth.forward.authResponseHeaders=X-Forwarded-User" + - "traefik.frontend.auth.forward.trustForwardHeader=true" + + # traefikv2 + - "traefik.http.routers.whoami.rule=Host(`whoami.example.com`)" + - "traefik.http.routers.whoami.entrypoints=https" + - "traefik.http.services.whoami.loadbalancer.server.port=80" + - "traefik.http.routers.service.middlewares=forward-auth@file" + + +networks: + traefik_public: + external: true +``` + +### Traefik Configuration + +Now that we have created authelia we will need to configure traefik so we can run authelia in front of our services. We will first need to create a traefik middleware in `/var/data/config/traefik/middlewares.yml` + +```yaml +http: + middlewares: + forward-auth: + forwardAuth: + address: "http://authelia:9091/api/verify?rd=https://auth.example.com" + trustForwardHeader: true + authResponseHeaders: + - "Remote-User" + - "Remote-Groups" +``` + +We will then need to add the following to `traefik.toml` + +```yaml +[providers.file] + filename = "/etc/traefik/middlewares.yml" +``` + +!!! Why not just use Traefik Forward Auth + The default Traefik forward Auth is a very minimal authentication service that provides google and openID authentication. Authelia provides more features such as multiple methods of authentication (Hardware, OTP, Email) and push notifications. + +Now if we wish to put authelia behind a service all we will need to do is add the following to the labels + +`- "traefik.http.routers.service.middlewares=forward-auth@file"` + +## Serving + +### Launch Authelia! + +Launch the Authelia stack by running ```docker stack deploy authelia -c ``` + +## Testing + +To test the service works successfully. Try to access a service that you had added the middleware label to. If it works successfully you will be presented with a login screen + +![Authelia Screenshot](../images/authelia_login.png) + +[^1]: The inclusion of Authelia was due to the efforts of @bencey in Discord (Thanks Ben!) + +--8<-- "recipe-footer.md" diff --git a/manuscript/images/authelia.png b/manuscript/images/authelia.png new file mode 100644 index 0000000000000000000000000000000000000000..ab573d4d9e832671e4f3ec25273747ce0d6463f9 GIT binary patch literal 38699 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 a`pH@38}Z1c{L}s|;A3Q9ew>1Ky7FI=!XlOc literal 0 HcmV?d00001 diff --git a/manuscript/images/authelia_login.png b/manuscript/images/authelia_login.png new file mode 100644 index 0000000000000000000000000000000000000000..899308a9f71febddb7fb34bd65423d3c11d4dc68 GIT binary patch literal 17450 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 literal 0 HcmV?d00001 diff --git a/mkdocs.yml b/mkdocs.yml index dca879f..40e8ecd 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -51,6 +51,7 @@ nav: - Dex (static): ha-docker-swarm/traefik-forward-auth/dex-static.md - Google: ha-docker-swarm/traefik-forward-auth/google.md - KeyCloak: ha-docker-swarm/traefik-forward-auth/keycloak.md + - Authelia: ha-docker-swarm/authelia.md - Registry: ha-docker-swarm/registry.md - Mail Server: recipes/mail.md - Duplicity: recipes/duplicity.md