- Начало работы
- Интеграция
- HTTP API
- OpenID Connect
- RADIUS протокол
- RADIUS адаптер
- LDAP адаптер
- Портал самообслуживания
- Windows Logon
- MacOS logon
- Регистрация пользователей
- .NET Core
- 1с-Bitrix24
- 1с-плагин двухфакторной аутентификации
- ADFS
- ASP.NET
- Ansible AWX
- Atlassian Cloud
- BearPass
- Check Point VPN
- Cisco ASA VPN
- Citrix Gateway
- FortiGate VPN
- HRBOX
- Huawei Cloud
- Huawei VPN
- Ideco UTM
- Keycloak
- Let's Encrypt Windows Server
- Linux logon (GUI)
- Linux SSH
- Linux SUDO
- MikroTik L2TP VPN
- NGate VPN
- Network Policy Server (NPS)
- Nextcloud
- OpenVPN
- OpenVPN + AD
- OpenVPN Access Server
- OpenVPN pfSense
- Outlook Web Access (OWA)
- Passwork
- RD Gateway (RDGW)
- Redmine
- UserGate VPN
- VMware Horizon Cloud
- VMware Horizon View
- VMware vCloud Director
- VMware vSphere
- Vault
- ViPNET
- Windows VPN
- Yandex.Cloud
- Zabbix
- АйТи-Бастион
- Континент 4 VPN
- МТС Линк (бывш. webinar.ru)
- WordPress
- С-Терра VPN
- Точка доступа Wi-Fi
- ФПСУ-IP/Клиент
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.
Важно
Не заменяйте файл целиком и не удаляйте уже существующие строки
Минимальная конфигурация:
<?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"/>-->
</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="phone-attribute" value="mobile"/> -->
При включении параметра phone-attribute
компонент будет использовать телефон, записанный в указанном атрибуте пользователя. Формат телефона может быть любым.
Работа с несколькими доменами
Адаптер при запуске находит все доверенные домены и может проводить аутентификацию пользователя в любом из них. Вы можете отдельно настроить список разрешенных или список запрещённых доменов:
<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"/>
Без проверки первого фактора
Адаптер может работать без проверки пароля пользователя, только с вторым фактором доступа. Для настройки используется следующая конфигурация клиента:
<!-- Где проверять первый фактор: 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=""/>
Значения параметров необходимо взять из личного кабинета, в разделе "Ресурсы".
Дополнительные 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 секунд (кэширование отключено, если удалить настройку) -->
<add key="authentication-cache-lifetime" value="01:20:10" />
Защита от сбоев
В случае недоступности (по любой причине) 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"/>
<!-- Передавать атрибут userPrincipalName из Active Directory в качестве логина пользователя -->
<add key="use-upn-as-identity" value="true"/>
<!-- Передавать указанный атрибут из Active Directory в качестве логина пользователя -->
<add key="use-attribute-as-identity" value="mail"/>
Параметр 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"/>
Настройка времени ожидания ответа API MULTIFACTOR:
<add key="multifactor-api-timeout" value="00:01:05"/>
Настройка интервала отправки логов в журнал (доступно указывать от 5 секунд до 10 минут):
<add key="log-file-flush-interval" value="00:00:05" />
Запуск компонента
Компонент может работать в консольном режиме или в качестве службы Windows. Для запуска в консольном режиме достаточно запустить приложение.
Для установки в качестве Windows Service выполните команду с ключом /i
от имени Администратора
MultiFactor.Radius.Adapter.exe /i
Компонент устанавливается в режиме автоматического запуска от имени Network Service
.
Для удаления Windows Service выполните команду с ключом /u
от имени Администратора
MultiFactor.Radius.Adapter.exe /u
Журналы
Текстовые журналы работы компонента находятся в папке Logs
. Если их нет, удостоверьтесь, что папка доступна для записи пользователю Network Service
.
Шаблоны журналов
Для настройки шаблона записи журналов используются следующие настройки в корневом файле конфигурации 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.
Кластерная конфигурация
При размещении компонента в кластерной конфигурации придерживайтесь схемы 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"/>