Подробный гайд по установке 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 еще не установлен:
- Скачайте официальный образ SQL Server.
- Запустите setup.
- Выберите установку Database Engine.
- Используйте mixed mode или Windows Authentication по политике компании.
- Включите TCP/IP протокол.
- Назначьте порт, обычно 1433.
- Создайте резервные копии системных баз.
Проверка 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.localmultiotp.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 могут привести к установке без компонентов или с дефолтными параметрами БД.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.