Advertisement
PhoenyxRLP

Authelia in Traefik_v3-Crowdsec-Stack

Nov 3rd, 2024
13
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.39 KB | Source Code | 0 0
  1. Authelia Integration in Traefik-Crowdsec-Stack (Traefik3)
  2.  
  3. Anlegen von Verzeichnissen.
  4.  
  5. mkdir -p /opt/containers/traefik-crowdsec-stack/data/authelia/config
  6. mkidr -p /root/secrets/authelia
  7. chmod 644 /root/secrets/authelia
  8.  
  9. Erstellen der Secrets
  10. tr -cd '[:alnum:]' </dev/urandom | fold -w "64" | head -n 1 | tr -d '\n' | sudo tee /root/secrets/authelia/authelia_jwt_secret
  11. tr -cd '[:alnum:]' </dev/urandom | fold -w "64" | head -n 1 | tr -d '\n' | sudo tee /root/secrets/authelia/authelia_storage_encryption_key
  12. tr -cd '[:alnum:]' </dev/urandom | fold -w "64" | head -n 1 | tr -d '\n' | sudo tee /root/secrets/authelia/authelia_session_secret
  13.  
  14. Das Secret authelia_notifier_smtp_password enthält euch Password zum Email Account wenn Ihr SMTP Notifications nutzen wollt.
  15. Wenn ihr File Notifications nutzen wollte dann lasst dies bitte weg.
  16.  
  17. Ergänzen der docker-compose.yml
  18.  
  19. include:
  20. ...
  21. - compose/authelia.yml
  22.  
  23. Erstellen der .env File in /opt/containers/traefik-crowdsec-stack/data/authelia/
  24. Legt hier bitte eine .env File mit folgendem Inhalt an.
  25.  
  26. ---
  27. SECRETDIR=/root/secrets
  28. TZ=$TZ
  29. # Rest ist optional, wenn ihr hier was anpassen wollt.
  30. # Da ich lieber Feste IP Adressen einsetze auch bei Docker werden diese hier bei mir festgelegt.
  31. # Damit ich keine vergesse, wird das in der authelia.yml noch mal wiederholt.
  32. # Wenn ihr das nicht wollt dann lasst es einfach weg.
  33. SERVICES_AUTHELIA_HOSTNAME=authelia
  34. SERVICES_TRAEFIK_LABELS_AUTHELIA_HOST=HOST(`your.domain.tld`)
  35. SERVICES_AUTHELIA_NETWORKS_PROXY_IPV4=172.31.191.200
  36. SERVICES_AUTHELIA_NETWORKS_PROXY_IPV6=fd00:1:be:a:7001:0:3e:7f00
  37. SERVICES_AUTHELIA_NETWORKS_SOCKET_PROXY_IPV4=172.31.255.200
  38. SERVICES_AUTHELIA_NETWORKS_SOCKET_PROXY_IPV6=fd00:1:be:a:7001:0:3e:8f00
  39. ---
  40.  
  41. Erstellen authelia.yml im compose Verzeichnis.
  42. nano /opt/containers/traefik-crowdsec-stack/compose/authelia.yml
  43.  
  44. ---
  45. services:
  46. authelia:
  47. container_name: 'authelia'
  48. depends_on:
  49. traefik:
  50. condition: service_healthy
  51. hostname: ${SERVICES_AUTHELIA_HOSTNAME:-authelia}
  52. image: 'docker.io/authelia/authelia:latest'
  53. restart: 'unless-stopped'
  54. env_file: ${ABSOLUTE_PATH}/data/authelia/.env
  55. networks:
  56. proxy:
  57. ipv4_address: ${SERVICES_AUTHELIA_NETWORKS_PROXY_IPV4:-172.31.191.200}
  58. ipv6_address: ${SERVICES_AUTHELIA_NETWORKS_PROXY_IPV6:-fd00:1:be:a:7001:0:3e:7f00}
  59. socket_proxy:
  60. ipv4_address: ${SERVICES_AUTHELIA_NETWORKS_SOCKET_PROXY_IPV4:-172.31.255.200}
  61. ipv6_address: ${SERVICES_AUTHELIA_NETWORKS_SOCKET_PROXY_IPV6:-fd00:1:be:a:7001:0:3e:8f00}
  62. volumes:
  63. - /etc/localtime:/etc/localtime:ro
  64. - ${ABSOLUTE_PATH}/data/authelia/config:/config
  65. secrets: ['JWT_SECRET', 'SESSION_SECRET', 'STORAGE_ENCRYPTION_KEY', 'NOTIFIER_SMTP_PASSWORD']
  66. environment:
  67. AUTHELIA_IDENTITY_VALIDATION_RESET_PASSWORD_JWT_SECRET_FILE: '/run/secrets/JWT_SECRET'
  68. AUTHELIA_SESSION_SECRET_FILE: '/run/secrets/SESSION_SECRET'
  69. AUTHELIA_STORAGE_ENCRYPTION_KEY_FILE: '/run/secrets/STORAGE_ENCRYPTION_KEY'
  70. AUTHELIA_NOTIFIER_SMTP_PASSWORD_FILE: '/run/secrets/NOTIFIER_SMTP_PASSWORD'
  71. labels:
  72. traefik.enable: true
  73. traefik.http.routers.authelia.rule: HOST(`auth.domain.tld`)
  74. traefik.http.routers.authelia.entryPoints: websecure
  75. traefik.http.routers.authelia.tls: true
  76. traefik.http.routers.authelia.tls.certresolver: tls_resolver
  77. traefik.http.services.authelia.loadbalancer.server.port: 9091
  78. traefik.http.middlewares.authelia.forwardAuth.address: https://authelia:9091/api/authz/forward-auth
  79. traefik.http.routers.authelia.middlewares: default@file
  80. traefik.http.routers.authelia.service: authelia
  81. security_opt:
  82. - no-new-privileges:true
  83. secrets:
  84. JWT_SECRET:
  85. file: ${SECRETDIR}/authelia/authelia_jwt_secret
  86. SESSION_SECRET:
  87. file: ${SECRETDIR}/authelia/authelia_session_secret
  88. STORAGE_ENCRYPTION_KEY:
  89. file: ${SECRETDIR}/authelia/authelia_storage_encryption_key
  90. NOTIFIER_SMTP_PASSWORD:
  91. file: ${SECRETDIR}/authelia/authelia_notifier_smtp_password
  92. ...
  93.  
  94. Erzeugen Traefik Middelware Yml für Authelia.
  95. Erzeugt im Verzeichnis /opt/containers/traefik-crowdsec-stack/data/traefik/dynamic_conf
  96. eine Datei http.middlewares.middlewares-authelia.yml mit folgendem Inhalt.
  97.  
  98. ---
  99. http:
  100. middlewares:
  101. middlewares-authelia:
  102. forwardAuth:
  103. address: "http://authelia:9091/api/verify?rd=https://auth.domain.tld"
  104. trustForwardHeader: true
  105. authResponseHeaders:
  106. - "Remote-User"
  107. - "Remote-Groups"
  108. ---
  109.  
  110. Erzeugen der Authelia Configuration in /opt/containers/traefik-crowdsec-stack/data/authelia/config
  111. mit nano /opt/containers/traefik-crowdsec-stack/data/authelia/config/configuration.yml die entsprechende Datei erstellen.
  112.  
  113. Inhalt:
  114.  
  115. ---
  116. ###############################################################
  117. # Authelia configuration #
  118. ###############################################################
  119.  
  120. theme: dark
  121. identity_validation:
  122. reset_password:
  123. # Wird durch das Secret gesetzt
  124. jwt_secret:
  125.  
  126. server:
  127. address: tcp://0.0.0.0:9091/
  128.  
  129. # https://www.authelia.com/configuration/miscellaneous/logging/
  130. log:
  131. level: error
  132. format: json
  133. file_path: /config/authelia.log
  134. keep_stdout: true
  135.  
  136. # https://www.authelia.com/configuration/second-factor/time-based-one-time-password/
  137. totp:
  138. issuer: domain.tld
  139. period: 30
  140. skew: 1
  141.  
  142. # https://www.authelia.com/reference/guides/passwords/
  143. authentication_backend:
  144. password_reset:
  145. disable: false
  146. refresh_interval: 5m
  147. file:
  148. path: /config/users.yml
  149. password:
  150. algorithm: argon2id
  151. iterations: 1
  152. salt_length: 16
  153. parallelism: 8
  154. memory: 256
  155.  
  156. # https://www.authelia.com/overview/authorization/access-control/
  157. access_control:
  158. default_policy: deny
  159. rules:
  160. - domain: 'auth.domain.tld' # Hier deine Authelia Domain einsetzen.
  161. policy: bypass
  162. networks: # Optional
  163. - 10.0.0.0/8
  164. - 192.168.0.0/16
  165. - 172.16.0.0/12
  166. - domain:
  167. - "*.domain.tld" # Wildcard Adresse für Domain optional
  168. - "traefik.domain.tld" # Hier deine Traefik Domain einsetzen.
  169. - "domain.tld" # Hier deine Domain einsetzen.
  170. policy: two_factor
  171.  
  172. # https://www.authelia.com/configuration/session/introduction/
  173.  
  174. session:
  175. name: authelia_session
  176. same_site: lax
  177. secret:
  178. expiration: 5h
  179. inactivity: 15m
  180. remember_me: 10M
  181. cookies:
  182. - domain: 'domain.tld'
  183. authelia_url: https://auth.domain.tld # Authelia URL
  184. default_redirection_url: https://auth.domain.tld/ # Default Redirect URL
  185.  
  186. # https://www.authelia.com/configuration/security/regulation/
  187. regulation:
  188. max_retries: 3
  189. find_time: 10m
  190. ban_time: 12h
  191.  
  192. # https://www.authelia.com/configuration/storage/introduction/
  193. storage:
  194. # For local storage, uncomment lines below and comment out mysql. https://docs.authelia.com/configuration/storage/sqlite.html
  195. # This is good for the beginning. If you have a busy site then switch to other databases.
  196. local:
  197. path: '/config/db.sqlite3'
  198. # Wird durch Secret gesetzt
  199. encryption_key:
  200.  
  201. # https://www.authelia.com/configuration/notifications/introduction/
  202. notifier:
  203. disable_startup_check: false
  204. # For testing purposes, notifications can be sent in a file. Be sure to map the volume in docker-compose.
  205. filesystem:
  206. filename: '/config/notification.txt'
  207. # SMTP nur aktivieren wenn es sicher funktioniert bei euch
  208. #notifier:
  209. # disable_startup_check: false
  210. # smtp:
  211. # username: 'admin@domain.tld' # Username für deinen Mailserver
  212. # password: 'Sicheres Password' # alternativ Secret anlegen AUTHELIA_NOTIFIER_SMTP_PASSWORD_FILE
  213. # address: 'smtp://mail.domain.tld:587'
  214. # sender: 'Authelia Notifier <admin@domain.tld>'
  215. # subject: "[Notification domain.tld] {titel}"
  216. # startup_check_address: 'test@domain.tld'
  217. # disable_starttls: false
  218. # disable_html_emails: false
  219. # disable_require_tls: false
  220. ---
  221.  
  222. 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:
  223.  
  224. Mit nano /opt/containers/traefik-crowdsec-stack/data/authelia/config/users.yml die entsprechende Datei erstellen.
  225.  
  226. Inhalt:
  227.  
  228. ---
  229. ###############################################################
  230. # Users Database #
  231. ###############################################################
  232.  
  233. # This file can be used if you do not have an LDAP set up.
  234.  
  235. # List of users
  236. users:
  237. username: # hier euren eigenen Login Namen eintragen
  238. displayname: "Mein Name mit Nachname"
  239. password:
  240. email: # Eure valide Email Adresse
  241. groups:
  242. - admins
  243. - dev
  244. ---
  245.  
  246. Nach dem ihr dann alle Container mit docker compose -up -d --force-recreate neugestartet habt, ruft ihr
  247. eure Authelia domain auf auth.domain.tld und log euch mit den angelegten Zugangsdaten ein.
  248.  
  249. 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.
  250.  
  251. Nach dem erfolgreichen Anlegen des 2FA könnt ihr nun folgende Anpassungen vornehmen:
  252.  
  253. Manuelle Anpassungen an der traefik.yml im /compose
  254. um Traefik hinter die Authelia Middleware zu bekommen muss folgende Zeile angeasst werden.
  255.  
  256. Original:
  257. traefik.http.routers.traefik-dashboad.middlewares: default@file,traefik-dashboard-auth@file
  258.  
  259. Angepasst:
  260. traefik.http.routers.traefik-dashboad.middlewares: default@file,middlewares-authelia@file
  261.  
  262. Macht das bitte erst wenn euer Authelia Container läuft und ihr euch bei Authelia mindestens einmal angemeldet habt.
  263.  
  264. alternativ kann man hier auch eine traefik.override.yml anlegen.
  265.  
  266. ---
  267. services:
  268. traefik:
  269. labels:
  270. traefik.http.routers.traefik-dashboad.middlewares: default@file,middlewares-authelia@file
  271. ---
  272.  
  273. nach einem erneuten restart mit
  274. docker compose up -d --force-recreate
  275. und ein paar minuten Wartezeit sollte sich beim Aufruf eurer Traefik Domain nun erst Authelia melden.
  276.  
  277. Ich hoffe ich habe dies nun vollständig dokumentiert. Falls doch was schiefgehen sollte fragt einfach.
  278. 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