bolt Valebyte VPS от $4/мес — NVMe, запуск за 60 секунд.

Получить VPS arrow_forward
eco Начальный Туториал

Настройка Authelia на VPS для централизованной аутентификации и двухфакторной защиты веб-приложений

calendar_month Aug 01, 2026 schedule 22 мин. чтения visibility 27 просмотров
Настройка Authelia на VPS для централизованной аутентификации и двухфакторной защиты веб-приложений
info

Нужен сервер для этого гайда? Мы предлагаем выделенные серверы и VPS в 50+ странах с мгновенной настройкой.

Нужен сервер для этого гайда?

Разверните VPS или выделенный сервер за минуты.

Настройка Authelia на VPS для централизованной аутентификации и двухфакторной защиты веб-приложений

TL;DR

В этом подробном руководстве мы шаг за шагом настроим Authelia на вашем VPS, чтобы обеспечить централизованную аутентификацию и надежную двухфакторную защиту для любых ваших веб-приложений. Вы узнаете, как использовать Docker и Caddy для развертывания Authelia, интегрировать ее с вашими сервисами и защитить их от несанкционированного доступа.

  • Установка и настройка Authelia с использованием Docker Compose.
  • Интеграция Authelia с обратным прокси-сервером Caddy для автоматического HTTPS.
  • Защита ваших веб-приложений с помощью единой точки аутентификации.
  • Внедрение двухфакторной аутентификации (2FA) для повышения безопасности.
  • Рекомендации по бэкапам, обслуживанию и устранению типичных проблем.
  • Подробные команды и примеры конфигурационных файлов, актуальные для 2026 года.

Что мы настраиваем и зачем

Схема: Что мы настраиваем и зачем
Схема: Что мы настраиваем и зачем

В современном мире, где каждый разработчик, соло-фаундер или даже геймер управляет несколькими веб-сервисами на своем VPS, задача обеспечения безопасности и удобства доступа становится критически важной. Часто приходится иметь дело с десятками логинов и паролей для GitLab, Mattermost, Grafana, Nextcloud, Minecraft-сервера или даже собственной ноды блокчейна. Это не только неудобно, но и небезопасно, особенно если для каждого сервиса приходится настраивать отдельную двухфакторную аутентификацию (2FA).

Именно здесь на помощь приходит Authelia. Authelia — это бесплатное решение с открытым исходным кодом, которое выступает в роли шлюза аутентификации (Authentication Gateway) для ваших веб-приложений. Она позволяет централизовать процесс аутентификации и авторизации, а также добавить второй фактор защиты (2FA) для доступа к любому сервису, находящемуся за ней. Проще говоря, вы настраиваете Authelia один раз, и она берет на себя проверку пользователей перед тем, как они получат доступ к вашим приложениям.

Что вы получите в итоге? Вы сможете защитить любое веб-приложение, работающее на вашем VPS, будь то внутренний инструмент, панель управления или публичный сервис. Пользователям достаточно будет пройти аутентификацию один раз через Authelia, чтобы получить доступ ко всем разрешенным приложениям (Single Sign-On, SSO). Кроме того, Authelia принудительно включает 2FA для всех защищенных сервисов, значительно повышая их безопасность без необходимости настраивать 2FA в каждом приложении по отдельности. Это особенно ценно для критически важных сервисов, таких как админ-панели или финансовые инструменты.

Существуют альтернативы Authelia, такие как облачные решения (Okta, Auth0, Google Identity Platform) или другие self-hosted варианты (Keycloak, Pomerium, Authentik). Облачные сервисы удобны, но могут быть дорогими, ограничивают контроль над данными и могут не подходить для конфиденциальных или экспериментальных проектов. Self-hosted решения, такие как Authelia, напротив, дают вам полный контроль над данными, конфигурацией и безопасностью, при этом не требуя значительных финансовых вложений, кроме стоимости VPS. Выбор self-hosted на VPS идеален для тех, кто ценит независимость, экономию и гибкость, особенно если вы уже используете VPS для размещения своих сервисов.

Какой VPS-конфиг нужен под эту задачу

Схема: Какой VPS-конфиг нужен под эту задачу
Схема: Какой VPS-конфиг нужен под эту задачу

Authelia сама по себе не является ресурсоемким приложением, особенно если используется с локальной базой данных пользователей и SQLite для хранения внутренних данных. Однако, она будет работать в связке с обратным прокси-сервером (например, Caddy или Nginx), а также, возможно, с другими вашими веб-приложениями. Поэтому важно правильно подобрать конфигурацию VPS.

Минимальные требования для Authelia и Caddy:

  • CPU: 1-2 vCPU. Authelia и Caddy хорошо оптимизированы и не требуют много процессорного времени, за исключением пиковых нагрузок аутентификации.
  • RAM: 1-2 GB. Authelia в Docker-контейнере обычно потребляет от 50 до 200 МБ ОЗУ, Caddy — аналогично. Свободный объем RAM нужен для операционной системы и других фоновых процессов.
  • Диск: 25-50 GB SSD. Для операционной системы, Docker-образов, логов и конфигурационных файлов этого будет более чем достаточно. SSD важен для быстрой загрузки и работы.
  • Сеть: 100 Мбит/с. Для аутентификации трафик минимален. Если через этот же VPS будут работать другие высоконагруженные приложения, то потребуется более широкий канал.

Рекомендуемый VPS-план для типичной задачи (до 50-100 активных пользователей):

Для комфортной работы Authelia, Caddy и нескольких защищенных приложений (например, GitLab, Mattermost) рекомендуется следующий конфигурационный план:

  • CPU: 2 vCPU
  • RAM: 2-4 GB
  • Диск: 50-100 GB NVMe SSD (предпочтительнее для лучшей производительности)
  • Сеть: 1 Гбит/с порт с неограниченным трафиком или большим лимитом

Для аренды VPS с указанными характеристиками, вы можете рассмотреть провайдеров, предлагающих планы с 2 vCPU, 2-4 GB RAM и 50+ GB SSD. Такой конфиг обеспечит стабильную работу Authelia и защищаемых сервисов.

Когда нужен dedicated сервер, а не VPS?

Dedicated сервер может потребоваться, если:

  • Очень большое количество пользователей: Если вы планируете защищать сотни или тысячи активных пользователей, особенно с частыми запросами на аутентификацию.
  • Высоконагруженные защищаемые приложения: Если Authelia будет работать на том же сервере, что и крайне ресурсоемкие приложения (например, крупный GitLab инстанс, Elasticsearch, базы данных с высокой нагрузкой), то выделенный сервер предоставит гарантированную производительность.
  • Требования к производительности и изоляции: Для критически важных корпоративных систем, где важна полная изоляция от "соседей" по гипервизору и гарантированная производительность I/O диска и сети.
  • Сложные интеграции: Если Authelia будет интегрирована с несколькими внешними LDAP/Active Directory серверами или другими SSO-провайдерами, что может увеличить нагрузку.

Для большинства личных проектов, небольших команд или соло-фаундеров SaaS, VPS с описанными выше характеристиками будет более чем достаточен.

Локация VPS: на что влияет

Выбор локации VPS влияет на несколько ключевых аспектов:

  • Задержка (Latency): Чем ближе сервер к вашим основным пользователям, тем ниже будет задержка. Это критично для интерактивных приложений и общего пользовательского опыта. Для аутентификации это означает более быструю загрузку страниц входа.
  • Регуляторные требования: В зависимости от того, где находится ваша аудитория и какие данные вы обрабатываете, могут применяться различные законы о защите данных (например, GDPR в Европе). Выбор сервера в определенной юрисдикции может помочь соблюсти эти требования.
  • Стоимость: Цены на VPS могут варьироваться в зависимости от локации.
  • Доступность сервисов: Некоторые облачные хранилища или внешние сервисы могут быть более доступны или быстрее работать из определенных регионов.

Выбирайте локацию, которая географически ближе к большинству ваших пользователей, чтобы минимизировать задержки при доступе к защищенным приложениям.

Подготовка сервера

Схема: Подготовка сервера
Схема: Подготовка сервера

Перед тем как приступить к установке Authelia, необходимо подготовить ваш VPS. В этом руководстве мы будем использовать Ubuntu Server 24.04 LTS, так как это актуальная и стабильная версия операционной системы на 2026 год, широко используемая в продакшене.

1. Подключение по SSH

Подключитесь к вашему новому VPS с помощью SSH. Используйте пользователя root или пользователя, предоставленного вашим хостинг-провайдером.


ssh user@your_vps_ip_address

2. Обновление системы

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


sudo apt update          # Обновление списка пакетов
sudo apt upgrade -y      # Обновление установленных пакетов до последних версий
sudo apt autoremove -y   # Удаление ненужных зависимостей

3. Создание нового пользователя и настройка sudo (опционально, но рекомендуется)

Работа под пользователем root небезопасна. Создайте нового пользователя с ограниченными правами и предоставьте ему возможность выполнять команды с sudo.


sudo adduser authelia_admin          # Создание нового пользователя
sudo usermod -aG sudo authelia_admin # Добавление пользователя в группу sudo

Теперь выйдите из сессии root и войдите под новым пользователем:


exit
ssh authelia_admin@your_vps_ip_address

4. Настройка SSH-ключей (рекомендуется)

Для повышения безопасности рекомендуется использовать SSH-ключи вместо паролей. Если вы еще не настроили их, скопируйте свой публичный SSH-ключ на сервер.


ssh-copy-id authelia_admin@your_vps_ip_address # Выполните на вашей локальной машине

После копирования ключей можно отключить аутентификацию по паролю в файле /etc/ssh/sshd_config, установив PasswordAuthentication no и перезапустив SSH-сервис.


sudo nano /etc/ssh/sshd_config
# Найдите строку "PasswordAuthentication yes" и измените на "no"
# Сохраните и закройте файл (Ctrl+X, Y, Enter)
sudo systemctl restart sshd

5. Настройка Firewall (UFW)

Uncomplicated Firewall (UFW) — это простой в использовании интерфейс для iptables. Настройте его, чтобы разрешить только необходимые порты (SSH, HTTP, HTTPS).


sudo apt install ufw -y          # Установка UFW
sudo ufw default deny incoming   # Запретить все входящие соединения по умолчанию
sudo ufw default allow outgoing  # Разрешить все исходящие соединения по умолчанию
sudo ufw allow OpenSSH           # Разрешить SSH (порт 22)
sudo ufw allow http              # Разрешить HTTP (порт 80)
sudo ufw allow https             # Разрешить HTTPS (порт 443)
sudo ufw enable                  # Включение UFW (подтвердите 'y')
sudo ufw status verbose          # Проверка статуса UFW

6. Установка Fail2ban

Fail2ban защищает ваш сервер от атак методом перебора, блокируя IP-адреса, которые делают слишком много неудачных попыток входа.


sudo apt install fail2ban -y     # Установка Fail2ban
sudo systemctl enable fail2ban   # Включение Fail2ban при запуске системы
sudo systemctl start fail2ban    # Запуск сервиса Fail2ban

Базовая конфигурация Fail2ban уже включает защиту SSH. Для более тонкой настройки можно скопировать и отредактировать файл /etc/fail2ban/jail.conf в /etc/fail2ban/jail.local.


sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
# В этом файле вы можете настроить, например, время бана (bantime) или количество попыток (maxretry)
# Сохраните и закройте, затем перезапустите Fail2ban:
sudo systemctl restart fail2ban

Теперь ваш сервер готов к установке Authelia и сопутствующего ПО.

Установка ПО — пошагово

Схема: Установка ПО — пошагово
Схема: Установка ПО — пошагово

Для развертывания Authelia мы будем использовать Docker и Docker Compose. Это обеспечивает изоляцию, упрощает управление зависимостями и облегчает обновление. В качестве обратного прокси-сервера, который будет перенаправлять запросы к Authelia и обеспечивать HTTPS, мы выберем Caddy благодаря его простоте настройки и автоматической работе с Let's Encrypt.

1. Установка Docker Engine

Docker Engine актуальной версии (например, v25.x или новее на 2026 год) необходим для запуска контейнеров Authelia и Caddy.


# Удаляем старые версии Docker, если они есть
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt remove $pkg; done

# Устанавливаем необходимые зависимости
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release -y

# Добавляем официальный GPG ключ Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Добавляем репозиторий Docker в APT-источники
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Обновляем список пакетов и устанавливаем Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

# Добавляем текущего пользователя в группу docker, чтобы не использовать sudo перед каждой командой docker
sudo usermod -aG docker $USER
# Выйдите и снова войдите в систему, чтобы изменения вступили в силу:
# exit
# ssh authelia_admin@your_vps_ip_address

# Проверяем установку Docker
docker run hello-world

Если команда docker run hello-world отработала успешно, Docker установлен и работает.

2. Создание структуры директорий для Authelia

Мы создадим отдельную директорию для всех файлов Authelia, включая конфигурацию, данные и Docker Compose файл.


mkdir -p ~/authelia/config         # Создаем основную директорию и поддиректорию для конфигурации
cd ~/authelia                      # Переходим в директорию authelia

3. Создание файла docker-compose.yml

Этот файл будет определять наши сервисы: Authelia и Caddy.


nano docker-compose.yml

Вставьте следующее содержимое (актуально для Docker Compose v3.x и Authelia v4.x):


version: "3.8"

services:
  authelia:
    image: authelia/authelia:4.37.0 # Актуальная версия на 2026 год, например, 4.37.0
    container_name: authelia
    restart: unless-stopped
    volumes:
      - ./config:/config
    environment:
      - AUTHELIA_CONFIG=/config/configuration.yml
      # Переменные окружения для секретов (будут созданы позже)
      - AUTHELIA_JWT_SECRET=replace_with_a_strong_jwt_secret
      - AUTHELIA_SESSION_SECRET=replace_with_a_strong_session_secret
      - AUTHELIA_DUO_API_SECRET=replace_with_a_duo_api_secret # Если используете Duo Security
      - AUTHELIA_AUTHENTICATION_BACKEND_LDAP_PASSWORD=replace_with_ldap_bind_password # Если используете LDAP
    ports:
      - "9091:9091" # Порт по умолчанию для Authelia, будет проксироваться Caddy
    healthcheck:
      test: ["CMD", "authelia", "healthcheck"]
      interval: 5s
      timeout: 3s
      retries: 5

  caddy:
    image: caddy:2.7.6-alpine # Актуальная версия Caddy на 2026 год, например, 2.7.6
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./caddy_data:/data # Для хранения сертификатов Let's Encrypt
    depends_on:
      - authelia # Caddy зависит от Authelia

networks:
  default:
    name: authelia_network # Опционально, для лучшей организации

Сохраните файл (Ctrl+X, Y, Enter).

4. Генерация секретов

Authelia требует надежных секретов для JWT-токенов и сессий. Сгенерируйте их с помощью следующей команды (можно несколько раз для разных секретов):


openssl rand -base64 64 # Генерирует 64-байтный секрет в Base64

Скопируйте полученные строки. Вам потребуется как минимум две: для AUTHELIA_JWT_SECRET и AUTHELIA_SESSION_SECRET. Замените их в файле docker-compose.yml.

ВАЖНО: Никогда не используйте одни и те же секреты. Генерируйте уникальные для каждого.

5. Запуск Docker Compose (первый раз)

Запустите контейнеры. Они, скорее всего, не запустятся полностью, так как Authelia еще не сконфигурирована, но это позволит создать необходимые директории и проверить базовую работоспособность Docker.


docker compose up -d           # Запуск сервисов в фоновом режиме
docker compose ps              # Проверка статуса контейнеров

Вы увидите, что контейнеры authelia и caddy запущены, но Authelia может быть в состоянии "unhealthy" или "restarting" из-за отсутствия конфигурации.

Конфигурация

Схема: Конфигурация
Схема: Конфигурация

Теперь, когда основные компоненты установлены, пришло время настроить Authelia и Caddy.

1. Конфигурация Authelia (configuration.yml)

Создайте файл configuration.yml в директории ~/authelia/config/. Этот файл содержит все настройки Authelia.


nano ~/authelia/config/configuration.yml

Вставьте следующий пример конфигурации. Обратите внимание, что мы используем SQLite для базы данных и локальный файл для пользователей, что упрощает начальную настройку. Замените your_domain.com на ваш реальный домен.


# configuration.yml
# Актуальная структура для Authelia v4.x на 2026 год

server:
  host: 0.0.0.0
  port: 9091
  tls:
    enabled: false # Caddy будет обрабатывать TLS

log:
  level: debug # Измените на 'info' или 'warn' для продакшена
  format: json

authentication_backend:
  file:
    path: /config/users_database.yml # Путь к файлу с пользователями

session:
  domain: your_domain.com # Замените на ваш домен
  secret: "$AUTHELIA_SESSION_SECRET" # Берется из переменной окружения
  name: authelia_session
  expiration: 1h
  inactivity: 5m
  remember_me_duration: 1d

TOTP:
  issuer: authelia.your_domain.com # Замените на ваш домен

access_control:
  default_policy: deny # По умолчанию запрещаем все
  rules:
    - domain: "authelia.your_domain.com" # Доступ к самой Authelia
      policy: bypass # Не требует аутентификации для страницы логина
    - domain: "auth.your_domain.com" # Домен, через который будет доступна Authelia
      policy: bypass # Не требует аутентификации для страницы логина
    - domain: ".your_domain.com" # Защищаем все поддомены
      policy: two_factor # Требуем двухфакторную аутентификацию
      # users: ["john", "jane"] # Можно ограничить доступ конкретным пользователям

identity_providers:
  oidc:
    enabled: false # OIDC можно включить позже для интеграции с другими IdP

notifier:
  smtp:
    host: "smtp.mail.com" # Замените на ваш SMTP-сервер
    port: 587
    username: "authelia@your_domain.com" # Замените на ваш адрес
    password: "your_smtp_password" # Пароль для SMTP
    sender: "Authelia " # Отправитель
    disable_starttls: false
    disable_require_tls: false

storage:
  sqlite:
    path: /config/db.sqlite3 # Путь к файлу базы данных SQLite

jwt_secret: "$AUTHELIA_JWT_SECRET" # Берется из переменной окружения

duo_api:
  secret: "$AUTHELIA_DUO_API_SECRET" # Если используете Duo Security

Обязательно замените:

  • your_domain.com на ваш реальный домен (например, example.com).
  • Настройки SMTP-сервера в секции notifier, иначе Authelia не сможет отправлять письма для сброса пароля или 2FA.
  • Убедитесь, что переменные окружения $AUTHELIA_SESSION_SECRET и $AUTHELIA_JWT_SECRET соответствуют тем, что вы установили в docker-compose.yml.

2. Создание файла пользователей (users_database.yml)

Создайте файл users_database.yml в той же директории ~/authelia/config/. Здесь будут храниться пользователи и их пароли (в хешированном виде).


nano ~/authelia/config/users_database.yml

Для генерации хеша пароля используйте утилиту Authelia. Сначала запустите контейнер:


# Запустите Authelia, если она не запущена, или обновите:
docker compose pull authelia
docker compose up -d authelia

# Затем выполните команду для генерации хеша пароля
docker compose exec authelia authelia hash-password your_strong_password
# Пример вывода: $argon2id$v=19$m=65536,t=3,p=4$some_salt$some_hash

Скопируйте полученный хеш и вставьте его в файл users_database.yml:


# users_database.yml
users:
  john:
    display_name: John Doe
    password: "your_hashed_password_for_john" # Вставьте хеш, полученный выше
    email: john.doe@your_domain.com
    groups:
      - admins
      - developers
  jane:
    display_name: Jane Smith
    password: "your_hashed_password_for_jane" # Вставьте хеш
    email: jane.smith@your_domain.com
    groups:
      - users

Сохраните файл.

3. Конфигурация Caddy (Caddyfile)

Создайте файл Caddyfile в директории ~/authelia/. Caddy будет слушать порты 80 и 443, автоматически получать SSL-сертификаты и перенаправлять трафик.


nano ~/authelia/Caddyfile

Вставьте следующий конфиг. Замените your_domain.com на ваш реальный домен и app.your_domain.com на домен вашего приложения, которое вы хотите защитить. Убедитесь, что DNS-записи для auth.your_domain.com и app.your_domain.com указывают на IP вашего VPS.


# Caddyfile
# Актуальная структура для Caddy v2.x на 2026 год

# Домен для Authelia
auth.your_domain.com {
  # Автоматический HTTPS
  tls internal # Используйте 'tls your_email@your_domain.com' для Let's Encrypt

  # Перенаправление на Authelia
  reverse_proxy authelia:9091 {
    # Заголовки, необходимые для Authelia
    header_up X-Original-URL {uri}
    header_up X-Forwarded-Proto {scheme}
    header_up X-Forwarded-Host {host}
    header_up X-Forwarded-For {remote_host}
  }

  # Дополнительные заголовки безопасности
  header {
    Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    X-Content-Type-Options "nosniff"
    X-Frame-Options "SAMEORIGIN"
    X-XSS-Protection "1; mode=block"
    Referrer-Policy "same-origin"
  }
}

# Пример защищаемого приложения (например, GitLab, Mattermost, Grafana)
app.your_domain.com {
  # Автоматический HTTPS
  tls internal # Используйте 'tls your_email@your_domain.com' для Let's Encrypt

  # Проверка аутентификации через Authelia
  handle_errors {
    @authelia {
      expression {http.response.status} in [401, 403]
    }
    rewrite @authelia /authelia
    reverse_proxy @authelia authelia:9091 {
      # Заголовки для Authelia
      header_up Remote-User {env.Remote-User}
      header_up Remote-Groups {env.Remote-Groups}
      header_up Remote-Name {env.Remote-Name}
      header_up Remote-Email {env.Remote-Email}
    }

    # Если аутентификация успешна, проксируем к приложению
    reverse_proxy localhost:8080 # Замените на адрес вашего приложения (например, localhost:3000 для Grafana)
  }

  # Если приложение не требует аутентификации, но вы хотите ее добавить
  # handle {
  #   # Проверка аутентификации через Authelia
  #   reverse_proxy authelia:9091 {
  #     # Заголовки для Authelia
  #     header_up Remote-User {env.Remote-User}
  #     header_up Remote-Groups {env.Remote-Groups}
  #     header_up Remote-Name {env.Remote-Name}
  #     header_up Remote-Email {env.Remote-Email}
  #   }
  #
  #   # Если аутентификация успешна, проксируем к приложению
  #   reverse_proxy localhost:8080 # Замените на адрес вашего приложения
  # }

  # Дополнительные заголовки безопасности
  header {
    Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    X-Content-Type-Options "nosniff"
    X-Frame-Options "SAMEORIGIN"
    X-XSS-Protection "1; mode=block"
    Referrer-Policy "same-origin"
  }
}

Важные моменты в Caddyfile:

  • tls internal: Caddy будет генерировать самоподписанные сертификаты для HTTPS. Для продакшена замените на tls your_email@your_domain.com, чтобы Caddy автоматически получал сертификаты от Let's Encrypt. Убедитесь, что порты 80 и 443 открыты и доступны из интернета.
  • authelia:9091: Указывает на контейнер Authelia по имени сервиса и его внутреннему порту.
  • localhost:8080: Замените на реальный адрес и порт вашего приложения, которое вы хотите защитить. Если приложение работает в другом Docker-контейнере в той же сети Docker Compose, используйте его имя сервиса (например, gitlab:80). Если это приложение на хосте, то localhost:PORT.
  • handle_errors: Этот блок перехватывает ошибки 401/403 (неавторизован/запрещено) от Authelia и перенаправляет на страницу логина Authelia.
  • header_up Remote-User ...: Authelia добавляет информацию об аутентифицированном пользователе в заголовки HTTP-запроса, которые затем передаются вашему защищенному приложению. Это позволяет приложению "знать", кто вошел в систему.

Сохраните файл.

4. Перезапуск Docker Compose сервисов

После всех изменений в конфигурации, перезапустите сервисы Docker Compose, чтобы они подхватили новые настройки.


cd ~/authelia                   # Убедитесь, что вы в директории с docker-compose.yml
docker compose down             # Останавливаем и удаляем старые контейнеры
docker compose up -d            # Запускаем новые контейнеры с обновленной конфигурацией
docker compose logs -f authelia # Проверяем логи Authelia на наличие ошибок
docker compose logs -f caddy    # Проверяем логи Caddy

В логах Authelia вы должны увидеть сообщения об успешной инициализации. В логах Caddy — об успешном получении сертификатов (если используете Let's Encrypt) и проксировании.

5. Проверка работоспособности

После запуска всех сервисов:

  1. Проверьте DNS: Убедитесь, что DNS-записи для auth.your_domain.com и app.your_domain.com указывают на IP вашего VPS.
  2. Доступ к Authelia: Откройте в браузере https://auth.your_domain.com. Вы должны увидеть страницу входа Authelia. Попробуйте войти с созданным пользователем (например, john и его паролем).
  3. Настройка 2FA: После первого входа Authelia предложит настроить двухфакторную аутентификацию (например, через Google Authenticator). Следуйте инструкциям.
  4. Доступ к защищенному приложению: Откройте в браузере https://app.your_domain.com. Если вы уже вошли через Authelia, вас должно автоматически перенаправить на приложение. В противном случае, вас перенаправит на страницу логина Authelia.
  5. Healthcheck: Вы можете проверить статус Authelia через curl:
  6. 
    curl -k https://auth.your_domain.com/api/health # -k для самоподписанных сертификатов
    

    Должен вернуться статус 200 OK.

Бэкапы и обслуживание

Схема: Бэкапы и обслуживание
Схема: Бэкапы и обслуживание

Настройка Authelia — это только начало. Крайне важно обеспечить регулярное резервное копирование и своевременное обслуживание, чтобы гарантировать надежность и безопасность вашей системы.

1. Что бэкапить

Для Authelia и связанных с ней компонентов необходимо резервировать следующие данные:

  • Конфигурационные файлы Authelia: ~/authelia/config/configuration.yml
  • База данных пользователей Authelia: ~/authelia/config/users_database.yml (если используете файловый бэкенд) или данные БД (например, ~/authelia/config/db.sqlite3 для SQLite). Если вы используете внешнюю базу данных (PostgreSQL, MySQL), то необходимо настроить бэкап этой базы данных.
  • Конфигурация Caddy: ~/authelia/Caddyfile
  • Данные Caddy: ~/authelia/caddy_data (содержит сертификаты Let's Encrypt и другие данные Caddy).

По сути, вам нужно бэкапить всю директорию ~/authelia/.

2. Простой скрипт автобэкапа

Мы создадим простой скрипт, который будет архивировать нужные директории и сохранять их с временной меткой. Для хранения бэкапов рекомендуется использовать внешнее хранилище, а не тот же VPS.


nano ~/authelia/backup_authelia.sh

Вставьте следующее содержимое:


#!/bin/bash

# Путь к директории Authelia
AUTHELIA_DIR="/home/authelia_admin/authelia" # Замените на ваш путь

# Директория для временного хранения бэкапов на VPS
BACKUP_TEMP_DIR="/tmp/authelia_backups"

# Директория для хранения бэкапов на внешнем хранилище (пример для S3-совместимого)
# S3_BUCKET="s3://your-s3-bucket/authelia-backups/"
# AWS_CLI_PROFILE="your-aws-profile" # Если используете AWS CLI с профилем

# Создаем временную директорию, если ее нет
mkdir -p "$BACKUP_TEMP_DIR"

# Формируем имя файла бэкапа с временной меткой
TIMESTAMP=$(date +%Y%m%d%H%M%S)
BACKUP_FILE="authelia_backup_${TIMESTAMP}.tar.gz"
FULL_BACKUP_PATH="${BACKUP_TEMP_DIR}/${BACKUP_FILE}"

echo "Starting Authelia backup at ${TIMESTAMP}..."

# Создаем архив
tar -czvf "$FULL_BACKUP_PATH" -C "$(dirname "$AUTHELIA_DIR")" "$(basename "$AUTHELIA_DIR")"

if [ $? -eq 0 ]; then
    echo "Backup created successfully: $FULL_BACKUP_PATH"

    # Пример загрузки на S3-совместимое хранилище (требует установленного awscli)
    # sudo apt install awscli -y
    # aws s3 cp "$FULL_BACKUP_PATH" "$S3_BUCKET" --profile "$AWS_CLI_PROFILE"

    # Пример копирования на другой сервер по SCP (требует настроенного SSH-ключа)
    # scp "$FULL_BACKUP_PATH" user@remote_server:/path/to/remote/backups/

    # Пример удаления старых бэкапов (оставляем последние 7 дней)
    find "$BACKUP_TEMP_DIR" -name "authelia_backup_.tar.gz" -type f -mtime +7 -delete
    echo "Old backups cleaned from $BACKUP_TEMP_DIR"

else
    echo "Error creating backup."
    exit 1
fi

echo "Authelia backup script finished."

Сделайте скрипт исполняемым:


chmod +x ~/authelia/backup_authelia.sh

3. Настройка Cron для автоматического запуска бэкапа

Добавьте задачу в Cron, чтобы скрипт бэкапа запускался автоматически, например, ежедневно в 3 часа ночи.


crontab -e

Добавьте следующую строку в конец файла (если используете authelia_admin):


0 3   * /home/authelia_admin/authelia/backup_authelia.sh >> /var/log/authelia_backup.log 2>&1

Эта строка запускает скрипт каждый день в 03:00 и перенаправляет вывод в лог-файл /var/log/authelia_backup.log.

4. Куда складывать бэкапы

Никогда не храните бэкапы на том же сервере, где находятся исходные данные. Это сводит на нет смысл бэкапа при выходе из строя диска или компрометации сервера. Рекомендуемые варианты:

  • Внешнее S3-совместимое хранилище: Дешево, надежно, масштабируемо (например, MinIO, Wasabi, Backblaze B2). Для работы со скриптом потребуется awscli.
  • Отдельный VPS: Вы можете арендовать небольшой VPS специально для хранения бэкапов и копировать туда архивы по SCP/SFTP.
  • NAS/локальное хранилище: Если у вас есть собственное сетевое хранилище, можно настроить копирование туда.

5. Обновления: rolling vs maintenance window

Регулярные обновления крайне важны для безопасности и стабильности Authelia и Docker.

  • Обновление ОС: Регулярно запускайте sudo apt update && sudo apt upgrade -y. Можно настроить автоматические обновления (unattended-upgrades) для патчей безопасности.
  • Обновление Docker: Обновляйте Docker Engine и Docker Compose, следуя официальной документации. Обычно это делается через apt upgrade, так как мы добавили репозиторий Docker.
  • Обновление Authelia и Caddy: Поскольку они работают в Docker-контейнерах, обновление сводится к обновлению образов и перезапуску сервисов.
  • 
    cd ~/authelia
    docker compose pull authelia caddy # Скачивает последние версии образов
    docker compose up -d               # Пересоздает контейнеры с новыми образами
    
  • Стратегия обновлений:
    • Rolling updates (непрерывные): Для некритичных изменений или если у вас кластер. В контексте одного VPS это означает обновление без длительного простоя. Для Authelia это может быть небольшое окно простоя (несколько секунд/минут).
    • Maintenance window (окно обслуживания): Для крупных обновлений, миграций или при наличии критически важных сервисов. Запланируйте время, предупредите пользователей и проведите обновление, имея возможность отката.

Всегда проверяйте официальную документацию Authelia по миграции перед крупными обновлениями, так как могут быть изменения в конфигурации или базе данных, требующие ручного вмешательства.

Troubleshooting + FAQ

В процессе настройки и эксплуатации Authelia могут возникать различные проблемы. Здесь собраны типичные вопросы и способы их решения.

1. Какой VPS-конфиг минимально подойдёт для Authelia и защищаемых приложений?

Минимально достаточный конфиг для Authelia, Caddy и одного-двух легковесных приложений (например, Grafana, небольшая wiki) будет включать 1 vCPU, 1 GB RAM и 25 GB SSD. Этого хватит для экспериментов и невысокой нагрузки. Однако, для более комфортной работы и возможности расширения рекомендуется 2 vCPU, 2-4 GB RAM и 50 GB SSD, особенно если вы планируете защищать более ресурсоемкие сервисы или иметь несколько активных пользователей. Убедитесь, что у вас есть достаточно дискового пространства для Docker-образов, логов и данных всех ваших приложений.

2. Что выбрать — VPS или dedicated для этой задачи?

Для большинства сценариев использования Authelia (личные проекты, команды до 50-100 человек, защита нескольких внутренних сервисов) VPS является оптимальным выбором. Он значительно дешевле, проще в управлении и предоставляет достаточную производительность. Dedicated сервер стоит рассматривать только в случаях очень высокой нагрузки (тысячи активных пользователей), строгих требований к изоляции ресурсов, необходимости запуска крайне ресурсоемких приложений на том же хосте, или если вы хотите иметь полный контроль над аппаратным обеспечением и его конфигурацией. Для начала всегда лучше выбрать VPS, а при необходимости масштабироваться до dedicated.

3. Почему Authelia не запускается или контейнер постоянно перезапускается?

Что проверить:

  • Логи контейнера Authelia: docker compose logs authelia. Это первое место, куда нужно смотреть.
  • Файл configuration.yml: Чаще всего проблемы возникают из-за синтаксических ошибок (отступы, опечатки) в YAML-файле или неверных путей к файлам.
  • Переменные окружения: Убедитесь, что AUTHELIA_JWT_SECRET и AUTHELIA_SESSION_SECRET установлены в docker-compose.yml и не пусты.
  • Права доступа: Убедитесь, что у Docker-контейнера есть права на чтение файлов в /config и запись в /config/db.sqlite3.

Как фиксить: Исправьте ошибки в configuration.yml. Используйте онлайн-валидаторы YAML. Убедитесь, что все секреты сгенерированы и вставлены корректно. Перезапустите контейнеры после исправлений: docker compose down && docker compose up -d.

4. Не могу получить доступ к Authelia по домену (Caddy не работает)?

Что проверить:

  • DNS-записи: Убедитесь, что домен (например, auth.your_domain.com) указывает на IP вашего VPS. Проверьте с помощью dig auth.your_domain.com.
  • Порты Firewall: Убедитесь, что порты 80 и 443 открыты на вашем VPS (sudo ufw status).
  • Логи Caddy: docker compose logs caddy. Ищите ошибки, связанные с TLS или проксированием.
  • Caddyfile: Проверьте синтаксис и правильность указания доменов и адресов проксирования (authelia:9091).
  • Сертификаты TLS: Если используете Let's Encrypt (tls your_email@your_domain.com), убедитесь, что домен доступен из интернета по HTTP, иначе Caddy не сможет получить сертификат.

Как фиксить: Исправьте DNS, откройте порты, проверьте Caddyfile. Если проблема с Let's Encrypt, временно используйте tls internal для проверки, а затем вернитесь к Let's Encrypt после устранения проблем с доступностью домена.

5. После входа в Authelia меня не перенаправляет в приложение, или приложение не видит пользователя?

Что проверить:

  • Caddyfile для приложения: Убедитесь, что блок для вашего приложения (например, app.your_domain.com) правильно настроен для проксирования через Authelia и передает необходимые заголовки (Remote-User, Remote-Email и т.д.).
  • Адрес защищаемого приложения: Убедитесь, что reverse_proxy localhost:PORT или service_name:PORT указывает на правильный адрес и порт вашего приложения.
  • Конфигурация Authelia (access_control): Убедитесь, что правила доступа в configuration.yml корректно настроены для домена вашего приложения.
  • Логи приложения: Проверьте логи вашего защищенного приложения. Возможно, оно не настроено на чтение заголовков, передаваемых Authelia, или ожидает другой формат.

Как фиксить: Проверьте Caddyfile и configuration.yml. Убедитесь, что ваше приложение поддерживает аутентификацию через заголовки HTTP (Header-based authentication) или OpenID Connect (OIDC), если вы настроили Authelia для OIDC. Многие приложения имеют опции для интеграции с прокси-аутентификацией (например, Nginx/Caddy auth_request).

6. Не работает 2FA (TOTP) или сброс пароля?

Что проверить:

  • Настройки SMTP: В configuration.yml проверьте секцию notifier.smtp. Убедитесь, что хост, порт, имя пользователя, пароль и отправитель указаны верно. Проверьте логи Authelia на ошибки отправки почты.
  • TOTP Issuer: Убедитесь, что TOTP.issuer в configuration.yml корректен, это влияет на отображение в аутентификаторе.
  • Синхронизация времени: Убедитесь, что время на вашем VPS синхронизировано (timedatectl). Расхождения могут вызывать проблемы с TOTP.

Как фиксить: Исправьте настройки SMTP. Установите ntp или systemd-timesyncd для синхронизации времени на VPS. Если проблема с TOTP, попробуйте перенастроить его в Authelia.

Выводы и следующие шаги

Схема: Выводы и следующие шаги
Схема: Выводы и следующие шаги

Поздравляем! Вы успешно настроили Authelia на вашем VPS, обеспечив централизованную аутентификацию и двухфакторную защиту для ваших веб-приложений. Теперь ваши сервисы защищены единой точкой входа, что значительно повышает безопасность и упрощает управление доступом для вас и вашей команды.

Что дальше?

  1. Интеграция большего количества приложений: Продолжайте интегрировать все ваши веб-сервисы (GitLab, Nextcloud, Grafana, Prometheus, Portainer и т.д.) с Authelia, добавляя соответствующие блоки в Caddyfile и правила в access_control Authelia.
  2. Расширенные возможности аутентификации: Рассмотрите интеграцию Authelia с внешними провайдерами идентификации, такими как OpenLDAP, Active Directory или даже OIDC-совместимыми сервисами, если вам нужно управлять большим количеством пользователей или использовать существующую инфраструктуру.
  3. Мониторинг и логирование: Настройте централизованное логирование (например, с помощью Loki/Promtail или ELK Stack) для Authelia и Caddy, чтобы отслеживать попытки входа, ошибки и активность пользователей. Это поможет оперативно выявлять и устранять проблемы безопасности.

Authelia — мощный инструмент, который дает вам полный контроль над безопасностью ваших self-hosted приложений. Продолжайте исследовать его возможности для дальнейшего усиления защиты ваших цифровых активов.

Был ли этот гайд полезен?

Ваш отзыв помогает нам улучшать гайды.

Поделиться записью:

Отправьте гайд тому, кому он может пригодиться.

Telegram VKVK WhatsApp Facebook LinkedIn XX

настройка authelia на vps для централизованной аутентификации и двухфакторной защиты веб-приложений
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.