Free2FA: Телеграм-бот для двухфакторной аутентификации

da76e433f0d846264437798bb8b8af43.jpg

Free2FA — это бесплатное, Open Source решение для двухфакторной аутентификации с пуш-уведомлениями, основанное на FreeRADIUS, Telegram-боте и административной веб панели управления. Применялось с Cisco AnyConnect, подходит для любых систем авторизации с пользователями из Active Directory.

Основные компоненты системы Free2FA включают:

  • Free2FA: Этот модуль отвечает за обработку запросов аутентификации через Telegram-бота, добавляя второй уровень безопасности после проверки логина и пароля.

  • FreeRADIUS: Используется для первичной проверки логина и пароля пользователя. После успешной проверки, запрос перенаправляется в Free2FA для дополнительной аутентификации с использованием второго фактора безопасности.

  • SSSD: (System Security Services Daemon) Для интеграции с доменом AD.

Микросервисы Free2FA:

  1. free2fa_setup: Занимается начальной настройкой системы, включая генерацию и управление необходимыми сертификатами.

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

  3. free2fa_admin_api: API сервис, обеспечивающий связь между административным веб-интерфейсом и сервером, для выполнения административных операций.

  4. free2fa_api: Основной API сервис, обрабатывающий аутентификационные запросы и координирующий взаимодействие с Telegram-ботом для подтверждения доступа пользователей.

Интеграция с доменом

Для интеграции Linux-машины в домен и управления учетными данными используется SSSD (System Security Services Daemon), что соответствует современным требованиям безопасности. SSSD обеспечивает поддержку аутентификации через Kerberos, который является стандартом для безопасного обмена учетными данными в сетевых системах. Использование Kerberos вместе с SSSD гарантирует надежную и защищенную работу с учетными записями пользователей в домене, обеспечивая централизованное управление доступом и аутентификацию.

Установка Free2FA: Шаг за шагом

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

  1. Создание бота Telegram: Первым шагом является создание нового бота через BotFather в Telegram, чтобы использовать его в качестве механизма отправки уведомлений.

  2. Настройка сервера: Подготовьте сервер на базе Ubuntu Server 22.04 LTS. Убедитесь, что сервер имеет как минимум 1 ядро процессора и 1024 МБ оперативной памяти. В зависимости от ожидаемой нагрузки, требования к ресурсам могут быть выше.

  3. Создание директории для настроек: Откройте терминал и выполните команды для создания директории, где будут храниться настройки Free2FA:

    mkdir -p /opt/2fa/ && cd /opt/2fa/
  4. Запуск скрипта установки: Скачайте и запустите скрипт установки с помощью следующих команд:

    curl -o install.sh https://raw.githubusercontent.com/CLLlAgOB/free2fa/main/install.sh && bash install.sh

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

  5. Настройка 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

  1. Таймаут: Настройте таймаут на клиенте RADIUS на 3 секунды больше, чем значение FREE2FA_TIMEOUT, установленное для Free2FA.

  2. Управление паролями: Отключите управление паролями на клиенте RADIUS, если предусмотрена такая возможность, поскольку текущая реализация не поддерживает CHAPv2.

При первом входе в систему необходимо изменить пароль администратора для обеспечения безопасности.

3474fe63826aaa742e14055baf81ad29.png

Примечание по работе с логинами пользователей:

Логины пользователей в базе данных сохраняются в унифицированном формате "domain\username", независимо от способа ввода. Это обеспечивает единообразие и консистентность данных в базе, упрощая управление учетными записями. Независимо от того, ввел ли пользователь свой логин как:

В базе данных он будет записан как "domain\username".

SSSD (System Security Services Daemon), используемый для интеграции системы с доменом, настроен на режим работы с кешированием. Это означает, что изменения в домене, такие как обновление учетных данных или изменение политик безопасности, могут отображаться на клиенте с задержкой до 20 минут. В зависимости от требований безопасности и оперативности, кеширование можно настроить под конкретные нужды или полностью отключить для обеспечения мгновенного отклика на изменения в домене.

Для удобства управления настройками на одном сервере был добавлен control.sh скрипт, позволяющий настраивать несколько конфигураций системы.

Ссылка на репозиторий

© Habrahabr.ru