Настройка 2FA для RDP без Active Directory: multiOTP за 30 минут

2FA для RDP

Настройка 2FA для RDP без Active Directory: multiOTP за 30 минут

Содержание

2FA для RDP без домена: зачем и когда нужна

2FA для RDP

VPS, выделенный сервер в дата-центре, тестовая среда, филиал без контроллера домена — RDP открыт, а единственная защита — пароль. Брутфорс, утечки учётных данных, подбор — реальные угрозы для любого сервера с открытым RDP-портом 3389. Настройка 2FA для RDP через multiOTP Credential Provider решает эту проблему за 30 минут.

Бесплатное open source решение — без Active Directory, без облака, без внешних зависимостей. Большинство инструкций по multiOTP в рунете описывают настройку только в связке с AD. А если домена нет? Мы прошли весь путь от установки до генерации QR-кодов на standalone-сервере — и обнаружили, что ИИ-ассистенты выдумали все команды. Пришлось разбираться по официальной документации. Все команды в этой инструкции проверены и работают.

Что такое multiOTP и требования к установке

multiOTP — open source проект для двухфакторной аутентификации, сертифицированный OATH для HOTP/TOTP. Серверная часть — лицензия LGPL, Credential Provider — Apache 2.0.

multiOTP Credential Provider встраивается в экран входа Windows и добавляет поле для одноразового пароля. Ключевое преимущество: он не требует RADIUS-сервера и работает полностью локально. Это делает его идеальным решением для настройки 2FA для RDP на standalone-серверах.

  • Алгоритмы: TOTP (RFC 6238), HOTP (RFC 4226), mOTP, YubiKey OTP, SMS, scratch-пароли
  • Офлайн-работа: TOTP генерируется по времени и секретному ключу — интернет не нужен ни серверу, ни аутентификатору
  • Standalone-режимофициально поддерживаемый сценарий
  • Текущие версии: multiOTP server 5.10.0.2 (2025-10-31), Credential Provider 5.10.1.2 (2026-01-05)
  • Поддержка ОС: Windows 7/8/8.1/10/11, Server 2012(R2)/2016/2019/2022. Только 64-бит. Windows Server 2025 на момент написания не упоминается ни в wiki, ни в README — совместимость не подтверждена

Зачем вообще нужна двухфакторная аутентификация для RDP? Порт 3389 — одна из главных целей автоматизированных атак: боты сканируют IP-диапазоны и подбирают пароли по словарям. По данным SANS Institute, RDP — наиболее частый вектор проникновения в корпоративные сети. Даже сложный пароль не защитит от утечки через фишинг или кейлоггер. Второй фактор (OTP на смартфоне) делает украденный пароль бесполезным.

Если ваши серверы находятся в домене, двухфакторную аутентификацию можно настроить через групповые политики Active Directory. Но для VPS, тестовых сред и серверов без домена multiOTP — самое простое и бесплатное решение.

Как работает TOTP

TOTP (Time-based One-Time Password) — алгоритм генерации одноразовых паролей, описанный в RFC 6238. Сервер и аутентификатор используют общий секретный ключ и текущее время для генерации шестизначного кода. Код меняется каждые 30 секунд. Именно поэтому синхронизация часов через NTP критически важна — расхождение более 30 секунд приводит к отклонению кодов.

Преимущество TOTP перед SMS-кодами: он работает полностью офлайн, не зависит от сотовой связи и не подвержен перехвату через SS7 или SIM-swap атаки. Для серверов без доступа в интернет это единственный практичный вариант второго фактора.

Требования к установке

  • Windows Server 2012 R2 — 2022 или Windows 10/11 (64-бит)
  • Локальная учётная запись с правами администратора
  • Microsoft Visual C++ Redistributable 2015-2022 (x64)скачать с сайта Microsoft
  • TOTP-аутентификатор на смартфоне (FreeOTP, Google Authenticator, Яндекс Ключ)
  • Синхронизация времени (NTP) на сервере — критично для TOTP

Про Visual C++ Redistributable: для текущей версии Credential Provider (5.9.6.1 и новее) нужна именно x64-версия. В changelog 5.9.6.1: «PHP 8.2 x64 integration (don’t need x86 MSVC++ redistribuable files anymore)». Старые инструкции указывают x86 — это устаревшая информация.

Перед установкой проверьте синхронизацию NTP — расхождение времени даже на 30 секунд приведёт к отклонению OTP-кодов:

				
					# Проверить синхронизацию NTP
w32tm /query /status

# Принудительно синхронизировать
w32tm /resync
				
			

Установка Credential Provider и настройка 2FA для RDP

Скачать и установить Credential Provider

Скачайте MSI-пакет со страницы загрузки multiOTP — ссылки внизу страницы.

В мастере установки укажите:

  • Путь установки — по умолчанию C:\Program Files\multiOTP
  • URL of multiOTP server(s) — оставить пустым
  • No remote server, local multiOTP only — включить
  • Secret shared with server(s) — оставить пустым

При выборе режима OTP доступны три варианта:

  • OTP mandatory for remote desktop only (рекомендуем) — OTP запрашивается только при RDP-подключении. Локальный вход работает с обычным паролем Windows. Лучший выбор для серверов в дата-центрах и удалённых рабочих столов.
  • OTP mandatory for local and remote — OTP требуется везде: и при RDP, и при локальном входе. Максимальная безопасность, но необходим физический доступ или KVM-консоль как резервный канал.
  • OTP and std auth for local and remote — тестовый режим. Можно войти и с OTP, и без него. Используйте для проверки перед боевым включением 2FA для RDP.

Создание TOTP-пользователей

Все команды выполняются в cmd от администратора. Имя пользователя в multiOTP должно точно совпадать с именем локальной учётной записи Windows.

Рекомендуемый способ — команда -fastcreatenopin: автоматическая генерация секретного ключа правильной длины без запроса PIN-префикса. Это самый быстрый и безопасный способ настроить 2FA для RDP на новом сервере.

Для ручного создания с указанием собственного hex-ключа используйте команду: multiotp.exe -create username TOTP КЛЮЧ_HEX 6. Последний параметр — количество цифр в одноразовом пароле (стандартно 6). RFC 6238 рекомендует минимум 160 бит (40 hex-символов = 20 байт). Более короткие ключи снижают криптостойкость — при автоматической генерации ключ создаётся правильной длины.

Про PIN-префикс: по умолчанию multiOTP может требовать ввод статического PIN перед OTP-кодом. Это увеличивает безопасность, но усложняет пользователям жизнь. Для standalone-серверов обычно достаточно одного OTP без PIN. Отключить глобально: multiotp -config default-request-prefix-pin=0.

После создания пользователя сгенерируйте QR-код или URL для аутентификатора:

  • multiotp.exe -qrcode username c:\multiotp\username.png — QR-код в файл PNG
  • multiotp.exe -urllink username — URL формата otpauth:// для ручного ввода

Критический нюанс — ловушка при установке

После установки Credential Provider OTP запрашивается у всех RDP-подключений, даже если пользователь не зарегистрирован в базе multiOTP. Без OTP войти по RDP не получится! Мы столкнулись с этим на практике: пришлось подключаться через KVM-консоль виртуализации.

Решение — два варианта:

Вариант A. Создать всех пользователей в multiOTP до начала удалённой работы (или сразу после установки — через локальный вход): multiotp.exe -fastcreatenopin имя_пользователя

Вариант B. Исключить учётку через реестр — параметр excluded_account в формате COMPUTERNAME\username (подробности в справочнике реестра ниже).

Страховка: убедитесь, что у вас есть физический доступ, KVM или консоль виртуализации. В режиме «remote desktop only» локальный вход работает без OTP. В крайнем случае: загрузка в Safe Mode отключает Credential Provider (стандартное поведение Windows — в безопасном режиме загружаются только штатные провайдеры). Также можно использовать файл multiOTPCredentialProvider-unregister.reg.

				
					# Перейти в каталог multiOTP
cd "C:\Program Files\multiOTP"

# Создать TOTP-пользователя (имя = имя учётки Windows)
multiotp.exe -fastcreatenopin username

# QR-код для аутентификатора
multiotp.exe -qrcode username c:\multiotp\username.png

# URL для ручного ввода в аутентификатор
multiotp.exe -urllink username
				
			
Настройка multiOTP на сервере для двухфакторной аутентификации

Справочник команд, параметры реестра и решение ошибок

Параметры реестра Credential Provider

Настройки хранятся в ключе реестра (путь — в блоке кода ниже). Наиболее важные параметры для standalone-установки:

  • cpus_logon — тип входа: 0=RDP+локально, 1=только RDP, 2=только локально, 3=отключено. Суффикс: e=только multiOTP, d=все провайдеры
  • cpus_unlock — аналогично, для разблокировки сеанса
  • excluded_account — учётка, исключённая из 2FA (формат: COMPUTERNAME\username)
  • multiOTPWithout2FA — 1 = не запрашивать OTP у пользователей с типом without2FA
  • multiOTPTimeoutUnlock — таймаут (мин.) до повторного запроса OTP при разблокировке
  • login_text — надпись на экране входа
  • v1_bitmap_path — путь к логотипу 128×128 px (BMP v3)

Полная документация: README Credential Provider → Technical Details.

Основные команды multiOTP CLI

  • multiotp -fastcreatenopin user — быстрое создание TOTP без PIN
  • multiotp -create user TOTP key digits — создание с указанным hex-ключом
  • multiotp -qrcode user file.png — QR-код для аутентификатора
  • multiotp -urllink user — otpauth:// URL для ручного ввода
  • multiotp -userslist — список пользователей в базе
  • multiotp -user-info user — детальная информация о пользователе
  • multiotp -scratchlist user — генерация резервных одноразовых паролей
  • multiotp -unlock user — разблокировать после неудачных попыток
  • multiotp -delete user — удалить пользователя из базы
  • multiotp -config debug=1 — включить отладку (лог: log/multiotp.log)
  • multiotp -config default-request-prefix-pin=0 — отключить PIN-префикс
  • multiotp -resync user token1 token2 — ресинхронизация (два последовательных OTP)

Блокировка и разблокировка учёток

По документации multiOTP: 3 неудачные попытки → временная блокировка на 300 секунд, 6 неудачных → полная блокировка. Блокируется аккаунт в multiOTP, а не учётная запись Windows.

Разблокировка администратором: multiotp.exe -unlock username. Саморазблокировка пользователем: ввести два последовательных OTP через пробел.

Аутентификаторы для российских пользователей

Wiki multiOTP начиная с версии 5.0.3.4 рекомендует FreeOTP как основной TOTP-генератор. Это open source приложение без привязки к экосистеме Google, доступное в RuStore, F-Droid и Google Play.

Подходящие TOTP-аутентификаторы:

  • FreeOTP — рекомендация multiOTP. Open source, минималистичный интерфейс. Доступен в RuStore и F-Droid — не требует Google Play
  • Google Authenticator — наиболее распространённый вариант. Поддерживает экспорт и импорт аккаунтов между устройствами. Требует Google Play
  • Яндекс Ключ — российское приложение, полностью совместимо со стандартом TOTP. Доступен в RuStore и App Store. Дополнительно поддерживает вход в сервисы Яндекса
  • Authenticator (Chrome) — расширение для браузера Chrome. Подходит в ситуациях, когда смартфон недоступен — например, при настройке через удалённый доступ

Если нет камеры для сканирования QR-кода: команда multiotp -urllink user выдаёт otpauth:// URL, который можно скопировать и добавить в аутентификатор вручную. Альтернативный способ — сконвертировать hex-ключ в формат base32 и ввести его в приложение напрямую.

Типичные ошибки и решения

Никто не может войти по RDP после установки — пользователи не добавлены в multiOTP. Решение: войти локально (режим «remote only» это позволяет), добавить через -fastcreatenopin.

Коды не принимаются, «wrong password» — причина 1: рассинхронизация NTP (w32tm /resync). Причина 2: включён PIN-префикс (multiotp -config default-request-prefix-pin=0).

VCRUNTIME140.DLL не найдена — старая версия CP требовала VC++ x86. Обновите до 5.10.x и установите VC++ x64.

Credential Provider не отображается на экране входа — перезагрузите сервер. Для удаления: импортировать multiOTPCredentialProvider-unregister.reg.

ИИ выдаёт неправильные команды multiOTP — multiOTP использует нестандартный CLI-синтаксис, который отсутствует в обучающих данных языковых моделей. Мы столкнулись с тем, что все команды, сгенерированные ИИ-ассистентами, оказались выдуманными. Решение: использовать multiotp -help и официальную wiki. Не доверять сгенерированным командам без проверки по документации.

Учётка заблокирована после нескольких неудачных попыток — после 6 ошибок multiOTP полностью блокирует аккаунт (не Windows-учётку). Разблокировка: multiotp.exe -unlock username. Пользователь может разблокироваться сам, введя два последовательных OTP-кода через пробел.

Для комплексной защиты серверов рекомендуем также ознакомиться с контролем целостности файлов через AIDE и интеграцией Linux с Active Directory. Настройка 2FA для RDP — важный, но не единственный элемент многоуровневой защиты инфраструктуры.

				
					# Ключ реестра Credential Provider
# HKEY_CLASSES_ROOT\CLSID\{FCEFDFAB-B0A1-4C4D-8B2B-4FF4E0A3D978}

# Включить отладку (лог: C:\Program Files\multiOTP\log\multiotp.log)
multiotp.exe -config debug=1
multiotp.exe -config display-log=1
				
			
Справочник команд multiOTP для администратора

Заключение

Настройка 2FA для RDP через multiOTP Credential Provider — надёжный и бесплатный способ защитить standalone-серверы без Active Directory. Установка занимает около 30 минут, решение работает полностью офлайн и не зависит от внешних сервисов или подписок.

Ключевые моменты, которые стоит запомнить:

  • NTP-синхронизация — проверьте до установки, иначе коды не будут приниматься
  • Создайте TOTP-пользователей заранее — после включения режима «OTP mandatory» войти по RDP без OTP невозможно, даже если пользователь не зарегистрирован в multiOTP
  • Запасной доступ — KVM, консоль виртуализации или Safe Mode должны быть доступны на случай проблем с аутентификацией
  • Резервные коды — сгенерируйте scratch-пароли через multiotp -scratchlist username и сохраните в надёжном месте

Двухфакторная аутентификация — базовый элемент защиты любого сервера с открытым RDP. С multiOTP эта настройка доступна даже на серверах без домена и без бюджета на коммерческие решения.

Нужна помощь с настройкой двухфакторной аутентификации? Настроим 2FA для RDP, SSH и VPN на ваших серверах — без облака и подписки.

Часто задаваемые вопросы (FAQ)

Ответы на частые вопросы о настройке 2FA для RDP через multiOTP на локальных учётках.

Да. Это официально поддерживаемый сценарий — «How to install a local only strong authentication on a Windows machine» в wiki multiOTP. Credential Provider работает полностью автономно с локальными учётными записями Windows.

Да. Серверная часть — лицензия LGPL, Credential Provider — Apache 2.0. Есть коммерческие версии multiOTP Pro и Enterprise с веб-интерфейсом и отказоустойчивостью, но open source версия полнофункциональна для standalone-установки.

Использовать резервные коды: multiotp -scratchlist username. Или пересоздать TOTP для пользователя с новым ключом через -fastcreatenopin — старый секрет будет перезаписан, после чего нужно заново отсканировать QR-код.

Нет. TOTP генерируется по времени и секретному ключу — интернет не нужен ни серверу, ни аутентификатору. Достаточно синхронизации часов через NTP. Это особенно удобно для изолированных сред и серверов без выхода в интернет.

Да. multiOTP поддерживает AD/LDAP синхронизацию. Локальная standalone-установка может переключиться на клиент-серверный режим с кэшированием. Пользователи и ключи сохраняются при миграции между режимами.