Ldap proxy сервер для Linux
MULTIFACTOR Ldap Adapter — программный компонент, LDAP proxy сервер для Linux.
Компонент доступен вместе с исходным кодом, распространяется бесплатно. Актуальная версия находится на GitHub: код и сборка.
Обратите внимание на лицензию. Она не дает вам право вносить изменения в исходный код Компонента и создавать производные продукты на его основе. Исходный код предоставляется в ознакомительных целях.
Поддержка реализаций LDAP
Адаптер протестирован со следующими реализации каталогов:
- ActiveDirectory;
- Samba4;
- FreeIPA.
Требования для установки компонента
- Компонент устанавливается на Linux сервер, протестирован на CentOS, RHEL, Ubuntu, Debian, Astra Linux, REDOS, ALT Linux, SUSE Linux;
- Минимальные требования для сервера: 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);
Установка
Установка библиотек
Компонент использует среду выполнения ASP.NET Core runtime версии 3.1, которая является бесплатной, открытой, разрабатывается компанией 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-3.1
$ sudo dnf install aspnetcore-runtime-3.1
$ sudo dnf install aspnetcore-runtime-3.1
- Ubuntu 16.04
- Ubuntu 18.04
- Ubuntu 20.04
- Ubuntu 22.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-3.1
$ 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-3.1
$ 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-3.1
⚠️ Обратите внимание, поддержка .NET 3.1 прекращена в Ubuntu 22.04. Поддерживаемые дистрибутивы.
Установите среду выполнения:
$ wget https://download.visualstudio.microsoft.com/download/pr/12f61df9-e5d2-4cc2-b992-80d30ee3fc43/0087f4e0b8b3a94effa890ee3ebba0b1/aspnetcore-runtime-3.1.30-linux-x64.tar.gz
$ sudo mkdir -p /usr/local/lib/dotnet/
$ sudo tar -zvxf aspnetcore-runtime-3.1.30-linux-x64.tar.gz -C /usr/local/lib/dotnet/
$ sudo ln -s /usr/local/lib/dotnet/dotnet /usr/bin/dotnet
$ rm aspnetcore-runtime-3.1.30-linux-x64.tar.gz
Установите 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 openssl1.0/libssl1.0.0_1.0.2n-1ubuntu5.13_amd64.deb
- 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-3.1
$ 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-3.1
$ 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-3.1
- 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-3.1
Инструкция применима к 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/digisg/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 install dotnet-aspnetcore-3.1
$ sudo apt-get install dotnet-3.1
$ sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
$ sudo dnf install aspnetcore-runtime-3.1
Установка компонента
Создайте папку, скачайте и распакуйте актуальную версию компонента из 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 -->
<add key="ldap-server" value="ldaps://domain.local"/>
<!-- [Опционально] Base DN для подключения к FreeIPA -->
<!-- <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"/>
<!-- [Опционально] Не запрашивать второй фактор у пользователей из указанной группы (в том числе, если пользователь одновременно находится в группе, заданной в active-directory-2fa-group) -->
<add key="active-directory-2fa-bypass-group" value="Bypass 2FA Users"/>
<!-- Адрес 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"/>
<!--certificate password leave empty or null for certificate without password-->
<!--<add key="certificate-password" value="XXXXXX"/>-->
Защита от сбоев
В случае недоступности (по любой причине) API Мультифактора, адаптер может работать в одном из двух вариантов:
- Пропускать без второго фактора (по умолчанию)
- Отказывать в доступе
Для настройки используется следующий параметр:
<!-- true: пропускать, false: запрещать -->
<add key="bypass-second-factor-when-api-unreachable" value="true"/>
Запуск
После настройки конфигурации запустите компонент:
$ sudo systemctl start multifactor-ldap
Статус можно проверить командой:
$ sudo systemctl status multifactor-ldap
Последующие изменения в файле конфигурации службы потребуют перезапуска подсистемы служб и службы:
$ 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
Далее, выполните команды:
- CentOS
- Ubuntu
- Debian
- Astra Linux
- ALT Linux
- РЕД ОС
- CentOS 7
- CentOS 8
- CentOS 8 Stream
$ sudo yum remove aspnetcore-runtime-3.1
$ sudo dnf remove aspnetcore-runtime-3.1
- Ubuntu 16.04
- Ubuntu 18.04
- Ubuntu 20.04
- Ubuntu 22.04
$ sudo apt-get remove aspnetcore-runtime-3.1
$ sudo apt-get remove aspnetcore-runtime-3.1
$ sudo apt-get remove aspnetcore-runtime-3.1
$ sudo rm /usr/bin/dotnet
$ sudo rm -r /usr/local/lib/dotnet/
$ sudo dpkg --purge 1.0.2n-1ubuntu5.10
- Debian 10
- Debian 11
$ sudo apt-get remove aspnetcore-runtime-3.1
$ sudo apt-get remove aspnetcore-runtime-3.1
- Astra Орёл
- Astra Смоленск
$ sudo apt-get remove dotnet-sdk-3.1
$ sudo apt purge dotnet-* aspnetcore-*
$ sudo apt-get remove dotnet-aspnetcore-3.1
$ sudo apt-get remove dotnet-3.1
$ sudo dnf remove aspnetcore-runtime-3.1
Удаление адаптера
Остановите службу 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"/>