Руководство по установке и настройке Ligament 2FA
Официальное пошаговое техническое руководство администратора информационной безопасности по развёртыванию ядра Ligament Core в Docker, интеграции со службой каталогов Active Directory/FreeIPA, настройке факторов аутентификации и централизованной раскатке клиентских агентов.
Платформа Ligament функционирует полностью автономно внутри вашего изолированного контура (100% On-Premise). Все мастер-ключи шифрования, база данных пользователей, сессии и журналы аудита безопасности хранятся в защищённой реляционной СУБД PostgreSQL. Решение не обращается к внешним серверам и готово к работе в сетях без интернета (Air-Gapped).
Минимальные требования к хосту:
• CPU: 1 ядро x86_64 или ARM64.
• RAM: 1 ГБ (рекомендуется 2 ГБ для сред от 500 пользователей).
• Диск: 10 ГБ SSD/NVMe под ОС, образы и базу PostgreSQL.
• ОС: Astra Linux (SE 1.7 / CE), РЕД ОС (7.3 / 8), Альт Сервер, Ubuntu 22.04/24.04, Debian 12, Rocky Linux 9.
Таблица сетевых портов
| Порт | Протокол | Служба | Назначение |
|---|---|---|---|
80 |
TCP | HTTP | Редирект на HTTPS и ACME HTTP-01 challenge Let's Encrypt |
8080 |
TCP | Web UI / API | Панель администратора, кабинет пользователя, REST API, WebSSO |
443 |
TCP | HTTPS / WSS | Защищённый доступ клиентов, филиальных релеев и WebAuthn/Passkey |
1812 |
UDP | RADIUS Auth | Аутентификация MikroTik, VPN (OpenVPN, WireGuard), Wi-Fi 802.1X |
1813 |
UDP | RADIUS Acct | Учёт сетевого времени и трафика клиентских сессий |
Ядро платформы упаковано в официальный оптимизированный образ Docker Hub aligorov/ligament_2fa. Для установки не требуются компиляторы и утилиты сборки.
Вариант А: Быстрый старт официальным скриптом (Рекомендуется)
Скрипт проверяет Docker, тестирует свободность портов 80/8080 (TCP) и 1812/1813 (UDP), генерирует надёжный пароль PostgreSQL в .env (с правами 0600), разворачивает контейнеры и выгружает первичные ключи.
mkdir -p /opt/ligament && cd /opt/ligament
curl -fsSL https://raw.githubusercontent.com/aligorov/ligament/main/install.sh -o install.sh
chmod +x install.sh && ./install.sh
Вариант Б: Ручное развёртывание через Docker Compose
Создайте каталог /opt/ligament и сохраните файл docker-compose.yml:
services:
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: twofa
POSTGRES_PASSWORD: "${TWOFA_PG_PASSWORD:?Укажите TWOFA_PG_PASSWORD в .env}"
POSTGRES_DB: twofa
volumes:
- twofa_pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U twofa -d twofa"]
interval: 5s
timeout: 3s
retries: 20
restart: unless-stopped
twofa:
image: aligorov/ligament_2fa:latest
hostname: ligament-auth
depends_on:
db:
condition: service_healthy
environment:
TWOFA_DB_DSN: "postgres://twofa:${TWOFA_PG_PASSWORD}@db:5432/twofa"
TRUSTED_PROXIES: "127.0.0.0/8,::1/128,172.16.0.0/12,10.0.0.0/8,192.168.0.0/16"
ports:
- "80:8080"
- "8080:8080"
- "1812:1812/udp"
- "1813:1813/udp"
volumes:
- /etc/machine-id:/etc/host-machine-id:ro
restart: unless-stopped
volumes:
twofa_pgdata:
Сгенерируйте файл .env и запустите стек:
echo "TWOFA_PG_PASSWORD=$(openssl rand -hex 24)" > .env
chmod 600 .env
docker compose up -d
Пароль администратора никогда не пишется в консольные логи контейнера. При первом запуске система создаёт учётную запись admin, записывает первичный пароль в admin_password.txt и создаёт 5 одноразовых кодов аварийного восстановления admin_recovery_codes.txt.
# Забрать сгенерированный пароль администратора:
docker cp $(docker compose ps -q twofa):/home/nonroot/admin_password.txt .
# Забрать 5 одноразовых аварийных кодов восстановления:
docker cp $(docker compose ps -q twofa):/home/nonroot/admin_recovery_codes.txt .
# Вывести пароль:
cat admin_password.txt
Порядок действий сразу после авторизации:
1. Откройте в браузере http://IP-сервера:8080 (логин: admin).
2. Сохраните admin_recovery_codes.txt в корпоративный сейф (KeePass/Vault).
3. Удалите файл пароля с хоста: rm -f admin_password.txt.
4. В профиле измените пароль на постоянный и подключите второй фактор (TOTP / Telegram).
По умолчанию включена бесплатная редакция Community — до 5 активных сотрудников бессрочно.
Для перехода на коммерческую редакцию или активации 30-дневного пилота:
- Откройте раздел веб-интерфейса /admin → Лицензия.
- Вставьте лицензионный ключ в текстовое поле и нажмите «Сохранить лицензию».
- Ключ подписан цифровой подписью Ed25519 — он валидируется локально и применяется моментально без перезагрузки сервера и без выхода в интернет.
В разделе /admin → Настройки → Домен и шаблоны укажите внешний URL вашего сервера в параметре server.domain (например: https://auth.company.corp).
Рекомендуемая схема: Контейнер Ligament работает на внутреннем порту 8080, а входящий трафик терминируется на вашем внешнем обратном прокси (Nginx, Traefik, HAProxy, Caddy) с пробросом заголовков X-Forwarded-For и X-Forwarded-Proto: https.
Импорт пользователей и проверка доменных паролей выполняются по защищённому протоколу LDAPS. В панели /admin → Настройки → Служба каталогов (LDAP) укажите:
| Параметр | Значение | Назначение |
|---|---|---|
enabled | true | Включение модуля синхронизации |
url | ldaps://dc1.company.corp:636 | Контроллер домена с шифрованием |
bind_dn | CN=svc-ligament,OU=Services,DC=company,DC=corp | Служебная учётка для поиска |
bind_password | •••••••••••• | Пароль служебной учётки |
base_dn | DC=company,DC=corp | Корень дерева поиска сотрудников |
user_filter | (&(objectCategory=person)(sAMAccountName={login})) | Шаблон поиска логина |
cache_passwords | true | Шифрование паролей для Wi-Fi 802.1X PEAP |
В разделе /admin → Настройки включите требуемые каналы подтверждения:
- Telegram-бот: Создайте бота через
@BotFatherи укажите токен вtelegram.bot_token. Сотрудники подтверждают вход кнопкой в мессенджере или вводом числа (Number Matching). - Корпоративная почта (SMTP): Оповещение одноразовыми кодами подтверждения через ваш почтовый сервер.
- FIDO2 / Passkeys / WebAuthn: Аппаратные токены (Рутокен MFA, YubiKey) и системные датчики (Windows Hello, Touch ID).
Ligament Core предоставляет встроенный RADIUS-сервер (UDP 1812 / 1813). Для защиты маршрутизаторов MikroTik выполните в консоли RouterOS:
/radius add address=192.168.1.10 secret="ВашСекретныйКлюч" service=login,ppp,wireless timeout=5s
/user aaa set use-radius=yes
/ppp aaa set use-radius=yes accounting=yes
/radius incoming set accept=yes
Модуль Credential Provider устанавливается на рабочие станции и серверы Windows для защиты консольного и RDP входа с поддержкой мгновенного Auto-Logon.
Интерфейс входа в систему
Настройка групповой политики (GPO):
1. Скопируйте Ligament2FA.admx в \\domain\SYSVOL\domain\Policies\PolicyDefinitions\.
2. Скопируйте Ligament2FA.adml в папку PolicyDefinitions\ru-RU\.
3. В оснастке gpmc.msc включите Server URL (https://auth.company.corp:8080), Auto-Logon (Enabled) и Number Matching (Enabled).
Для сотрудников под управлением Windows и российских ОС Linux (Astra Linux 1.7, РЕД ОС, Альт) доступно графическое приложение Ligament Authenticator.
Узел Relay решает две ключевые задачи удалённых подразделений:
- Безопасный проброс RDP и SSH: Устанавливает исходящий туннель WSS (:443) к Core, обеспечивая удалённый доступ без белого IP и без открытия портов 3389/22 наружу.
- Резервный RADIUS для Wi-Fi: При обрыве интернет-канала выступает локальным автономным RADIUS-сервером (802.1X WPA2/WPA3 Enterprise) по локальному кэшу.
• Healthcheck: curl -I http://localhost:8080/healthz (возвращает HTTP 200 OK).
• Журнал аудита: В реальном времени фиксируется в панели /admin/audit.
• Резервное копирование базы:
docker compose exec -T db pg_dump -U twofa twofa | gzip > "ligament_backup_$(date +%F_%H%M).sql.gz"