Настройка 2FA для RDP без Active Directory: multiOTP за 30 минут
Содержание
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-код в файл PNGmultiotp.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

Справочник команд, параметры реестра и решение ошибок
Параметры реестра Credential Provider
Настройки хранятся в ключе реестра (путь — в блоке кода ниже). Наиболее важные параметры для standalone-установки:
cpus_logon— тип входа: 0=RDP+локально, 1=только RDP, 2=только локально, 3=отключено. Суффикс: e=только multiOTP, d=все провайдерыcpus_unlock— аналогично, для разблокировки сеансаexcluded_account— учётка, исключённая из 2FA (формат:COMPUTERNAME\username)multiOTPWithout2FA— 1 = не запрашивать OTP у пользователей с типом without2FAmultiOTPTimeoutUnlock— таймаут (мин.) до повторного запроса OTP при разблокировкеlogin_text— надпись на экране входаv1_bitmap_path— путь к логотипу 128×128 px (BMP v3)
Полная документация: README Credential Provider → Technical Details.
Основные команды multiOTP CLI
multiotp -fastcreatenopin user— быстрое создание TOTP без PINmultiotp -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

Заключение
Настройка 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 эта настройка доступна даже на серверах без домена и без бюджета на коммерческие решения.
Часто задаваемые вопросы (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-установка может переключиться на клиент-серверный режим с кэшированием. Пользователи и ключи сохраняются при миграции между режимами.



