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

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

2026.09.18                  


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

Важно.

Под названием MultiOTP могут встречаться разные редакции/вендорские сборки: standalone-сервис, веб-консоль, RADIUS/LDAP-шлюз, агентская система или контейнерное приложение. Поэтому в гайде я даю максимально универсальную схему для типового on-premise MultiOTP-сервера на Windows Server 2022. Точные имена служб, пути, порты и параметры тихой установки обязательно сверяйте с официальной документацией вашего дистрибутива MultiOTP.




1. Целевая архитектура установки

Обычно MultiOTP на Windows Server 2022 разворачивается как один из вариантов:

Вариант Описание Когда применять
Single-server MultiOTP + БД + веб-интерфейс на одном сервере Небольшая среда, пилот, до 100–500 пользователей
Separated DB MultiOTP-сервер + внешний SQL Server Продакшен, отказоустойчивость, резервное копирование
HA / load balanced Несколько MultiOTP-узлов + балансировщик + общая БД Критичные среды, тысячи пользователей
RADIUS/LDAP gateway MultiOTP как фронт MFA перед AD/NPS/Wi-Fi Двухфакторная аутентификация для сетевых сервисов

Для продакшена рекомендуется:

  • отдельная ВМ или физический сервер;
  • статический IP;
  • корректный DNS: A и PTR;
  • внешняя или выделенная БД;
  • TLS-сертификат с SAN;
  • резервное копирование БД и конфигурации;
  • ограничение доступа к админ-консоли по сети.

2. Предварительные требования к Windows Server 2022

2.1. ОС и обновления

Рекомендуется:

  • Windows Server 2022 Standard или Datacenter;
  • 64-bit;
  • последние cumulative updates;
  • актуальные драйверы, если сервер физический;
  • включенный Windows Defender / антивирус с исключениями для каталогов MultiOTP, если требует вендор.

Проверьте версию:

winver

или:

Get-ComputerInfo | Select-Object OsName, OsVersion, OsBuildNumber, OsArchitecture

2.2. Ресурсы сервера

Ориентировочно для небольшого/среднего окружения:

Параметр Пилот Продакшен
vCPU 2 4–8
RAM 4 GB 8–16 GB
Диск ОС 60–80 GB 100+ GB
Диск БД/логов отдельно SSD, отдельный том
Сеть 1 Gbps 1–10 Gbps

Если MultiOTP использует внутреннюю базу, например SQLite, и пользователей много — лучше вынести данные на быстрый диск и сразу предусмотреть резервное копирование.


2.3. Сетевые требования

Минимально:

Направление Протокол/порт Назначение
Inbound TCP 443 HTTPS-доступ к консоли/пользовательскому порталу
Inbound TCP 80 HTTP → HTTPS redirect, если используется
Inbound UDP 1812 RADIUS Authentication, если MultiOTP работает как RADIUS-сервер
Inbound UDP 1813 RADIUS Accounting
Outbound TCP 389 / UDP 389 LDAP к контроллерам домена
Outbound TCP 636 LDAPS к контроллерам домена
Outbound TCP 3268 / 3269 Global Catalog, если требуется
Inbound/Outbound TCP 1433 SQL Server, если БД удаленная
Inbound TCP 5985 / 5986 WinRM для управления, только из админ-сети

Точные порты агентов, push-сервисов, SMS/email-шлюзов уточняйте в документации MultiOTP.


2.4. Время и NTP

Для OTP критично точное время. OATH TOTP зависит от временных окон.

Настройте NTP:

w32tm /config /manualpeerlist:"ntp1.example.local,0x1 ntp2.example.local,0x1" /syncfromflags:manual /reliable:YES /update
Restart-Service -Name W32Time -Force
w32tm /resync

Проверка:

w32tm /query /status
w32tm /query /source

Если сервер в домене, убедитесь, что он получает время от надежного источника, например от PDC Emulator или внешних NTP-серверов через доменную иерархию.


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

3.1. Установка ролей и компонентов IIS / .NET

Если MultiOTP использует веб-консоль на IIS, установите необходимые компоненты.

Откройте PowerShell от имени администратора:

$ErrorActionPreference = 'Stop'

Install-WindowsFeature -Name `
    Web-Server, `
    Web-Mgmt-Console, `
    Web-Scripting-Tools, `
    NET-Framework-45-Core, `
    NET-Framework-45-ASPNET, `
    WAS, `
    WAS-Process-Model, `
    WAS-Config-APIs, `
    Web-Asp-Net45, `
    Web-Net-Ext45, `
    Web-ISAPI-Ext, `
    Web-ISAPI-Filter, `
    Web-Http-Logging, `
    Web-Static-Content, `
    Web-Default-Doc `
    -IncludeManagementTools


Если требуется .NET Framework 3.5 для старого компонента:

Install-WindowsFeature -Name NET-Framework-Core

Если MultiOTP использует ASP.NET Core, установите соответствующий Hosting Bundle:

  • .NET 6 Hosting Bundle;
  • .NET 7 Hosting Bundle;
  • .NET 8 Hosting Bundle;
  • или другую версию по требованиям вендора.

Пример тихой установки Hosting Bundle:

Start-Process -FilePath ".\dotnet-hosting-8.0.x-win.exe" `
    -ArgumentList "/quiet /norestart" `
    -Wait

Также часто нужен Visual C++ Redistributable:

Start-Process -FilePath ".\VC_redist.x64.exe" `
    -ArgumentList "/install /quiet /norestart" `
    -Wait

3.2. Проверка TLS

Windows Server 2022 по умолчанию поддерживает современные протоколы, но для OTP-сервера важно явно обеспечить TLS 1.2 минимум, а при поддержке — TLS 1.3.

Проверить включенные протоколы можно реестром:

Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -ErrorAction SilentlyContinue

При необходимости включить TLS 1.2:

$path = 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server'

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

Set-ItemProperty -Path $path -Name Enabled -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name DisabledByDefault -Value 0 -Type DWord

После изменений перезагрузите сервер или как минимум перезапустите связанные службы/IIS:

iisreset /restart

Для продакшена лучше использовать групповые политики или проверенные шаблоны hardened TLS, например через IIS Crypto, но без агрессивного отключения нужных шифров.


3.3. Создание каталогов

Рекомендуется заранее создать структуру:

$dirs = @(
    'C:\Install\MultiOTP',
    'C:\Logs\MultiOTP',
    'C:\Backup\MultiOTP',
    'C:\Certs\MultiOTP'
)

foreach ($dir in $dirs) {
    if (-not (Test-Path $dir)) {
        New-Item -ItemType Directory -Path $dir -Force | Out-Null
    }
}

4. Учетные записи и права доступа

4.1. Рекомендуемые учетные записи

Не запускайте MultiOTP от LocalSystem или личного административного аккаунта.

Создайте отдельные сервисные учетные записи, например:

Учетная запись Назначение
DOMAIN\svc-multiotp-app Работа службы/прикладного пула IIS
DOMAIN\svc-multiotp-sql Подключение к SQL Server, если используется SQL Authentication
DOMAIN\svc-multiotp-ldap Bind к AD/LDAP для поиска пользователей
DOMAIN\svc-multiotp-smtp Отправка уведомлений, если требуется

Если среда доменная, желательно использовать gMSA для сервисных учеток.


4.2. Права на папки

Пример выдачи прав сервисной учетной записи на каталог приложения:

$appPath = 'C:\Program Files\MultiOTP'
$serviceAccount = 'DOMAIN\svc-multiotp-app'

$acl = Get-Acl -Path $appPath

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

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

Для логов и временных файлов:

$logPath = 'C:\Logs\MultiOTP'

$acl = Get-Acl -Path $logPath

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

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

Не давайте сервисной учетной записи полный доступ ко всему диску. Только к каталогам приложения, логов, конфигурации и временных файлов.




5. База данных

5.1. Выбор СУБД

Часто MultiOTP использует:

  • Microsoft SQL Server;
  • SQL Server Express для пилота;
  • внутреннюю базу, например SQLite;
  • PostgreSQL — если это предусмотрено вендором.

Для продакшена лучше SQL Server Standard/Enterprise или другая поддерживаемая вендором СУБД. SQL Server Express подходит для небольших сред, но имеет ограничения по объему БД и ресурсам.


5.2. Установка SQL Server

Если SQL еще не установлен:

  1. Скачайте официальный образ SQL Server.
  2. Запустите setup.
  3. Выберите установку Database Engine.
  4. Используйте mixed mode или Windows Authentication по политике компании.
  5. Включите TCP/IP протокол.
  6. Назначьте порт, обычно 1433.
  7. Создайте резервные копии системных баз.

Проверка TCP/IP:

Откройте SQL Server Configuration Manager:

  • SQL Server Network Configuration;
  • Protocols for <instance>;
  • TCP/IP → Enabled;
  • IP Addresses → TCP Port = 1433.

Перезапустите службу SQL Server.


5.3. Создание базы MultiOTP

Пример для SQL Server:

IF DB_ID(N'MultiOTP') IS NULL
BEGIN
    CREATE DATABASE [MultiOTP];
END
GO

ALTER DATABASE [MultiOTP] SET RECOVERY FULL;
GO

Создание логина из доменной учетной записи:

IF NOT EXISTS (
    SELECT * FROM sys.server_principals
    WHERE name = N'DOMAIN\svc-multiotp-app'
)
BEGIN
    CREATE LOGIN [DOMAIN\svc-multiotp-app] FROM WINDOWS;
END
GO

Добавление пользователя в базу:

USE [MultiOTP];
GO

IF NOT EXISTS (
    SELECT * FROM sys.database_principals
    WHERE name = N'DOMAIN\svc-multiotp-app'
)
BEGIN
    CREATE USER [DOMAIN\svc-multiotp-app] FOR LOGIN [DOMAIN\svc-multiotp-app];
END
GO

ALTER ROLE db_owner ADD MEMBER [DOMAIN\svc-multiotp-app];
GO

На этапе установки часто требуется db_owner. После успешной настройки и миграции схем желательно снизить привилегии до минимально необходимых, если документация MultiOTP это позволяет.

Если используется SQL Authentication:

CREATE LOGIN [svc_multiotp_sql]
WITH PASSWORD = 'StrongPasswordHere!',
     CHECK_POLICY = ON,
     CHECK_EXPIRATION = ON;
GO

USE [MultiOTP];
GO

CREATE USER [svc_multiotp_sql] FOR LOGIN [svc_multiotp_sql];
GO

ALTER ROLE db_owner ADD MEMBER [svc_multiotp_sql];
GO

Строгий пароль сохраните в менеджере паролей/секретов.


5.4. Строка подключения

Типичные варианты:

Windows Authentication:

Server=SQLHOST\INSTANCE;Database=MultiOTP;Integrated Security=SSPI;Encrypt=True;TrustServerCertificate=False;

SQL Authentication:

Server=SQLHOST\INSTANCE;Database=MultiOTP;User ID=svc_multiotp_sql;Password=StrongPasswordHere!;Encrypt=True;TrustServerCertificate=False;

Если SQL Server находится на том же хосте:

Server=localhost;Database=MultiOTP;Integrated Security=SSPI;

или:

Server=.\SQLEXPRESS;Database=MultiOTP;Integrated Security=SSPI;

Точный формат connection string смотрите в документации MultiOTP.


6. TLS-сертификат

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

Для веб-интерфейса MultiOTP нужен сертификат, который доверяют клиенты и сервер.

Обязательно:

  • Subject Alternative Name (SAN) с FQDN сервера, например:
    • otp.example.local
    • multiotp.example.local
  • Открытый ключ, например RSA 2048/3072 или ECDSA;
  • Приватный ключ установлен в Local Computer\Personal;
  • Полная цепочка доверия;
  • Корректное время на сервере;
  • Доступность CRL/AIA, если используется проверка отзыва.

Для внутреннего использования можно выпустить сертификат через AD CS. Для внешнего доступа — через публичный CA.


6.2. Импорт PFX-файла



$pfxPath = 'C:\Certs\MultiOTP\otp.example.local.pfx'
$pfxPassword = ConvertTo-SecureString -String 'PfxPasswordHere!' -Force -AsPlainText

Import-PfxCertificate -FilePath $pfxPath `
    -CertStoreLocation Cert:\LocalMachine\My `
    -Password $pfxPassword

Проверка:

Get-ChildItem Cert:\LocalMachine\My |
    Where-Object { $_.Subject -like '*otp.example.local*' } |
    Select-Object Subject, Thumbprint, NotBefore, NotAfter, HasPrivateKey

Запомните thumbprint — он понадобится при привязке к сайту IIS или службе.


7. Настройка брандмауэра Windows

7.1. Основные правила

Разрешите HTTPS:

New-NetFirewallRule -DisplayName 'MultiOTP HTTPS' `
    -Direction Inbound `
    -Action Allow `
    -Protocol TCP `
    -LocalPort 443 `
    -Profile Domain,Private

Если нужен HTTP redirect:

New-NetFirewallRule -DisplayName 'MultiOTP HTTP Redirect' `
    -Direction Inbound `
    -Action Allow `
    -Protocol TCP `
    -LocalPort 80 `
    -Profile Domain,Private

RADIUS Authentication:

New-NetFirewallRule -DisplayName 'MultiOTP RADIUS Auth UDP 1812' `
    -Direction Inbound `
    -Action Allow `
    -Protocol UDP `
    -LocalPort 1812 `
    -Profile Domain,Private

RADIUS Accounting:

New-NetFirewallRule -DisplayName 'MultiOTP RADIUS Acct UDP 1813' `
    -Direction Inbound `
    -Action Allow `
    -Protocol UDP `
    -LocalPort 1813 `
    -Profile Domain,Private

LDAP outbound к домен-контроллерам:

New-NetFirewallRule -DisplayName 'MultiOTP LDAP Outbound 389' `
    -Direction Outbound `
    -Action Allow `
    -Protocol TCP `
    -RemotePort 389

New-NetFirewallRule -DisplayName 'MultiOTP LDAPS Outbound 636' `
    -Direction Outbound `
    -Action Allow `
    -Protocol TCP `
    -RemotePort 636

Если SQL Server удаленный:

New-NetFirewallRule -DisplayName 'SQL Server Inbound 1433 from MultiOTP' `
    -Direction Inbound `
    -Action Allow `
    -Protocol TCP `
    -LocalPort 1433 `
    -RemoteAddress '10.0.1.50'

Замените 10.0.1.50 на IP сервера MultiOTP.


7.2. Ограничение доступа к админ-консоли

Для продакшена не открывайте 443 всем. Лучше разрешить доступ только из админ-подсети.

Пример:

New-NetFirewallRule -DisplayName 'MultiOTP HTTPS Admin Only' `
    -Direction Inbound `
    -Action Allow `
    -Protocol TCP `
    -LocalPort 443 `
    -RemoteAddress '10.0.10.0/24'

8. Загрузка и проверка установщика MultiOTP

Скачивайте дистрибутив только с официального сайта вендора или из внутреннего репозитория ПО.

Проверьте хеш:

Get-FileHash -Path 'C:\Install\MultiOTP\MultiOTPSetup.exe' -Algorithm SHA256

Проверьте подпись:

Get-AuthenticodeSignature -FilePath 'C:\Install\MultiOTP\MultiOTPSetup.exe' |
    Format-List Status, SignerCertificate, TimestampCertificate

Если это MSI:

Get-FileHash -Path 'C:\Install\MultiOTP\MultiOTPServer.msi' -Algorithm SHA256

Get-AuthenticodeSignature -FilePath 'C:\Install\MultiOTP\MultiOTPServer.msi' |
    Format-List Status, SignerCertificate

9. Установка MultiOTP

9.1. Интерактивная установка

Запустите установщик от имени администратора:

Start-Process -FilePath 'C:\Install\MultiOTP\MultiOTPSetup.exe' -Verb RunAs -Wait

или для MSI:

Start-Process msiexec.exe -Verb RunAs -Wait -ArgumentList '/i "C:\Install\MultiOTP\MultiOTPServer.msi"'

В мастере установки обычно нужно указать:

1. Тип установки:

  • Server;
  • Admin Console;
  • RADIUS component;
  • LDAP component;
  • Agent;
  • Full installation.

2. Каталог установки:

   C:\Program Files\MultiOTP

или:

   C:\MultiOTP

3. Параметры базы данных:

  • SQL Server host/instance;
  • имя базы MultiOTP;
  • Windows Authentication или SQL Authentication;
  • schema/tables будут созданы автоматически, если предусмотрено.


4. Учетная запись службы:

  • DOMAIN\svc-multiotp-app;
  • пароль, если не gMSA.

5. Веб-сайт IIS:

  • имя сайта, например MultiOTP;
  • порт 443;
  • host header otp.example.local;
  • сертификат;
  • физический путь приложения.

6. RADIUS:

  • включить RADIUS-сервер, если требуется;
  • порты 1812/1813;
  • shared secret;
  • список NAS-клиентов.

7. Администратор:

  • логин;
  • email;
  • сложный пароль;
  • вопрос восстановления, если есть.

8. Лицензия:

  • активация онлайн;
  • или импорт offline license file.

9.2. Тихая установка — общие примеры

Точные ключи зависят от упаковщика: MSI, InstallShield, WiX, NSIS, Inno Setup. Ниже — шаблонные примеры.

MSI

Start-Process msiexec.exe -Wait -Verb RunAs -ArgumentList `
    '/i "C:\Install\MultiOTP\MultiOTPServer.msi"',
    '/qn',
    'INSTALLDIR="C:\Program Files\MultiOTP"',
    'ACCEPT_EULA=1',
    'REBOOT=ReallySuppress',
    '/L*v "C:\Logs\MultiOTP\install_msi.log"'

EXE с передачей параметров MSI

Start-Process -FilePath 'C:\Install\MultiOTP\MultiOTPSetup.exe' `
    -Wait `
    -Verb RunAs `
    -ArgumentList '/s', '/v"/qn INSTALLDIR=C:\Program Files\MultiOTP ACCEPT_EULA=1 REBOOT=ReallySuppress /L*v C:\Logs\MultiOTP\install_exe.log"'

InstallShield-style

Start-Process -FilePath 'C:\Install\MultiOTP\MultiOTPSetup.exe' `
    -Wait `
    -Verb RunAs `
    -ArgumentList '/s /v"/qn /L*v C:\Logs\MultiOTP\install.log"'

Не применяйте тихую установку без тестирования на стенде. Неправильные свойства MSI могут привести к установке без компонентов или с дефолтными параметрами БД.


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


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

Комментарии

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