▍Authelia¶
Настройка сервера авторизации Authelia¶
Authelia — это сервер аутентификации и авторизации с открытым исходным кодом, обеспечивающий двухфакторную аутентификацию и единый вход (SSO) для ваших приложений через веб-портал. Он действует как компаньон для обратных прокси-серверов, таких как nginx, Traefik, caddy или HAProxy, чтобы сообщить им, следует ли разрешать запросы или перенаправлять их на портал Authelia для аутентификации.
С первоначальными шагами настройки Docker и Docker Compose можно ознакомиться здесь, c настройкой Traefik - здесь.
Настройка Authelia¶
Создадим директорию с конфигами mkdir /srv/docker/conf/authelia
и добавим следующие файлы:
# 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
...
LENGTH=64
tr -cd '[:alnum:]' < /dev/urandom \
| fold -w "${LENGTH}" \
| head -n 1 \
| tr -d '\n' \
| tee actualSecretContent.txt \
| base64 --wrap 0 \
; echo
Теперь создадим файл с пользователями:
# 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: [email protected]
groups:
- admins
...
# yamllint enable rule:line-length
Для генерации пароля воспользуемся командой:
Password hash: $argon2id$v=19$m=65536,t=1,p=8$dFJUYUc4WXZzZzRKZ0Z6NA$zX1nqr1EfOkEkNq+k2FoxOENniK5ZHGz3IJmVaKbORI
Настройка docker-compose.yml¶
version: '3.3'
services:
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"
- "[email protected]"
- "com.centurylinklabs.watchtower.enable=true"
Запускаем:
Ждём некоторое время пока запуститься Authelia и заходим на heimdall.example.ru, должна открыться форма авторизации, вводим данные и система должна предлоджить зарегистрировать устройство:
После перехода по ссылке "Регистрация устройства" необходимо выполнить команду:
Date: 2022-06-01 14:22:07.403036568 +0300 MSK m=+51.123200208
Recipient: [email protected]
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-код, после чего будет возможность видеть одноразовый код.