0. Überblick
- Verwendetes System: Debian 10 64 bit (vServer XXL 2.0)
- Genutzter User: Ich nehme alles als „root“ vor
- Zeitdauer: ca. 10 Minuten
- Schwierigkeit: Einfach. Nur Code kopieren 😉
- Besonderheiten:
- Grundlage ist folgende Anleitung: Traefik Reverseproxy auf vServer installieren. Diese Anleitung muss zuerst ausgeführt werden.
- Die Installation von Docker / Docker Compose wird hier vorausgesetzt.
1. Authelia installieren
1.1 Einleitung
Authelia ist ein open source Authentication Server. Er ermöglicht es verschiedene Dienste (z.B. Webseite) zusätzlich mit einem Passwort / Zwei-Faktor-Authentifizierung abzusichern. Authelia lässt sich mit Traefik kombinieren und kann daher einfach eingesetzt werden.
1.2 Infos zu yml Dateien
Bei yml Dateien ist es sehr wichtig, dass die Zeilen alle richtig eingerückt sind. Die Zeilen MÜSSEN immer mit der Leertaste eingerückt werden. Es dürfen KEINE Tabs enthalten sein. Ihr könnt den nachfolgenden Code immer online „überprüfen“ lassen. Die meisten Fehler entstehen nämlich durch die falsche Formatierung. Ein Dienst zum Überprüfen ist zum Beispiel: https://codebeautify.org/yaml-validator
1.3 Vorbereitung
Diese Anleitung basiert auf dem aktuellen Debian 10 Betriebssystem. Authelia werden wir unter Docker realisieren. Dies ermöglicht uns später sehr schnelle Updates und eine schnelle Installation. Um Authelia neben anderen Diensten auf unserem Server betreiben zu können, nutzen wir hier den Reverse Proxy Traefik. Die Anleitung dazu findest du hier: Traefik auf Reverse Proxy installieren. Diese Anleitung passt auf die obige Traefik Anleitung. Daher lässt sich diese Anleitung nur 1:1 nutzen, wenn man Traefik nach der obigen Anleitung installiert hat.
1.3.1 Verzeichnis erstellen
Wir erstellen uns ein neues Verzeichnis, in welchem wir später alle Daten von Authelia abspeichen. Dazu geben wir folgendes in der Konsole ein:
mkdir -p /opt/containers/authelia/config
Ihr könnt hier auch ein anderes Verzeichnis verwenden. Müsst dann aber die gesamte Anleitung entsprechend anpassen.
1.3.2 docker-compose.yml erstellen
Nun können wir mit der eigentlichen „Installation“ von Authelia beginnen. Dazu öffnet ihr folgende Datei:
nano /opt/containers/authelia/docker-compose.yml
Nun kopiert ihr folgenden Code in die Datei. Dieser Code ist unser Bauplan für unseren Authelia Container.
version: '3.3'
services:
authelia:
image: authelia/authelia
container_name: authelia
volumes:
- ./config:/config
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.authelia.entrypoints=http"
- "traefik.http.routers.authelia.rule=Host(`authelia.euredomain.de`)" # Hier eure URL eingeben #
- "traefik.http.middlewares.authelia-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.authelia.middlewares=authelia-https-redirect"
- "traefik.http.routers.authelia-secure.entrypoints=https"
- "traefik.http.routers.authelia-secure.rule=Host(`authelia.euredomain.de`)" # Hier eure URL eingeben#
- "traefik.http.routers.authelia-secure.tls=true"
- "traefik.http.routers.authelia-secure.tls.certresolver=http"
- "traefik.http.routers.authelia-secure.service=authelia"
- "traefik.http.services.authelia.loadbalancer.server.port=9091"
- "traefik.docker.network=proxy"
- "traefik.http.routers.authelia-secure.middlewares= secHeaders@file, middlewares-authelia@file"
restart: unless-stopped
healthcheck:
disable: true
environment:
- TZ= Europe/Berlin
networks:
proxy:
external: true
Nun müssen wir noch einiges anpassen.
1.3.3 Hostname anpassen
Nun müsst ihr noch den Hostnamen anpassen, über welchen später Authelia erreichbar sein soll. Diese beiden Zeilen müsst ihr anpassen.
- "traefik.http.routers.authelia.rule=Host(`authelia.euredomain.de `)"
- "traefik.http.routers.authelia-secure.rule=Host(`authelia.euredomain.de`)"
In meinem Fall also:
- "traefik.http.routers.authelia.rule=Host(`authelia.testbereich.net`)"
- "traefik.http.routers.authelia-secure.rule=Host(`authelia.testbereich.net`)"
1.4 configuration.yml erstellen
Nun erstellen wir uns noch eine Konfigurationsdatei. Gebt dazu folgendes ein:
nano /opt/containers/authelia/config/configuration.yml
Kopiert folgenden Inhalt:
---
###############################################################
# Authelia configuration
###############################################################
jwt_secret: # hier muss ein Token hin
default_redirection_url: https://authelia.euredomain.de
server:
host: 0.0.0.0
port: 9091
log:
level: debug
totp:
issuer: authelia
period: 30
skew: 1
authentication_backend:
file:
path: /config/users_database.yml
password:
algorithm: argon2id
iterations: 1
salt_length: 16
parallelism: 8
memory: 128
access_control:
default_policy: deny
rules:
# Rules applied to everyone
- domain:
- "public.euredomain.de"
- "authelia.euredomain.de"
policy: bypass
- domain: secure.euredomain.de
policy: one_factor
- domain: two.euredomain.de
policy: two_factor
session:
name: authelia_session
expiration: 3600 # 1 Stunde
inactivity: 300 # 5 Minuten
domain: euredomain.de # root Domain angeben
regulation:
max_retries: 3
find_time: 120
ban_time: 300
storage:
local:
path: /config/db.sqlite3
encryption_key:
notifier:
#smtp:
#username: admin@euredomain.de
#password: sicher123!
#host: smtp.euredomain.de
#port: 587
#sender: admin@euredomain.de
#filesystem:
#filename: /config/notification.txt
1.5 Anpassen der configuration.yml
In der Konfiguration gibt es schon einige Domains wie „secure“, „two“ und „public“. Wir werden im späteren Verlauf dieser Anleitungen dort Dienste zu Testzwecken zur Verfügung stellen. Folgende Zeilen müsst ihr nun noch anpassen:
jwt_secret: # hier muss ein Token hin
default_redirection_url: https://authelia.euredomain.de
- domain:
- "public.euredomain.de"
- "authelia.euredomain.de"
policy: bypass
- domain: secure.euredomain.de
policy: one_factor
- domain: two.euredomain.de
policy: two_factor
encryption_key:
domain: euredomain.de # root Domain angeben
Ein JWT Token könnt ihr euch auf folgender Webseite generieren (https://jwt.io). Gebt dort einfach irgendwelche Daten ein und kopiert euch dann den Code der linken Seite. Dies ist euer „jwt_secret“.
Anschließend bleibt ihr auf der Webseite und gebt noch irgendwelche anderen Daten ein.
Diesen Code kopiere ich nun für meinen „encryption_key“.
Bei mir sieht es dann so aus:
jwt_secret: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6ImRvYWdkbyIsImlhdCI6MTUxNjIzOTAyMn0.0B2HZnSMYC-TMuq92dSma6RayunDYmzMvhJ1uEYDxSs
default_redirection_url: https://authelia.testbereich.net
- domain:
- "public.testbereich.net"
- "authelia.testbereich.net"
policy: bypass
- domain: secure.testbereich.net
policy: one_factor
- domain: two.testbereich.net
policy: two_factor
encryption_key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6InNlY3JldCIsImlhdCI6MTUxNjIzOTAyMn0.CxyQnTBuux7SmuVeQPMcQs-WlQTJspv8Dv5DR_Wq4DM
domain: testbereich.net
Hier die gesamte Konfiguration bis zu dieser Stelle.
1.6 Benachrichtigung wählen
Ihr müsst ebenfalls noch wählen, ob ihr eine Benachrichtigung per E-Mail erhalten wollt oder ob diese in eine Datei gespeichert werden sollen. Dazu entfernt ihr die „#“ vor den entsprechenden Stellen.
1.6.1 Benachrichtigung per E-Mail:
notifier:
smtp:
username: admin@euredomain.de
password: sicher123!
host: smtp.euredomain.de
port: 587
sender: admin@euredomain.de
#filesystem:
#filename: /config/notification.txt
Die Zugangsdaten müsst ihr natürlich noch entsprechend anpassen.
1.6.2 Benachrichtigung in Datei speichern:
notifier:
#smtp:
#username: admin@euredomain.de
#password: sicher123!
#host: smtp.euredomain.de
#port: 587
#sender: admin@euredomain.de
filesystem:
filename: /config/notification.txt
Hier müsst ihr nun nichts mehr anpassen.
1.7 Nutzer anlegen
Nun legen wir uns noch einen Benutzer für Authelia an. Als erstes erzeugen wir uns ein Passwort für den Benutzer. Gebt dazu folgenden Befehl ein:
docker run authelia/authelia:latest authelia hash-password Dein_Passwort
also bei mir:
docker run authelia/authelia:latest authelia hash-password dogado-sicher
Nun solltet ihr folgendes sehen:
Diesen Hashwert benötigen wir gleich.
Nun können wir den Benutzer anlegen. Gebt dazu folgendes ein:
nano /opt/containers/authelia/config/users_database.yml
Gebt nun folgendes ein:
---
###############################################################
# Users Database
###############################################################
# List of users
users:
authelia:
displayname: "Authelia User"
password: HashWert
email: authelia@euredomain.de
groups:
- admins
Nun passen wir den Wert noch an. Ich will, dass mein Benutzer „dogado“ heißt und das Passwort „dogado-sicher“ hat. Das Passwort habe ich eben schon generiert und füge dies nun ein.
Bei mir sieht es dann so aus:
---
###############################################################
# Users Database
###############################################################
# List of users
users:
dogado:
displayname: "dogado"
password: $argon2id$v=19$m=65536,t=1,p=8$VHVSNHI1S1B4di9jMEVDQg$qYQb6p5PPnxD+Pmbb8j2YkmzPb7CQZwItQbpZ+SWMJ8
email: dogado@testbereich.net
groups:
- admins
1.8 Traefik anpassen
Nun müssen wir Traefik noch anpassen. Dazu öffnet ihr folgende Datei:
nano /opt/containers/traefik/data/dynamic_conf.yml
In der Datei sollte bereits folgendes stehen:
Hier fügt ihr nun noch folgendes hinzu
middlewares-authelia:
forwardAuth:
address: "http://authelia:9091/api/verify?rd=https://authelia.euredomain.de"
trustForwardHeader: true
authResponseHeaders:
- "Remote-User"
- "Remote-Groups"
Die Domain müsst ihr entsprechend noch anpassen. Bei mir sieht es dann so aus:
1.9 Traefik neu starten
Damit Traefik die Änderungen übernimmt, müsst ihr es neu starten. Gebt dazu folgendes ein:
docker-compose -f /opt/containers/traefik/docker-compose.yml down
docker-compose -f /opt/containers/traefik/docker-compose.yml up -d
1.10 Beispiel-Container erstellen
Nun erstellen wir uns noch Beispiel-Container, um Authelia zu testen. Diese werden später unter „public.euredomain.de“, „secure.euredomain.de“ sowie „two.euredomain.de“ erreichbar sein.
Zuerst erstellen wir uns ein neues Verzeichnis:
mkdir -p /opt/containers/authelia-beispiel/
Darin legen wir uns eine neue Docker Compose Datei an:
nano /opt/containers/authelia-beispiel/docker-compose.yml
Gebt nun folgendes ein:
version: '3.3'
services:
public:
image: traefik/whoami
container_name: public
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.public.entrypoints=http"
- "traefik.http.routers.public.rule=Host(`public.euredomain.de`)" # Hier eure URL eingeben #
- "traefik.http.middlewares.public-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.public.middlewares=public-https-redirect"
- "traefik.http.routers.public-secure.entrypoints=https"
- "traefik.http.routers.public-secure.rule=Host(`public.euredomain.de`)" # Hier eure URL eingeben #
- "traefik.http.routers.public-secure.tls=true"
- "traefik.http.routers.public-secure.tls.certresolver=http"
- "traefik.http.routers.public-secure.service=public"
- "traefik.http.services.public.loadbalancer.server.port=80"
- "traefik.docker.network=proxy"
- "traefik.http.routers.public-secure.middlewares= secHeaders@file, middlewares-authelia@file"
restart: unless-stopped
secure:
image: traefik/whoami
container_name: secure
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.secure.entrypoints=http"
- "traefik.http.routers.secure.rule=Host(`secure.euredomain.de`)" # Hier eure URL eingeben #
- "traefik.http.middlewares.secure-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.secure.middlewares=secure-https-redirect"
- "traefik.http.routers.secure-secure.entrypoints=https"
- "traefik.http.routers.secure-secure.rule=Host(`secure.euredomain.de`)" # Hier eure URL eingeben #
- "traefik.http.routers.secure-secure.tls=true"
- "traefik.http.routers.secure-secure.tls.certresolver=http"
- "traefik.http.routers.secure-secure.service=secure"
- "traefik.http.services.secure.loadbalancer.server.port=80"
- "traefik.docker.network=proxy"
- "traefik.http.routers.secure-secure.middlewares=middlewares-authelia@file"
restart: unless-stopped
two:
image: traefik/whoami
container_name: two
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.two.entrypoints=http"
- "traefik.http.routers.two.rule=Host(`two.euredomain.de`)" # Hier eure URL eingeben #
- "traefik.http.middlewares.two-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.two.middlewares=two-https-redirect"
- "traefik.http.routers.two-two.entrypoints=https"
- "traefik.http.routers.two-two.rule=Host(`two.euredomain.de`)" # Hier eure URL eingeben #
- "traefik.http.routers.two-two.tls=true"
- "traefik.http.routers.two-two.tls.certresolver=http"
- "traefik.http.routers.two-two.service=two"
- "traefik.http.services.two.loadbalancer.server.port=80"
- "traefik.docker.network=proxy"
- "traefik.http.routers.two-two.middlewares=middlewares-authelia@file"
networks:
proxy:
external: true
Hier müsst ihr bei jedem Container wieder 2x eure Domain anpassen. Also bei mir: vorher:
- "traefik.http.routers.public.rule=Host(`public.euredomain.de`)"
- "traefik.http.routers.public-secure.rule=Host(`public.euredomain.de`)"
- "traefik.http.routers.secure.rule=Host(`secure.euredomain.de`)"
- "traefik.http.routers.secure-secure.rule=Host(`secure.euredomain.de`)"
- "traefik.http.routers.two.rule=Host(`two.euredomain.de`)"
- "traefik.http.routers.two-two.rule=Host(`two.euredomain.de`)"
nachher:
- "traefik.http.routers.public.rule=Host(`public.testbereich.net`)"
- "traefik.http.routers.public-secure.rule=Host(`public.testbereich.net`)"
- "traefik.http.routers.secure.rule=Host(`secure.testbereich.net`)"
- "traefik.http.routers.secure-secure.rule=Host(`secure.testbereich.net`)"
- "traefik.http.routers.two.rule=Host(`two.testbereich.net`)"
- "traefik.http.routers.two-two.rule=Host(`two.testbereich.net`)"
2. Authelia starten
Nun können wir Authelia starten. Dazu gebt ihr folgendes ein:
docker-compose -f /opt/containers/authelia/docker-compose.yml up -d
Nun könnt ihr auf eure Webseite (https://authelia.euredomain.de) gehen und solltet folgendes sehen:
3. Zwei-Faktor-Authentifizierung einrichten
Dazu müsst ihr euch einloggen und solltet nun folgendes sehen:
Klickt jetzt „Register device“.
Wenn ihr euch für Notification per E-Mail entschieden habt, dann solltet ihr jetzt folgende E-Mail bekommen:
Wenn ihr euch per Notification per Datei entschieden habt, dann könnt ihr jetzt in folgender Datei schauen:
cat /opt/containers/authelia/config/notification.txt
Ihr solltet nun folgendes sehen:
Wenn ihr nun auf den Link klickt bzw. diesen kopiert, dann solltet ihr folgendes sehen:
Scannt nun den QR Code ein und klickt anschließend auf weiter. Nun müsst ihr den generierten Code von eurem Handy eingeben.
Anschließend erscheint folgende Meldung:
4. Beispiel-Container starten
Nun starten wir unsere Beispiel Container um Authelia zu testen. Gebt dazu folgenden Befehl ein:
docker-compose -f /opt/containers/authelia-beispiel/docker-compose.yml up -d
5. Authelia testen
Führt diese Tests im Privaten Modus eures Browsers durch. Wenn ihr bereits eingeloggt seid, dann erscheint keine Abfrage mehr.
Geht nun auf die Webseite „public.euredomain.de“. Diese sollte sich „normal“ öffnen.
Nun testen wir die „einfache Abfrage“. Geht dazu auf „secure.euredomain.de“. Hier solltet ihr folgendes sehen:
Nachdem ihr euch eingeloggt habt, solltet ihr dieselbe Seite wie eben sehen.
Löscht nun alle Cookies!
Nun testen wir noch die Zwei Faktor Authentifizierung. Geht dazu auf „two.euredomain.de“. Hier solltet ihr nun zuerst nach eurem Benutzername / Passwort gefragt werden
Anschließend nach eurem 2 Faktor.
Nachdem ihr diesen eingegeben habt, solltet ihr wieder dieselbe Seite wie eben sehen.