Wähle einen Artikel
Authelia auf vServer/VPS installieren
Authelia auf vServer/VPS installieren

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. Sie können 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 finden Sie 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 abspeichern. Dazu geben Sie folgendes in der Konsole ein:

mkdir -p /opt/containers/authelia/config

Sie können hier auch ein anderes Verzeichnis verwenden. Müssen 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 öffnen Sie folgende Datei:

nano /opt/containers/authelia/docker-compose.yml

Nun kopieren Sie 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 Ihre 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 Ihre 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üssen Sie noch den Hostnamen anpassen, über welchen später Authelia erreichbar sein soll. Diese beiden Zeilen müssen Sie 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. Geben Sie dazu folgendes ein:

nano /opt/containers/authelia/config/configuration.yml

Kopieren Sie 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üssen Sie 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

Einen JWT Token können Sie sich auf folgender Webseite generieren (https://jwt.io). Geben Sie dort einfach irgendwelche Daten ein und kopieren Sie sich dann den Code der linken Seite. Dies ist Ihr «jwt_secret».

Anschliessend bleiben Sie auf der Webseite und geben 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.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Im1ldGFuZXQiLCJpYXQiOjE1MTYyMzkwMjJ9.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

Sie müssen ebenfalls noch wählen, ob Sie eine Benachrichtigung per E-Mail erhalten wollen oder ob diese in eine Datei gespeichert werden sollen. Dazu entfernen Sie 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üssen Sie 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üssen Sie 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. Geben Sie dazu folgenden Befehl ein:

docker run authelia/authelia:latest authelia hash-password Ihr_Passwort

also bei mir:

docker run authelia/authelia:latest authelia hash-password dogado-sicher

Nun sollten Sie folgendes sehen:
 

Diesen Hashwert benötigen wir gleich.
Nun können wir den Benutzer anlegen. Geben Sie dazu folgendes ein:

nano /opt/containers/authelia/config/users_database.yml

Geben Sie 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 «metanet» heisst und das Passwort «metanet-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:
  metanet:
    displayname: "metanet"
    password: $argon2id$v=19$m=65536,t=1,p=8$VHVSNHI1S1B4di9jMEVDQg$qYQb6p5PPnxD+Pmbb8j2YkmzPb7CQZwItQbpZ+SWMJ8
    email: metanet@testbereich.net
    groups:
      - admins

1.8 Traefik anpassen

Nun müssen wir Traefik noch anpassen. Dazu öffnen Sie folgende Datei:

nano /opt/containers/traefik/data/dynamic_conf.yml

In der Datei sollte bereits folgendes stehen:
 

Hier fügen Sie 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üssen Sie entsprechend noch anpassen. Bei mir sieht es dann so aus:
 

1.9 Traefik neu starten

Damit Traefik die Änderungen übernimmt, müssen Sie es neu starten. Geben Sie 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

Geben Sie 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 Ihre 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 Ihre 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 Ihre 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 Ihre 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 Ihre 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 Ihre 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üssen Sie bei jedem Container wieder 2x Ihre 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 geben Sie folgendes ein:

docker-compose -f /opt/containers/authelia/docker-compose.yml up -d

Nun können Sie auf Ihre Webseite (https://authelia.euredomain.de) gehen und sollten folgendes sehen:
 

3. Zwei-Faktor-Authentifizierung einrichten

Dazu müssen Sie sich einloggen und sollten nun folgendes sehen:
 

Klicken Sie jetzt «Register device».
Wenn Sie sich für Notification per E-Mail entschieden haben, dann sollten Sie jetzt folgende E-Mail bekommen:
 

Wenn Sie sich per Notification per Datei entschieden haben, dann können Sie jetzt in folgender Datei schauen:

cat /opt/containers/authelia/config/notification.txt

Sie sollten nun folgendes sehen:
 

Wenn Sie nun auf den Link klicken bzw. diesen kopieren, dann sollten Sie folgendes sehen:
 

Scannen Sie nun den QR Code ein und klicken Sie anschliessend auf weiter. Nun müssen Sie den generierten Code von Ihrem Handy eingeben.
 

Anschliessend erscheint folgende Meldung:
 

4. Beispiel-Container starten

Nun starten wir unsere Beispiel Container um Authelia zu testen. Geben Sie dazu folgenden Befehl ein:

docker-compose -f /opt/containers/authelia-beispiel/docker-compose.yml up -d

5. Authelia testen

Führen Sie diese Tests im Privaten Modus Ihres Browsers durch. Wenn Sie bereits eingeloggt sind, dann erscheint keine Abfrage mehr. Gehen Sie nun auf die Webseite «public.euredomain.de». Diese sollte sich «normal» öffnen.
 

Nun testen wir die «einfache Abfrage». Gehen Sie dazu auf «secure.euredomain.de». Hier sollten Sie folgendes sehen:
 

Nachdem Sie sich eingeloggt haben, sollten Sie dieselbe Seite wie eben sehen.
 

Löschen Sie nun alle Cookies!
 

Nun testen wir noch die Zwei Faktor Authentifizierung. Gehen Sie dazu auf «two.euredomain.de». Hier sollten Sie nun zuerst nach Ihrem Benutzernamen / Passwort gefragt werden
 

Anschliessend nach Ihrem 2 Faktor.
 

Nachdem Sie diesen eingegeben haben, sollten Sie wieder dieselbe Seite wie eben sehen.

Nächster Artikel
GPT4All auf vServer/VPS installieren
Weitere passende Themen