- Начало работы
- Интеграция
- 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
MULTIFACTOR SelfService Portal — веб-сайт, портал самообслуживания для пользователей LDAP, единая точка входа (Single Sign-On) для корпоративных приложений по протоколам аутентификации SAML, OpenID Connect / OAuth.
В виде референса настройки портала самообслуживания как точки Single Sign-On (SSO) можете использовать следующую инструкцию.
Портал доступен вместе с исходным кодом, распространяется бесплатно по лицензии MIT. Актуальная версия находится на GitHub: код и сборка (архив MultiFactor.SelfService.Linux.Portal.zip).
Перед началом работы
- Зайдите в личный кабинет MULTIFACTOR, далее в разделе "Ресурсы" создайте новый ресурс типа "Сайт" - "Self-Service портал":
- название и адрес: произвольные;
- регистрировать новых пользователей: да;
- при подключении без настроенного второго фактора: включить самостоятельную настройку;
- После создания вам будут доступны параметры ApiKey и ApiSecret, они потребуются для настройки портала.
Требования для установки портала
- Портал устанавливается на Linux сервер;
- Серверу с установленным порталом необходим доступ к хосту
api.multifactor.ru
по TCP порту 443 (TLS); - Для взаимодействия с LDAP каталогом, компоненту нужен доступ к серверу домена по TCP порту 389 (LDAP) или 636 (LDAPS).
Схема работы
Портал – это веб-приложение. Для запуска и работы портала используется веб-сервер Kestrel. Веб-сервер не нуждается в установке и входит в состав сборки. Типовая схема работы веб-приложений на стеке .NET 8 для Linux следующая:
- Приложение запускается на веб-сервере Kestrel. Веб-сервер слушает запросы на определенный порт (по умолчанию, 5000) локального хоста по схеме http;
- Реверс-прокси, настроенный на Linux-сервере, слушает запросы на внешний порт сервера по схеме https и перенаправляет их на локальный порт 5000;
- Веб-сервер Kestrel обрабатывает входящие запросы и отправляет их на обработку в приложение.
Таким образом, приложение портала располагается за реверс-прокси и обрабатывает запросы только от него.
Поддержка реализаций LDAP
Портал протестирован со следующими реализациями каталогов:
- ActiveDirectory;
- Samba4;
- FreeIPA.
Ограничения Linux версии
- Не поддерживаются кириллические пароли;
- Не поддерживается проверка логина и пароля в нескольких доменах Active Directory, если между ними настроены доверительные отношения.
Для автоматической установки портала вы можете воспользоваться инсталлятором. Инсталлятор сводит к минимуму ручные действия и выполнен в виде мастера установки. Для генерации и установки SSL-сертификата используются сервис Let's Encrypt
и утилита certbot
.
Установка скриптом:
Автоматическая установка портала на CentOS 9, Debian 12, Ubuntu 20.04/22.04 (.NET 8)
Скачивание скрипта установки
- Создайте директорию для скачивания скрипта и дайте ей права на запись:
sudo mkdir -p /opt/temp/ssp-installer && sudo chmod a+w /opt/temp/ssp-installer
2. Скачайте скрипт установки:
wget -q -O /opt/temp/ssp-installer/install.sh https://raw.githubusercontent.com/MultifactorLab/Install/main/src/ssp/install.sh
3. Сделайте скрипт исполняемым:
sudo chmod +x /opt/temp/ssp-installer/install.sh
Запуск скрипта установки
Для тестовой среды:
/opt/temp/ssp-installer/install.sh -s ssl (В этом случае, будет пропущена установка ssl сертификатов с помощью Serbot
Далее настройте файл:
nano /opt/multifactor/ssp/app/appsettings.production.xml
Для продакшн среды, если вы хотите использовать ваш зарегистрированный домен
/opt/temp/ssp-installer/install.sh -b aspnet8
Вам будет нужно указать зарегистрированный домен. Далее настройте файл:
nano /opt/multifactor/ssp/app/appsettings.production.xml
Перезапустите NGINX и портал , проверьте доступность портала:
sudo systemctl restart nginx sudo systemctl daemon-reload sudo systemctl restart ssp.service
Установка (Ручная)
Установка MultiFactor SelfService Portal на CentOS 9, Debian 12, Ubuntu 20.04/22.04/24.04, Astra 1.8 с использованием .NET 8
Установка библиотек
Компонент использует среду выполнения ASP.NET Core runtime версии 8.0, которая является бесплатной, открытой, разрабатывается компанией Microsoft и Open-Source сообществом. Среда выполнения не накладывает никаких ограничений на использование.
Для установки выполните команды:
**Для Debian 12 , Ubuntu 20.04/22.04/24.04 и Astra 1.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
**Для CentOS 9:**
Добавьте репозиторий Microsoft для .NET 8:
sudo dnf install -y https://packages.microsoft.com/config/rhel/9/packages-microsoft-prod.rpm
Установите среду выполнения .NET 8:
sudo dnf install -y aspnetcore-runtime-8.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 (Версии библиотек могут отличаться)
Установка компонента
Создайте папку, скачайте и распакуйте актуальную версию компонента из GitHub:
$ sudo mkdir /opt/multifactor /opt/multifactor/ssp /opt/multifactor/ssp/app /opt/multifactor/ssp/key-storage $ sudo wget https://github.com/MultifactorLab/multifactor-selfservice-portal/releases/latest/download/MultiFactor.SelfService.Linux.Portal.zip $ sudo unzip MultiFactor.SelfService.Linux.Portal.zip -d /opt/multifactor/ssp/app
Создайте системного пользователя mfa и дайте ему права на приложение:
$ sudo useradd mfa $ sudo chown -R mfa: /opt/multifactor/ssp $ sudo chmod -R 700 /opt/multifactor/ssp
Создайте файл службы systemd:
$ sudo vi /etc/systemd/system/ssp.service
Замените содержимое и сохраните файл:
[Unit] Description=Self Service Portal [Service] WorkingDirectory=/opt/multifactor/ssp/app ExecStart=/usr/bin/dotnet /opt/multifactor/ssp/app/MultiFactor.SelfService.Linux.Portal.dll Restart=always RestartSec=10 KillSignal=SIGINT TimeoutStopSec=90 SyslogIdentifier=ssp-service User=mfa Environment=ASPNETCORE_ENVIRONMENT=production Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false [Install] WantedBy=multi-user.target
Включите автозапуск службы:
$ sudo systemctl enable ssp.service
Настройка Nginx
Установите Nginx:
$ sudo apt-get install nginx $ sudo service nginx start
Перейдите в браузере по адресу http://<server_IP_address>/index.nginx-debian.html
и убедитесь, что отображается стандартная страница Nginx.
Настройте nginx в режиме реверс-прокси. Откройте файл /etc/nginx/sites-available/ssp
:
$ sudo vi /etc/nginx/sites-available/ssp
Для RHEL, Red OS, CentOS настройка производится в /etc/nginx/conf.d
sudo vi /etc/nginx/conf.d/ssp.conf
server { # DNS имя сервера с порталом server_name ssp.domain.org; location / { # http://<host>:<port> Kestrel proxy_pass http://localhost:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } listen 80; }
Затем активируйте конфигурацию, создав символическую ссылку на ваш пользовательский конфигурационный файл ssp
в каталоге sites-enabled
, конфигурации из которого Nginx считывает во время запуска:
$ sudo ln -s /etc/nginx/sites-available/ssp /etc/nginx/sites-enabled/
Для проверки конфигурации выполните:
$ sudo nginx -t
Если конфигурация верна, примените ее:
$ sudo nginx -s reload
По умолчанию прокси-сервер работает с незащищенным http-соединением.Для корректной работы требуется установить сертификат и настроить https, файл /etc/nginx/sites-available/ssp
должен выглядеть следующим образом:
server { server_name ssp.domain.org; location / { proxy_pass http://localhost:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # слушать порт 443 listen 443 ssl; # настройки ssl ssl_certificate /etc/letsencrypt/live/ssp.domain.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ssp.domain.org/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; } # резервный сервер для перенаправления запросов http на https server { if ($host = ssp.domain.org) { return 301 https://$host$request_uri; } listen 80; server_name domain.org; return 404; }
Здесь для получения сертификата использовались сервис Let's Encrypt и утилита certbot
. Похожие настройки можно получить, следуя инструкции.
Или вы можете воспользоваться самоподписными сертификатами
Параметры портала
Параметры работы портала хранятся в файле /opt/multifactor/ssp/app/appsettings.production.xml
в формате XML.
<PortalSettings> <CompanySettings> <!-- Название вашей организации --> <Name>ACME</Name> <!-- Название домена Active Directory для проверки логина и пароля пользователей --> <Domain>ldaps://dc.domain.local/dc=domain,dc=local</Domain> <!-- URL адрес логотипа организации --> <LogoUrl>images/logo.svg</LogoUrl> </CompanySettings> <!-- [Опционально] Base DN для подключения к FreeIPA --> <!-- <LdapBaseDn>cn=users,cn=accounts,dc=domain,dc=local</LdapBaseDn> --> <TechnicalAccountSettings> <!-- Логин технического пользователя --> <User>user@domain.local</User> <!-- Пароль технического пользователя --> <Password>password</Password> </TechnicalAccountSettings> <ActiveDirectorySettings requiresUserPrincipalName="false"> <!-- [Опционально] Запрашивать второй фактор только у пользователей из указанной группы для Single Sign On --> <!-- Можно перечислять через точку с запятой (2FA Users1;2FA Users2) --> <!-- <SecondFactorGroup>2FA Users</SecondFactorGroup> --> <!-- [Опционально] Использовать телефон из вкладки General в AD для отправки кода в SMS --> <!-- <UseUserPhone>true</UseUserPhone> --> <!-- [Опционально] Использовать мобильный телефон из вкладки Telephones (поле Mobile) --> <!-- <UseMobileUserPhone>true</UseMobileUserPhone> --> <!-- [Опционально] NetBiosName - используется для формирования Identity в API мультифактора --> <!-- <NetBiosName>NETBIOS_NAME</NetBiosName> --> <!-- Требовать UPN-формат имени пользователя --> <RequiresUserPrincipalName>true</RequiresUserPrincipalName> <!-- Автоматическое форматирование имени пользователя в UPN-формат --> <UseUpnAsIdentity>true</UseUpnAsIdentity> </ActiveDirectorySettings> <!-- Проверка второго фактора перед первым --> <PreAuthenticationMethod>true</PreAuthenticationMethod> <MultiFactorApiSettings> <!-- Адрес API Мультифактора --> <ApiUrl>https://api.multifactor.ru</ApiUrl> <!-- Параметр API Key из личного кабинета Мультифактора --> <ApiKey>key</ApiKey> <!-- Параметр API Secret из личного кабинета Мультифактора --> <ApiSecret>secret</ApiSecret> <!-- [Опционально] Доступ к API Мультифактора через HTTP-прокси --> <!-- <ApiProxy>http://proxy:3128</ApiProxy> --> </MultiFactorApiSettings> <GroupPolicyPreset> <!-- [Опционально] Новым пользователям при регистрации будут назначены эти группы --> <!-- <SignUpGroups>Группа1;группа два;group3</SignUpGroups> --> </GroupPolicyPreset> <ExchangeActiveSyncDevicesManagement> <!-- Управление устройствами Exchange ActiveSync (Active Directory) (true/false) --> <Enabled>false</Enabled> </ExchangeActiveSyncDevicesManagement> <!-- Уровень логирования: 'Debug', 'Info', 'Warn', 'Error' --> <LoggingLevel>Info</LoggingLevel> <!-- Формат логов - json --> <LoggingFormat>json</LoggingFormat> <!-- Язык интерфейса: 'ru', 'en', 'auto:ru', 'auto:en' --> <UICulture>auto:ru</UICulture> </PortalSettings>
При включении параметра UseActiveDirectoryUserPhone
компонент будет использовать телефон, записанный на вкладке General. Формат телефона может быть любым.

При включении параметра UseActiveDirectoryMobileUserPhone
компонент будет использовать телефон, записанный на вкладке Telephones в поле Mobile. Формат телефона также может быть любым.

Проверка Captcha
Для защиты от автоматизированного перебора паролей от учётных записей на странице входа в портале предусмотрена возможность проверки пользователя с помощью теста Captcha. В качестве провайдеров сервиса Captcha поддерживаются Yandex SmartCaptcha и Google reCAPTCHA v2.
<!-- Включить проверку Captcha --> <!-- Провайдер Captcha: 'Yandex', 'Google' --> <CaptchaType>Yandex</CaptchaType> <!-- Key из личного кабинета провайдера Captcha --> <Key>key</Key> <!-- Secret из личного кабинета провайдера Captcha --> <Secret>secret</Secret> <!-- Где показывать Captcha: 'Always', 'PasswordRecovery' --> <CaptchaRequired>Always</CaptchaRequired> </CaptchaSettings>
Управление паролями
Портал самообслуживания позволяет пользователям управлять своими доменными паролями: менять текущий пароль, менять истекший пароль, восстанавливать забытый пароль.
Для использования функционала управления паролями порталу необходимо подключение к каталогу по SSL/TLS.
Смена истекших паролей осуществляется под технической учётной записью.
Для настройки используются следующие параметры:
<!-- Включить управление паролями. Необходимо подключение к AD по SSL/TLS --> <PasswordManagement enabled="true"> <!-- Максимальная длительность сессии изменения пароля в формате 'hh:mm:ss' --> <!-- <PasswordChangingSessionLifetime>00:02:00</PasswordChangingSessionLifetime> --> <!-- Размер хранилища сессий в байтах (5242880 по умолчанию, 1048576 - минимальное значение) --> <!-- <PasswordChangingSessionCachesize>5242880</PasswordChangingSessionCachesize> --> </PasswordManagement>
Восстановление забытых паролей
Функционал восстановления забытых паролей позволяет пользователям из Active Directory самостоятельно (без вовлечения технической поддержки организации) менять забытые и утерянные пароли.
Условия для работы:
- У пользователя должно быть настроено мобильное приложение Multifactor в качестве способа аутентификации;
- На портале должна быть включена возможность управления паролями;
- На портале должна быть включена проверка Captcha;
- Техническая учетная запись должна иметь права 'Reset Password' на контейнер с пользователями.
Для настройки используется параметр allowPasswordRecovery
в разделе <PasswordManagement>
:
<!-- Восстановление забытых паролей. Параметр allowPasswordRecovery (true: включить, false: выключить) --> <PasswordManagement enabled="true" allowPasswordRecovery="true"> </PasswordManagement>
Чтение вложенных групп
Портал самообслуживания позволяет читать вложенные группы, для этого необходимо добавить нижеприведенные параметры в секцию "CompanySettings":
<CompanySettings> Загружать вложенные группы true/false <LoadActiveDirectoryNestedGroups>false</LoadActiveDirectoryNestedGroups> Контейнеры, в которых искать вложенные группы, если не указано, то используется корневой домен(как сейчас) <NestedGroupsBaseDn>CN=Users,DC=domain1,DC=md</NestedGroupsBaseDn> </CompanySettings>
Privacy mode
Для ограничения передаваемых полей добавьте в конфиг в блок MultiFactorApiSettings следующую строчку:
<!-- Где Full - скрыть всё кроме логина, Partial - скрыть перечисленные атрибуты --> <MultiFactorApiSettings> <PrivacyMode>Full/Partial:Name,Email,Phone</PrivacyMode> </MultiFactorApiSettings>
Особенности при работе с FreeIPA
Для корректного подключения к FreeIPA в файле конфигурации необходимо раскомментировать и заполнить настройку LdapBaseDn. Пример:
<LdapBaseDn>cn=users,cn=accounts,dc=domain,dc=local</LdapBaseDn>
Запуск
После настройки конфигурации запустите компонент:
$ sudo systemctl start ssp.service
Статус можно проверить командой:
$ sudo systemctl status ssp.service
Последующие изменения в файле конфигурации службы потребуют перезапуска подсистемы служб и службы:
$ sudo systemctl daemon-reload $ sudo systemctl restart ssp.service
Обновление
Для обновления портала необходимо:
- остановить службу
- перезаписать файлы на новые (не заменяя конфигурационные файлы) /opt/multifactor/ssp/app/appsettings.production.xml
- включить службу обратно.
Так же необходимо будет вновь дать права на данную папку с вложенными файлами:
$ sudo chown -R mfa: /opt/multifactor/ssp $ sudo chmod -R 700 /opt/multifactor/ssp
Журналы
Журналы работы портала записываются в syslog
и сохраняются в текстовые файлы в директорию /opt/multifactor/ssp/app/logs
. Если директория пуста или ее нет, нужно убедиться, что у пользователя, под которым запускается служба, есть права на запись в эту директорию.
Для просмотра содержимого syslog можно воспользоваться командой:
$ sudo less /var/log/syslog
Для просмотра журналов службы ssp.service используйте команду:
$ sudo journalctl -fu ssp.service
Доступ к порталу
Портал доступен по адресу https://ssp.domain.org
.
Для реализации liveness check используйте GET https://ssp.domain.org/api/ping.
Пример ответа:
{ "timeStamp": "2022-08-05T08:19:42.336Z", "message": "Ok" }
Вопросы и ответы
В: Почему пользователь не может восстановить пароль, хотя техническая учётная запись портала имеет право на сброс пароля (Reset Password) на контейнере с пользователями?
О: Сервер Active Directory имеет некоторые ограничения на назначение правил доступа пользователям, которые являются членами привилегированных групп (например, Domain Admins). Такие пользователи не наследуют ACL от родительских объектов, поэтому вы должны убедиться, что для необходимых привилегированных пользователей созданы локальные правила, предоставляющие технической учётной записи право Reset Password.
В: Как изменить интерфейс и порт, котрый слушает веб-сервер Kestrel?
О: В файле конфигурации appsettings.production.xml
добавьте блок конфигурации <Kestrel>...</Kestrel>
. Интерфейс и порт указываются в ноде <Url>
.
<Kestrel> <Endpoints> <Http> <!-- http://интерфейс:порт --> <Url>http://localhost:5000</Url> </Http> </Endpoints> </Kestrel> <PortalSettings> ... </PortalSettings>
Подробнее о настройках Kestrel: