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, которые будут применимы для всех подключений.
В параметре 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
компонент будет использовать телефон, записанный в указанном атрибуте пользователя. Формат телефона может быть любым.