Free2FA: Телеграм-бот для двухфакторной аутентификации
Free2FA — это бесплатное, Open Source решение для двухфакторной аутентификации с пуш-уведомлениями, основанное на FreeRADIUS, Telegram-боте и административной веб панели управления. Применялось с Cisco AnyConnect, подходит для любых систем авторизации с пользователями из Active Directory.
Основные компоненты системы Free2FA включают:
Free2FA: Этот модуль отвечает за обработку запросов аутентификации через Telegram-бота, добавляя второй уровень безопасности после проверки логина и пароля.
FreeRADIUS: Используется для первичной проверки логина и пароля пользователя. После успешной проверки, запрос перенаправляется в Free2FA для дополнительной аутентификации с использованием второго фактора безопасности.
SSSD: (System Security Services Daemon) Для интеграции с доменом AD.
Микросервисы Free2FA:
free2fa_setup: Занимается начальной настройкой системы, включая генерацию и управление необходимыми сертификатами.
free2fa_admin_html: Предлагает веб-интерфейс для администрирования системы, позволяя управлять настройками и пользователями.
free2fa_admin_api: API сервис, обеспечивающий связь между административным веб-интерфейсом и сервером, для выполнения административных операций.
free2fa_api: Основной API сервис, обрабатывающий аутентификационные запросы и координирующий взаимодействие с Telegram-ботом для подтверждения доступа пользователей.
Интеграция с доменом
Для интеграции Linux-машины в домен и управления учетными данными используется SSSD (System Security Services Daemon), что соответствует современным требованиям безопасности. SSSD обеспечивает поддержку аутентификации через Kerberos, который является стандартом для безопасного обмена учетными данными в сетевых системах. Использование Kerberos вместе с SSSD гарантирует надежную и защищенную работу с учетными записями пользователей в домене, обеспечивая централизованное управление доступом и аутентификацию.
Установка Free2FA: Шаг за шагом
Подготовка сервера
Создание бота Telegram: Первым шагом является создание нового бота через BotFather в Telegram, чтобы использовать его в качестве механизма отправки уведомлений.
Настройка сервера: Подготовьте сервер на базе Ubuntu Server 22.04 LTS. Убедитесь, что сервер имеет как минимум 1 ядро процессора и 1024 МБ оперативной памяти. В зависимости от ожидаемой нагрузки, требования к ресурсам могут быть выше.
Создание директории для настроек: Откройте терминал и выполните команды для создания директории, где будут храниться настройки Free2FA:
mkdir -p /opt/2fa/ && cd /opt/2fa/
Запуск скрипта установки: Скачайте и запустите скрипт установки с помощью следующих команд:
curl -o install.sh https://raw.githubusercontent.com/CLLlAgOB/free2fa/main/install.sh && bash install.sh
Следуйте появляющимся инструкциям, чтобы завершить установку.
Настройка DNS для админ-панели: Создайте DNS запись для портала администратора. Используйте предложенный по умолчанию адрес (https://free2fa_admin_html) или тот, который вы указали в параметрах, и задайте его значение в
ADDITIONAL_DNS_NAME_FOR_ADMIN_HTML
. Имя пользователя и пароль для доступа в админ-панель по умолчанию установлены как admin/admin.
После выполнения этих шагов система Free2FA будет готова к использованию. Вы сможете настроить двухфакторную аутентификацию через созданного Telegram-бота для повышения безопасности доступа к вашим сервисам.
Отладка и управление Free2FA
Для управления службой Free2FA и отладки используйте следующие команды:
Для просмотра журналов Docker, перейдите в директорию установки и выполните:
docker-compose logs -f
Для доступа к журналам FreeRADIUS, используйте команду:
cat /var/log/freeradius/radius.log
Для запуска FreeRADIUS в режиме отладки, сначала остановите службу:
service freeradius stop
Затем запустите FreeRADIUS с дополнительными параметрами отладки:
freeradius -Xx
Конфигурация Free2FA
Настройте параметры Free2FA в соответствии с вашими требованиями:
CA_EXPIRY_DAYS
: Срок действия центра сертификации, в днях.FREE2FA_TELEGRAM_BOT_TOKEN
: Токен Telegram-бота.FREE2FA_TELEGRAM_BOT_LANGUAGE
: Язык бота (ru
илиen
).FREE2FA_AUTO_REG_ENABLED
: Автоматическая регистрация новых пользователей без Telegram ID.FREE2FA_BYPASS_ENABLED
: Пропуск аутентификации для пользователей без Telegram ID.RADIUS_CLIENT_SECRET
: Секретный ключ для RADIUS.FREE2FA_TIMEOUT
: Максимальное время ожидания подтверждения входа. (10–20 сек.)RADIUS_START_SERVERS
,RADIUS_MAX_SERVERS
,RADIUS_MAX_SPARE_SERVERS
,RADIUS_MIN_SPARE_SERVERS
: Параметры для настройки серверов RADIUS.ADMIN_SECRET_KEY
: Ключ для доступа к административной панели.RESET_PASSWORD
: Включение функции сброса пароля.ALLOW_API_FAILURE_PASS
: Разрешить вход без 2FA при недоступности API Telegram.ADDITIONAL_DNS_NAME_FOR_ADMIN_HTML
: DNS имя для административной панели.RADIUS_CLIENT_IP
: Ожидаемый IP-адрес клиента RADIUS.
Эти параметры помогут настроить систему под конкретные требования и обеспечить ее эффективное функционирование.
Настройка клиента RADIUS
Таймаут: Настройте таймаут на клиенте RADIUS на 3 секунды больше, чем значение
FREE2FA_TIMEOUT
, установленное для Free2FA.Управление паролями: Отключите управление паролями на клиенте RADIUS, если предусмотрена такая возможность, поскольку текущая реализация не поддерживает CHAPv2.
При первом входе в систему необходимо изменить пароль администратора для обеспечения безопасности.
Примечание по работе с логинами пользователей:
Логины пользователей в базе данных сохраняются в унифицированном формате "domain\username"
, независимо от способа ввода. Это обеспечивает единообразие и консистентность данных в базе, упрощая управление учетными записями. Независимо от того, ввел ли пользователь свой логин как:
В базе данных он будет записан как "domain\username"
.
SSSD (System Security Services Daemon), используемый для интеграции системы с доменом, настроен на режим работы с кешированием. Это означает, что изменения в домене, такие как обновление учетных данных или изменение политик безопасности, могут отображаться на клиенте с задержкой до 20 минут. В зависимости от требований безопасности и оперативности, кеширование можно настроить под конкретные нужды или полностью отключить для обеспечения мгновенного отклика на изменения в домене.
Для удобства управления настройками на одном сервере был добавлен control.sh
скрипт, позволяющий настраивать несколько конфигураций системы.
Ссылка на репозиторий