- Начало работы
- Интеграция
- HTTP API
- OpenID Connect
- RADIUS протокол
- RADIUS адаптер
- LDAP адаптер
- Портал самообслуживания
- MULTIFACTOR Directory Sync
- Windows 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
- 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)
- Passwork
- RD Gateway (RDGW)
- Redmine
- UserGate VPN
- VMware Horizon Cloud
- VMware Horizon View
- VMware vCloud Director
- VMware vSphere
- Vault
- ViPNET
- Windows VPN
- Yandex.Cloud
- Yandex 360
- Zabbix
- АйТи-Бастион
- Континент 4 VPN
- МТС Линк (бывш. webinar.ru)
- WordPress
- С-Терра VPN
- Точка доступа Wi-Fi
- ФПСУ-IP/Клиент
Ldap proxy сервер для Linux
MULTIFACTOR Ldap Adapter — программный компонент, LDAP proxy сервер для Linux.
Компонент доступен вместе с исходным кодом, распространяется бесплатно. Актуальная версия находится на GitHub: код и сборка (архив release_linux_x64.zip).
Лицензия
Обратите внимание на лицензию. Она не даёт вам право вносить изменения в исходный код Компонента и создавать производные продукты на его основе. Исходный код предоставляется в ознакомительных целях.
Поддержка реализаций LDAP
Адаптер протестирован со следующими реализации каталогов:
- ActiveDirectory;
- Samba4;
- FreeIPA.
Требования для установки компонента
- Компонент устанавливается на Linux сервер, протестирован на CentOS, RHEL, Ubuntu, Debian, Astra Linux, REDOS;
- Минимальные требования для сервера: 1 CPU, 2 GB RAM, 8 GB HDD (обеспечивают работу ОС и адаптера для 100 одновременных подключений — примерно 1500 пользователей);
- На сервере должны быть открыты TCP порты 389 (LDAP) и 636 (LDAPS) для приёма запросов от клиентов;
- Серверу с установленным компонентом необходим доступ к хосту api.multifactor.ru по TCP порту 443 (TLS) напрямую или через HTTP proxy;
- Для взаимодействия с Active Directory, компоненту нужен доступ к серверу домена по TCP порту 389 (LDAP) или 636 (LDAPS);
Установка
Установка библиотек
С версии компонента 3.0.3 используется среда выполнения ASP.NET Core runtime версии 8, которая является бесплатной, открытой, разрабатывается компанией Microsoft и Open-Source сообществом. Среда выполнения не накладывает никаких ограничений на использование.
Если ваша ОС не поддерживает ASP.NET Core runtime версии 8, вам нужно будет использовать версию компонента 2.0.27 и использовать ASP.NET Core runtime версии 6.0, в остальном установка не отличается.
Для установки на Debian 12, Ubuntu 20.04/22.04/24.04, Astra1.8 выполните команды:
wget https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb
Установите среду выполнения .NET 8
sudo apt-get update && sudo apt-get install -y aspnetcore-runtime-8.0
Установка библиотек liblber и libldap
sudo apt install libldap-2.5-0
Для установки на CentOS Stream 9
sudo dnf update -y sudo dnf upgrade -y sudo dnf install -y dotnet-runtime-8.0
Для установки на CentOS Stream 8
sudo rpm -Uvh https://packages.microsoft.com/config/centos/8/packages-microsoft-prod.rpm sudo dnf install -y dotnet-runtime-8.0
Для установки на RHEL 8 и 9
sudo dnf install -y dotnet-sdk-8.0
Если команда выше не сработала, добавьте репозиторий вручную:
sudo dnf install -y wget sudo wget https://packages.microsoft.com/config/rhel/8/packages-microsoft-prod.rpm sudo rpm -Uvh packages-microsoft-prod.rpm sudo dnf install -y dotnet-sdk-8.0
Для установки на РЕД ОС 8
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/8/packages-microsoft-prod.rpm sudo yum update -y sudo yum install -y dotnet-runtime-8.0
Если при запуске программ возникает ошибка:
Unable to load shared library 'ldap.so.2' or one of its dependencies
То это означает, что системе не хватает симлинков для корректного поиска библиотек.
Проверка наличия библиотек
ls -la /usr/lib/x86_64-linux-gnu | grep libldap ls -la /usr/lib/x86_64-linux-gnu | grep liblber
Вывод покажет, какие версии библиотек установлены и как они ссылаются друг на друга.
Если в системе не хватает симлинка libldap.so.2, создадим его:
sudo ln -s /usr/lib/x86_64-linux-gnu/libldap-2.5.so.2 /usr/lib/x86_64-linux-gnu/libldap.so.2
Аналогично для liblber:
sudo ln -s /usr/lib/x86_64-linux-gnu/liblber-2.5.so.2 /usr/lib/x86_64-linux-gnu/liblber.so.2
В CentOS или RedHat-подобных дистрибутивах библиотеки обычно находятся в /usr/lib64/
, поэтому команды будут такими:
sudo ln -s /usr/lib64/libldap-2.5.so.2 /usr/lib64/libldap.so.2 sudo ln -s /usr/lib64/liblber-2.5.so.2 /usr/lib64/liblber.so.2
Установка компонента
Создайте папку, скачайте и распакуйте актуальную версию компонента из GitHub:
$ sudo mkdir /opt/multifactor /opt/multifactor/ldap /opt/multifactor/ldap/tls /opt/multifactor/ldap/logs $ sudo wget https://github.com/MultifactorLab/multifactor-ldap-adapter/releases/latest/download/release_linux_x64.zip $ sudo unzip release_linux_x64.zip -d /opt/multifactor/ldap
Создайте системного пользователя mfa и дайте ему права на приложение:
$ sudo useradd -r mfa $ sudo chown -R mfa: /opt/multifactor/ldap/ $ sudo chmod -R 700 /opt/multifactor/ldap/
Создайте файл службы systemd:
$ sudo vi /etc/systemd/system/multifactor-ldap.service
Включите автозапуск:
[Unit] Description=Multifactor Ldap Adapter [Service] WorkingDirectory=/opt/multifactor/ldap/ ExecStart=/usr/bin/dotnet /opt/multifactor/ldap/multifactor-ldap-adapter.dll Restart=always # Restart service after 10 seconds if the service crashes: RestartSec=10 KillSignal=SIGINT SyslogIdentifier=multifactor-ldap 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 # give the executed process the CAP_NET_BIND_SERVICE capability. This capability allows the process to bind to well known ports. AmbientCapabilities=CAP_NET_BIND_SERVICE [Install] WantedBy=multi-user.target
Включите автозапуск службы:
$ sudo systemctl enable multifactor-ldap
Параметры компонента
Параметры работы компонента хранятся в файле /opt/multifactor/ldap/multifactor-ldap-adapter.dll.config
в формате XML.
Общие параметры
<!-- В зависимости от варианта, не нужный закомментить или удалить из конфига --> <!-- Адрес и порт (TCP) по которому адаптер будет принимать запросы по протоколу LDAP --> <!-- Если указать адрес 0.0.0.0, то адаптер будет слушать все сетевые интерфейсы --> <add key="adapter-ldap-endpoint" value="0.0.0.0:389"/> <!-- Адрес и порт (TCP) по которому адаптер будет принимать запросы по зашифрованному протоколу LDAPS --> <!-- Если указать адрес 0.0.0.0, то адаптер будет слушать все сетевые интерфейсы --> <add key="adapter-ldaps-endpoint" value="0.0.0.0:636"/> <!-- Адрес или название домена Active Directory, а также схема подключения ldap или ldaps --> <!-- Например: ldaps://domain.local. Если используется LDAP, заменить ldaps:// на ldap:// --> <add key="ldap-server" value="ldaps://domain.local"/> <!-- [Опционально] Base DN для подключения к FreeIPA --> <!-- Например: cn=users,cn=accounts,dc=domain,dc=local --> <!-- <add key="ldap-base-dn" value="cn=users,cn=accounts,dc=domain,dc=local"/> --> <!-- Список сервисных учетных записей (Bind DN), которым не требуется второй фактор --> <!-- Укажите список через точку с запятой --> <add key="ldap-service-accounts" value="CN=Service Acc,OU=Users,DC=domain,DC=local;service-acc;service-acc@domain.local"/> <!-- OU сервисных учетных записей (Bind DN), которым не требуется второй фактор --> <!-- <add key="ldap-service-accounts-ou" value="OU=Service Accounts"/> --> <!-- [Опционально] Разрешать доступ только пользователям из указанной группы --> <!-- <add key="active-directory-group" value="MyApp Users"/> --> <!-- [Опционально] Запрашивать второй фактор только у пользователей из указанной группы --> <!-- <add key="active-directory-2fa-group" value="MyApp 2FA Users"/> --> <!-- [Опционально] Не запрашивать второй фактор у пользователей из указанной группы --> <!-- <add key="active-directory-2fa-bypass-group" value="Bypass 2FA Users"/> --> <!-- Настройки API Мультифактора --> <!-- Адрес API Мультифактора. --> <add key="multifactor-api-url" value="https://api.multifactor.ru"/> <!-- Время ожидания ответа от API Мультифактора, по умолчанию 65 секунд. Формат: hh:mm:ss --> <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"/> <!-- Формат логов. Например, json --> <add key="logging-format" value="json"/> <!-- Настройки LDAP --> <!-- Время ожидания ответа от LDAP каталога. По умолчанию: 30 секунд. Формат: hh:mm:ss --> <add key="ldap-bind-timeout" value="00:00:30"/> <!-- Задержка перед ответом в случае неправильных входных данных. В секундах --> <add key="invalid-credential-delay" value="5"/> <!-- [Опционально] Загружать вложенные группы пользователя (true/false) --> <!--add key="load-active-directory-nested-groups" value="true"/--> <!-- Трансформация LDAP identity --> <!-- [Опционально] Варианты: None, Upn, UidAndNetbios, SamAccountName, NetBIOSAndUid, DistinguishedName --> <add key="transform-ldap-identity" value="None"/> <!-- Сертификаты --> <!-- Пароль x509 сертификата для TLS. Указать, если пароль есть --> <!-- <add key="certificate-password" value=""/> --> </appSettings> </configuration>
Дополнительные настройки безопасности и конфиденциальности:
<!-- Отключить передачу адаптером email пользователей на сервер MULTIFACTOR --> <add key="privacy-mode" value="Full"/>
Защита от сбоев
В случае недоступности (по любой причине) API MULTIFACTOR, адаптер может работать в одном из двух вариантов:
- Пропускать без второго фактора (по умолчанию)
- Отказывать в доступе
Для настройки используется следующий параметр:
<!-- true: пропускать, false: запрещать --> <add key="bypass-second-factor-when-api-unreachable" value="true"/>
Запуск
После настройки конфигурации запустите компонент:
$ sudo systemctl start multifactor-ldap
Статус можно проверить командой:
$ sudo systemctl status multifactor-ldap
Дебаг
Логи старта приложения находятся в отдельном файле startup.logs в папке logs.
Для вывода причин неуспешного запуска адаптера используйте следующую команду:
/usr/bin/dotnet /opt/multifactor/ldap/multifactor-ldap-adapter.dll
Последующие изменения в файле конфигурации службы потребуют перезапуска подсистемы служб и службы:
$ sudo systemctl daemon-reload $ sudo systemctl restart multifactor-ldap
Журналы
Журналы работы компонента записываются в syslog
и сохраняются в текстовые файлы в директорию /opt/multifactor/ldap/logs
. Если директория пуста или ее нет, нужно убедиться, что у пользователя, под которым запускается служба, есть права на запись в эту директорию.
Для просмотра содержимого syslog можно воспользоваться командой:
$ sudo less /var/log/syslog
Для просмотра журналов службы multifactor-ldap используйте команду:
$ sudo journalctl -fu multifactor-ldap
Сертификат для TLS шифрования
Если включена схема LDAPS, адаптер при первом запуске создаст самоподписанный SSL сертификат и сохранит его в папке /tls в формате pfx без пароля. Этот сертификат будет использоваться для аутентификации сервера и шифрования трафика. Вы можете заменить его на ваш сертификат при необходимости.
Удаление компонента
Удаление .NET Core
Для просмотра списка установленных на вашей машине версий SDK и сред выполнения .NET Core используйте команду:
dotnet --info
Далее, выполните команды:
Ubuntu
Ubuntu 20.04
sudo apt-get remove aspnetcore-runtime-8.0
Ubuntu 22.04
sudo rm /usr/bin/dotnet sudo rm -r /usr/local/lib/dotnet/ sudo dpkg --purge 1.0.2n-1ubuntu5.10
Ubuntu 24.04
sudo rm /usr/bin/dotnet sudo rm -r /usr/local/lib/dotnet/ sudo dpkg --purge 1.0.2n-1ubuntu5.10
Debian 12
sudo apt-get remove aspnetcore-runtime-8
Astra
Astra Орёл
sudo apt-get remove dotnet-sdk-8.0
Astra Смоленск
sudo apt purge dotnet-* aspnetcore-*
CentOS stream 8\9
sudo dnf remove aspnetcore-runtime-8.0
RHEL 8/9
sudo dnf remove dotnet* aspnetcore* netstandard*
РЕД ОС 8
sudo dnf remove aspnetcore-runtime-8.0
Удаление адаптера
Остановите службу multifactor-ldap
, удалите её из автозапуска и удалите конфигурационный файл юнита:
$ sudo systemctl stop multifactor-ldap $ sudo systemctl disable multifactor-ldap $ sudo rm /etc/systemd/system/multifactor-ldap.service
Перезагрузите настройки systemd, просканировав систему на наличие изменённых юнитов:
$ sudo systemctl daemon-reload
Удалите файлы адаптера и системного пользователя mfa
:
$ sudo rm -rf /opt/multifactor/ldap/ $ sudo userdel -r mfa
Вопросы и ответы
В: Можно указать несколько групп AD для контроля доступа и условного включения второго фактора?
О: Да, перечислите их через точку с запятой.
В: Как ускорить проверку групп в Active Directory?
О: По умолчанию адаптер проверяет в том числе вложенные группы, то есть пользователь может состоять в группе или состоять в группе, которая состоит в группе, которую проверяет адаптер. Если запрос занимает более 100 миллисекунд, вы можете отключить проверку вложенности следующей настройкой:
<add key="load-active-directory-nested-groups" value="false"/>