Подробный гайд по установке MultiOTP на Windows Server 2022 - Часть 2

Гайд по установке MultiOTP на Windows Server 2022: подготовка сервера, БД, сертификаты, IIS, интеграция с AD и RADIUS, тестирование, безопасность и бэкап.

2026.09.18                  


Подробный гайд по установке MultiOTP на Windows Server 2022 - Часть 2Подробный гайд по установке MultiOTP на Windows Server 2022 - Часть 2

10. Проверка установленных служб

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

Get-Service -Name 'MultiOTP*' |
    Format-Table Name, DisplayName, Status, StartType

Типичные имена могут быть, например:

  • MultiOTPServer
  • MultiOTPAdmin
  • MultiOTPRadius
  • MultiOTPAgent
  • MultiOTPWeb

Установите автозапуск:

Get-Service -Name 'MultiOTP*' | ForEach-Object {
    Set-Service -Name $_.Name -StartupType Automatic
}

Запустите:

Get-Service -Name 'MultiOTP*' | Start-Service


Проверьте статус:

Get-Service -Name 'MultiOTP*' | Format-List Name, Status, StartType, ServicesDependedOn

11. Настройка IIS, если используется веб-консоль

11.1. Application Pool

Откройте IIS Manager:

inetmgr

Найдите app pool MultiOTP, например MultiOTPAppPool.

Рекомендации:

Параметр Значение
.NET CLR Version v4.0 для .NET Framework, No Managed Code для ASP.NET Core
Pipeline Mode Integrated, если требует приложение
Identity DOMAIN\svc-multiotp-app или ApplicationPoolIdentity
Enable 32-Bit Applications False, если нет явной необходимости
Idle Time-out 0 или увеличенное значение для постоянных сессий
Regular Time Interval 1740 минут по умолчанию, можно оставить
Private Memory Limit по потребности, например 0 без лимита или 2048–4096 MB

Если используется доменная учетная запись:

  1. Application Pools → выберите пул → Advanced Settings.
  2. Process Model → Identity → Custom account.
  3. Укажите DOMAIN\svc-multiotp-app и пароль.
  4. Примените.

11.2. Права на путь сайта

Если физический путь, например:

C:\Program Files\MultiOTP\Web

Дайте права app pool identity:

$sitePath = 'C:\Program Files\MultiOTP\Web'
$identity = 'IIS APPPOOL\MultiOTPAppPool'

$acl = Get-Acl -Path $sitePath

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
    $identity,
    'ReadAndExecute',
    'ContainerInherit,ObjectInherit',
    'None',
    'Allow'
)

$acl.SetAccessRule($rule)
Set-Acl -Path $sitePath -AclObject $acl

Для папок логов/temp выдавайте Modify.


11.3. Привязка сертификата к сайту

В IIS Manager:

  1. Sites → MultiOTP → Bindings.
  2. Add или Edit для https.
  3. Type: https.
  4. IP address: All Unassigned или конкретный IP.
  5. Port: 443.
  6. Host name: otp.example.local.
  7. SSL certificate: выберите нужный сертификат.
  8. Require Server Name Indication: включите, если используется несколько имен на одном IP.

Проверить bindings можно PowerShell:

Get-WebBinding -Name 'MultiOTP'

11.4. HTTP → HTTPS redirect

Если открыт порт 80, настройте redirect.

В web.config сайта можно добавить:

<system.webServer>
  <httpRedirect enabled="true" destination="https://otp.example.local" exactDestination="true" httpResponseStatus="Permanent" />
</system.webServer>

Либо используйте URL Rewrite Module.


12. Первичная настройка MultiOTP

После установки откройте админ-консоль, например:

https://otp.example.local/admin

или другой URL по документации.

12.1. Базовые шаги

  1. Войдите под временным администратором.
  2. Немедленно смените пароль.
  3. Включите MFA для самих администраторов, если продукт это поддерживает.
  4. Активируйте лицензию.
  5. Укажите название организации.
  6. Настройте часовой пояс.
  7. Настройте SMTP для уведомлений.
  8. Настройте политику паролей.
  9. Настройте политику токенов:
    • TOTP;
    • HOTP;
    • Push;
    • SMS;
    • Email;
    • hardware tokens;
    • backup codes.
  10. Настройте блокировки:
    • количество неудачных попыток;
    • duration lockout;
    • уведомления админам.

12.2. Интеграция с Active Directory / LDAP

Типые параметры:

Параметр Пример
LDAP server dc01.example.local
Port 389 или 636
Use LDAPS Да, для продакшена
Base DN DC=example,DC=local
Bind DN CN=svc-multiotp-ldap,CN=Users,DC=example,DC=local
User object class person, user
Username attribute sAMAccountName или userPrincipalName
Email attribute mail
Mobile attribute mobile
Group filter (&(objectClass=group)(sAMAccountName=OTP_Users))

Проверьте доступ к LDAP портами:

Test-NetConnection -ComputerName dc01.example.local -Port 389
Test-NetConnection -ComputerName dc01.example.local -Port 636


Для LDAPS убедитесь, что на домен-контроллере установлен корректный сертификат LDAP.


12.3. Настройка RADIUS

Если MultiOTP используется как RADIUS-сервер, Wi-Fi, NPS, сетевого оборудования:

1. Добавьте NAS-клиент:

  • IP или FQDN устройства;
  • shared secret;
  • vendor/type, например Cisco, Juniper, Microsoft NPS, Fortinet, Palo Alto.

2. Shared secret должен быть:

  • длиной минимум 32 символа;
  • случайно сгенерированным;
  • уникальным для каждого клиента;
  • храниться в password manager.

Пример генерации секрета:

-join ((48..57) + (65..90) + (97..122) | Get-Random -Count 48 | ForEach-Object {[char]$_})

3. Настройте таймауты и повторы:

  • timeout: 5–10 секунд;
  • retries: 2–3.

4. Включите accounting, если нужно вести статистику сессий.


12.4. Интеграция с Windows NPS

Если схема такая:

Клиент → NPS → MultiOTP → AD

или:

Клиент → MultiOTP → NPS/AD

нужно выбрать правильную модель.

Вариант A: MultiOTP как RADIUS-сервер перед NPS

На NPS:

  1. Откройте NPS.
  2. RADIUS Clients and Servers → Remote RADIUS Servers.
  3. Добавьте MultiOTP:
    • FQDN или IP;
    • shared secret;
    • порт 1812.
  4. Создайте Network Policy:
    • условия: группа пользователей, NAS Identifier, Service Type;
    • setting: Forward authentication requests to remote RADIUS server group;
    • укажите группу с MultiOTP.

Вариант B: MultiOTP проксирует аутентификацию в NPS

На NPS добавьте MultiOTP как RADIUS Client:

  1. RADIUS Clients and Servers → New RADIUS Client.
  2. Friendly name: MultiOTP.
  3. IP address сервера MultiOTP.
  4. Shared secret.
  5. Настройте политики доступа.

Точную схему смотрите в документации MultiOTP, потому что реализация PAP/CHAP/EAP/MS-CHAPv2 может отличаться.


13. Проверка работоспособности

13.1. Проверка портов

Test-NetConnection -ComputerName otp.example.local -Port 443
Test-NetConnection -ComputerName otp.example.local -Port 80

Для RADIUS UDP обычный Test-NetConnection не очень показателен.

Используйте:

  • встроенный тест MultiOTP;
  • RADIUS test utility от вендора;
  • radclient на Linux-хосте;
  • packet capture в Wireshark;
  • логи NPS/Wi-Fi контроллера.

Пример проверки доступности UDP-порта косвенно через firewall rules:

Get-NetFirewallRule -DisplayName 'MultiOTP RADIUS*' |
    Format-Table DisplayName, Direction, Action, Enabled

13.2. Проверка веб-интерфейса

Откройте:

https://otp.example.local

Проверьте:

  • сертификат без ошибок;
  • страница логина доступна;
  • admin console работает;
  • нет ошибок 500/503;
  • логи IIS не переполняются ошибками.

Логи IIS обычно здесь:

C:\inetpub\logs\LogFiles

Просмотр последних записей:

Get-ChildItem 'C:\inetpub\logs\LogFiles' -Recurse |
    Sort-Object LastWriteTime -Descending |
    Select-Object -First 1 |
    ForEach-Object { Get-Content $_.FullName -Tail 50 }

13.3. Проверка служебных логов

Get-WinEvent -LogName Application -MaxEvents 100 |
    Where-Object { $_.ProviderName -like '*MultiOTP*' } |
    Format-Table TimeCreated, Id, LevelDisplayName, Message -AutoSize -Wrap

Системные ошибки:

Get-WinEvent -LogName System -MaxEvents 100 |
    Where-Object { $_.LevelDisplayName -in 'Error','Critical' } |
    Format-Table TimeCreated, Id, ProviderName, Message -AutoSize -Wrap

13.4. Тестовый пользователь и токен

Создайте тестового пользователя:

  • не администратор;
  • с корпоративным email;
  • с мобильным телефоном для TOTP/Push, если используется.

Выполните:

  1. Enrollment test-пользователя.
  2. Генерация QR-кода/seed.
  3. Установка в authenticator-приложение.
  4. Проверка синхронизации времени.
  5. Вход с паролем + OTP.
  6. Неудачная попытка с неверным кодом.
  7. Проверка блокировки после N неудачных попыток.
  8. Проверка backup code, если есть.



14. Резервное копирование

14.1. Что обязательно бэкапить

Объект Пример пути/объекта
База данных SQL Server database MultiOTP
Конфигурация приложения C:\Program Files\MultiOTP\config
Данные приложения C:\ProgramData\MultiOTP
Логи/аудит C:\Logs\MultiOTP, IIS logs
Сертификаты Cert:\LocalMachine\My, PFX-файлы
Лицензии license file, activation data
IIS config C:\Windows\System32\inetsrv\config\applicationHost.config
RADIUS secrets конфигурация MultiOTP/БД
Token seeds/keys только защищенным способом, если вендор поддерживает экспорт

Никогда не копируйте seed-файлы или ключи токенов в открытом виде без шифрования.


14.2. Резервная копия SQL Server

Пример full backup:

BACKUP DATABASE [MultiOTP]
TO DISK = N'B:\Backup\MultiOTP\MultiOTP_full.bak'
WITH COMPRESSION,
     CHECKSUM,
     INIT,
     STATS = 5;
GO

Рекомендуемый режим:

  • full backup ежедневно;
  • diff backup каждые 4–12 часов;
  • log backup каждые 15–60 минут, если база в Full Recovery;
  • хранение минимум 7–30 дней по политике компании.

14.3. Резервное копирование файлов

Пример PowerShell:

$source = @(
    'C:\Program Files\MultiOTP\config',
    'C:\ProgramData\MultiOTP',
    'C:\Certs\MultiOTP'
)

$destination = 'B:\Backup\MultiOTP\files'
$timestamp = Get-Date -Format 'yyyyMMdd_HHmmss'
$zipPath = Join-Path $destination "MultiOTP_config_$timestamp.zip"

if (-not (Test-Path $destination)) {
    New-Item -ItemType Directory -Path $destination -Force | Out-Null
}

Compress-Archive -Path $source -DestinationPath $zipPath -Force

15. Безопасность и hardening

15.1. Доступы

  • Админ-консоль доступна только из управляющей сети.
  • Отдельные роли:
    • Super Admin;
    • Helpdesk;
    • Auditor;
    • Token Operator.
  • Включите MFA для администраторов MultiOTP.
  • Запретите общие аккаунты администраторов.
  • Логируйте все административные действия.

15.2. TLS и веб

  • Только HTTPS.
  • TLS 1.2 минимум.
  • Отключите слабые шифры.
  • Включите HSTS, если применимо:
Strict-Transport-Security: max-age=31536000; includeSubDomains

- Скройте версии IIS/.NET:

В applicationHost.config или web.config можно отключить отправку X-Powered-By.

Пример для сайта:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <remove name="X-Powered-By" />
      <add name="X-Frame-Options" value="DENY" />
      <add name="X-Content-Type-Options" value="nosniff" />
      <add name="Referrer-Policy" value="no-referrer" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

15.3. Пароли и секреты

  • Shared secret RADIUS — уникальный и длинный.
  • LDAP bind account — без прав администратора домена.
  • SQL account — минимальные права после установки.
  • Храните секреты в CyberArk, Keepass, Azure Key Vault, HashiCorp Vault или другом защищенном хранилище.
  • Регулярно ротируйте:
    • admin passwords;
    • service account passwords;
    • RADIUS secrets;
    • API keys;
    • сертификаты.

15.4. Антивирус и исключения

Не отключайте антивирус.

Но если производитель MultiOTP рекомендует исключения, добавьте:

  • процессы службы MultiOTP;
  • каталоги приложения;
  • каталоги БД, если SQL локальный;
  • каталоги логов;
  • temp-каталоги.

Пример проверки исключений Defender:

Get-MpPreference | Select-Object -ExpandProperty ExclusionPath
Get-MpPreference | Select-Object -ExpandProperty ExclusionProcess


Добавлять исключения лучше через GPO/SCCM/Intune, а не вручную.


15.5. Аудит и мониторинг

Включите:

  • Windows Audit:
    • Logon/Logoff;
    • Object Access;
    • Detailed Process Tracking;
    • Directory Service Access, если сервер в домене.
  • Логи IIS.
  • Логи приложения MultiOTP.
  • SQL Server audit, если требуется.
  • Отправка логов в SIEM:
    • Splunk;
    • Elastic;
    • QRadar;
    • ArcSight;
    • Microsoft Sentinel.

Мониторьте:

  • недоступность службы;
  • ошибки БД;
  • рост логов;
  • неудачные входы;
  • массовые блокировки;
  • истечение сертификата;
  • рассинхронизацию времени;
  • аномальную генерацию токенов.

16. Обновление MultiOTP

Перед обновлением:

  1. Прочитайте release notes.
  2. Проверьте совместимость с ОС, .NET, SQL Server.
  3. Сделайте snapshot ВМ.
  4. Выполните full backup БД.
  5. Сохраните конфиги и сертификаты.
  6. Проверьте обновление на тестовом стенде.
  7. Назначьте maintenance window.
  8. Обновите один узел, если кластер.
  9. Проверьте функции:
    • login;
    • enrollment;
    • RADIUS;
    • LDAP;
    • push/SMS/email;
    • admin console.
  10. Подготовьте rollback:
    • восстановление snapshot;
    • восстановление БД;
    • откат конфигурации.

17. Типовые проблемы и диагностика

17.1. Установщик не запускается

Причины:

  • недостаточно прав;
  • заблокирован файл из интернета;
  • антивирус;
  • отсутствует .NET/VC++;
  • ожидается перезагрузка.

Решения:

Unblock-File -Path 'C:\Install\MultiOTP\MultiOTPSetup.exe'

Проверьте pending reboot:

Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager' -Name PendingFileRenameOperations -ErrorAction SilentlyContinue

Установите недостающие runtime-компоненты.


17.2. Служба MultiOTP не стартует

Проверьте:

Get-Service -Name 'MultiOTP*' | Format-List *

Смотрите System и Application logs.

Частые причины:

  • неверный пароль сервисной учетной записи;
  • нет прав на папку;
  • недоступна БД;
  • занят порт;
  • отсутствует сертификат;
  • поврежден конфиг.

Проверка порта:

Get-NetTCPConnection -LocalPort 443 -ErrorAction SilentlyContinue
Get-NetUDPEndpoint -LocalPort 1812 -ErrorAction SilentlyContinue

17.3. Ошибка подключения к SQL Server

Проверьте:

  • имя инстанса;
  • TCP/IP включен;
  • порт 1433 открыт;
  • SQL Browser запущен, если используется динамический порт;
  • firewall;
  • права логина;
  • TLS/encryption settings.

Быстрая проверка:

Test-NetConnection -ComputerName sqlhost.example.local -Port 1433

Если используется SQL Authentication, убедитесь, что в SQL Server включен mixed mode.


17.4. Веб-интерфейс отдает 500 Internal Server Error

Проверьте:

  • app pool запущен;
  • версия .NET соответствует приложению;
  • права на web.config, логи, temp;
  • отсутствие дублирующихся секций в applicationHost.config;
  • события в C:\inetpub\logs\LogFiles;
  • Failed Request Tracing, если включен.

Полезно:

Get-WebAppPoolState -Name 'MultiOTPAppPool'
Start-WebAppPool -Name 'MultiOTPAppPool'

17.5. Ошибка сертификата в браузере

Причины:

  • нет SAN;
  • сертификат выпущен не для этого имени;
  • цепочка доверия неполная;
  • срок действия истек;
  • время на сервере неверное;
  • CRL/AIA недоступны.

Проверка:

Get-ChildItem Cert:\LocalMachine\My |
    Where-Object { $_.Subject -like '*otp*' } |
    Format-List Subject, DNSNameList, Thumbprint, NotBefore, NotAfter, Issuer

17.6. RADIUS-запросы не проходят

Проверьте:

  • UDP 1812 открыт;
  • IP NAS-клиента совпадает;
  • shared secret одинаковый на клиенте и MultiOTP;
  • vendor/type корректный;
  • пользователь существует в MultiOTP/AD;
  • политика разрешает данный тип аутентификации;
  • нет блокировки учетной записи.

Включите debug-лог RADIUS, если вендор поддерживает, и сделайте packet capture:

# Например, через netsh trace или Wireshark на интерфейсе сервера



17.7. OTP-коды не подходят

Самая частая причина — рассинхронизация времени.

Проверьте:

w32tm /query /status
Get-Date

На телефоне пользователя:

  • включена автоматическая установка времени;
  • корректный часовой пояс;
  • authenticator-приложение синхронизировано;
  • seed не был поврежден при переносе.

Для TOTP обычно допускается окно ±1 шаг, но сильное расхождение требует повторной регистрации токена.


17.8. LDAP/AD интеграция не работает

Проверьте:

  • доступ к порту 389/636;
  • правильность Base DN;
  • учетная запись bind не заблокирована;
  • у bind account есть права на чтение нужных OU;
  • фильтр пользователей возвращает записи;
  • атрибуты sAMAccountName/userPrincipalName заполнены;
  • для LDAPS сертификат DC корректен.

Пример проверки LDAP-фильтра через LDP.exe:

  1. Запустите ldp.exe.
  2. Connect к DC.
  3. Bind под сервисной учеткой MultiOTP.
  4. Выполните поиск:
Base DN: DC=example,DC=local
Filter: (&(objectClass=user)(sAMAccountName=testuser))

18. Пример итогового чек-листа внедрения

До установки

  • [ ] Определен FQDN: otp.example.local.
  • [ ] Выделен сервер/ВМ.
  • [ ] Настроен статический IP.
  • [ ] Созданы DNS A/PTR.
  • [ ] Настроен NTP.
  • [ ] Установлены обновления Windows.
  • [ ] Определена СУБД.
  • [ ] Создана база MultiOTP.
  • [ ] Созданы сервисные учетные записи.
  • [ ] Выпущен TLS-сертификат с SAN.
  • [ ] Согласованы сетевые порты.
  • [ ] Подготовлен план backup.

Установка

  • [ ] Скачан официальный дистрибутив.
  • [ ] Проверена подпись/хеш.
  • [ ] Установлены IIS/.NET/VC++.
  • [ ] Установлен MultiOTP.
  • [ ] Указана БД.
  • [ ] Настроена сервисная учетная запись.
  • [ ] Привязан сертификат.
  • [ ] Службы запущены.
  • [ ] Веб-интерфейс доступен.

Настройка

  • [ ] Сменен пароль администратора.
  • [ ] Активирована лицензия.
  • [ ] Настроен SMTP.
  • [ ] Подключен AD/LDAP.
  • [ ] Созданы тестовые пользователи.
  • [ ] Настроены политики токенов.
  • [ ] Настроен RADIUS, если требуется.
  • [ ] Настроены NAS-клиенты.
  • [ ] Включен аудит.
  • [ ] Настроены уведомления.

Проверка

  • [ ] Login admin console.
  • [ ] Enrollment test user.
  • [ ] TOTP/HOTP/Push работает.
  • [ ] Неверный код отклоняется.
  • [ ] Блокировка работает.
  • [ ] RADIUS test проходит.
  • [ ] LDAP bind успешен.
  • [ ] Логи пишутся.
  • [ ] Backup БД выполнен.
  • [ ] Restore test выполнен.

Продакшен

  • [ ] Доступ к админке ограничен.
  • [ ] TLS hardened.
  • [ ] Сервисные учетки имеют минимальные права.
  • [ ] Monitoring настроен.
  • [ ] DR-план согласован.
  • [ ] Документация обновлена.

19. Рекомендуемая документация после установки

Сохраните internally:

  1. Схема архитектуры.
  2. Список серверов и IP.
  3. FQDN и DNS записи.
  4. Версия MultiOTP и license.
  5. Параметры БД.
  6. Учетные записи служб.
  7. Места хранения сертификатов.
  8. Список RADIUS clients и shared secrets в secure storage.
  9. Правила firewall.
  10. Procedure backup/restore.
  11. Procedure upgrade/rollback.
  12. Contacts vendor support.
  13. Known issues и рабочиеaround.

20. Минимально правильная последовательность установки MultiOTP на Windows Server 2022:

  1. Подготовить сервер: обновления, DNS, NTP, firewall.
  2. Установить зависимости: IIS, .NET Framework / .NET Hosting Bundle, VC++.
  3. Создать БД и сервисные учетные записи.
  4. Выпустить и импортировать TLS-сертификат.
  5. Скачать и проверить дистрибутив MultiOTP.
  6. Установить MultiOTP, указав БД, учетную запись службы, веб-сайт и порты.
  7. Настроить IIS/app pool и привязать сертификат.
  8. Войти в админ-консоль, сменить пароли, активировать лицензию.
  9. Подключить AD/LDAP и/или RADIUS.
  10. Создать тестовых пользователей и проверить OTP.
  11. Настроить backup, аудит, мониторинг и hardening.
  12. Задокументировать конфигурацию и передать в эксплуатацию.



Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта