Also available in other languages: English
MultiFactor Radius Adapter — программный компонент, RADIUS сервер для Linux.
Компонент является частью гибридного 2FA решения сервиса MultiFactor.
Дополнительные инструкции по интеграции 2FA через RADIUS в вашу инфраструктуру см. в документации по адресу https://multifactor.pro/docs/radius-adapter/linux/.
Windows-версия компонента также доступна в репозитории MultiFactor.Radius.Adapter.
- Общие сведения
- Требования для установки компонента
- Установка
- Конфигурация
- Запуск компонента
- Журналы
- Ограничения работы с Active Directory
- Сценарии использования
- Лицензия
Что такое RADIUS?
Remote Authentication Dial-In User Service (RADIUS) — сетевой протокол для удаленной аутентификации пользователей в единой базе данных доступа.
Протокол создан достаточно давно и поэтому поддерживается множеством сетевых утройств и сервисов.
Ключевые функции:
- Прием запросов на аутентификацию по протоколу RADIUS;
- Проверка первого фактора аутентификации — логина и пароля пользователя в Active Directory или Network Policy Server;
- Проверка второго фактора аутентификации на дополнительном устройстве пользователя (обычно, телефон).
Дополнительные возможности:
- регистрация второго фактора непосредственно в VPN/VDI клиенте при первом подключении;
- настройка доступа на основе принадлежности пользователя к группе в Active Directory;
- избирательное включение второго фактора на основе принадлежности пользователя к группе в Active Directory;
- использование телефона пользователя из профиля Active Directory для отправки одноразового кода через СМС;
- настройка атрибутов ответа RADIUS на основе принадлежности пользователя к группе Active Directory;
- проксирование запросов и ответов Network Policy Server;
- Компонент устанавливается на Linux сервер, протестирован на CentOS, Ubuntu, Debian, Astra Linux;
- Минимальные требования для сервера: 1 CPU, 2 GB RAM, 8 GB HDD (обеспечивают работу ОС и адаптера для 100 одновременных подключений — примерно 1500 пользователей);
- На сервере должен быть открыт порт 1812 (UDP) для приема запросов от Radius клиентов;
- Серверу с установленным компонентом необходим доступ к хосту api.multifactor.ru по TCP порту 443 (TLS) напрямую или через HTTP proxy;
- Для взаимодействия с Active Directory, компоненту нужен доступ к серверу домена по TCP порту 389 (схема LDAP) или 636 (схема LDAPS);
- Для взаимодействия с Network Policy Server, компоненту нужен доступ к NPS по UDP порту 1812.
Компонент использует среду выполнения .NET 6 runtime, которая является бесплатной, открытой, разрабатывается компанией Microsoft и Open-Source сообществом. Среда выполнения не накладывает никаких ограничений на использование.
Для установки выполните команды:
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install aspnetcore-runtime-6.0
https://docs.microsoft.com/ru-ru/dotnet/core/install/linux-centos
⚠️ Warning
CentOS Linux 8 достигла раннего окончания жизни (EOL) 31 декабря 2021 года.
Дополнительные сведения см. на официальной странице EOL Для CentOS Linux. Из-за этого .NET не поддерживается в CentOS Linux 8.
Дополнительную информацию см. на странице.
См. также: установка .NET на CentOS Stream.
$ wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb
$ sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y aspnetcore-runtime-6.0
https://docs.microsoft.com/ru-ru/dotnet/core/install/linux-ubuntu
$ wget https://packages.microsoft.com/config/debian/10/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb
$ sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y aspnetcore-runtime-6.0
https://docs.microsoft.com/ru-ru/dotnet/core/install/linux-debian
Создайте папку, скачайте и распакуйте актуальную версию компонента из GitHub:
sudo mkdir /opt/multifactor /opt/multifactor/radius /opt/multifactor/radius/logs
sudo wget https://github.com/MultifactorLab/multifactor-radius-adapter/releases/latest/download/release_linux_x64.zip
sudo unzip release_linux_x64.zip -d /opt/multifactor/radius
Создайте системного пользователя mfa и дайте ему права на приложение:
sudo useradd -r mfa
sudo chown -R mfa: /opt/multifactor/radius/
sudo chmod -R 700 /opt/multifactor/radius/
Создайте службу
sudo vi /etc/systemd/system/multifactor-radius.service
[Unit]
Description=Multifactor Radius Adapter
[Service]
WorkingDirectory=/opt/multifactor/radius/
ExecStart=/usr/bin/dotnet /opt/multifactor/radius/multifactor-radius-adapter.dll
Restart=always
# Restart service after 10 seconds if the service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=multifactor-radius
User=mfa
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
# How many seconds to wait for the app to shut down after it receives the initial interrupt signal.
# If the app doesn't shut down in this period, SIGKILL is issued to terminate the app.
# The default timeout for most distributions is 90 seconds.
TimeoutStopSec=30
[Install]
WantedBy=multi-user.target
Включите автозапуск:
sudo systemctl enable multifactor-radius
Параметры работы компонента хранятся в файле /opt/multifactor/radius/multifactor-radius-adapter.dll.config
в формате XML.
<!-- Адрес и порт (UDP) по которому адаптер будет принимать запросы на аутентификацию от клиентов -->
<!-- Если указать адрес 0.0.0.0, то адаптер будет слушать все сетевые интерфейсы-->
<add key="adapter-server-endpoint" value="0.0.0.0:1812"/>
<!-- Shared secret для аутентификации RADIUS клиентов -->
<add key="radius-shared-secret" value=""/>
<!--Где проверять первый фактор: ActiveDirectory или RADIUS или None (не проверять) -->
<add key="first-factor-authentication-source" value="ActiveDirectory"/>
<!--Адрес API Мультифактора -->
<add key="multifactor-api-url" value="https://api.multifactor.ru"/>
<!--Таймаут запросов в API Мультифактора, минимальное значение 65 секунд -->
<add key="multifactor-api-timeout" value="00:01:05"/>
<!-- Параметр NAS-Identifier для подключения к API Мультифактора - из личного кабинета -->
<add key="multifactor-nas-identifier" value=""/>
<!-- Параметр Shared Secret для подключения к API Мультифактора - из личного кабинета -->
<add key="multifactor-shared-secret" value=""/>
<!--Доступ к API Мультифактора через HTTP прокси (опционально)-->
<!--add key="multifactor-api-proxy" value="http://proxy:3128"/-->
<!-- Уровень логирования: 'Debug', 'Info', 'Warn', 'Error' -->
<add key="logging-level" value="Debug"/>
Для проверки первого фактора в домене применимы следующие параметры:
<!--ActiveDirectory домен: в текущем примере domain.local на сервере 10.0.0.4 -->
<add key="active-directory-domain" value="ldaps://10.0.0.4/DC=domain,DC=local"/>
<!--Разрешать доступ только пользователям из указанной группы (не проверяется, если удалить настройку)-->
<add key="active-directory-group" value="VPN Users"/>
<!--Запрашивать второй фактор только у пользователей из указанной группы (второй фактор требуется всем, если удалить настройку)-->
<add key="active-directory-2fa-group" value="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. Формат телефона также может быть любым.
Для проверки первого фактора в RADIUS, например, в Network Policy Server применимы следующие параметры:
<!--Адрес (UDP) с которого адаптер будет подключаться к серверу -->
<add key="adapter-client-endpoint" value="192.168.0.1"/>
<!--Адрес и порт (UDP) сервера -->
<add key="nps-server-endpoint" value="192.168.0.10:1812"/>
Можно указать, какие атрибуты будет передавать компонент при успешной аутентификации, в том числе с проверкой вхождения пользователя в группу безопасности
<RadiusReply>
<Attributes>
<!--Это пример, можно использовать любые атрибуты-->
<add name="Class" value="Super" />
<add name="Fortinet-Group-Name" value="Users" when="UserGroup=VPN Users"/>
<add name="Fortinet-Group-Name" value="Admins" when="UserGroup=VPN Admins"/>
</Attributes>
</RadiusReply>
Следующие параметры помогут настроить обращение в API МУЛЬТИФАКТОР при проверке второго фактора:
<!-- Использовать указанный аттрибут в качестве идентификатора пользователя при проверке второго фактора-->
<add key="use-attribute-as-identity" value="mail"/>
<!-- Пропускать повторные аутентификации без запроса второго фактора в течение 1 часа 20 минут 10 секунд (кэширование отключено, если удалить настройку) -->
<add key="authentication-cache-lifetime" value="01:20:10" />
<!-- В случае недоступности API МУЛЬТИФАКТОР пропускать без проверки (по умолчанию), либо запрещать доступ (false) -->
<add key="bypass-second-factor-when-api-unreachable" value="true"/>
<!-- Автоматически присваивать членство в группах МУЛЬТИФАКТОР регистрирующимся пользователям -->
<add key="sign-up-groups" value="group1;Название группы 2"/>
Существуют следующие параметры для настройки журналирования:
<!--Позволяет настроить шаблон логов, которые попадают в системный журнал -->
<add key="console-log-output-template" value="outputTemplate"/>
<!--Позволяет настроить шаблон логов, которые попадают в файл -->
<add key="file-log-output-template" value="outputTemplate"/>
В качестве outputTemplate
выступает текстовый шаблон, который показывает системе ведения логов, как следует отформатировать сообщение. Например:
[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}
[{Timestamp:HH:mm:ss} {Level:u3}] {CorrelationId} {Message:lj}{NewLine}{Exception}
Подробнее про шаблоны можно прочитать по ссылке.
Также журналирование может вестись в формате json:
<add key="logging-format" value="format"/>
Для этого формата не применим текстовый шаблон, но можно выбрать один из следующих предустановленных форматтеров. Далее приведены возможные значения параметра format
(регистр не важен):
-
Json
илиJsonUtc
. Компактное представление логов, время в UTC.{"@t":"2016-06-07T03:44:57.8532799Z","@m":"Hello, \"nblumhardt\"","@i":"7a8b9c0d","User":"nblumhardt"}
-
JsonTz
. Компактное представление логов, отличается отJsonUtc
форматом времени. В данном форматтере указано локальное время с часовым поясом.{"@t":"2023-11-23 17:16:29.919 +03:00","@m":"Hello, \"nblumhardt\"","@i":"7a8b9c0d","User":"nblumhardt"}
-
Ecs
. Форматирует логи в соответствии с Elastic Common Schema.{ "@timestamp": "2019-11-22T14:59:02.5903135+11:00", "log.level": "Information", "message": "Log message", "ecs": { "version": "1.4.0" }, "event": { "severity": 0, "timezone": "AUS Eastern Standard Time", "created": "2019-11-22T14:59:02.5903135+11:00" }, "log": { "logger": "Elastic.CommonSchema.Serilog" }, "process": { "thread": { "id": 1 }, "executable": "System.Threading.ExecutionContext" } }
После настройки конфигурации запустите компонент:
sudo systemctl start multifactor-radius
Статус можно проверить командой:
sudo systemctl status multifactor-radius
Журналы работы компонента находятся в папке /opt/multifactor/radius/logs
, а также в системном журнале.
- Linux версия адаптера пока не умеет работать с несколькими доменами, между которыми установлено доверие.
- Для работы с Active Directory используется простая проверка подлинности пароля пользователя. Настоятельно рекомендуем использовать схему LDAPS для шифрования трафика между адаптером и доменом (на сервере AD должен быть установлен сертификат, в т.ч. самоподписанный).
С помощью компонента можно реализовать следующие сценарии:
- Двухфакторная аутентификация для VPN устройств Cisco, Fortigate, CheckPoint, Mikrotik, Huawei и других;
- Двухфакторная аутентификация Windows VPN со службой Routing and Remote Access Service (RRAS);
- Двухфакторная аутентификация Microsoft Remote Desktop Gateway;
- Двухфакторная аутентификация VMware Horizon;
- Двухфакторная аутентификация Citrix Gateway;
- Двухфакторная аутентификация Apache Guacamole;
- Двухфакторная аутентификация Wi-Fi точек доступа;
и многие другие...
Обратите внимание на лицензию. Она не дает вам право вносить изменения в исходный код Компонента и создавать производные продукты на его основе. Исходный код предоставляется в ознакомительных целях.