Indeed LDAP Proxy
С помощью модуля Indeed LDAP Proxy (LDAP Proxy) можно использовать двухфакторную аутентификацию в приложениях, в которых основным методом аутентификации пользователей выступает LDAP-каталог. Модуль LDAP Proxy действует как посредник между LDAP-клиентами и серверами: он перехватывает запросы от клиентов и перенаправляет их на LDAP-серверы.
LDAP Proxy не влияет на проверку имени и пароля пользователя. Проверка доменного пароля происходит при перенаправлении запроса в каталог пользователей. Второй фактор запрашивается только после успешной проверки учетной записи в конечном каталоге пользователей.
В модуле LDAP Proxy вы можете выполнить аутентификацию по следующим методам аутентификации:
- доменный пароль;
- доменный пароль + Indeed Key (в режиме отправки push-уведомлений с подтверждением входа);
- доменный пароль + Telegram (в режиме отправки push-уведомлений с подтверждением входа).
Чтобы настроить доступ для сервисных учетных записей без использования второго фактора, в Management Console создайте отдельную политику, в которой в качестве метода аутентификации выбран доменный пароль.
Добавьте в эту политику сервисную учетную запись Access Manager и сервисные учетные записи, которые используются в клиентах LDAP Proxy для чтения каталога.
Установка LDAP Proxy
Чтобы установить и настроить модуль LDAP Proxy на отдельном хосте:
- Импортируйте образ Docker.
- Сгенерируйте служебные сертификаты.
- Внесите изменения в конфигурационные файлы.
- Создайте каталог для хранения логов и выполните настройку прав пользователя.
- Запустите контейнер с приложением.
Импорт образа Docker
- Скачайте архив am-<номер версии>.tar.gz, загрузите его на целевой хост в необходимый каталог.
- Перейдите в каталог с архивом и распакуйте его с помощью команды:
sudo tar -xf <имя архива>.tar.gz
- Перейдите в каталог, в который распаковался архив, и импортируйте образ Docker с помощью команды:
sudo docker load -i <имя архива>.tar
- Ограничьте права запуска для всех пользователей системы, не имеющих прав
sudo
. Для этого, находясь в каталоге ssl, выполните командуsudo chmod 400 *.sh
.
Генерация служебных сертификатов
Перед запуском скриптов ограничьте права запуска для всех пользователей системы, не имеющих прав sudo
. Для этого, находясь в каталоге ssl, выполните команду sudo chmod 400 *.sh
.
Запустите следующие скрипты в каталоге ssl. Убедитесь, что в каталоге ssl находятся только скрипты и добавленные ранее сертификаты.
Сконвертируйте .pfx в сертификат HAProxy:
sudo bash ./convertPfxForReverseProxy.sh -f <серверный сертификат>.pfx -p <пароль>
Результат: создается серверный сертификат am/ssl/https/reverse_proxy_server.pem, предоставляющий HAProxy для внешних клиентов (Api Core, WebUI MC, UC и IDP).
Сгенерируйте HTTPS-сертификаты контейнеров, используемые внутри сети Docker.
sudo bash ./generateHttpsCerts.sh
Результат: создаются сертификаты am/ssl/https/<service>.pfx для сервисов LDAP Proxy, Core, MC, UC, IDP и Log Server. Расположение и пароли сертификатов указаны в конфигурационных файлах компонентов.
Сгенерируйте сертификат, которому будут доверять контейнеры.
sudo bash ./prepareCaFile.sh
Результат: создается сертификат am/ssl/ca/trusted_ca.crt, который содержит список всех добавленных в am/ssl/ca публичных сертификатов.
ПримечаниеПри изменении состава каталога am/ssl/ca необходимо перезапустить скрипт prepareCaFile.sh.
Редактирование конфигурационных файлов
Редактирование файла am/.env
COMPOSE_PROFILES
— добавьте значениеldap-proxy
и удалите значения компонентов, которые установлены на других хостах.ENDPOINT_NAME_THIS_HOST
— DNS-имя хоста, на котором вы устанавливаете LDAP Proxy.ENDPOINT_NAME_CORE
— DNS-имя хоста, на котором установлен Core Server.LDAP_PROXY_PORT
— порт, на который будут отправляться запросы. Значение по умолчанию — 636.
Редактирование конфигурационного файла am/haproxy.docker-compose.yml
В блоке
depends_on
раскомментируйте строкуldap-proxy
и при необходимости закомментируйте строки с остальными компонентами, установленными на других хостах.Пример
depends_on:
# - core
# - idp
# - mc
# - uc
# - ls
# - indeed-key
- ldap-proxyВ блоке
ports
раскомментируйте строку с указанием порта:- "${LDAP_PROXY_PORT}:9636"
Редактирование файла am/haproxy/haproxy.cfg
Раскомментируйте строку:
default_backend LDAP_Proxy_Backend
Раскомментируйте строки:
backend LDAP_Proxy_Backend
mode tcpЧтобы задать подключение по протоколу LDAPS (рекомендуется), расскоментируйте строку:
server haproxy localhost:9999 send-proxy track ldaps_transmitter_backend/docker
Раскомментируйте строки:
frontend ldap_reciever_frontend
mode tcp
bind localhost:9999
default_backend ldaps_transmitter_backend
backend ldaps_transmitter_backend
mode tcp
server docker ldap-proxy:636 check port 637 inter 5000ms ssl verify required ca-file trusted_ca.crtПри необходимости закомментируйте строки, связанные с компонентами, которые установлены на других хостах.
Строки с параметром
acl
, в которых упоминаются компоненты. Пример:acl path-mc path_beg -i /am/mc
.В параметре
http-request reject unless
удалите компоненты, которые установлены на других хостах, и лишние разделители||
.Строки с параметром
use_backend
. Пример:use_backend MC_Backend if path-mc
.Строки с адресом компонента в параметре
backend <серверный_компонент>_Backend
.
Редактирование файла am/ldap-proxy/app-settings.json
Пример файла am/ldap-proxy/app-settings.json
{
"ProxyServer": {
"Port": "636",
"HealthCheckPort": "637",
"UseTls": true,
"Certificate": {
"Path": "/ssl/proxy.pfx",
"Password": "<proxy_certs_pass>"
}
},
"LdapServer": {
"Address": "!!! ip address LDAP server !!!",
"Port": "636",
"UseTls": true,
"Certificate": {
"Path": "/ssl/ldap-proxy/<server_cert>.pfx",
"Password": "<server_certs_pass>"
},
"ConnectTimeout": "00:00:03"
},
"AuthenticationServer": {
"IgnoreCertErrors": true
},
"InteractionTimeouts": {
"IdleTimeout": "00:10:00",
"PushTimeout": "00:00:30"
}
}
Откройте конфигурационный файл am/ldap-proxy/app-settings.json.
В блоке
LdapServer
задайте настройки для запросов между LDAP Proxy и сервером LDAP.Address
— IP-адрес LDAP-сервера. Если в параметре задано имя домена, то будет автоматически выбираться один из доступных контроллеров домена. Пример:gma.local
.Port
— порт, на который будут отправляться запросы. Значение по умолчанию:636
.UseTls
— параметр задает подключение по протоколу LDAPS или LDAP между LDAP Proxy и сервером LDAP. Доступные значения:true
для LDAPS (рекомендуется),false
для LDAP.
(Опционально) В блоке
InteractionTimeouts
можно задать настройки тайм-аута.IdleTimeout
— максимальное время, в течение которого не происходит чтение и запись данных. По истечении заданного времени разрывается соединение с клиентом. Значение по умолчанию: 00:10:00 (10 минут).PushTimeout
— максимальное время, в течение которого пользователь может подтвердить второй фактор аутентификации. По истечении заданного времени разрывается соединение с клиентом. Значение по умолчанию: 00:00:30 (30 секунд).
Создание каталогов и настройка прав
Чтобы создать каталоги для хранения логов и ключей шифрования, из каталога am запустите команду:
sudo mkdir ldap-proxy/Logs/ ldap-proxy/DataProtectionKeys/
Выдайте права пользователю, указанному в файле .env в переменных
AM_UID
иAM_GID
. Для этого запустите команду:sudo chown -R <AM_UID>:<AM_GID> ./*
Запуск контейнера
Запустите контейнер с приложением с помощью команды:
sudo docker-compose up -d
После запуска настройте интеграцию с бизнес-приложениями в Management Console.
Включить/Отключить шифрование конфигурационного файла
В терминале перейдите в каталог с утилитой для шифрования am/protection.
cd /am/protection
Выдайте права для запуска скрипта
protector.sh
.sudo chmod 500 protector.sh
Чтобы зашифровать конфигурационные файлы, запустите скрипт
protector.sh
с параметромprotect
.sudo bash ./protector.sh protect
Чтобы расшифровать конфигурационные файлы, запустите скрипт
protector.sh
с параметромunprotect
.sudo bash ./protector.sh unprotect
Двустороннее TLS-соединение
Чтобы установить двустороннее TLS-соединение между серверами Indeed Core Server и Indeed LDAP Proxy, в конфигурационном файле am/ldap-proxy/app-settings.json укажите следующие параметры:
"LdapServer": {
"Address": "dc01.test.local",
"Port": "636",
"UseTls": true,
"Certificate": {
"Path": "/ssl/ldap-proxy/<server_cert>.pfx",
"Password": "<server_certs_pass>"
},
LdapServer:Certificate:Path
— путь к клиентскому сертификату.LdapServer:Certificate:Password
— пароль клиентского сертификата.
Сбор логов
Информация по включению логирования и сбору логов компонента LDAP Proxy находится в разделе Сбор логов компонентов Access Manager.