Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Authelia Integration in Traefik-Crowdsec-Stack (Traefik3)
- Anlegen von Verzeichnissen.
- mkdir -p /opt/containers/traefik-crowdsec-stack/data/authelia/config
- mkidr -p /root/secrets/authelia
- chmod 644 /root/secrets/authelia
- Erstellen der Secrets
- tr -cd '[:alnum:]' </dev/urandom | fold -w "64" | head -n 1 | tr -d '\n' | sudo tee /root/secrets/authelia/authelia_jwt_secret
- tr -cd '[:alnum:]' </dev/urandom | fold -w "64" | head -n 1 | tr -d '\n' | sudo tee /root/secrets/authelia/authelia_storage_encryption_key
- tr -cd '[:alnum:]' </dev/urandom | fold -w "64" | head -n 1 | tr -d '\n' | sudo tee /root/secrets/authelia/authelia_session_secret
- Das Secret authelia_notifier_smtp_password enthält euch Password zum Email Account wenn Ihr SMTP Notifications nutzen wollt.
- Wenn ihr File Notifications nutzen wollte dann lasst dies bitte weg.
- Ergänzen der docker-compose.yml
- include:
- ...
- - compose/authelia.yml
- Erstellen der .env File in /opt/containers/traefik-crowdsec-stack/data/authelia/
- Legt hier bitte eine .env File mit folgendem Inhalt an.
- ---
- SECRETDIR=/root/secrets
- TZ=$TZ
- # Rest ist optional, wenn ihr hier was anpassen wollt.
- # Da ich lieber Feste IP Adressen einsetze auch bei Docker werden diese hier bei mir festgelegt.
- # Damit ich keine vergesse, wird das in der authelia.yml noch mal wiederholt.
- # Wenn ihr das nicht wollt dann lasst es einfach weg.
- SERVICES_AUTHELIA_HOSTNAME=authelia
- SERVICES_TRAEFIK_LABELS_AUTHELIA_HOST=HOST(`your.domain.tld`)
- SERVICES_AUTHELIA_NETWORKS_PROXY_IPV4=172.31.191.200
- SERVICES_AUTHELIA_NETWORKS_PROXY_IPV6=fd00:1:be:a:7001:0:3e:7f00
- SERVICES_AUTHELIA_NETWORKS_SOCKET_PROXY_IPV4=172.31.255.200
- SERVICES_AUTHELIA_NETWORKS_SOCKET_PROXY_IPV6=fd00:1:be:a:7001:0:3e:8f00
- ---
- Erstellen authelia.yml im compose Verzeichnis.
- nano /opt/containers/traefik-crowdsec-stack/compose/authelia.yml
- ---
- services:
- authelia:
- container_name: 'authelia'
- depends_on:
- traefik:
- condition: service_healthy
- hostname: ${SERVICES_AUTHELIA_HOSTNAME:-authelia}
- image: 'docker.io/authelia/authelia:latest'
- restart: 'unless-stopped'
- env_file: ${ABSOLUTE_PATH}/data/authelia/.env
- networks:
- proxy:
- ipv4_address: ${SERVICES_AUTHELIA_NETWORKS_PROXY_IPV4:-172.31.191.200}
- ipv6_address: ${SERVICES_AUTHELIA_NETWORKS_PROXY_IPV6:-fd00:1:be:a:7001:0:3e:7f00}
- socket_proxy:
- ipv4_address: ${SERVICES_AUTHELIA_NETWORKS_SOCKET_PROXY_IPV4:-172.31.255.200}
- ipv6_address: ${SERVICES_AUTHELIA_NETWORKS_SOCKET_PROXY_IPV6:-fd00:1:be:a:7001:0:3e:8f00}
- volumes:
- - /etc/localtime:/etc/localtime:ro
- - ${ABSOLUTE_PATH}/data/authelia/config:/config
- secrets: ['JWT_SECRET', 'SESSION_SECRET', 'STORAGE_ENCRYPTION_KEY', 'NOTIFIER_SMTP_PASSWORD']
- environment:
- AUTHELIA_IDENTITY_VALIDATION_RESET_PASSWORD_JWT_SECRET_FILE: '/run/secrets/JWT_SECRET'
- AUTHELIA_SESSION_SECRET_FILE: '/run/secrets/SESSION_SECRET'
- AUTHELIA_STORAGE_ENCRYPTION_KEY_FILE: '/run/secrets/STORAGE_ENCRYPTION_KEY'
- AUTHELIA_NOTIFIER_SMTP_PASSWORD_FILE: '/run/secrets/NOTIFIER_SMTP_PASSWORD'
- labels:
- traefik.enable: true
- traefik.http.routers.authelia.rule: HOST(`auth.domain.tld`)
- traefik.http.routers.authelia.entryPoints: websecure
- traefik.http.routers.authelia.tls: true
- traefik.http.routers.authelia.tls.certresolver: tls_resolver
- traefik.http.services.authelia.loadbalancer.server.port: 9091
- traefik.http.middlewares.authelia.forwardAuth.address: https://authelia:9091/api/authz/forward-auth
- traefik.http.routers.authelia.middlewares: default@file
- traefik.http.routers.authelia.service: authelia
- security_opt:
- - no-new-privileges:true
- secrets:
- JWT_SECRET:
- file: ${SECRETDIR}/authelia/authelia_jwt_secret
- SESSION_SECRET:
- file: ${SECRETDIR}/authelia/authelia_session_secret
- STORAGE_ENCRYPTION_KEY:
- file: ${SECRETDIR}/authelia/authelia_storage_encryption_key
- NOTIFIER_SMTP_PASSWORD:
- file: ${SECRETDIR}/authelia/authelia_notifier_smtp_password
- ...
- Erzeugen Traefik Middelware Yml für Authelia.
- Erzeugt im Verzeichnis /opt/containers/traefik-crowdsec-stack/data/traefik/dynamic_conf
- eine Datei http.middlewares.middlewares-authelia.yml mit folgendem Inhalt.
- ---
- http:
- middlewares:
- middlewares-authelia:
- forwardAuth:
- address: "http://authelia:9091/api/verify?rd=https://auth.domain.tld"
- trustForwardHeader: true
- authResponseHeaders:
- - "Remote-User"
- - "Remote-Groups"
- ---
- Erzeugen der Authelia Configuration in /opt/containers/traefik-crowdsec-stack/data/authelia/config
- mit nano /opt/containers/traefik-crowdsec-stack/data/authelia/config/configuration.yml die entsprechende Datei erstellen.
- Inhalt:
- ---
- ###############################################################
- # Authelia configuration #
- ###############################################################
- theme: dark
- identity_validation:
- reset_password:
- # Wird durch das Secret gesetzt
- jwt_secret:
- server:
- address: tcp://0.0.0.0:9091/
- # https://www.authelia.com/configuration/miscellaneous/logging/
- log:
- level: error
- format: json
- file_path: /config/authelia.log
- keep_stdout: true
- # https://www.authelia.com/configuration/second-factor/time-based-one-time-password/
- totp:
- issuer: domain.tld
- period: 30
- skew: 1
- # https://www.authelia.com/reference/guides/passwords/
- authentication_backend:
- password_reset:
- disable: false
- refresh_interval: 5m
- file:
- path: /config/users.yml
- password:
- algorithm: argon2id
- iterations: 1
- salt_length: 16
- parallelism: 8
- memory: 256
- # https://www.authelia.com/overview/authorization/access-control/
- access_control:
- default_policy: deny
- rules:
- - domain: 'auth.domain.tld' # Hier deine Authelia Domain einsetzen.
- policy: bypass
- networks: # Optional
- - 10.0.0.0/8
- - 192.168.0.0/16
- - 172.16.0.0/12
- - domain:
- - "*.domain.tld" # Wildcard Adresse für Domain optional
- - "traefik.domain.tld" # Hier deine Traefik Domain einsetzen.
- - "domain.tld" # Hier deine Domain einsetzen.
- policy: two_factor
- # https://www.authelia.com/configuration/session/introduction/
- session:
- name: authelia_session
- same_site: lax
- secret:
- expiration: 5h
- inactivity: 15m
- remember_me: 10M
- cookies:
- - domain: 'domain.tld'
- authelia_url: https://auth.domain.tld # Authelia URL
- default_redirection_url: https://auth.domain.tld/ # Default Redirect URL
- # https://www.authelia.com/configuration/security/regulation/
- regulation:
- max_retries: 3
- find_time: 10m
- ban_time: 12h
- # https://www.authelia.com/configuration/storage/introduction/
- storage:
- # For local storage, uncomment lines below and comment out mysql. https://docs.authelia.com/configuration/storage/sqlite.html
- # This is good for the beginning. If you have a busy site then switch to other databases.
- local:
- path: '/config/db.sqlite3'
- # Wird durch Secret gesetzt
- encryption_key:
- # https://www.authelia.com/configuration/notifications/introduction/
- notifier:
- disable_startup_check: false
- # For testing purposes, notifications can be sent in a file. Be sure to map the volume in docker-compose.
- filesystem:
- filename: '/config/notification.txt'
- # SMTP nur aktivieren wenn es sicher funktioniert bei euch
- #notifier:
- # disable_startup_check: false
- # smtp:
- # username: 'admin@domain.tld' # Username für deinen Mailserver
- # password: 'Sicheres Password' # alternativ Secret anlegen AUTHELIA_NOTIFIER_SMTP_PASSWORD_FILE
- # address: 'smtp://mail.domain.tld:587'
- # sender: 'Authelia Notifier <admin@domain.tld>'
- # subject: "[Notification domain.tld] {titel}"
- # startup_check_address: 'test@domain.tld'
- # disable_starttls: false
- # disable_html_emails: false
- # disable_require_tls: false
- ---
- Mit diesem Befehl erzeugt ihr den Hash für Euren User: docker run -v /opt/containers/authelia/compose/config/configuration.yml:/configuration.yml -it authelia/authelia:latest authelia crypto hash generate --config /configuration.yml --password "SicheresPassword" den angezeigten String tragt ihr dann in die users.yml ein als password:
- Mit nano /opt/containers/traefik-crowdsec-stack/data/authelia/config/users.yml die entsprechende Datei erstellen.
- Inhalt:
- ---
- ###############################################################
- # Users Database #
- ###############################################################
- # This file can be used if you do not have an LDAP set up.
- # List of users
- users:
- username: # hier euren eigenen Login Namen eintragen
- displayname: "Mein Name mit Nachname"
- password:
- email: # Eure valide Email Adresse
- groups:
- - admins
- - dev
- ---
- Nach dem ihr dann alle Container mit docker compose -up -d --force-recreate neugestartet habt, ruft ihr
- eure Authelia domain auf auth.domain.tld und log euch mit den angelegten Zugangsdaten ein.
- Durch den rest führt euch dann Authelia. Beachtet der 6 stellige Code der angefordert wird wird euch in der Notification.txt im config Verzeichnis angezeigt.
- Nach dem erfolgreichen Anlegen des 2FA könnt ihr nun folgende Anpassungen vornehmen:
- Manuelle Anpassungen an der traefik.yml im /compose
- um Traefik hinter die Authelia Middleware zu bekommen muss folgende Zeile angeasst werden.
- Original:
- traefik.http.routers.traefik-dashboad.middlewares: default@file,traefik-dashboard-auth@file
- Angepasst:
- traefik.http.routers.traefik-dashboad.middlewares: default@file,middlewares-authelia@file
- Macht das bitte erst wenn euer Authelia Container läuft und ihr euch bei Authelia mindestens einmal angemeldet habt.
- alternativ kann man hier auch eine traefik.override.yml anlegen.
- ---
- services:
- traefik:
- labels:
- traefik.http.routers.traefik-dashboad.middlewares: default@file,middlewares-authelia@file
- ---
- nach einem erneuten restart mit
- docker compose up -d --force-recreate
- und ein paar minuten Wartezeit sollte sich beim Aufruf eurer Traefik Domain nun erst Authelia melden.
- Ich hoffe ich habe dies nun vollständig dokumentiert. Falls doch was schiefgehen sollte fragt einfach.
- Ich habe dies auch gleichzeitig an Psycho0verload geschickt zur Prüfung und ggf einbau in den Stack.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement