- Начало работы
- Интеграция
- HTTP API
- Single Sign-On
- OpenID Connect
- RADIUS адаптер
- LDAP адаптер
- Портал самообслуживания
- MULTIFACTOR Directory Sync
- Windows Logon
- Регистрация пользователей
- .NET Core
- 1с-Bitrix24
- 1с-плагин двухфакторной аутентификации
- 1С:Предприятие с системой единого входа на базе OIDC
- ADFS
- ASP.NET
- Ansible AWX
- Atlassian Cloud
- BearPass
- BI.ZONE ZTNA
- Check Point VPN
- Cisco ASA VPN
- Citrix Gateway
- Deckhouse Stronghold
- Exchange ActiveSync
- FortiGate VPN
- HRBOX
- Huawei Cloud
- Huawei VPN
- Ideco
- Infrascope
- Grafana
- Keycloak
- Let's Encrypt Windows Server
- Linux logon (GUI/SSH)
- Linux SSH
- Linux SUDO
- Microsoft Entra ID
- MikroTik L2TP VPN
- NGate VPN
- Network Policy Server (NPS)
- Nextcloud
- OpenVPN
- OpenVPN + AD
- OpenVPN Access Server
- OpenVPN pfSense
- Outlook Web Access (OWA)
- Palo Alto GlobalProtect
- Passwork
- RD Gateway (RDGW)
- RdWeb
- Redmine
- Starvault
- Solar SafeInspect
- UserGate VPN
- VMware Horizon Cloud
- VMware Horizon View
- VMware vCloud Director
- VMware vSphere
- Vault
- ViPNET
- Windows VPN
- WordPress
- Yandex.Cloud
- Yandex 360
- Zabbix
- АйТи-Бастион
- Континент 4 VPN
- Кибер Бэкап
- МТС Линк
- С-Терра VPN
- Точка доступа Wi-Fi
- ФПСУ-IP/Клиент
- Пользовательское соглашение об использовании программного обеспечения «МУЛЬТИФАКТОР»
- Политика в отношении обработки персональных данных при использовании сайта https://multifactor.ru/
- Пользовательское соглашение об использовании мобильного приложения «MULTIFACTOR»
- Политика в отношении обработки персональных данных
- Согласие на обработку персональных данных пользователей сайта https://multifactor.ru/
- Лицензионное соглашение
- Политика оплаты
- Результаты проведения специальной оценки условий труда (СОУТ)
RadiusV2 сервер для Windows
MULTIFACTOR RadiusV2 Adapter — программный компонент, RADIUS сервер для Windows.
Компонент доступен вместе с исходным кодом, распространяется бесплатно. Актуальная версия находится на GitHub (архив release_windows_V2.zip):
Важно
Текущая версия Radius-адаптера v2 не является финальной и может дорабатываться в будущем.
Лицензия
Обратите внимание на лицензию. Она не даёт вам право вносить изменения в исходный код Компонента и создавать производные продукты на его основе. Исходный код предоставляется в ознакомительных целях.
Требования для установки компонента
Категория |
Требование |
Описание |
|---|---|---|
Операционная система |
Windows Server 2016 или новее |
Компонент поддерживается с версии Windows Server 2016 . |
Минимальные аппаратные ресурсы |
2 CPU, 4 GB RAM, 40 GB HDD |
Расчётная нагрузка: до 100 одновременных сессий (около 1500 пользователей). |
Среда выполнения |
ASP.NET Core runtime 8.0 |
Требуются для работы компонента. |
Приём Radius-запросов |
Входящий UDP |
Порт для приёма запросов аутентификации от сетевых устройств. |
Доступ к API Мультифактора |
Исходящий TCP |
Поддерживается прямое подключение или через HTTP-прокси. |
Доступ к LDAP каталогу |
Исходящий TCP |
Для проверки учётных данных и получения атрибутов пользователей (AD, FreeIPA, OpenLDAP). |
Доступ к внешнему RADIUS серверу |
UDP |
Необходимо, для взаимодействия со сторонним RADIUS сервером (например NPS или FreeRadius). |
Логирование в Syslog |
Доступ к Syslog-серверу (UDP/TCP) |
Для отправки журналов работы во внешнюю систему логирования или SIEM. |
Доменная среда (для AD) |
Сервер с адаптером должен быть введён в домен |
Требование для работы с Active Directory через LDAP. |
Установка
Установка библиотек
Компонент требует наличия среды выполнения .NET версии 8.0. Данная среда выполнения является:
- Бесплатной;
- открытой (Open Source);
- разрабатывается компанией Microsoft совместно с Open-Source сообществом;
- не накладывает ограничений на использование.
Необходимые пакеты:
aspnetcore-runtime-8.0 — среда выполнения ASP.NET Core
.runtime-8.0 — базовая среда выполнения .NET
Установка компонента
Создайте папку, скачайте и распакуйте актуальную версию компонента из GitHub:
Включите автозапуск службы:
sc create MFRA2.0 binPath="C:\release_windows_V2\Multifactor.Radius.Adapter.v2.exe" DisplayName= "Multifactor Radius 2.0" type=own start=auto
Общие параметры
Для удобства дальнейшего расширения функциональности и упрощения диагностики проблем рекомендуем:
- Основной конфигурационный файл оставить стандартным (со значениями по умолчанию).
- Использовать шаблоны из папки
clientsдля настройки новых ресурсов.Преимущества такого подхода:
- Упрощает добавление новых ресурсов при необходимости расширения 2FA.
- Снижает риск ошибок конфигурации.
- Облегчает поиск и устранение неисправностей.
Этот подход обеспечит более структурированное и поддерживаемое решение.
Минимальная конфигурация Multifactor.Radius.Adapter.v2.dll.config:
<appSettings> . . . <!-- Адрес и порт (UDP) по которому адаптер будет принимать запросы на аутентификацию от клиентов --> <add key="adapter-server-endpoint" value="0.0.0.0:1812"/> <!-- Адрес API MULTIFACTOR, можно задать несколько адресов через ; --> <add key="multifactor-api-url" value="https://api.multifactor.ru"/> <!-- Доступ к API MULTIFACTOR через HTTP прокси (опционально) --> <!-- <add key="multifactor-api-proxy" value="http://login:password@proxy:3128"/> --> <!-- Уровень логирования: 'Verbose', 'Debug', 'Info', 'Warn', 'Error' --> <add key="logging-level" value="Debug"/> <!-- Форматы логирования:'ElasticCommonSchema', 'Json', 'JsonUtc', 'JsonTz' --> <!--<add key="logging-format" value="json"/>--> . . . </appSettings>
Настройка сетевых подключений
Идентификация клиентов
Для настройки каждого сетевого подключения к адаптеру используется отдельный конфигурационный файл с расширением .config, который должен находиться в папке /clients.
Важно
Допускается указание лишь одного из данных параметров для идентификации в конфигурации
Идентификация клиента производится либо по IP адресу, либо по атрибуту NAS-Identifier, либо по IP-адресу NAS-устройства.
По IP удобно идентифицировать конфигурацию единичных сетевых устройств, например, межсетевых экранов. По NAS-Identifier – несколько однотипных, например, группу хостов с WinLogon или SSH.
<appSettings> . . . <!-- IP-адрес NAS-устройства, которое будет подключаться к адаптеру --> <add key="radius-client-nas-ip" value="192.168.0.1; 127.0.0.1"/> <!-- IP адрес сетевого устройства, которое будет подключаться к адаптеру --> <add key="radius-client-ip" value="10.10.10.10"/> <!-- Или RADIUS атрибут NAS-Identifier, передаваемый с сетевого устройства при подключении к адаптеру --> <add key="radius-client-nas-identifier" value="windows"/> <!-- Shared secret, настроенный на сетевом устройстве --> <add key="radius-shared-secret" value=""/> . . . </appSettings>
Если идентификация клиентов не требуется, можно сделать универсальные настройки в файле Multifactor.Radius.Adapter.v2.dll.config, которые будут применимы для всех подключений.
Важно
В параметре radius-shared-secret, не поддерживаются спецсимволы: (‘>’,'<‘,’&’,’#’), так как XML-парсер адаптера считает это частью разметки.
Проверка первого фактора в LDAP cервере.
Секция LdapServers содержит конфигурацию для подключения к одним или нескольким LDAP-каталогам (допустимо перечисление различных каталогов: ActiveDirectory, MultiDirectory, FreeIPA, OpenLDAP). Все параметры задаются внутри корневого элемента <ldapServers>
Чтобы обеспечить проверку первого фактора в LDAP-каталоге, настройте в клиентской конфигурации данный параметр в разделе appSettings:
<appSettings> . . . <!-- Где проверять первый фактор --> <add key="first-factor-authentication-source" value="Ldap"/> . . . </appSettings>
Пример минимальной конфигурации для ActiveDirectory, MultiDirectory, Samba
Необходимо задать секцию ldapServers, в которой необходимо создать секцию ldapServer, где указываются параметры каталога :
<ldapServers>
<!-- Настройки LDAP сервера -->
<ldapServer
connection-string="ldap://127.0.0.1:389"
username="CN=admin,CN=Users,DC=domain,DC=your"
password="password"
/>
</ldapServers>
Пример минимальной конфигурации для FreeIPA, OpenLDAP, ALD Pro
Необходимо задать секцию ldapServers, в которой необходимо создать секцию ldapServer, где указываются параметры каталога :
<ldapServers>
<!-- Настройки LDAP сервера -->
<ldapServer
connection-string="ldap://127.0.0.1:389"
username="UID=admin,CN=users,CN=accounts,DC=example,DC=local"
password="password"
/>
</ldapServers>
Обязательные параметры подключения
connection-string
Строка подключения к LDAP-каталогу. По умолчанию используется ldap протокол.
connection-string="ldap://127.0.0.1:389" connection-string="domain.your" connection-string="127.0.0.1" connection-string="ldaps://127.0.0.1:636"
username
Distinguished Name (DN) учетной записи службы, используемой для привязки (bind) к каталогу.
username="CN=admin1,CN=Users,DC=domain,DC=your"
password
Пароль для указанной учетной записи службы.
password="123456"
Параметр таймаута ответа от LDAP-каталога
bind-timeout-in-seconds
Время ожидания ответа от LDAP-каталога при операции привязки, в секундах. Значение по умолчанию: 30
bind-timeout-in-seconds="45"
Параметры разграничения доступа на основании политик для групп LDAP
access-groups
Список групп, пользователи которых имеют право проходить аутентификацию. Группы задаются в формате Distinguished Name через точку с запятой.
access-groups="CN=VPN Users,OU=groups,DC=domain,DC=your"
- Совместимость с deny-groups: одновременное использование параметров
deny-groupsиaccess-groupsзапрещено. При указании обоих параметров адаптер не запустится и зафиксирует ошибку вStartUp Log.
deny-groups
Список групп, пользователям которых доступ подключения к ресурсам на основании групп AD всегда запрещен.
<add key="deny-groups" value="CN=Deny-Users,OU=groups,DC=domain,DC=your" />
Формат и допустимые значения: В качестве значения принимается строка, содержащая перечень Distinguished Name (DN) групп безопасности через точку с запятой ;.
Логика работы параметра deny-groups:
- Блокировка на первом факторе: для пользователей, состоящих в группах из параметра
deny-groups, доступ всегда отклоняется на этапе проверки первого фактора. - Исключительность групп: группы, перечисленные в
deny-groups, не могут быть одновременно указаны в других параметрах фильтрации:second-fa-groupssecond-fa-bypass-groupsauthentication-cache-groupsbypass-second-factor-when-api-unreachable-groups
Важно
Если группа из
deny-groupsбудет обнаружена в каком-либо из этих параметров, адаптер завершит работу с ошибкой вStartUp Log.
- Совместимость с access-groups: одновременное использование параметров
deny-groupsиaccess-groupsзапрещено. При указании обоих параметров адаптер не запустится и зафиксирует ошибку вStartUp Log.
second-fa-groups
Пользователи только из этих групп будут проходить второй фактор. Группы задаются через точку с запятой в формате distinguished name.
second-fa-groups="CN=2FA Users,OU=groups,DC=domain,DC=your"
second-fa-bypass-groups
У пользователей только из этих групп не будет запрашиваться второй фактор. Группы задаются через точку с запятой в формате DN.
second-fa-bypass-groups="CN=2FA Bypass Users,OU=groups,DC=domain,DC=your"
authentication-cache-groups
Список групп, для пользователей которых будет кэшироваться результат успешного прохождения второго фактора. (см. кэширование аутентификации)
authentication-cache-groups="CN=CacheGroup,OU=groups,DC=domain,DC=your"
bypass-second-factor-when-api-unreachable-groups
В случае если API MULTIFACTOR недоступен, то для пользователей из указанного списка LDAP-групп второй фактор аутентификации не запрашивается (во всех остальных случаях — запрашивается).
<ldapServers>
<!-- Настройки LDAP сервера -->
<ldapServer
...
bypass-second-factor-when-api-unreachable-groups = "your_group1;your_group2"
/>
</ldapServers>
Параметры работы с группами
load-nested-groups
Определяет, необходимо ли загружать и проверять вложенные группы членства пользователя. Принимает значения true или false. Включение этой настройки может увеличить время обработки запроса.
load-nested-groups="true"
nested-groups-base-dn
Ограничивает поиск вложенных групп указанными контейнерами. Значения задаются в формате DN через точку с запятой. По умолчанию поиск осуществляется из корня каталога.
nested-groups-base-dn="CN=Users,DC=domain,DC=your;CN=admins,DC=domain,DC=your"
Параметры атрибутов пользователя
phone-attributes
Задает имена LDAP-атрибутов, из которых извлекается номер телефона пользователя. Атрибуты указываются через точку с запятой. Система использует первое непустое значение.
phone-attributes="mobile;phone"
identity-attribute
Использовать значение указанного атрибута как Identity для запроса в облако Multifactor. Допускается только одно значение. Если настройка не указана, то используется имя пользователя из RADIUS пакета.
Значение атрибута может быть любым существующим атрибутом в LDAP-каталоге.
identity-attribute="userPrincipalName" identity-attribute="mail" identity-attribute="sAMAccountName"
Параметры UPN и доменов
requires-upn
Требует, ввод логина в формате UPN (User Principal Name, например, user@domain.com). Принимает значения true или false. По умолчанию: false.
requires-upn="true"
enable-trusted-domains
Включить обработку доверенных доменов каталога. Значение true/false, по умолчанию false. Работает только при requires-upn=”true”. На данный момент доверенные домены поддерживаются только для Active Directory.
enable-trusted-domains="true"
included-domains
Обрабатывать только указанные доверенные домены. Несколько значений задаются через точку с запятой.
included-domain="domain1.your;domain3.your"
Внимание
Настройка не может использоваться вместе с excluded-domains.
excluded-domains
Обрабатывать все домены, кроме указанных. Несколько значений задаются через точку с запятой.
excluded-domains="domain2.your;domain4.your"
Внимание
Настройка не может использоваться вместе с included-domains.
Аутентификация в многодоменной среде через Global Catalog
Для оптимизации аутентификации пользователей в многодоменной инфраструктуре Active Directory (лесе доменов), начиная с версии 5.1.8, адаптер поддерживает механизм работы через Global Catalog (GC, порт 3268/3269).
Внедрение механизма поиска через GC позволяет:
- Выполнять поиск за один запрос: находить пользователя в единой точке ко всему лесу AD независимо от количества доменов и иерархии.
- Оптимизировать процедуру Bind: после получения Distinguished Name пользователя производить проверку пароля напрямую к конкретному контроллеру домена, которому принадлежит пользователь, или любому доступному DC данного домена.
- Сократить время аутентификации: существенно снижается задержка при проверке первого фактора за счет исключения последовательного опроса всех доменов леса.
- Унифицировать проверку групп: производить считывание групп для второго фактора также через GC для всех доменов леса.
Логика работы
1. Поиск пользователя
- LDAP-поиск (Search): RADIUS-адаптер выполняет поиск пользователя по атрибуту
sAMAccountNameчерез Global Catalog (порт 3268 для LDAP или 3269 для LDAPS). - Базовый каталог (Base DN): Поиск выполняется с пустым Base DN либо с Base DN, соответствующим корню леса (например:
DC=domain,DC=local), что обеспечивает охват всех доменных деревьев леса. - Получение атрибутов: В результате поиска адаптер запрашивает:
- Полный
DNпользователя. - Членство в группах (атрибут
memberOf) для последующей проверки политик второго фактора.
- Полный
2. Проверка пароля
- Определение домена: На основе полученного
DNпользователя адаптер извлекает доменную часть (например, изCN=Иванов И.И.,OU=Users,DC=sub,DC=domain,DC=localвыделяется доменный суффиксDC=sub,DC=domain,DC=local). - Аутентификация: Адаптер выполняет операцию
bind(проверку пароля) строго к контроллеру выявленного целевого домена через стандартный LDAP-порт (389) или LDAPS-порт (636). - Адресный запрос: Операция
bindвыполняется точечно к контроллеру целевого домена, без последовательного перебора всех DC леса.
Важно
Глобальный каталог Global Catalog (GC, порт 3268/3269) служит исключительно для выполнения поисковых запросов и не поддерживает аутентификацию пользователей через операцию
bind. Проверка пароля всегда должна адресоваться на стандартный LDAP/LDAPS-порт (389/636) контроллера домена пользователя.
Настройка подключений в конфигурации
Внимание
Если инфраструктура представляет собой мультидоменную среду (включая дочерние домены) или объединяет несколько лесов доверительными отношениями, установите параметр
requires-upn="true". Это обеспечит корректную работу механизма поиска пользователей, предотвращая неоднозначность при разрешении имен.
Для включения работы через Global Catalog укажите порт 3268 (или 3269 для LDAPS) в параметре connection-string. При обнаружении этого порта адаптер автоматически переключается в режим поиска пользователей и групп по всему лесу AD.
<configuration>
<appSettings>
. . .
</appSettings>
. . .
<ldapServers>
<!-- Настройки LDAP сервера -->
<ldapServer
connection-string="ldap://domain.your:3268"
username="CN=admin,OU=Users,DC=domain,DC=local"
password="password"
second-fa-groups="CN=2FA_Users,OU=MFA,OU=Access_Groups,DC=your,DC=your,DC=group"
/>
</ldapServers>
</configuration>
Обработка ошибок и fallback-механизм:
- Если поиск через GC не дал результатов (пользователь не найден), адаптер должен немедленно возвращать ошибку, а не пытаться искать по доменам.
- Если bind к целевому DC не удался (DC недоступен), адаптер может попробовать выполнить bind к другому DC того же домена (при наличии списка DC) или вернуть ошибку в лог.
Работа с несколькими доменами
Адаптер при запуске находит все доверенные домены и может проводить аутентификацию пользователя в любом из них.
Внимание
Если инфраструктура представляет собой мультидоменную среду (включая дочерние домены) или объединяет несколько лесов доверительными отношениями, установите параметр
requires-upn="true". Это обеспечит корректную работу механизма поиска пользователей, предотвращая неоднозначность при разрешении имен.
Вы можете отдельно настроить список разрешенных :
<configuration>
<appSettings>
. . .
</appSettings>
. . .
<ldapServers>
<!-- Настройки LDAP сервера -->
<ldapServer
connection-string="domain.your"
username="CN=admin,CN=Users,DC=domain,DC=your"
password="password"
enable-trusted-domains="true"
included-domains="domain1.your;domain3.your"
requires-upn="true"
/>
</ldapServers>
</configuration>
или список запрещённых доменов:
<configuration>
<appSettings>
. . .
</appSettings>
. . .
<ldapServers>
<!-- Настройки LDAP сервера -->
<ldapServer
connection-string="domain.your"
username="CN=admin,CN=Users,DC=domain,DC=your"
password="password"
enable-trusted-domains="true"
excluded-domains="domain2.your;domain4.your"
requires-upn="true"
/>
</ldapServers>
</configuration>
Важно
Настройка
included-domainsне может использоваться вместе сexcluded-domains.
Пример перечисления доменов:
<configuration>
<appSettings>
. . .
</appSettings>
. . .
<ldapServers>
<!-- Настройки LDAP сервера -->
<ldapServer
connection-string="domain.your"
username="CN=admin,CN=Users,DC=domain,DC=your"
password="password"
requires-upn="true"
/>
<ldapServer
connection-string="domain1.your"
username="CN=admin,CN=Users,DC=domain1,DC=your"
password="password"
requires-upn="true"
/>
</ldapServers>
</configuration>
Проверка первого фактора во внешнем RADIUS сервере
Для проверки первого фактора в RADIUS, например, в Network Policy Server применимы следующие параметры:
<appSettings> . . . <!-- Где проверять первый фактор: Radius --> <add key="first-factor-authentication-source" value="Radius"/> <!-- Адрес (UDP), с которого адаптер будет подключаться к серверу --> <add key="adapter-client-endpoint" value="0.0.0.0"/> <!-- Адрес и порт (UDP) сервера. Через точку с запятой можно задавать несколько адресов.--> <add key="nps-server-endpoint" value="192.168.0.10:1812; 193.168.0.10:1812"/> <!-- Время ожидания ответа от RADIUS сервера в формате hh:mm:ss. По умолчанию время ожидания 5 секунд --> <add key="nps-server-timeout" value="00:00:05" /> . . . </appSettings>
Внимание
Если необходима проверка членства в LDAP группе или передача LDAP атрибута, то необходимо указать секцию
ldapServersи задать параметры длягруппилиатрибутов. По умолчанию передаётся атрибутnameи
Без проверки первого фактора
Адаптер может работать без проверки пароля пользователя, только со вторым фактором доступа. Для настройки используется следующая конфигурация клиента:
<appSettings> . . . <!--Где проверять первый фактор: None --> <add key="first-factor-authentication-source" value="None"/> . . . </appSettings>
Внимание
Если необходима проверка членства в LDAP группе или передача LDAP атрибута, то необходимо указать секцию
ldapServersи задать параметры длягруппилиатрибутов. По умолчанию передаётся атрибутnameи
Проверка второго фактора перед первым
Адаптер может быть настроен на обязательное подтверждение второго фактора до проверки учетных данных в LDAP-каталоге.
В этом режиме, если пользователь не подтвердил свой второй фактор, адаптер не отправляет запрос на проверку логина и пароля в LDAP-каталог.
Это позволяет эффективно противостоять атакам перебора, так как неавторизованные попытки блокируются на более раннем этапе, до обращения к центральному каталогу, что, в том числе, предотвращает блокировку учетных записей в каталоге из-за превышения лимита неудачных попыток ввода пароля.
У данного параметра несколько вариантов значений: none, any, otp.
none
Обязательная проверка второго фактора до проверки учетных данных в LDAP-каталоге отключена. Проверка второго фактора будет проходит по стандартному сценарию.
any
Обязательная проверка подтверждения второго фактора до проверки учетных данных в LDAP-каталоге будет осуществлена любым из настроенных методов. (Push в мобильном приложении; Multifactor; push в Telegram; программные и аппаратные OTP токены; смсзвонок.)
otp
В режиме OTP пользователь должен ввести одноразовый пароль (OTP) вместе с паролем. Если пароль не требуется пользователю достаточно ввести только одноразовый пароль (OTP).
Пароль + OTP: mypassword123456 Только OTP: 123456
Важно
Данный параметр используется только вместе с
invalid-credential-delay.
<appSettings> . . . <!-- Проверка второго фактора перед первым. Варианты METHOD: "none", "any", "otp" --> <add key="pre-authentication-method" value="METHOD"/> <!-- Задержка ответа в секундах при отказе в доступе: случайная в интервале между 3 и 6 сек. (включая границы интервала) --> <add key="invalid-credential-delay" value="3-6" /> . . . </appSettings>
Подключение к серверу аутентификации
Для взаимодействия с серверами аутентификации MULTIFACTOR, которые отправляют второй фактор доступа, необходимо заполнить два параметра в конфигурации клиента:
<appSettings> . . . <!-- Параметр NAS-Identifier для подключения к API MULTIFACTOR - из личного кабинета --> <add key="multifactor-nas-identifier" value=""/> <!-- Параметр Shared Secret для подключения к API MULTIFACTOR - из личного кабинета --> <add key="multifactor-shared-secret" value=""/> . . . </appSettings>
Значения параметров необходимо взять из личного кабинета, в разделе «Ресурсы».
Разграничение IP-адресов
Данный параметр задаёт список допустимых IP адресов для обработки адаптером. Если AccessRequest пакет пришел не с адреса из настройки, то такой пакет игнорируется. Пакеты StatusServer будут обрабатываться в обычном режиме. Можно задавать конкретные IP, подсети, диапазоны адресов. Несколько значений задаются через точку с запятой.
Пример:
<appSettings> . . . <add key="ip-white-list" value="192.168.0.1; 127.0.0.1/16 ; 199.168.0.1-199.168.0.10"/> <add key="ip-white-list" value="192.168.0.1; 192.168.0.2"/> <add key="ip-white-list" value="199.168.0.1-199.168.0.10; 136.168.0.1-136.168.0.10"/> . . . </appSettings>
Настройка идентификации сетевого узла
В данном разделе описываются параметры, определяющие, какие данные RADIUS-адаптер будет использовать для идентификации сетевого узла (например, IP-адреса или имени хоста клиента) и как эти данные будут обрабатываться.
<appSettings> ... <!-- Определяет, какой RADIUS-атрибут адаптер будет использовать как Calling-Station-Id (по умолчанию: сам Calling-Station-Id) --> <add key="calling-station-id-attribute" value="new_attribute"/> <!-- Определяет источник идентификатора узла: true (по умолчанию) - если в атрибуте не IP или пусто, подставить IP из UDP-пакета; --> <add key="ip-from-udp" value="false"/> ... </appSettings>
Где:
calling-station-id-attribute
Параметр переназначает источник данных для Calling-Station-ID. Вместо стандартного атрибута адаптер будет извлекать значение из атрибута, указанного в value.
ip-from-udp
Управляет тем, как формируется значение Calling-Station-Id, когда оно содержит не IP-адрес, а hostname или пустое значение.
логика работы:
true(значение по умолчанию): Если атрибутCalling-Station-Id(или атрибут, указанный вcalling-station-id-attribute) содержит IP-адрес, он передается как есть. Если же он содержит hostname или пуст, то в качествеCalling-Station-Idбудет использован IP-адрес клиента из UDP-пакета.false: Адаптер всегда передает значение атрибутаCalling-Station-Id(или указанного вами атрибута) в том виде, в котором оно получено, без каких-либо попыток его интерпретировать или заменить на IP из UDP-пакета.
Дополнительные RADIUS атрибуты
При успешной аутентификации, в ответе клиенту компонент может передавать настраиваемые RADIUS атрибуты. Такие атрибуты обычно используются на сетевом оборудовании для разграничения прав доступа.
Атрибуты могут быть четырёх видов:
- Безусловные
- Условные: с проверкой вхождения пользователя в группу на сервере LDAP
- Условные: с проверкой имени пользователя
- С трансляцией значения атрибута LDAP в RADIUS.
Пример XML-синтаксиса файла конфигурации для передачи атрибута Class (RADIUS Attribute ID 25).
<configuration>
<!-- Параметры работы компонента -->
<appSettings>
. . .
</appSettings>
<!-- Параметры работы LDAP сервера -->
<ldapServers>
. . .
</ldapServers>
<!-- Настройка передачи дополнительных RADIUS атрибутов -->
<RadiusReply>
<Attributes>
<!-- Всегда передавать атрибут Class со значением Test1 -->
<add name="Class" value="Test1" />
<!-- Всегда передавать атрибут Class со значением из Ldap атрибута SampleLdapAttr -->
<add name="Class" from="SampleLdapAttr"/>
<!-- Передавать атрибут Class со всеми группами пользователя в Active Directory -->
<add name="Class" from="memberOf"/>
<!-- Передавать атрибут Class со значением Users, если пользователь входит в LDAP-группу VPN Users или Staff -->
<add name="Class" value="Users" when="UserGroup=VPN Users;Staff"/>
<!-- Передавать атрибут Class со значением Admin, если имя пользователя SamlpeAdminName или SampleUserName -->
<add name="Class" value="Admin" when="UserName=SamlpeAdminName;SampleUserName"/>
</Attributes>
</RadiusReply>
</configuration>
Названия и значения атрибутов могут быть любыми, которые поддерживаются на вашем сетевом устройстве. Например, для передачи групп FortiGate можно использовать атрибут Fortinet-Group-Name. Словарь со всеми доступными атрибутами расположен в файле /realize/multifactor/radius/content/radius.dictionary.
Для передачи LDAP атрибутов должно быть выполнено одно из условий:
- Указан источник первого фактора LDAP-каталог и задано название домена;
- Заданы параметры сервисной учётной записи LDAP-каталога, если источником первого фактора является RADIUS, или первый фактор не проверяется.
Кэширование аутентификации
Адаптер можно настроить на кэширование аутентификаций пользователей вторым фактором.
В этом режиме повторные запросы ранее аутентифицированных вторым фактором пользователей будут приняты без запроса второго фактора. Кэш действует в течение настраиваемого временного интервала.
Запрос является повторным, если параметры текущего запроса совпадают с параметрами предыдущего запроса.
Формат и допустимые значения:
- Диапазон: от
00:00:00до23:59:59 - Формат:
hh:mm:ss
Компоненты ключа: - CallingStationId: значение одноименного атрибута из RADIUS-запроса. Если атрибут отсутствует, используется IP-адрес клиента, полученный из UDP-пакета.
- configName: имя конфигурационного файла, применяемого к данному клиенту.
- UserName: имя пользователя из RADIUS-пакета (атрибут
User-Name).
Для настройки используется следующий параметр:
<appSettings> . . . <!-- Пропускать повторные аутентификации без запроса второго фактора в течение 1 часа 20 минут 10 секунд (максимальное значение 23:59:59, кэширование отключено, если удалить настройку) --> <add key="authentication-cache-lifetime" value="01:20:10" /> . . . </appSettings>
Максимальное значение для данного параметра 23:59:59.
Защита от сбоев
В случае недоступности (по любой причине) API MULTIFACTOR, адаптер может работать в одном из двух вариантов:
- Пропускать без второго фактора (по умолчанию)
- Отказывать в доступе
Для настройки используется следующий параметр:
<appSettings> . . . <!-- true: пропускать, false: запрещать --> <add key="bypass-second-factor-when-api-unreachable" value="true"/> . . . </appSettings>
Прочие параметры
Пользователям, регистрирующимся в системе через Radius адаптер, можно автоматически присваивать членство в группах MULTIFACTOR следующей настройкой:
<appSettings> . . . <add key="sign-up-groups" value="group1;Название группы 2"/> . . . </appSettings>
Дополнительные настройки безопасности и конфиденциальности:
<appSettings> . . . <!-- Отключить передачу адаптером ФИО, email, IP пользователей на сервер MULTIFACTOR --> <add key="privacy-mode" value="Full"/> <!-- можно указать перечень передаваемых атрибутов --> <add key="privacy-mode" value="Partial:Name,Email,Phone,RemoteHost"/> <!-- Отключить функцию смены доменного пароля (вызов challenge-password). По умолчанию: true (смена пароля разрешена) --> <add key="access-challenge-password" value="false"/> . . . </appSettings>
Настройка времени ожидания ответа API MULTIFACTOR:
<appSettings> . . . <!--Время ожидания ответа от api мультифактора, по умолчанию 65 секунд. Время в формате hh:mm:ss--> <add key="multifactor-api-timeout" value="00:01:05"/> <!--Если указываете время менее 65 секунд, используйте следующий синтаксис. Время в формате hh:mm:ss--> <add key="multifactor-api-timeout" value="00:00:45!"/> . . . </appSettings>
Журналы
Журналы работы компонента записываются в syslog и сохраняются в текстовые файлы в директорию /opt/multifactor/radius/logs. Если директория пуста или ее нет, нужно убедиться, что у пользователя, под которым запускается служба, есть права на запись в эту директорию.
Параметры логирования
Параметры логирования необходимо настраивать в корневом файле конфигурации Multifactor.Radius.Adapter.v2.dll.config :
Существуют следующие уровни логирования:
- Verbose
- Debug
- Info
- Warn
- Error
Пример:
<add key="logging-level" value="Debug"/>
Существуют следующие форматы логирования:
- ElasticCommonSchema
- Json
- JsonUtc
- JsonTz
Пример:
<add key="logging-format" value="json"/>
Существует возможность ограничения размера логов в одном документе.
Данный параметр ограничивает максимальный размер одного файла журнала в байтах. Когда файл достигает указанного размера, адаптер создаёт новый файл логов (ротация).
<appSettings> ... <add key="log-file-max-size-bytes" value="1073741824"/> ... </appSettings>
Где:
1073741824 (1 ГБ) — максимальное значение.
Логирование ошибок запуска
При запуске системы активируется механизм логирования. Ошибки, возникающие на этапе запуска, дублируются в два потока вывода: в консоль и в файл startup.log, расположенный в папке logs.
Запись журналов в Syslog
Для записи журналов работы адаптера в Syslog или SIEM систему, добавьте в корневой файл конфигурации multifactor-radius-adapter.v2.dll.config следующие параметры:
<!-- Адрес и порт сервера, протокол может быть udp или tcp --> <add key="syslog-server" value="udp://syslog-server:514"/> <!-- Формат журнала: RFC3164 или RFC5424 --> <add key="syslog-format" value="RFC5424"/> <!-- Категория: User, Auth, Auth2, Local0 .. Local7 --> <add key="syslog-facility" value="Auth"/> <!-- Название приложения (tag) --> <add key="syslog-app-name" value="multifactor-radius"/>
Также доступны расширенные возможности по настройке шаблона записи журналов.
Если syslog передаёт искаженные символы, нужно поменять следующую настройку на false (по умолчанию true):
<add key="syslog-use-tls" value="false" />
Шаблоны журналов
Для настройки шаблона записи журналов используются следующие настройки в корневом файле конфигурации multifactor-radius-adapter.v2.dll.config:
<appSettings>
. . .
<!--
Примеры шаблонов:
1) [{Timestamp:HH:mm:ss} {Level:u3}] ext_ip={CallingStationId} {Message:lj}{NewLine}{Exception}
2) [{Timestamp:HH:mm:ss} {Level:u3}] {CorrelationId} {Message:lj}{NewLine}{Exception}
3) {Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {CorrelationId}{Message:lj}{NewLine}{Exception}
-->
<!-- Шаблон записи журналов в текстовый файл -->
<!-- <add key="file-log-output-template" value=""/> -->
<!-- Шаблон записи журналов в консоли -->
<!-- <add key="console-log-output-template" value=""/> -->
. . .
</appSettings>
Обновление адаптера
- Остановите службу
- Перезапишите файлы на новые, не заменяя конфигурационные файлы(не подменяйте папку clients с настроенными конфигурациями,)
- Включите службу обратно.
- Основной конфиг (MultiFactor.Radius.Adapter.exe.config) нужно заполнить вручную, не подменяя его.
Подробнее о шаблонах: https://github.com/serilog/serilog/wiki/Formatting-Output.
Идентификатор корреляции
Для отслеживания событий на протяжении всей цепочки аутентификации пользователя используется идентификатор корреляции {CorrelationId}.
Значение идентификатора передается в формате «ConfigName-N», где
- «ConfigName» — имя конфигурации клиента, который подключился
- «N» — счетчик, который сбрасывается каждые сутки в 00:00.
Адрес удалённого клиента
Для записи названия хоста или IP удалённого пользователя используется шаблон {CallingStationId}.
Значение параметра последовательно проверяется в следующих RADIUS-атрибутах до первого непустого:
- Calling-Station-Id;
- MS-Client-Machine-Account-Name;
- MS-RAS-Client-Name.
Работа с несколькими адаптерами
При необходимости использования нескольких Radius адаптеров на одной машине, необходимо выполнить следующие действия. Каждая копия адаптера должна функционировать как отдельная служба Windows и обрабатывать запросы на уникальном сетевом порту.
Для этого необходимо указать разные имена для каждой службы, а также настроить разные порты в файле конфигурации каждой копии адаптера, чтобы они могли работать на одной машине одновременно.
Переименуйте службу для каждой новой копии адаптера:
- Откройте редактор реестра (
WIN+R).
regedit
- Перейдите в раздел, где хранятся службы Windows: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services.
- Откройте ключ «Службы», чтобы увидеть все установленные на компьютере службы. Список отсортирован по имени службы.
- Найдите и выделите нужную службу в списке.
- Правой кнопкой мыши нажмите на запись и выберите «Переименовать».
- Введите новое имя. Длина имени не должна превышать 256 символов, недопустимы обратные косые и прямые ссылки.
- Перезагрузите компьютер.
Важно
Новое имя службы не вступит в силу до перезагрузки Windows.
Настройте уникальный порт в конфигурационном файле:
Для того, чтобы задать порт необходимо настроить корневой файл конфигурации Multifactor.Radius.Adapter.v2.dll.config каждого адаптера, следующим образом:
1. Найдите строку с параметром adapter-server-endpoint:
<appSettings> . . . <add key="adapter-server-endpoint" value="0.0.0.0:1812"/> . . . </appSettings>
2. Измените номер порта на уникальный для данной службы:
Для службы на порту 1813:
<appSettings> . . . <add key="adapter-server-endpoint" value="0.0.0.0:1813"/> . . . </appSettings>
Для службы на порту 1814:
<appSettings> . . . <add key="adapter-server-endpoint" value="0.0.0.0:1814"/> . . . </appSettings>
Кластерная конфигурация
При размещении компонента в кластерной конфигурации придерживайтесь схемы Active/Passive или выбирайте вариант, при котором повторный запрос с клиента будет обрабатываться тем же сервером.
Для наилучшей работы с nginx или HAProxy также укажите в настройках прокси-сервера заголовок proxy_protocol.
Дополнительная информация про Active Directory
- Для работы с Active Directory используется простая проверка подлинности пароля пользователя. Настоятельно рекомендуем использовать схему LDAPS для шифрования трафика между адаптером и доменом (на сервере AD должен быть установлен сертификат, в т.ч. самоподписанный).
Удаление компонента
Остановите службу, удалите её из автозапуска:
sc delete MFRA2.0
Удалите файлы адаптера.
Вопросы и ответы
В иных случаях, см. Настройка сервисной учётной записи.
load-nested-groups="false
<add key="radius-client-ip" value="192.168.0.1-192.168.0.5; 192.168.0.10"/> <!-- Или так --> <add key="radius-client-ip" value="10.0.0.0/24"/>