Da ich mich wie bereits im ersten Artikel beschrieben habe für authentik entschieden habe, kommt hier die Anleitung wie das System installiert wird.
Wichtig, hierbei handelt es sich um eine Basis Installation und Konfiguration!
Was wird alles benötigt?
Voraussetzung
- Docker Server mit installiertem Docker-Compose
- Einen Reverse Proxy oder Load Balancer
- Eigene öffentliche Domäne mit zugang zum DNS
- Eine Firewall oder wenn nicht anders vorhanden einen Router der die Infos mit NAT an den Reverse Proxy weitergibt
- Öffentliches TLS Zertifikat (z.B. Let’s Encrypt)
Container bereitstellen
Authentik
Das Bereitstellen ist auf der offiziellen Dokumentation gut beschreiben und bedarf eigentlich keiner separaten Anleitung:
https://goauthentik.io/docs/installation/docker-compose
Als alternative kann auch unsere Docker-Compose Konfiguration verwendet werden:
--- version: "3.4" services: postgresql: image: docker.io/library/postgres:12-alpine restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"] start_period: 20s interval: 30s retries: 5 timeout: 5s volumes: - /docker/authentik/database:/var/lib/postgresql/data environment: POSTGRES_PASSWORD: <authentik-db-pwd> POSTGRES_USER: <authentik-user> POSTGRES_DB: <authentik-db> redis: image: docker.io/library/redis:alpine command: --save 60 1 --loglevel warning restart: unless-stopped healthcheck: test: ["CMD-SHELL", "redis-cli ping | grep PONG"] start_period: 20s interval: 30s retries: 5 timeout: 3s volumes: - /docker/authentik/redis:/data server: image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2023.6.1} restart: unless-stopped command: server environment: AUTHENTIK_REDIS__HOST: redis AUTHENTIK_POSTGRESQL__HOST: postgresql AUTHENTIK_POSTGRESQL__USER: <authentik-user> AUTHENTIK_POSTGRESQL__NAME: <authentik-db> AUTHENTIK_POSTGRESQL__PASSWORD: <authentik-db-pwd> AUTHENTIK_SECRET_KEY: <authentik-secret> AUTHENTIK_EMAIL__HOST: mail.onesystems.ch AUTHENTIK_EMAIL__PORT: 25 AUTHENTIK_EMAIL__TIMEOUT: 10 AUTHENTIK_EMAIL__FROM: authentik@onesystems.ch volumes: - /docker/authentik/media:/media - /docker/authentik/templates:/templates - /docker/authentik/geoip:/geoip ports: - "2030:9000" - "2031:9443" depends_on: - postgresql - redis worker: image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2023.6.1} restart: unless-stopped command: worker environment: AUTHENTIK_REDIS__HOST: redis AUTHENTIK_POSTGRESQL__HOST: postgresql AUTHENTIK_POSTGRESQL__USER: <authentik-user> AUTHENTIK_POSTGRESQL__NAME: <authentik-db> AUTHENTIK_POSTGRESQL__PASSWORD: <authentik-db-pwd> AUTHENTIK_SECRET_KEY: <authentik-secret> AUTHENTIK_EMAIL__HOST: <email-server> AUTHENTIK_EMAIL__PORT: 25 AUTHENTIK_EMAIL__TIMEOUT: 10 AUTHENTIK_EMAIL__FROM: <from-mail> user: root volumes: - /var/run/docker.sock:/var/run/docker.sock - /docker/authentik/media:/media - /docker/authentik/certs:/certs - /docker/authentik/templates:/templates - /docker/authentik/geoip:/geoip depends_on: - postgresql - redis geoipupdate: image: ghcr.io/maxmind/geoipupdate:latest restart: unless-stopped volumes: - /docker/authentik/geoip:/usr/share/GeoIP environment: - GEOIPUPDATE_ACCOUNT_ID=<maxmind-user> - GEOIPUPDATE_LICENSE_KEY=<maxmind-api-key> - GEOIPUPDATE_EDITION_IDS=GeoLite2-ASN GeoLite2-City GeoLite2-Country - GEOIPUPDATE_FREQUENCY=8
Damit der Composer die Conatainer auch einrichten und starten kann müssen noch folgende Ordner angelegt werden auf dem Docker Host:
- /docker/authentik/database
- /docker/authentik/redis
- /docker/authentik/media
- /docker/authentik/templates
- /docker/authentik/certs
- /docker/authentik/geoip
Reverse Proxy (NPM)
Damit ein Zertifikat und der IDP direkt und ohne zusätzlichen Port erreichbar ist greife ich auf den Nginx Proxy Manger (NPM) zurück, es können natürlich auch Caddy, HAProxy oder Traefik dafür verwendet werden.
https://nginxproxymanager.com/setup/#using-mysql-mariadb-database
Anmelden
Am NPM kann man sich mit den folgenden Daten Anmelden:
Url: http://dockerhost:81
Benutzer: admin@example.com
Passwort: changeme
Zertifikat hinzufügen
Nach dem Anmelden und dem zurücksetzen der Standard Anmeldedaten sollte entweder das Offizielle Zertifikat oder ein Let’s Encrypt Konto erstellt werden. «SSL Certificates -> Add SSL Certificate» öffnen und hinzufügen.
Proxy Host hinzufügen
Über «Hosts -> Proxy Hosts» kann nun der erste Eintrag für authentik erstellt werden.
Sobald alles vorbereitet ist, muss nur noch der öffentliche DNS und die Firewall konfiguriert werden damit der Dienst von Extern erreichbar wird.
Basis Konfiguration
Anmelden
Am System kann man sich, sofern alles funktioniert hat beim Erstellen der Container mit der im NPM hinterlegten Domäne Anmelden+.
- Benutzer: https://id.domain.ch/if/user
- Administration: https://id.domain.ch/if/admin
Tenants
Für den wiedererkennungswert sollte unter «System -> Tenants» einen neuen Eintrag erstellt werden mit den Angaben unter der der Dienst von extern erreichbar ist. Als Idee wäre hier z.B. id.domain.ch oder auth.domain.ch zu verwenden.
Weiter kann nun auch der Name, Logo und Favicon angepasst werden damit auf den ersten blick klar ist wem der Dienst gehört.
Benutzerverwaltung
Diejenigen die bereits ein Microsoft Active Directory oder LDAP-Dienst betreiben können nun die bestehenden Benutzer und Gruppen mit dem authentik System Synchronisieren, alternativ kann auch darauf verzichtet werden und die Benutzer von Hand im System angelegt werden.
Die Synchronisation kann unter «Directory -> Federation & Social login» eingerichtet werden, dabei kann auf eine grössere auswahl an Providern zurückgegriffen werden.
- Apple
- Azure AD
- Discord
- GitHub
- Googel
- LDAP
- Mailcow
- Okta
- OpenID
- Patreon
- Plex
- SAMML
- Twitch