- Начало работы
- Интеграция
- 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
- МТС Линк (бывш. webinar.ru)
- С-Терра VPN
- Точка доступа Wi-Fi
- ФПСУ-IP/Клиент
- Пользовательское соглашение об использовании программного обеспечения «МУЛЬТИФАКТОР»
- Политика в отношении обработки персональных данных при использовании сайта https://multifactor.ru/
- Пользовательское соглашение об использовании мобильного приложения «MULTIFACTOR»
- Политика в отношении обработки персональных данных
- Согласие на обработку персональных данных пользователей сайта https://multifactor.ru/
- Лицензионное соглашение
- Политика оплаты
- Результаты проведения специальной оценки условий труда (СОУТ)
Radius сервер для Windows
MULTIFACTOR Radius Adapter — программный компонент, RADIUS сервер для Windows.
Компонент доступен вместе с исходным кодом, распространяется бесплатно. Актуальная версия находится на GitHub: код и сборка (архив release.zip).
Лицензия
Обратите внимание на лицензию. Она не дает вам право вносить изменения в исходный код Компонента и создавать производные продукты на его основе. Исходный код предоставляется в ознакомительных целях.
Требования для установки компонента
- Компонент устанавливается на любой Windows сервер начиная с версии 2008 R2;
- Минимальные требования для сервера: 2 CPU, 4 GB RAM, 40 GB HDD (обеспечивают работу ОС и адаптера для 100 одновременных подключений — примерно 1500 пользователей);
- На сервере должен быть открыт порт 1812 (UDP) для приема запросов от Radius клиентов;
- Серверу с установленным компонентом необходим доступ к хосту api.multifactor.ru по TCP порту 443 (TLS) напрямую или через HTTP proxy;
- Для взаимодействия с Active Directory, компоненту нужен доступ к серверу домена по TCP порту 389;
- Для взаимодействия с Network Policy Server, компоненту нужен доступ к NPS по UDP порту 1812;
- Для записи журналов в Syslog, необходим доступ к Syslog серверу;
- Для работы с доменными учётными записями машина с адаптером должна находиться в домене.
Обратите внимание
Для Windows Server версии младше 2016 необходимо установить Microsoft .NET Framework 4.6.2.
Общие параметры
Общие параметры работы компонента хранятся в секции <appSettings> файла MultiFactor.Radius.Adapter.exe.config в формате XML.
Важно
Не заменяйте файл целиком и не удаляйте уже существующие строки
Для удобства дальнейшего расширения функциональности и упрощения диагностики проблем рекомендуем:
- Основной конфигурационный файл оставить стандартным (со значениями по умолчанию).
- Использовать шаблоны из папки
clientsдля настройки новых ресурсов.Преимущества такого подхода:
- Упрощает добавление новых ресурсов при необходимости расширения 2FA.
- Снижает риск ошибок конфигурации.
- Облегчает поиск и устранение неисправностей.
Этот подход обеспечит более структурированное и поддерживаемое решение.
Минимальная конфигурация:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<!--this service radius server endpoint (0.0.0.0 - listen all interfaces) -->
<add key="adapter-server-endpoint" value="0.0.0.0:1812" />
<!--Multifactor API -->
<add key="multifactor-api-url" value="https://api.multifactor.ru" />
<!--HTTP proxy for API (optional)-->
<!--<add key="multifactor-api-proxy" value="http://proxy:3128"/>-->
<!-- minimal log level: 'Debug', 'Info', 'Warn', 'Error' -->
<add key="logging-level" value="Debug" />
<!--<add key="logging-format" value="json"/>-->
<!--Syslog server-->
<!--<add key="syslog-server" value="udp://syslog-server:514"/>-->
<!--Syslog format: RFC3164 or RFC5424-->
<!--<add key="syslog-format" value="RFC5424"/>-->
<!--<add key="syslog-facility" value="Auth"/>-->
<!--<add key="syslog-app-name" value="multifactor-radius"/>-->
<!--<add key="log-file-max-size-bytes" value="1073741824"/>-->
<!-- Опционально. Имя сервиса в Windows -->
<!-- <add key="service-unit-name" value=""/> -->
<!-- Опционально. Отображаемое имя сервиса -->
<!-- <add key="service-display-name" value=""/> -->
</appSettings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Primitives" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Options" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Text.Encodings.Web" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Запись журналов в Syslog
Для записи журналов работы адаптера в Syslog или SIEM систему, добавьте в общие настройки следующие параметры:
<!-- Адрес и порт сервера, протокол может быть 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" />
Настройка сетевых подключений
Идентификация клиентов
Для настройки каждого сетевого подключения к адаптеру используется отдельный конфигурационный файл с расширением .config, который должен находиться в папке \Clients.
Идентификация клиента производится либо по IP адресу, либо по RADIUS атрибуту NAS-Identifier. По IP удобно идентифицировать конфигурацию единичных сетевых устройств, например, межсетевых экранов. По NAS-Identifier – несколько однотипных, например, группу хостов с WinLogon или SSH.
<!-- 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=""/>
Если идентификация клиентов не требуется, можно сделать универсальные настройки в корневом файле конфигурации MultiFactor.Radius.Adapter.exe.config, которые будут применимы для всех подключений.
Warning
В параметре radius-shared-secret, не поддерживаются спецсимволы: (‘>’, ‘<‘, ‘&’), так как XML-парсер адаптера считает это частью разметки.
Проверка первого фактора в Active Directory
Для проверки первого фактора в домене Active Directory, в конфигурацию клиента к уже существующим параметрам добавьте настройки:
<!-- Где проверять первый фактор: ActiveDirectory --> <add key="first-factor-authentication-source" value="ActiveDirectory"/> <!-- Домен --> <add key="active-directory-domain" value="domain.local"/> <!-- Разрешать доступ только пользователям из указанной группы (не проверяется, если удалить настройку) --> <add key="active-directory-group" value="VPN Users"/> <!-- Запрашивать второй фактор только у пользователей из указанной группы (второй фактор требуется всем, если удалить настройку) --> <add key="active-directory-2fa-group" value="2FA Users"/> <!-- Не запрашивать второй фактор у пользователей из указанной группы (в том числе, если пользователь одновременно находится в группе, заданной в active-directory-2fa-group) --> <add key="active-directory-2fa-bypass-group" value="Bypass 2FA Users"/> <!--Использовать номер телефона из Active Directory для отправки одноразового кода в СМС (не используется, если удалить настройку)--> <!--add key="use-active-directory-user-phone" value="true"/--> <!--add key="use-active-directory-mobile-user-phone" value="true"/-->
При включении параметра use-active-directory-user-phone компонент будет использовать телефон, записанный на вкладке General. Формат телефона может быть любым.

При включении параметра use-active-directory-mobile-user-phone компонент будет использовать телефон, записанный на вкладке Telephones в поле Mobile. Формат телефона также может быть любым.

Групповые политики в AD
1. Общий доступ к системе (группа VPN Users)
- Назначение: определяет, кто вообще может получить доступ к системе.
- Сценарии:
- Если группа указана (
<add key="active-directory-group" value="VPN Users"/>):- Доступ разрешён только пользователям из группы
VPN Users. - Пользователи не из этой группы не смогут войти, даже если у них есть 2FA.
- Доступ разрешён только пользователям из группы
- Если настройка удалена (или значение пустое):
- Доступ могут получить все пользователи домена (если нет других ограничений).
- Если группа указана (
2. Требование 2FA (группа 2FA Users)
- Назначение: определяет, у кого будет запрашиваться второй фактор аутентификации.
- Сценарии:
- Если группа указана (
<add key="active-directory-2fa-group" value="2FA Users"/>):- 2FA требуется только пользователям из группы
2FA Users. - Пользователи не из этой группы смогут войти без 2FA (если не попадают в
Bypass 2FA Users).
- 2FA требуется только пользователям из группы
- Если настройка удалена (или значение пустое):
- 2FA требуется всем пользователям (кроме тех, кто в
Bypass 2FA Users).
- 2FA требуется всем пользователям (кроме тех, кто в
- Если группа указана (
3. Исключение из 2FA (группа Bypass 2FA Users)
- Назначение: позволяет отключить 2FA для определённых пользователей, даже если они в группе
2FA Users. - Сценарии:
- Если группа указана (
<add key="active-directory-2fa-bypass-group" value="Bypass 2FA Users"/>):- Пользователи из
Bypass 2FA Usersникогда не получают запрос 2FA, даже если они в2FA Users. - Это приоритетное правило (переопределяет требование 2FA).
- Пользователи из
- Если настройка удалена (или значение пустое):
- Никаких исключений нет, 2FA применяется согласно настройке
2FA Users.
- Никаких исключений нет, 2FA применяется согласно настройке
- Если группа указана (
Возможные комбинации и их эффект
Рассмотрим различные комбинации членства в группах и их влияние на доступ и 2FA:
Член VPN Users | Член 2FA Users | Член Bypass 2FA Users | Результат |
|---|---|---|---|
| ✅ Да | ❌ Нет | ❌ Нет | Доступ разрешён, 2FA не требуется |
| ✅ Да | ✅ Да | ❌ Нет | Доступ разрешён, 2FA требуется |
| ✅ Да | ❌ Нет | ✅ Да | Доступ разрешён, 2FA не требуется |
| ❌ Нет | ❌ Нет | ❌ Нет | Доступ запрещён (не в VPN Users) |
| ❌ Нет | ✅ Да | ❌ Нет | Доступ запрещён (не в VPN Users, даже если 2FA включена) |
| ❌ Нет | ✅ Да | ✅ Да | Доступ запрещён (не в VPN Users, исключение 2FA не влияет на доступ) |
Выводы
VPN Users— базовая группа доступа. Без неё пользователь не войдёт, даже если у него есть 2FA или исключение.2FA Users— определяет, кому нужна 2FA. Если не задана — 2FA требуется всем.Bypass 2FA Users— отключает 2FA для своих членов вне зависимости от других настроек.
Работа с несколькими доменами
Адаптер при запуске находит все доверенные домены и может проводить аутентификацию пользователя в любом из них. Вы можете отдельно настроить список разрешенных или список запрещённых доменов:
<configuration>
<configSections>
<section name="ActiveDirectory" type="MultiFactor.Radius.Adapter.ActiveDirectorySection, MultiFactor.Radius.Adapter"/>
</configSections>
<appSettings>
...
</appSettings>
<ActiveDirectory requiresUserPrincipalName="true">
<!-- Ограничить домены списком ниже /-->
<IncludedDomains>
<add name="dom1.loc"/>
<add name="dom2.loc"/>
</IncludedDomains>
<!-- Или все домены, кроме перечисленных ниже /-->
<ExcludedDomains>
<add name="dom3.loc"/>
<add name="dom4.loc"/>
</ExcludedDomains>
</ActiveDirectory>
</configuration>
Проверка первого фактора к AD LDS
Для проверки первого фактора в домене Active Directory, внесите в конфигурацию клиента следующие параметры:
<!-- Где проверять первый фактор: AD LDS --> <add key="first-factor-authentication-source" value="AdLds"/> <!-- Адрес каталога AD LDS --> <add key="ldap-url" value="ldap://server:port/base_dn"/>
В адресе каталога:
- схема может быть ldap или ldaps;
- server — имя сервера или ip адрес;
- base_dn — distinguished name контейнера с пользователями, например CN=Users,CN=Instance,DC=domain,DC=local
Проверка первого фактора во внешнем RADIUS сервере
Для проверки первого фактора в RADIUS, например, в Network Policy Server применимы следующие параметры:
<!-- Где проверять первый фактор: 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"/> <!--Если необходима передача атрибутов и проверка групп доступа из LDAP, укажите домен --> <add key="active-directory-domain" value="domain.local"/> <!-- Разрешать доступ только пользователям из указанной группы (не проверяется, если удалить настройку) --> <add key="active-directory-group" value="VPN Users"/> <!-- Запрашивать второй фактор только у пользователей из указанной группы (второй фактор требуется всем, если удалить настройку) --> <add key="active-directory-2fa-group" value="2FA Users"/> <!-- Не запрашивать второй фактор у пользователей из указанной группы (в том числе, если пользователь одновременно находится в группе, заданной в active-directory-2fa-group) --> <add key="active-directory-2fa-bypass-group" value="Bypass 2FA Users"/>
Проверка второго фактора перед первым
Адаптер может быть настроен на обязательное подтверждение второго фактора до проверки учетных данных в Active Directory.
В этом режиме, если пользователь не подтвердил свой второй фактор, адаптер не отправляет запрос на проверку логина и пароля в AD.
Это позволяет эффективно противостоять атакам перебора, так как неавторизованные попытки блокируются на более раннем этапе, до обращения к центральному каталогу, что, в том числе, предотвращает блокировку учетных записей в каталоге из-за превышения лимита неудачных попыток ввода пароля.
Для настройки используется следующая конфигурация клиента:
<!-- [Опционально] Проверка второго фактора перед первым. Варианты METHOD: "none", "push", "telegram", "otp" --> <add key="pre-authentication-method" value="METHOD"/> <!-- Задержка ответа в секундах при отказе в доступе: случайная в интервале между 3 и 6 сек. (включая границы интервала) --> <add key="invalid-credential-delay" value="3-6" />
Без проверки первого фактора
Адаптер может работать без проверки пароля пользователя, только с вторым фактором доступа. Для настройки используется следующая конфигурация клиента:
<!-- Где проверять первый фактор: None --> <add key="first-factor-authentication-source" value="None"/>
Подключение к серверу аутентификации
Для взаимодействия с серверами аутентификации MULTIFACTOR, которые отправляют второй фактор доступа, необходимо заполнить два параметра в конфигурации клиента:
<!-- Параметр NAS-Identifier для подключения к API MULTIFACTOR - из личного кабинета --> <add key="multifactor-nas-identifier" value=""/> <!-- Параметр Shared Secret для подключения к API MULTIFACTOR - из личного кабинета --> <add key="multifactor-shared-secret" value=""/>
Значения параметров необходимо взять из личного кабинета, в разделе «Ресурсы».
Разграничение 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 атрибуты
При успешной аутентификации, в ответе клиенту компонент может передавать настраиваемые RADIUS атрибуты. Такие атрибуты обычно используются на сетевом оборудовании для разграничения прав доступа.
Атрибуты могут быть четырёх видов:
- Безусловные;
- Условные: с проверкой вхождения пользователя в группу на сервере LDAP;
- Условные: с проверкой имени пользователя;
- С трансляцией значения атрибута LDAP в RADIUS.
Для настройки используется следующий синтаксис конфигурации с примерами для атрибута Class:
<configuration>
<!-- Объявление секции RadiusReply -->
<configSections>
<section name="RadiusReply" type="MultiFactor.Radius.Adapter.RadiusReplyAttributesSection, MultiFactor.Radius.Adapter"/>
</configSections>
<!-- Параметры работы компонента -->
<appSettings>
...
</appSettings>
<!-- Настройка передачи дополнительных 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>
Названия и значения атрибутов могут быть любыми, которые поддерживаются на вашем сетевом устройстве. Атрибуты, которые зависят от LDAP будут работать в случае, если первым фактором доступа является ActiveDirectory или другой LDAP каталог.
Кэширование аутентификации
Адаптер можно настроить на кэширование аутентификаций пользователей вторым фактором.
В этом этом режиме повторные запросы ранее аутентифицированных вторым фактором пользователей будут приняты без запроса второго фактора. Кэш действует в течение настраиваемого временного интервала.
Запрос является повторным, если параметры текущего запроса совпадают с параметрами предыдущего запроса. Параметры:
- название клиентской конфигурации адаптера;
- IP или Remote Host пользователя;
- логин пользователя.
Для настройки используется следующий параметр:
<!-- Пропускать повторные аутентификации без запроса второго фактора в течение 1 часа 20 минут 10 секунд ( максимальное значение 23:59:59, кэширование будет отключено, если удалить настройку) --> <add key="authentication-cache-lifetime" value="01:20:10" />
Максимальное значение для данного параметра 23:59:59.
Кэширования второго фактора на основе групп пользователей
Адаптер можно настроить на кэширование второго фактора на основе групп пользователей. Если пользователь является членом указанных групп, его успешно пройденный второй фактор будет кэшироваться. Если параметр пуст или отсутствует, кэширование работает для всех пользователей как обычно.
Важно
Настройка работает только вместе с настройкой authentication-cache-lifetime.
<add key="authentication-cache-groups" value="Auth1;admins"/>
Защита от сбоев
В случае недоступности (по любой причине) API MULTIFACTOR, адаптер может работать в одном из двух вариантов:
- Пропускать без второго фактора (по умолчанию)
- Отказывать в доступе
Для настройки используется следующий параметр:
<!-- true: пропускать, false: запрещать --> <add key="bypass-second-factor-when-api-unreachable" value="true"/>
Прочие параметры
Дополнительные параметры работы с Active Directory:
<!-- Отключить проверку вложенных групп в Active Directory (ускорение запроса) --> <add key="load-active-directory-nested-groups" value="false"/> <!-- dn контейнеров где искать группы пользователя. Задается через точку с запятой. Пример CN=Users,DC=domain,DC=local --> <add key="nested-groups-base-dn" value="CN=Users,DC=domain,DC=your;OU=Admins,DC=domain,DC=your"/> <!-- Передавать указанный атрибут из Active Directory в качестве логина пользователя --> <add key="use-attribute-as-identity" value="mail"/> <!-- Передавать атрибут userPrincipalName из Active Directory в качестве логина пользователя --> <add key="use-upn-as-identity" value="true"/>
Важно
Параметр
use-upn-as-identityустарел, с версии 1.0.231 вместо него следует использоватьuse-attribute-as-identity.
Пользователям, регистрирующимся в системе через Radius адаптер, можно автоматически присваивать членство в группах MULTIFACTOR следующей настройкой:
<add key="sign-up-groups" value="group1;Название группы 2"/>
Дополнительные настройки безопасности и конфиденциальности:
<!-- Задержка ответа в секундах при отказе в доступе: случайная в интервале между 3 и 6 сек. (включая границы интервала) --> <add key="invalid-credential-delay" value="3-6" /> <!-- Отключить передачу адаптером ФИО, email, IP пользователей на сервер MULTIFACTOR --> <add key="privacy-mode" value="Full"/> <!--можно указать перечень передаваемых атрибутов--> <add key="privacy-mode" value="Partial:Name,Email,Phone,RemoteHost"/>
Настройка времени ожидания ответа API MULTIFACTOR:
<!-- Время ожидания ответа от 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!"/>
Настройка времени ожидания от LDAP каталога:
<!-- Время ожидания ответа от LDAP каталога, по умолчанию 30 секунд. Формат hh:mm:ss -->
<add key="ldap-bind-timeout" value="00:00:30"/>
Настройка интервала отправки логов в журнал (доступно указывать от 5 секунд до 10 минут):
<add key="log-file-flush-interval" value="00:00:05" />
Запуск компонента
Компонент может работать в консольном режиме или в качестве службы Windows. Для запуска в консольном режиме достаточно запустить приложение.
Для установки в качестве Windows Service выполните команду с ключом /i от имени Администратора
sc.exe create "MultiFactorRadiusAdapter" binPath= "C:\Program Files\MultiFactor\MultiFactor.Radius.Adapter.exe" start= auto DisplayName= "MultiFactor Radius Adapter" type=own
Остановите службу, удалите её из автозапуска:
sc.exe delete "MultiFactorRadiusAdapter"
Журналы
Текстовые журналы работы компонента находятся в папке Logs. Если их нет, удостоверьтесь, что папка доступна для записи пользователю Network Service.
Уровень и формат логирования
Уровень и формат логирования необходимо настраивать в корневом файле конфигурации MultiFactor.Radius.Adapter.exe.config :
Существуют следующие уровни логирования:
- Verbose
- Debug
- Info
- Warn
- Error
Пример:
<add key="logging-level" value="Debug"/>
Существуют следующие форматы логирования:
- ElasticCommonSchema
- Json
- JsonUtc
- JsonTz
Пример:
<add key="logging-format" value="json"/>
Логирование ошибок запуска
При запуске системы активируется механизм логирования. Ошибки, возникающие на этапе запуска, дублируются в два потока вывода: в консоль и в файл startup.log, расположенный в папке logs.
Лог-файлы адаптеров подвергаются ротации с интервалом в 30 дней.
В процессе ротации старые логи удаляются и замещаются новыми.
Шаблоны журналов
Для настройки шаблона записи журналов используются следующие настройки в корневом файле конфигурации MultiFactor.Radius.Adapter.exe.config:
<!--
Примеры шаблонов:
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=""/> -->
<!-- Шаблон записи журналов в Syslog -->
<!-- <add key="syslog-output-template" value=""/> -->
Подробнее о шаблонах: 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>
Обновление RADIUS адаптера
- Остановите службу
- Перезапишите файлы на новые, не заменяя конфигурационные файлы(не подменяйте папку clients с настроенными конфигурациями,)
- Включите службу обратно.
- Основной конфиг (MultiFactor.Radius.Adapter.exe.config) нужно заполнить вручную, не подменяя его.
Кластерная конфигурация
При размещении компонента в кластерной конфигурации придерживайтесь схемы Active/Passive или выбирайте вариант, при котором повторный запрос с клиента будет обрабатываться тем же сервером.
Для наилучшей работы с nginx или HAProxy также укажите в настройках прокси-сервера заголовок proxy_protocol.
Вопросы и ответы
В: Где прописывается сервисная учётная запись для подключения к Active Directory?
О: Сервисная учётная запись не используется, адаптер подключается к AD от имени пользователя, который запрашивает аутентификацию.
В: Можно указать несколько групп AD для контроля доступа и условного включения второго фактора?
О: Да, перечислите их через точку с запятой.
В: Как ускорить проверку групп в Active Directory?
О: По умолчанию адаптер проверяет в том числе вложенные группы, то есть пользователь может состоять в группе или состоять в группе, которая состоит в группе, которую проверяет адаптер. Если запрос занимает более 100 миллисекунд, вы можете отключить проверку вложенности следующей настройкой:
<add key="load-active-directory-nested-groups" value="false"/>
В: Как проверять вхождение пользователей в группы без проверки первого фактора в Active Directory?
О: Укажите в конфигурации домен и группы, адаптер сможет проверить условный доступ и без пароля пользователя. Подключение к AD в таком случае будет выполнено от имени учетной записи, под которой запущен сервис адаптера (обычно, Network Service).
В: Как указать несколько несвязанных доменов или хостов DC?
О: Перечислите их через точку с запятой.
В: Адаптер может работать в режиме Radius proxy?
О: Да, при подключении к внешнему Radius серверу, адаптер работает в качестве прокси: транслирует трафик между сетевым устройством и внешним сервером без изменений.
В: Как указать несколько IP для идентификации клиента?
О: Можно перечислить адреса через точку с запятой, можно указать диапазон, можно комбинировать, например:
<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"/>