Skip to main content
Version: Indeed Access Manager 9.3

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 на отдельном хосте:

  1. Импортируйте образ Docker.
  2. Сгенерируйте служебные сертификаты.
  3. Внесите изменения в конфигурационные файлы.
  4. Создайте каталог для хранения логов и выполните настройку прав пользователя.
  5. Запустите контейнер с приложением.

Импорт образа Docker

  1. Скачайте архив am-<номер версии>.tar.gz, загрузите его на целевой хост в необходимый каталог.
  2. Перейдите в каталог с архивом и распакуйте его с помощью команды:
    sudo tar -xf <имя архива>.tar.gz
  3. Перейдите в каталог, в который распаковался архив, и импортируйте образ Docker с помощью команды:
    sudo docker load -i <имя архива>.tar
  4. Ограничьте права запуска для всех пользователей системы, не имеющих прав sudo. Для этого, находясь в каталоге ssl, выполните команду sudo chmod 400 *.sh.

Генерация служебных сертификатов

Перед запуском скриптов ограничьте права запуска для всех пользователей системы, не имеющих прав sudo. Для этого, находясь в каталоге ssl, выполните команду sudo chmod 400 *.sh.

Запустите следующие скрипты в каталоге ssl. Убедитесь, что в каталоге ssl находятся только скрипты и добавленные ранее сертификаты.

  1. Сконвертируйте .pfx в сертификат HAProxy:

    sudo bash ./convertPfxForReverseProxy.sh -f <серверный сертификат>.pfx -p <пароль>

    Результат: создается серверный сертификат am/ssl/https/reverse_proxy_server.pem, предоставляющий HAProxy для внешних клиентов (Api Core, WebUI MC, UC и IDP).

  2. Сгенерируйте HTTPS-сертификаты контейнеров, используемые внутри сети Docker.

    sudo bash ./generateHttpsCerts.sh

    Результат: создаются сертификаты am/ssl/https/<service>.pfx для сервисов LDAP Proxy, Core, MC, UC, IDP и Log Server. Расположение и пароли сертификатов указаны в конфигурационных файлах компонентов.

  1. Сгенерируйте сертификат, которому будут доверять контейнеры.

    sudo bash ./prepareCaFile.sh

    Результат: создается сертификат am/ssl/ca/trusted_ca.crt, который содержит список всех добавленных в am/ssl/ca публичных сертификатов.

    Примечание

    При изменении состава каталога am/ssl/ca необходимо перезапустить скрипт prepareCaFile.sh.

Редактирование конфигурационных файлов

Редактирование файла am/.env

  1. COMPOSE_PROFILES — добавьте значение ldap-proxy и удалите значения компонентов, которые установлены на других хостах.
  2. ENDPOINT_NAME_THIS_HOST — DNS-имя хоста, на котором вы устанавливаете LDAP Proxy.
  3. ENDPOINT_NAME_CORE — DNS-имя хоста, на котором установлен Core Server.
  4. LDAP_PROXY_PORT — порт, на который будут отправляться запросы. Значение по умолчанию — 636.

Редактирование конфигурационного файла am/haproxy.docker-compose.yml

  1. В блоке depends_on раскомментируйте строку ldap-proxy и при необходимости закомментируйте строки с остальными компонентами, установленными на других хостах.

    Пример
         depends_on:
    # - core
    # - idp
    # - mc
    # - uc
    # - ls
    # - indeed-key
    - ldap-proxy
  2. В блоке ports раскомментируйте строку с указанием порта:

    - "${LDAP_PROXY_PORT}:9636"

Редактирование файла am/haproxy/haproxy.cfg

  1. Раскомментируйте строку:

    default_backend LDAP_Proxy_Backend
  2. Раскомментируйте строки:

    backend LDAP_Proxy_Backend
    mode tcp
  3. Чтобы задать подключение по протоколу LDAPS (рекомендуется), расскоментируйте строку:

    server haproxy localhost:9999 send-proxy track ldaps_transmitter_backend/docker
  4. Раскомментируйте строки:

    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
  5. При необходимости закомментируйте строки, связанные с компонентами, которые установлены на других хостах.

    • Строки с параметром 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"
}
}
  1. Откройте конфигурационный файл am/ldap-proxy/app-settings.json.

  2. В блоке LdapServer задайте настройки для запросов между LDAP Proxy и сервером LDAP.

    • Address — IP-адрес LDAP-сервера. Если в параметре задано имя домена, то будет автоматически выбираться один из доступных контроллеров домена. Пример: gma.local.
    • Port — порт, на который будут отправляться запросы. Значение по умолчанию: 636.
    • UseTls — параметр задает подключение по протоколу LDAPS или LDAP между LDAP Proxy и сервером LDAP. Доступные значения: true для LDAPS (рекомендуется), false для LDAP.
  3. (Опционально) В блоке InteractionTimeouts можно задать настройки тайм-аута.

    • IdleTimeout — максимальное время, в течение которого не происходит чтение и запись данных. По истечении заданного времени разрывается соединение с клиентом. Значение по умолчанию: 00:10:00 (10 минут).
    • PushTimeout — максимальное время, в течение которого пользователь может подтвердить второй фактор аутентификации. По истечении заданного времени разрывается соединение с клиентом. Значение по умолчанию: 00:00:30 (30 секунд).

Создание каталогов и настройка прав

  1. Чтобы создать каталоги для хранения логов и ключей шифрования, из каталога am запустите команду:

    sudo mkdir ldap-proxy/Logs/ ldap-proxy/DataProtectionKeys/
  2. Выдайте права пользователю, указанному в файле .env в переменных AM_UID и AM_GID. Для этого запустите команду:

    sudo chown -R <AM_UID>:<AM_GID> ./*

Запуск контейнера

Запустите контейнер с приложением с помощью команды:

sudo docker-compose up -d

После запуска настройте интеграцию с бизнес-приложениями в Management Console.

Включить/Отключить шифрование конфигурационного файла

  1. В терминале перейдите в каталог с утилитой для шифрования am/protection.

    cd /am/protection
  2. Выдайте права для запуска скрипта protector.sh.

    sudo chmod 500 protector.sh
  3. Чтобы зашифровать конфигурационные файлы, запустите скрипт protector.sh с параметром protect.

    sudo bash ./protector.sh protect
  4. Чтобы расшифровать конфигурационные файлы, запустите скрипт 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.