Authelia - это открытое решение для единой точки входа (SSO) и двухфакторной аутентификации (2FA), которое вы развертываете и контролируете самостоятельно. Оно защищает веб-сервисы в вашей инфраструктуре, такие как панели управления TrueNAS, Grafana, Nextcloud или внутренние wiki, централизуя управление доступом. Это аналог корпоративных платформ вроде Okta или Azure AD, но для самохостинга. Руководство проведет вас от выбора архитектуры до запуска работающей системы, с акцентом на практические шаги, которые экономят время и снижают риск ошибок.
Зачем нужна Authelia и подготовка инфраструктуры
Вместо настройки 2FA для каждого сервиса отдельно, Authelia становится единым шлюзом. Вы настраиваете правила доступа один раз, а все запросы к вашим сервисам сначала проходят через него. Это упрощает администрирование, усиливает безопасность и дает полный контроль над данными аутентификации.
Authelia vs. корпоративные SSO: когда свое решение выгоднее
Выбор между Authelia и коммерческими SSO зависит от задач и ресурсов. Authelia выигрывает в сценариях, где критичен контроль данных и нулевая стоимость лицензий.
| Критерий | Authelia | Корпоративные SSO (Okta, Azure AD) |
|---|---|---|
| Контроль данных | Полный. Все данные остаются на ваших серверах. | Ограничен. Данные хранятся у провайдера. |
| Стоимость | Бесплатно (опенсорс). Затраты только на инфраструктуру. | Подписка на пользователя/месяц, может быть значительной для команд. |
| Сложность настройки | Выше. Требует навыков администрирования Linux, Docker, обратных прокси. | Ниже. Управляемый сервис с графическим интерфейсом и поддержкой. |
| Интеграции | Работает через обратный прокси (Nginx, Traefik), универсально для любого веб-сервиса. | Готовые коннекторы для популярных SaaS, но могут не покрывать кастомные системы. |
Authelia оптимальна для команд до 50-100 человек, для защиты личных или внутренних корпоративных проектов, где есть ресурсы для поддержки собственной инфраструктуры. Если вам нужен готовый сервис с гарантиями SLA и широкой поддержкой протоколов из коробки, лучше рассмотреть коммерческие варианты.
Что нужно подготовить перед установкой
Перед началом убедитесь, что у вас есть:
- Сервер с ОС Linux (Ubuntu 22.04 LTS/Debian 12 или новее) и минимум 1 ГБ оперативной памяти.
- Установленные Docker и Docker Compose (v2+).
- Работающий обратный прокси (Nginx или Traefik) с поддержкой SSL-сертификатов, например, от Let's Encrypt.
- Зарезервированные домены или субдомены:
- Для самого Authelia, например,
auth.your-domain.com. - Для сервисов, которые будут защищаться, например,
nas.your-domain.com,grafana.your-domain.com.
- Для самого Authelia, например,
- Резервная копия текущих конфигураций вашего обратного прокси.
Также заранее определитесь с базой данных. Для долговременного хранения пользователей и настроек используйте PostgreSQL - это надежнее. Для хранения сессий и кэша, если планируете высокую нагрузку, добавьте Redis для скорости. В небольших развертываниях можно начать только с PostgreSQL.
Пошаговая установка и базовая конфигурация Authelia
Мы развернем Authelia в Docker, что обеспечит изоляцию и простоту обновления. Все команды проверены на Ubuntu/Debian.
Развертывание с Docker Compose: готовые конфигурационные файлы
Создайте структуру каталогов и файлов.
mkdir -p /opt/authelia/{config,data}
cd /opt/authelia
Создайте файл docker-compose.yml. Приведем вариант с PostgreSQL.
version: '3.8'
services:
authelia:
image: authelia/authelia:latest
container_name: authelia
volumes:
- ./config:/config
- ./data:/data
environment:
- TZ=Europe/Moscow
ports:
- "9091:9091"
restart: unless-stopped
depends_on:
- postgres
networks:
- authelia-network
postgres:
image: postgres:15-alpine
container_name: authelia-postgres
volumes:
- ./data/postgres:/var/lib/postgresql/data
environment:
- POSTGRES_USER=authelia
- POSTGRES_PASSWORD=REPLACE_WITH_STRONG_PASSWORD
- POSTGRES_DB=authelia
restart: unless-stopped
networks:
- authelia-network
networks:
authelia-network:
driver: bridge
Теперь создайте основной конфигурационный файл /opt/authelia/config/configuration.yml. Это его минимальная рабочая версия.
host: 0.0.0.0
port: 9091
log:
level: info
jwt_secret: REPLACE_WITH_A_RANDOM_STRING_AT_LEAST_64_CHARS
default_redirection_url: https://auth.your-domain.com
server:
read_buffer_size: 4096
write_buffer_size: 4096
enable_pprof: false
enable_expvars: false
disable_healthcheck: false
totp:
issuer: your-company.com
period: 30
skew: 1
webauthn:
disable: false
display_name: Authelia
timeout: "60s"
session:
name: authelia_session
secret: REPLACE_WITH_ANOTHER_RANDOM_STRING_AT_LEAST_64_CHARS
expiration: 1h
inactivity: 5m
domain: your-domain.com
storage:
postgres:
host: postgres
port: 5432
database: authelia
username: authelia
password: REPLACE_WITH_STRONG_PASSWORD_FROM_COMPOSE
authentication_backend:
file:
path: /config/users.yml
password:
algorithm: argon2id
iterations: 1
salt_length: 16
parallelism: 8
memory: 128
access_control:
default_policy: deny
rules:
- domain:
- "auth.your-domain.com"
policy: bypass
- domain:
- "*.your-domain.com"
policy: two_factor
regulation:
max_retries: 5
find_time: 2m
ban_time: 5m
notifier:
disable: yes
Замените все места с REPLACE_WITH... и your-domain.com на свои значения. Сгенерировать криптографические секреты можно командой: openssl rand -base64 48.
Создайте файл пользователей /opt/authelia/config/users.yml.
users:
admin:
displayname: "Administrator"
password: "$argon2id$v=19$m=65536,t=3,p=4$BpLnfgDsc2WD8F2q$o/vzA4myCqZZ36bUGsDY//8mKUYNZZaR0t4MFFSs+iM"
email: admin@your-domain.com
groups:
- admin
Пароль в этом примере - password. Сгенерируйте свой хэш с помощью Authelia: docker run --rm authelia/authelia:latest authelia hash-password 'YourStrongPassword'.
Первичный запуск и диагностика проблем
Запустите сервисы.
cd /opt/authelia
docker-compose up -d
Проверьте логи на наличие ошибок.
docker-compose logs -f authelia
В логах должны появиться сообщения об успешном подключении к базе данных и старте сервера: INFO […] Authelia is listening for non-TLS connections on 0.0.0.0:9091.
Типичные проблемы на этом этапе:
- Ошибка синтаксиса YAML: Проверьте отступы в
configuration.yml. Используйте пробелы, а не табуляцию. - "Permission denied" на volumes: Убедитесь, что у пользователя, от которого запущен Docker, есть права на чтение/запись каталогов
/opt/authelia/configи/opt/authelia/data. - "Connect: connection refused" к БД: Убедитесь, что контейнер
authelia-postgresзапущен (docker-compose ps). Проверьте логи PostgreSQL.
После успешного запуска Authelia будет доступна по адресу http://your-server-ip:9091, но для работы аутентификации ее необходимо связать с обратным прокси и доменом.
Интеграция с сервисами: настройка правил доступа и обратного прокси
Authelia не перехватывает трафик автоматически. Вы настраиваете обратный прокси (Nginx, Traefik) так, чтобы он проверял аутентификацию через Authelia, прежде чем передать запрос конечному сервису.
Пишем правила доступа: примеры для типичных сценариев
Правила определяются в секции access_control файла configuration.yml. Они обрабатываются сверху вниз, первое совпадение применяется.
Добавьте или измените правила в соответствии с вашими сервисами.
access_control:
default_policy: deny
rules:
# 1. Публичная страница статусов - доступ без аутентификации
- domain: "status.your-domain.com"
policy: bypass
# 2. Сам интерфейс Authelia - должен быть открыт
- domain: "auth.your-domain.com"
policy: bypass
# 3. Административная панель TrueNAS - строгая защита
- domain: "nas.your-domain.com"
policy: two_factor
# Ограничение по сети: только из офисной сети
networks:
- 192.168.1.0/24
- 10.0.0.0/8
# 4. Внутренняя Wiki (Confluence, BookStack) - достаточно пароля
- domain: "wiki.your-domain.com"
policy: one_factor
# 5. Grafana - двухфакторная аутентификация для всех
- domain: "grafana.your-domain.com"
policy: two_factor
# 6. Запрет доступа для всех остальных доменов (сработает default_policy: deny)
После изменения конфигурации перезапустите Authelia: docker-compose restart authelia.
Настройка Nginx в качестве прокси с аутентификацией
Теперь нужно настроить Nginx для защищаемого сервиса, например, для Grafana. В конфигурации сайта (/etc/nginx/sites-available/grafana.your-domain.com) добавьте директивы для интеграции с Authelia.
server {
listen 443 ssl http2;
server_name grafana.your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# Эндпоинт проверки аутентификации в Authelia
auth_request /authelia;
auth_request_set $user $upstream_http_remote_user;
auth_request_set $groups $upstream_http_remote_groups;
error_page 401 =302 https://auth.your-domain.com/?rd=$scheme://$host$request_uri;
location /authelia {
internal;
proxy_pass http://localhost:9091/api/verify; # Укажите IP сервера Authelia, если он на другой машине
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URL $scheme://$host$request_uri;
proxy_set_header X-Forwarded-Method $request_method;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Uri $request_uri;
proxy_set_header X-Forwarded-For $remote_addr;
}
location / {
# Передаем заголовки с данными пользователя в Grafana
proxy_set_header Remote-User $user;
proxy_set_header Remote-Groups $groups;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://localhost:3000; # Адрес вашего сервиса Grafana
proxy_redirect off;
}
}
Проверьте конфигурацию Nginx и перезагрузите его.
nginx -t
systemctl reload nginx
Теперь при попытке зайти на https://grafana.your-domain.com вы будете перенаправлены на страницу входа Authelia. Аналогичным образом настраивается защита для TrueNAS Scale или других сервисов. Для систем, критичных к безопасности баз данных, также полезно ознакомиться с руководством по защите PostgreSQL, которое дополняет настройки Authelia.
Управление пользователями и настройка двухфакторной аутентификации (2FA)
После интеграции с прокси пользователи смогут зарегистрироваться и настроить 2FA при первом входе на защищенный сервис.
Регистрация TOTP и использование приложений-аутентификаторов
Когда пользователь впервые перейдет на защищенный домен, он увидит страницу входа Authelia. После ввода логина и пароля (из users.yml) система предложит настроить двухфакторную аутентификацию.
- Откроется экран с QR-кодом и текстовым TOTP-секретом.
- Пользователь открывает приложение-аутентификатор (Google Authenticator, Authy, Aegis) на своем телефоне.
- Нужно отсканировать QR-код или ввести секрет вручную.
- Приложение начнет генерировать 6-значные коды, обновляемые каждые 30 секунд.
- Для подтверждения пользователь вводит текущий код из приложения в форму Authelia.
После этого 2FA будет привязана к аккаунту. TOTP-секрет, отображаемый на экране, - это ключ для восстановления. Его следует сохранить в безопасном месте (например, в менеджере паролей), так как он понадобится, если потребуется перенести аккаунт в другое приложение.
Резервные коды: ваш страховой полис от потери доступа
Сразу после успешной настройки TOTP Authelia предложит сгенерировать резервные коды. Это одноразовые пароли, которые работают даже при потере телефона с аутентификатором.
Как это работает:
- В интерфейсе Authelia после подтверждения TOTP нажмите "Generate backup codes".
- Система создаст набор из 16 уникальных кодов (например,
3FA9-7C2B). Генерация происходит локально в вашем браузере, коды никуда не передаются. - Эти коды необходимо немедленно сохранить. Рекомендуется:
- Распечатать лист и хранить его в физическом сейфе.
- Сохранить зашифрованный файл в надежном хранилище, например, в защищенном менеджере паролей или в конфигурации Grafana.
- При потере доступа к телефону пользователь входит на страницу Authelia, вводит логин/пароль, а на этапе 2FA выбирает опцию "Use a backup code" и вводит один из сохраненных кодов.
- После входа по резервному коду нужно немедленно перейти в настройки безопасности и зарегистрировать новое устройство 2FA, так как использованный код становится недействительным.
Эта практика, используемая GitHub, Google и AWS, критически важна для избежания блокировки аккаунтов. Не пренебрегайте ею.
Администрирование, мониторинг и решение проблем
Работающая система требует регулярного обслуживания. Вот ключевые процедуры.
Резервное копирование и процедура обновления
Резервное копирование:
- Конфигурация: Скопируйте всю папку
/opt/authelia/config. - База данных PostgreSQL: Выполните дамп.
cd /opt/authelia docker-compose exec postgres pg_dump -U authelia authelia > backup_$(date +%Y%m%d).sql
Обновление Authelia:
- Остановите сервисы:
docker-compose down. - Сделайте резервную копию конфигов и БД (как указано выше).
- Обновите номер версии образа в файле
docker-compose.yml(например,authelia/authelia:v4.38). Проверьте официальный changelog на наличие breaking changes. - Запустите заново:
docker-compose pull && docker-compose up -d. - Проверьте логи на отсутствие ошибок.
Диагностика: читаем логи и ищем причину сбоя
Большинство проблем решается анализом логов.
- "Authentication failed" при корректном вводе данных: Проблема в передаче заголовков от Nginx к Authelia. Убедитесь, что в конфиге Nginx указан правильный адрес эндпоинта
/api/verifyи заголовкиX-Original-URL,X-Forwarded-*передаются. Для комплексной защиты инфраструктуры также полезно понимать методы противодействия DDoS-атакам, которые могут влиять на доступность сервиса аутентификации. - "Connect: connection refused" в логах Authelia: База данных недоступна. Проверьте, запущен ли контейнер с БД (
docker-compose ps), и корректны ли параметры подключения вconfiguration.yml. - Правила доступа не применяются: Проверьте порядок правил в
access_control. Правило сpolicy: bypassдля широкого домена может перекрывать все последующие. Убедитесь, что домен в правиле точно соответствует домену в запросе. - Пользователь не видит запрос на 2FA: Для его домена, вероятно, установлена политика
one_factor. Измените ее наtwo_factor.
Для базового мониторинга здоровья Authelia используйте встроенный эндпоинт: https://auth.your-domain.com/api/health. Он должен возвращать статус 200 OK. Интеграцию с системами мониторинга, такими как Prometheus, можно настроить через соответствующий экспортер.
Регулярно обновляйте криптографические секреты (jwt_secret, session.secret). Создайте для этого задание в cron, которое будет генерировать новые секреты и перезапускать Authelia с определенной периодичностью (например, раз в год). Для автоматизации подобных рутинных задач администрирования Linux пригодятся техники из практического руководства по системному администрированию.
Для масштабирования на большие команды рассмотрите переход с файлового бэкенда пользователей (authentication_backend.file) на LDAP или SQL. Это позволит централизованно управлять учетными записями.
Внедрение Authelia - это значительный шаг к повышению безопасности вашей инфраструктуры. Система дает контроль и гибкость, а следуя этому руководству, вы минимизируете риски на этапе развертывания. Для дальнейшей автоматизации рабочих процессов, включая взаимодействие с ИИ-моделями, вы можете изучить возможности агрегатора AiTunnel, который предоставляет единый API для более чем 200 моделей, включая GPT и Claude, с оплатой в рублях и управлением бюджетами.