Radius сервер для Linux
MULTIFACTOR Radius Adapter — программный компонент, RADIUS сервер для Linux.
Компонент доступен вместе с исходным кодом, распространяется бесплатно. Актуальная версия находится на GitHub: код и сборка.
Обратите внимание на лицензию. Она не дает вам право вносить изменения в исходный код Компонента и создавать производные продукты на его основе. Исходный код предоставляется в ознакомительных целях.
Требования для установки компонента
- Компонент устанавливается на Linux сервер, протестирован на CentOS, RHEL, Ubuntu, Debian, Astra Linux, REDOS, ALT Linux, SUSE 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.
В linux версиях компонентов не поддерживаются символы & и #
Установка
Установка библиотек
Компонент использует среду выполнения ASP.NET Core runtime версии 6, которая является бесплатной, открытой, разрабатывается компанией Microsoft и Open-Source сообществом. Среда выполнения не накладывает никаких ограничений на использование.
Для установки выполните команды:
- CentOS
- Ubuntu
- Debian
- Astra Linux
- ALT Linux
- REDOS
- CentOS 7
- CentOS 8
- CentOS 8 Stream
$ sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
$ sudo yum install aspnetcore-runtime-6.0
⚠️ Поддержка .NET прекращена в centos8.
$ sudo dnf install aspnetcore-runtime-6.0
- Ubuntu 16.04
- Ubuntu 18.04
- Ubuntu 20.04
- Ubuntu 22.04
- Ubuntu 24.04
$ wget https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb
$ rm 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
$ 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
$ rm 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
$ wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb
$ rm 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
Установите среду выполнения:
$ 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
Установите Libldap: (Если ссылка устарела, можно скачать последнюю аналогичную версию с зеркала http://security.ubuntu.com/ubuntu/pool/main/o/openldap/)
$ sudo wget http://security.ubuntu.com/ubuntu/pool/main/o/openldap/libldap-2.4-2_2.4.31-1+nmu2ubuntu8.5_amd64.deb
$ sudo dpkg -i /Директория в которую скачалась библиотека/libldap-2.4-2_2.4.31-1+nmu2ubuntu8.5_amd64.deb
$ sudo apt install -f
Установите libssl:
$ wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl1.0/libssl1.0.0_1.0.2n-1ubuntu5.13_amd64.deb
$ sudo dpkg -i libssl1.0.0_1.0.2n-1ubuntu5.13_amd64.deb
Для свежей Ubuntu 24.04 LTS имеются бэкпорты устаревшей .NET 6
add-apt-repository ppa:dotnet/backports
apt-get install -y dotnet-sdk-6.0
- Debian 9
- Debian 10
- Debian 11
Добавьте ключ подписывания пакета в список доверенных ключей, затем добавьте репозиторий пакетов:
$ wget -O - https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg
$ sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
$ wget https://packages.microsoft.com/config/debian/9/prod.list
$ sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
$ sudo chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
$ sudo chown root:root /etc/apt/sources.list.d/microsoft-prod.list
Установите среду выполнения:
$ 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
$ wget https://packages.microsoft.com/config/debian/10/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb
$ rm 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
$ wget https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb
$ rm 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
- Astra Орёл
- Astra Смоленск
$ sudo apt install ca-certificates
$ wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg
$ sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
$ wget -q https://packages.microsoft.com/config/debian/9/prod.list
$ sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
$ sudo chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
$ sudo chown root:root /etc/apt/sources.list.d/microsoft-prod.list
$ echo deb https://download.astralinux.ru/astra/current/orel/repository/ orel non-free main contrib | sudo tee -a /etc/apt/sources.list
$ sudo apt-get update
$ sudo apt-get install dotnet-sdk-6.0
Инструкция применима к Astra Linux Common Edition (релиз Орёл) и Special Edition (релиз Смоленск) с выключенным режимом замкнутой программной среды (ЗПС). https://wiki.astralinux.ru/pages/viewpage.action?pageId=41192241#id-Смоленск1.6:УстановкаMS.NetCoreиMSVisualStudioCode-Загрузкаиустановкапакетов.NetCore
$ sudo apt install ca-certificates
$ wget https://multifactor.ru/repo/dotnet+aspnetcore_amd64_signed.tar.gz && \
wget https://multifactor.ru/repo/multifactor_pub.key
$ sudo cp multifactor_pub.key /etc/digsig/keys/ && \
sudo cp multifactor_pub.key /etc/digsig/xattr_keys/ && \
sudo rm multifactor_pub.key
$ sudo update-initramfs -u -k all
$ tar -xf dotnet+aspnetcore_amd64_signed.tar.gz
$ cd dotnet+aspnetcore_amd64_signed
$ sudo dpkg -i *.deb
Инструкция применима к Astra Linux Special Edition (релиз Смоленск) в режиме замкнутой программной среды (ЗПС).
$ sudo apt-get update
$ sudo apt-get install dotnet-sdk-6.0
$ sudo apt-get install dotnet-6.0
$ sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
$ sudo dnf install aspnetcore-runtime-6.0
В случае возникновения ошибки Unable to load shared library 'ldap.so.2' or one of its dependencies необходимо поправить цепочку таким образом, чтобы симлинк libldap.so.2 в конечном итоге ссылался на конкретную библиотеку libldap-2.X.so.2.Y.Z
Пример: libldap.so.2 -> libldap-2.4.so.2 // это симлинк libldap-2.4.so.2 -> libldap_r-2.4.so.2 // это симлинк libldap_r-2.4.so.2 -> libldap_r-2.4.so.2.11.5 // это симлинк libldap_r-2.4.so.2.11.5 // это сама библиотека
Проверка и исправление симлинка Чтобы проверить симлинки, надо найти, где находится сама библиотека libldap, как правило, это директория /usr/lib/x86_64-linux-gnu.
Далее вводим команду ls -la и видим все файлы и симлинки. Ищем там, кто и как ссылается на libldap, какой ссылки не хватает и создаём её. Чаще всего не хватает одного симлинка - с libldap.so.2 на мажорную версию библиотеки. Создадим его:
Для Debian и Ubuntu
ln -s /usr/lib/x86_64-linux-gnu/libldap-2.4.so.2 /usr/lib/x86_64-linux-gnu/libldap.so.2
Для CentOS и REDOS
ln -s /usr/lib64/libldap_r-2.4.so.2.10.9 /usr/lib64/libldap.so.2
(Версии библиотек могут отличаться)
Аналогичные манипуляции проводим с библиотекой liblber
Установка компонента
Создайте папку, скачайте и распакуйте актуальную версию компонента из 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/
Создайте файл службы systemd:
$ 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) по которому адаптер будет принимать запросы на аутентификацию от клиентов -->
<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"/> -->
<!-- Уровень логирования: 'Debug', 'Info', 'Warn', 'Error' -->
<add key="logging-level" value="Debug"/>
Настройка сетевых подключений
Идентификация клиентов
Для настройки каждого сетевого подключения к адаптеру используется отдельный конфигурационный файл с расширением .config, который должен находиться в папке /clients.
Идентификация клиента производится либо по IP адресу, либо по атрибуту 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.dll.config, которые будут применимы для всех подключений.
В параметре radius-shared-secret,не поддерживаются спецсимволы:('>','<','&'), так как XML-парсер адаптера считает это частью разметки.
Проверка первого фактора в Active Directory
Для проверки первого фактора в домене Active Directory, внесите в конфигурацию клиента следующие параметры:
<!-- Где проверять первый фактор: ActiveDirectory -->
<add key="first-factor-authentication-source" value="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-2fa-group) -->
<add key="active-directory-2fa-bypass-group" value="Bypass 2FA Users"/>
<!-- Использовать номер телефона из Active Directory для отправки одноразового кода в СМС (не используется, если удалить настройку) -->
<!-- <add key="phone-attribute" value="mobile"/> -->
При включении параметра phone-attribute
компонент будет использовать телефон, записанный в указанном LDAP-атрибуте пользователя. Формат телефона может быть любым.
Проверка первого фактора во внешнем 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"/>
Настройка сервисной учётной записи
Сервисная учётная запись необходима для проверки членства пользователей в группах Active Directory или для загрузки LDAP атрибутов в случае, если первый фактор проверяется в Radius или не проверяется (None).
Для подключения к домену необходимо задать домен и учётные данные сервисного пользователя.
<!-- Домен: в текущем примере domain.local на сервере 10.0.0.4 -->
<add key="active-directory-domain" value="ldaps://10.0.0.4/DC=domain,DC=local"/>
<!-- Логин сервисной учётной записи Active Directory для проверки членства пользователей в группах -->
<add key="service-account-user" value="service-account@domain.local"/>
<!-- Пароль сервисной учётной записи Active Directory для проверки членства пользователей в группах -->
<add key="service-account-password" value=""/>
Подключение к серверу аутентификации
Для взаимодействия с серверами аутентификации 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.
Пример XML-синтаксиса файла конфигурации для передачи атрибута Class (RADIUS Attribute ID 25).
<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 -->
<add name="Class" value="Users" when="UserGroup=VPN Users"/>
<!-- Передавать атрибут Class со значением Admin, если имя пользователя SamlpeAdminName -->
<add name="Class" value="Admin" when="UserName=SamlpeAdminName"/>
</Attributes>
</RadiusReply>
</configuration>
Названия и значения атрибутов могут быть любыми, которые поддерживаются на вашем сетевом устройстве. Например, для передачи групп FortiGate можно использовать атрибут Fortinet-Group-Name
. Словарь со всеми доступными атрибутами расположен в файле /opt/multifactor/radius/content/radius.dictionary
.
Для передачи LDAP атрибутов должно быть выполнено одно из условий:
- Указан источник первого фактора ActiveDirectory и задано название домена;
- Заданы параметры сервисной учётной записи Active Directory, если источником первого фактора является RADIUS, или первый фактор не проверяется.
Кэширование аутентификации
Адаптер можно настроить на кэширование аутентификаций пользователей вторым фактором.
В этом режиме повторные запросы ранее аутентифицированных вторым фактором пользователей будут приняты без запроса второго фактора. Кэш действует в течение настраиваемого временного интервала.
Запрос является повторным, если параметры текущего запроса совпадают с параметрами предыдущего запроса. Параметры:
- название клиентской конфигурации адаптера;
- calling-station-id (IP или Remote Host пользователя) — не может быть пустым;
- логин пользователя.
Для настройки используется следующий параметр:
<!-- Пропускать повторные аутентификации без запроса второго фактора в течение 1 часа 20 минут 10 секунд (кэширование отключено, если удалить настройку) -->
<add key="authentication-cache-lifetime" value="01:20:10" />