,

Authelia auf VPS installieren

Lesedauer 7 Minuten

Inhaltsverzeichnis

Hinweis
Einige Screenshots zeigen das Backend unseres Schwesterunternehmens dogado. Die gezeigten Schritte können jedoch auch im easyname-Backend durchgeführt werden.

0. Überblick

  • Verwendetes System: Debian 11 64 bit
  • Genutzter User: Ich nehme alles als „root“ vor
  • Zeitdauer: ca. 10 Minuten
  • Schwierigkeit: Einfach. Nur Code kopieren 😉
  • Besonderheiten:

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. Du kannst 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: https://www.easyname.at/blog/vps/anwendungen/traefik-reverseproxy-auf-vps-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 wir folgendes in der Konsole ein:

mkdir -p /opt/containers/authelia/config 

Du kannst hier auch ein anderes Verzeichnis verwenden. Musst 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 öffnest du folgende Datei:

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

Nun kopierst du 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 musst du noch den Hostnamen anpassen, über welchen später Authelia erreichbar sein soll.

Diese beiden Zeilen musst du 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. Gib dazu folgendes ein:

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

Kopiere 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 

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 musst du 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 

  domain: euredomain.de  # root Domain angeben 

Ein JWT Token kannst du dir auf folgender Webseite generieren: https://jwt.io. Gib dort einfach irgendwelche Daten ein und kopiere dir dann den Code der linken Seite. 

JWT Token generieren

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 

  domain: testbereich.net  # root Domain angeben 

1.6 Benachrichtigung wählen

Du musst ebenfalls noch wählen, ob du eine Benachrichtigung per E-Mail erhalten willst oder ob diese in eine Datei gespeichert werden sollen. Dazu entfernst du 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 musst du 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 musst du 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. Gib 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 solltest du folgendes sehen:

Nutzer anlegen in Authelia

Diesen Hashwert benötigen wir gleich.

Nun können wir den Benutzer anlegen. Gib dazu folgendes ein:

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

Gib 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 z.B. „dogado“ heißt und das Passwort z.B. „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 öffnest du folgende Datei:

nano /opt/containers/traefik/data/dynamic_conf.yml 
Traefik anpassen, bestehende Datei

Hier fügst du 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 musst du entsprechend noch anpassen. Bei mir sieht es dann so aus:

Traefik Domain anpassen

1.9 Traefik neu starten

Damit Traefik die Änderungen übernimmt, musst du es neu starten. Gib 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 

Gib 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=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 musst du 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 gibst du folgendes ein:

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

Nun kannst du auf deine Webseite (https://authelia.euredomain.de) gehen und solltest folgendes sehen: 

Eure Authelia Website

3. Zwei-Faktor-Authentifizierung einrichten

Dazu musst du dich einloggen und solltest nun folgendes sehen: 

Authelia Zwei-Faktor-Authentifizierung einrichten

Klicke jetzt „Register device“.

Wenn du dich für Notification per E-Mail entschieden hast, dann solltest du jetzt folgende E-Mail bekommen:

Authelia Register device

Wenn du dich per Notification per Datei entschieden hast, dann kannst du jetzt in folgender Datei schauen:

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

Du solltest nun folgendes sehen: 

notification.txt Authelia

Wenn du nun auf den Link klickst bzw. diesen kopierst, dann solltest du folgendes sehen:

QR-Code Authelia

Scanne nun den QR Code ein und klicke anschließend auf weiter. Nun musst du den generierten Code von deinem Handy eingeben. 

Code zur Authentifizierung in Authelia

Anschließend erscheint folgende Meldung: 

Authentifizierung in Authelia erfolgreich

4. Beispiel-Container starten

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

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

5. Authelia testen

Führe diese Tests im Privaten Modus deines Browsers durch. Wenn du bereits eingeloggt bist, dann erscheint keine Abfrage mehr.

Gehe nun auf die Webseite „public.euredomain.de“. Diese sollte sich „normal“ öffnen. 

Authelia testen

Nun testen wir die „einfache Abfrage“. Gehe dazu auf „secure.euredomain.de“. Hier solltest du folgendes sehen: 

Einfach Abfrage auf secure.euredomain.de

Nachdem du dich eingeloggt hast, solltest du dieselbe Seite wie eben sehen. 

Authelia Website nach Login

Löscht nun alle Cookies!

Nun testen wir noch die Zwei Faktor Authentifizierung. Gehe dazu auf „two.euredomain.de“. Hier solltest du nun zuerst nach deinem Benutzername / Passwort gefragt werden 

Zwei Faktor Authentifizierung in Authelia testen

Anschließend nach deinem 2 Faktor.

One-Time Passwort in Authelia eingeben

Nachdem du diesen eingegeben hast, solltest du wieder dieselbe Seite wie eben sehen. 

[Authelia getestet Screenshot

easyname ist ein erfolgreicher und bekannter österreichischer Anbieter von Cloud-Services, Domains sowie Webhosting bis hin zur Server-Infrastruktur und gehört seit 2020 zur dogado group.
Das Unternehmen ist seit 2006 in Österreich erfolgreich am Markt und inzwischen auch in vielen anderen Ländern weltweit tätig. Sowohl das Team als auch die gehosteten Daten befinden sich in Österreich.

easyname liegt die Datensicherheit besonders am Herzen und stellt daher zu jedem Hosting-Paket auch kostenlose SSL-Zertifikate zur Verfügung. Mit intuitiven Tools zur Erstellung von Websites und Webshops und mit Easy Install Apps wie WordPress, Joomla oder PrestaShop können alle easyname-Kunden schnell in die Online-Welt einsteigen.