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

Отримати VPS arrow_forward
eco Початковий Туторіал

Налаштування Authelia на VPS для

calendar_month Aug 01, 2026 schedule 22 хв. читання visibility 28 переглядів
Настройка 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 застосунків. Продовжуйте досліджувати його можливості для подальшого посилення захисту ваших цифрових активів.

Чи був цей гайд корисним?

Ваш відгук допомагає нам покращувати гайди.

Share this post:

Надішліть гайд тому, кому він може стати в пригоді.

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.