Free2FA4RDG: Создание бесплатного решения для двухфакторной аутентификации через Telegram-бота для Windows RD Gateway
В мире, где безопасность данных становится все более критичной, необходимость в двухфакторной аутентификации (2FA) становится очевидной. Разочарованный отсутствием бесплатных Push-based 2FA решений для интеграции 2FA в службу RD Gateway Windows Server, я решил разработать свое собственное решение - Free2FA4RDG. Free2FA4RDG является бесплатным решением для двухфакторной аутентификации в Windows RD Gateway, использующим Telegram-бота в качестве второго фактора. Этот проект предлагает доступное и эффективное средство повышения безопасности удаленного рабочего стола (RDP), делая его особенно привлекательным для пользователей и организаций, ищущих экономичные способы усиления безопасности своих систем.
Основные компоненты
Free2FA4RDG состоит из нескольких ключевых компонентов, работающих вместе для обеспечения безопасности:
Микросервисная архитектура
Проект разделен на микросервисы docker контейнеры, каждый из которых выполняет свою уникальную функцию:
setup: Управляет начальной настройкой сертификатов.
admin_html/admin_api: Административный интерфейс и его API.
api: Главный API для обработки запросов аутентификации.
freeradius: Интегрирует сервер FreeRADIUS для обработки запросов RADIUS.
SQLite: Легковесная база для хранения настроек пользователей поставляемый в виде volume.
Совместимость и Требования
Система совместима со всеми RDG версиями Windows Server от 2012 до 2022. Для работы требуются: сервер с Docker Compose, доступ к `api.telegram.org` и `hub.docker.com`, а также регистрация Telegram-бота.
Процесс установки и работы
Подготовка сервера
1. Произведите установку Linux, выбрав Ubuntu 22.04 LTS или CentOS 7 (проверено на этих версиях).
2. Создайте директорию для настроек Free2FA4RDG:
mkdir -p /opt/2fa/ && cd /opt/2fa/
3. Запустите скрипт установки:
curl -o install.sh https://raw.githubusercontent.com/CLLlAgOB/free2fa4rdg/main/install.sh && bash install.sh
4. Следуйте инструкциям скрипта.
5. После завершения скрипта установки, вы можете запустить приложение из директории /opt/2fa/, либо из той директории, где был выполнен скрипт установки. Для запуска приложения используйте команду docker-compose up -d. Опция -d позволяет запустить приложение в фоновом режиме, не блокируя терминал.
Если вы запустили приложение в фоновом режиме и хотите подключиться к потоку его логов, используйте команду docker-compose logs -f [service_name], где [service_name] - это имя сервиса в вашем docker-compose файле, для которого вы хотите просмотреть логи.
Крайне рекомендую ограничить доступ к порту 1812 udp, с помощью фаервола на хостовой машине.
Настройка NPS

1. Создайте новую группу в разделе Remote RADIUS Server Groups:
- Group name: free2fa4rdg
- Server: IP-адрес Linux-сервера.
- Shared secret: Ваш секрет, который будет в файле .env (`RADIUS_CLIENT_SECRET`).
- Load Balancing: поставьте таймауты по 60 секунд.

2. В Connection Requests Policies откройте свойства политики `TS GATEWAY AUTHORIZATION POLICY` и установите `Forward requests to the following remote RADIUS server group for authentication: free2fa4rdg`.

Параметры конфигурации
FREE2FA_AUTO_REG_ENABLED: Автоматическая регистрация новых пользователей.(Новые пользователи буду создаваться в базе автоматически с Telegram ID 0, на портале администратора необходимо указать реальный ID)
FREE2FA_BYPASS_ENABLED: (true/false) Пропуск пользователей без запроса с Telegram ID 0.
RADIUS_CLIENT_SECRET: Секретная фраза для RADIUS.
FREE2FA_TIMEOUT: Время ожидания подтверждения входа(от 10 до 20).
RADIUS_START_SERVERS: Количество начальных процессов RADIUS сервера.
RADIUS_MAX_SERVERS: Максимальное количество процессов RADIUS сервера.
RADIUS_MAX_SPARE_SERVERS: Максимальное количество резервных процессов RADIUS сервера.
RADIUS_MIN_SPARE_SERVERS: Минимальное количество резервных процессов RADIUS сервера.
ADMIN_SECRET_KEY: Ключ администратора (генерируется, если оставить пустым).
RESET_PASSWORD: Включение функции сброса пароля(для сброса потребуется указать ADMIN_SECRET_KEY).
ALLOW_API_FAILURE_PASS: (true/false) Пускать пользователей без 2FA, если `api.telegram.org` недоступен.
ADDITIONAL_DNS_NAME_FOR_ADMIN_HTML: ДНС имя веб сайта админки. Необходимо прописать его в днс или hosts для удобства доступа.
Заключение
Free2FA4RDG представляет собой простое в использовании, но эффективное решение для внедрения двухфакторной аутентификации в инфраструктуру RD Gateway, усиливая безопасность без значительных затрат.
Репозиторий с приложением: