Перейти к содержанию

Настройка сервера авторизации Authelia

Authelia Logo

Authelia — это сервер аутентификации и авторизации с открытым исходным кодом, обеспечивающий двухфакторную аутентификацию и единый вход (SSO) для ваших приложений через веб-портал. Он действует как компаньон для обратных прокси-серверов, таких как nginx, Traefik, caddy или HAProxy, чтобы сообщить им, следует ли разрешать запросы или перенаправлять их на портал Authelia для аутентификации.

С первоначальными шагами настройки Docker и Docker Compose можно ознакомиться здесь, c настройкой Traefik - здесь.

Настройка Authelia

Создадим директорию с конфигами mkdir /srv/docker/conf/authelia и добавим следующие файлы:

nano configuration.yml
# yamllint disable rule:comments-indentation
---
###############################################################################
#                           Authelia Configuration                            #
###############################################################################

theme: dark
jwt_secret: a_very_important_secret
default_redirection_url: https://auth.example.ru
default_2fa_method: ""

server:
  host: 0.0.0.0
  port: 9091
  path: ""
  read_buffer_size: 4096
  write_buffer_size: 4096
  enable_pprof: false
  enable_expvars: false
  disable_healthcheck: false
  tls:
    key: ""
    certificate: ""
    client_certificates: []
  headers:
    csp_template: ""

log:
  level: debug

totp:
  disable: false
  issuer: authelia.com
  algorithm: sha1
  digits: 6
  period: 30
  skew: 1
  secret_size: 32

webauthn:
  disable: false
  timeout: 60s
  display_name: Authelia
  attestation_conveyance_preference: indirect
  user_verification: preferred

ntp:
  address: "time.cloudflare.com:123"
  version: 4
  max_desync: 3s
  disable_startup_check: false
  disable_failure: false

authentication_backend:
  disable_reset_password: false
  password_reset:
    custom_url: ""
  refresh_interval: 5m

  file:
    path: /config/users_database.yml
    password:
      algorithm: argon2id
      iterations: 1
      key_length: 32
      salt_length: 16
      memory: 1024
      parallelism: 8

access_control:
  default_policy: deny

  networks:
    - name: internal
      networks:
        - 192.168.0.0/24
    - name: VPN
      networks: 10.9.0.0/16

  rules:
    - domain: 'heimdall.example.ru'
      subject: 'group:admins'
      policy: two_factor
      networks:
        - internal

session:
  name: authelia_session
  domain: "example.ru"
  same_site: lax
  secret: unsecure_session_secret
  expiration: 1h
  inactivity: 5m
  remember_me_duration: 1M


regulation:
  max_retries: 3
  find_time: 2m
  ban_time: 5m

storage:
  encryption_key: a_very_important_secret
  local:
    path: /config/db.sqlite3

notifier:
  filesystem:
    filename: /config/notification.txt
...
Для генерации секретов a_very_important_secret и unsecure_session_secret можно воспользоваться командой:
LENGTH=64
tr -cd '[:alnum:]' < /dev/urandom \
  | fold -w "${LENGTH}"           \
  | head -n 1                     \
  | tr -d '\n'                    \
  | tee actualSecretContent.txt   \
  | base64 --wrap 0               \
  ; echo

Теперь создадим файл с пользователями:

nano users_database.yml
# yamllint disable rule:line-length
---
###############################################################
#                         Users Database                      #
###############################################################

# This file can be used if you do not have an LDAP set up.

users:
  username:
    displayname: "Test Username"
    password: "$argon2id$v=19$m=65536,t=1,p=8$dFJUYUc4WXZzZzRKZ0Z6NA$zX1nqr1EfOkEkNq+k2FoxOENniK5ZHGz3IJmVaKbORI" # my_password
    email: admin@example.ru
    groups:
      - admins
...
# yamllint enable rule:line-length

Для генерации пароля воспользуемся командой:

docker run authelia/authelia:latest authelia hash-password my_password
Password hash: $argon2id$v=19$m=65536,t=1,p=8$dFJUYUc4WXZzZzRKZ0Z6NA$zX1nqr1EfOkEkNq+k2FoxOENniK5ZHGz3IJmVaKbORI

Настройка docker-compose.yml

   authelia:
        image: authelia/authelia
        container_name: authelia
        restart: always
        volumes:
          - $DIR_CONF/authelia:/config
        environment:
          - TZ=Europe/Moscow
        labels:
          - 'traefik.enable=true'
          - 'traefik.http.routers.authelia.rule=Host(`auth.example.ru`)'
          - 'traefik.http.routers.authelia.entrypoints=https'
          - 'traefik.http.routers.authelia.tls=true'
          - 'traefik.http.middlewares.authelia.forwardauth.address=http://authelia:9091/api/verify?rd=https://auth.example.ru/'
          - 'traefik.http.middlewares.authelia.forwardauth.trustForwardHeader=true'
          - 'traefik.http.middlewares.authelia.forwardauth.authResponseHeaders=Remote-User, Remote-Groups, Remote-Name, Remote-Email'

   heimdall:
        image: linuxserver/heimdall:latest
        container_name: heimdall
        restart: always
        environment:
          - PUID=1000
          - PGID=1000
          - TZ=Europe/Moscow
        volumes:
          - $DIR_CONF/heimdall:/config
        labels:
          - "traefik.enable=true"
          - "traefik.http.routers.heimdall.rule=Host(`heimdall.example.ru`)"
          - "traefik.http.routers.heimdall.entrypoints=https"
          - "traefik.http.routers.heimdall.tls=true"
          - "traefik.http.routers.heimdall.middlewares=authelia@docker"
          - "com.centurylinklabs.watchtower.enable=true"          

Запускаем:

docker-compose up -d

Ждём некоторое время пока запуститься Authelia и заходим на heimdall.example.ru, должна открыться форма авторизации, вводим данные и система должна предлоджить зарегистрировать устройство:

Authelia 2FA

После перехода по ссылке "Регистрация устройства" необходимо выполнить команду:

sudo cat /srv/docker/conf/authelia/notification.txt
Date: 2022-06-01 14:22:07.403036568 +0300 MSK m=+51.123200208
Recipient: admin@example.ru
Subject: Register your mobile
Body: 
This email has been sent to you in order to validate your identity.
If you did not initiate the process your credentials might have been compromised. You should reset your password and contact an administrator.

To setup your 2FA please visit the following URL: https://auth.example.ru/one-time-password/register?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ56XRoZWxpYSIsIm764CI6MTY1NDA4MjgyNywiaWF0IjoxNjU0MDgyNTI3LCJqdGkiOiI45TQxNmJhZS1jNmZhLTRjMjMGFjM1ZS0xYTQ4YmNmMjZmNDMiLFgdY3Rpb24iOiJSZWdpc3RlclRPVFBEZXZpY2UiLCJ1c2VybmFtZSI6If5HZmZpbiJ9.dfk_2JOrrAqivYcoZKL6xawph5Qjs_enctOzlbrjbDc

This email was generated by a user with the IP ... .

Please contact an administrator if you did not initiate this process.

Переходим по ссылке и в приложении Google Authenticator добавляем QR-код, после чего будет возможность видеть одноразовый код.

К началу