В статье описывается установка и первоначальная настройка WEB-интерфейса службы каталогов MULTIDIRECTORY.
Архитектура работы решения
Архитектура с использованием СУБД в Docker
Архитектура с использованием СУБД во внешнем кластере
Описание
1
Пользователи и сервисы, которые используют Kerberos для аутентификации. Подключаются к порту 88 для работы с Kerberos.
2
Пользователи взаимодействуют с системой через клиентов LDAP. Эти клиенты могут быть различными приложениями или устройствами, которые используют протокол LDAP для доступа к данным и сервисам в системе.
3
Администраторы системы используют web-приложение для управления и конфигурирования системы в web-интерфейсе.
4
Контейнеризация всех компонентов службы каталогов происходит при помощи Docker’a.
5
Traefik является обратным прокси-сервером, который маршрутизирует запросы от пользователей, администраторов и автоматизированных систем к соответствующим внутренним сервисам. Он обеспечивает балансировку нагрузки, безопасность и управление маршрутизацией.
6
Центр распределения ключей, который управляет аутентификацией по протоколу Kerberos.
7
MULTIDIRECTORY Admin API выполняет роль серверного компонента, который отвечает за обработку запросов от административного интерфейса и запросов от систем автоматизации. Этот компонент обеспечивает все необходимые функции для безопасного и эффективного управления данными LDAP через административный интерфейс.
8
Представляет компонент для загрузки веб интерфейса, который позволяет управлять службой каталогов, создавать пользователей, настраивать политики доступа и управлять учетными записями клиентов.
9
Административный сервис управления Kerberos сервером.
10
LDAP-сервер реализует протокол Lightweight Directory Access Protocol (LDAP), хранит и обрабатывает поступающие от пользователей запросы в каталоге данных. Он отвечает за идентификацию, аутентификацию и авторизацию пользователей, определяя права доступа на основе атрибутов и членства в группах.*
* LDAP — сервер представляет собой 4 сервиса в виде отдельных контейнеров, обеспечивая большую производительность и отказоустойчивость — на схеме представлен в виде одного блока.
11
DNS-сервер для разрешения доменных имен.
12
PostgreSQL является системой управления базами данных. База данных MULTIDIRECTORY хранит настройки конфигурации системы, данные службы каталогов, такие как информация о пользователях, группах, организационных единицах и т.д., а также другие важные данные.
Описание
1
Пользователи и сервисы, которые используют Kerberos для аутентификации. Подключаются к порту 88 для работы с Kerberos.
2
Пользователи взаимодействуют с системой через клиентов LDAP. Эти клиенты могут быть различными приложениями или устройствами, которые используют протокол LDAP для доступа к данным и сервисам в системе.
3
Администраторы системы используют web-приложение для управления и конфигурирования системы в web-интерфейсе.
4
Контейнеризация всех компонентов службы каталогов происходит при помощи Docker’a.
5
Traefik является обратным прокси-сервером, который маршрутизирует запросы от пользователей, администраторов и автоматизированных систем к соответствующим внутренним сервисам. Он обеспечивает балансировку нагрузки, безопасность и управление маршрутизацией.
6
Центр распределения ключей, который управляет аутентификацией по протоколу Kerberos.
7
MultiDirectory Admin API выполняет роль серверного компонента, который отвечает за обработку запросов от административного интерфейса и запросов от систем автоматизации. Этот компонент обеспечивает все необходимые функции для безопасного и эффективного управления данными LDAP через административный интерфейс.
8
Представляет компонент для загрузки веб интерфейса, который позволяет управлять службой каталогов, создавать пользователей, настраивать политики доступа и управлять учетными записями клиентов.
9
Административный сервис управления Kerberos сервером.
10
LDAP-сервер реализует протокол Lightweight Directory Access Protocol (LDAP), хранит и обрабатывает поступающие от пользователей запросы в каталоге данных. Он отвечает за идентификацию, аутентификацию и авторизацию пользователей, определяя права доступа на основе атрибутов и членства в группах.*
* LDAP — сервер представляет собой 4 сервиса в виде отдельных контейнеров, обеспечивая большую производительность и отказоустойчивость — на схеме представлен в виде одного блока.
11
DNS-сервер для разрешения доменных имен.
12
PostgreSQL Cluster является системой управления базами данных. База данных хранит настройки конфигурации системы, данные службы каталогов, такие как информация о пользователях, группах, организационных единицах и т.д., а также другие важные данные.*
* На данной схеме представлена в виде отдельной БД, которая подключается к MultiDirectory как внешний сервис.
Требования для установки каталога MULTIDIRECTORY
Компонент устанавливается на Linux-сервер, протестирован на Ubuntu, Debian, Astra.
Необходимо зарегистрировать домен и сопоставить его с IP вашего сервера.
В случае использования локального домена, необходимы сертификаты для SSL/TLS. Объект сертификата должен совпадать с доменным именем, по которому будет доступен веб-интерфейс.
При использовании локальной доменной записи необходимо добавить запись на ваш DNS-сервер со ссылкой на IP-адрес машины, где устанавливается MULTIDIRECTORY.
Пример: srv01.domain.ru -> 10.0.0.20
важно
Для работы MULTIDIRECTORY необходимо произвести установку Docker и Docker-Compose.
Для работы MULTIDIRECTORY в Windows необходимо установить Docker Desktop.
Рекомендуется использовать более стабильную версию Docker ( 28.5.2 ), так как последняя версия может вызывать некорректную работу Traefik.
Для выбора конкретной версии выберите вкладку «Specific version» (Конкретная версия) на этапе установки:
Все сервисы работают при помощи Traefik, используя Postgres в качестве базы данных. Другие СУБД несовместимы.
Описание контейнеров MULTIDIRECTORY
Имя контейнера
Описание
multidirectory_api
Контейнер с веб-api.
multidirectory-ldap_server-*
Контейнер с LDAP.
MD-postgres
Контейнер с СУБД PostgreSQL.
multidirectory_interface
Контейнер с веб интерфейсом.
traefik
Контейнер, отвечающий за балансировку нагрузки, безопасности и управляет маршрутизацией запросов от пользователей,администраторов и автоматизированных систем.
multidirectory_migrations
Контейнер, отвечающий за миграцию данных.
multidirectory_certs_check
Контейнер, отвечающий за проверку сертификатов.
kadmin
Контейнер, отвечающий за управление базы данных Kerberos.
kdc
Контейнер с сервером аутентификации Kerberos.
kadmin_api
Контейнер с API для администрирования Kerberos.
bind9
Контейнер с DNS.
shadow_api
Скрытое API, которое недоступно извне.
dragonfly
Контейнер, отвечающий за распределенное кэширование и хранение артефактов.
md_maintance
Контейнер, выполняющий периодические задания.
event_handler
Контейнер сбора и первичной обработки системных событий и логов.
event_sender
Контейнер для отправки событий на сервер syslog.
kea_dhcp4
Контейнер с DHCP.
kea_ctrl_agent
Контейнер с API DHCP.
salt_master
Контейнер с сервером GPO.
Описание портов MULTIDIRECTORY
Сервис
Используемые порты
Описание
DNS
:53
Стандартный порт для обработки DNS-запросов.
Web-интерфейс
:443
Доступ к веб-консоли управления.
LDAP/LDAPS
:389 :636
Прием LDAP-запросов от клиентов и приложений.
Kerberos/Kadmind
:464 :88 :749
Аутентификация (88), смена паролей (464), администрирование (749) по протоколу Kerberos.
Групповый политики Salt
:4505 :4506
Внутренняя коммуникация для системы управления конфигурациями Salt.
DHCP
:67
Порт для приема DHCP-запросов от клиентов.
Установка MULTIDIRECTORY
Установка в случае недоступности DockerHub
Создайте папку, в которой будет храниться MULTIDIRECTORY.
mkdir MultiDirectory; cd MultiDirectory;
Скачайте и сгенерируйте конфигурационный .env файл при помощи:
Запустите ./setup.sh, затем следуйте инструкциям. После заполнения будет создан .env-файл и службы будут готовы к развертыванию.
Расшифровка значения полей в файле setup.sh
Enter host server ip address — введите ip-адрес сервера, на котором производится установка MULTIDIRECTORY.
Данное поле обязательно.
Enter postgres user – введите пользователя Postgres, под которым будет осуществлятся подключение к вашей базе (если она есть). Если оставить незаполненным, будет установлен «user» (пользователь по умолчанию).
Enter postgres database name – введите имя базы данных, к которой будет осуществляться подключение (если она есть). Если оставить незаполненным, будет установлена база «postgres» (по умолчанию).
Enter postgres host – введите хост postgres. Если оставить не заполненным, будет использоваться хост «postgres» (по умолчанию).
Enter postgres password – введите пароль postgres, при помощи которого будет осуществляться подключение к вашей базе. Если оставить незаполненным, пароль будет сгенерирован автоматически.
Enter interface domain – введите адрес, по которому будет доступен веб-интерфейс. Обращаем ваше внимание, что должно быть указано именно доменное имя, в случае указания IP-адреса, web-интерфейс не запустится. Например: srv01.domain.ru
Запустите ./setup.bat, затем следуйте инструкциям. После заполнения будет создан .env-файл и службы будут готовы к развертыванию.
Расшифровка значения полей в файле setup.bat
Enter host server ip address — введите ip-адрес сервера, на котором производится установка MULTIDIRECTORY.
Данное поле обязательно.
Enter postgres user – введите пользователя Postgres, под которым будет осуществлятся подключение к вашей базе
(если она есть). Если оставить незаполненным, будет установлен «user» (пользователь по умолчанию).
Enter postgres database name – введите имя базы данных, к которой будет осуществляться подключение
(если она есть). Если оставить незаполненным, будет установлена база «postgres» (по умолчанию).
Enter postgres host – введите хост postgres. Если оставить не заполненным, будет использоваться хост «postgres»
(по умолчанию).
Enter postgres password – введите пароль postgres, при помощи которого будет осуществляться подключение к вашей базе.
Если оставить незаполненным, пароль будет сгенерирован автоматически.
Enter interface domain – введите адрес, по которому будет доступен веб-интерфейс.
Обращаем ваше внимание, что должно быть указано именно доменное имя, в случае указания IP-адреса, web-интерфейс не запустится.
Например: srv01.domain.ru
Запустите ./setup.bat, затем следуйте инструкциям. После заполнения будет создан .env-файл и службы будут готовы к развертыванию.
Расшифровка значения полей в файле setup.bat
Enter host server ip address — введите ip-адрес сервера, на котором производится установка MULTIDIRECTORY.
Данное поле обязательно.
Enter postgres user – введите пользователя Postgres, под которым будет осуществлятся подключение к вашей базе
(если она есть). Если оставить незаполненным, будет установлен «user» (пользователь по умолчанию).
Enter postgres database name – введите имя базы данных, к которой будет осуществляться подключение
(если она есть). Если оставить незаполненным, будет установлена база «postgres» (по умолчанию).
Enter postgres host – введите хост postgres. Если оставить не заполненным, будет использоваться хост «postgres»
(по умолчанию).
Enter postgres password – введите пароль postgres, при помощи которого будет осуществляться подключение к вашей базе.
Если оставить незаполненным, пароль будет сгенерирован автоматически.
Enter interface domain – введите адрес, по которому будет доступен веб-интерфейс.
Обращаем ваше внимание, что должно быть указано именно доменное имя, в случае указания IP-адреса, web-интерфейс не запустится.
Например: srv01.domain.ru
Создайте папку, в которой будет храниться MULTIDIRECTORY.
mkdir MultiDirectory; cd MultiDirectory;
Скачайте и сгенерируйте конфигурационный .env файл при помощи:
Файл конфигурации ./setup.sh запустится автоматически, в него необходимо внести данные. После заполнения будет создан .env-файл и службы будут готовы к развертыванию.
Расшифровка значения полей в файле setup.sh
Enter host server ip address — введите ip-адрес сервера, на котором производится установка MULTIDIRECTORY. Данное поле обязательно.
Enter postgres user – введите пользователя Postgres, под которым будет осуществлятся подключение к вашей базе (если она есть). Если оставить незаполненным, будет установлен «user» (пользователь по умолчанию).
Enter postgres database name – введите имя базы данных, к которой будет осуществляться подключение (если она есть). Если оставить незаполненным, будет установлена база «postgres» (по умолчанию).
Enter postgres host – введите хост postgres. Если оставить не заполненным, будет использоваться хост «postgres» (по умолчанию).
Enter postgres password – введите пароль postgres, при помощи которого будет осуществляться подключение к вашей базе. Если оставить незаполненным, пароль будет сгенерирован автоматически.
Enter interface domain – введите адрес, по которому будет доступен веб-интерфейс. Обращаем ваше внимание, что должно быть указано именно доменное имя, в случае указания IP-адреса, web-интерфейс не запустится. Например: srv01.domain.ru
Запустите ./setup.bat, затем следуйте инструкциям. После заполнения будет создан .env-файл и службы будут готовы к развертыванию.
Расшифровка значения полей в файле setup.bat
Enter host server ip address — введите ip-адрес сервера, на котором производится установка MULTIDIRECTORY.
Данное поле обязательно.
Enter postgres user – введите пользователя Postgres, под которым будет осуществлятся подключение к вашей базе
(если она есть). Если оставить незаполненным, будет установлен «user» (пользователь по умолчанию).
Enter postgres database name – введите имя базы данных, к которой будет осуществляться подключение
(если она есть). Если оставить незаполненным, будет установлена база «postgres» (по умолчанию).
Enter postgres host – введите хост postgres. Если оставить не заполненным, будет использоваться хост «postgres»
(по умолчанию).
Enter postgres password – введите пароль postgres, при помощи которого будет осуществляться подключение к вашей базе.
Если оставить незаполненным, пароль будет сгенерирован автоматически.
Enter interface domain – введите адрес, по которому будет доступен веб-интерфейс.
Обращаем ваше внимание, что должно быть указано именно доменное имя, в случае указания IP-адреса, web-интерфейс не запустится.
Например: srv01.domain.ru
Запустите ./setup.bat, затем следуйте инструкциям. После заполнения будет создан .env-файл и службы будут готовы к развертыванию.
Расшифровка значения полей в файле setup.bat
Enter host server ip address — введите ip-адрес сервера, на котором производится установка MULTIDIRECTORY.
Данное поле обязательно.
Enter postgres user – введите пользователя Postgres, под которым будет осуществлятся подключение к вашей базе
(если она есть). Если оставить незаполненным, будет установлен «user» (пользователь по умолчанию).
Enter postgres database name – введите имя базы данных, к которой будет осуществляться подключение
(если она есть). Если оставить незаполненным, будет установлена база «postgres» (по умолчанию).
Enter postgres host – введите хост postgres. Если оставить не заполненным, будет использоваться хост «postgres»
(по умолчанию).
Enter postgres password – введите пароль postgres, при помощи которого будет осуществляться подключение к вашей базе.
Если оставить незаполненным, пароль будет сгенерирован автоматически.
Enter interface domain – введите адрес, по которому будет доступен веб-интерфейс.
Обращаем ваше внимание, что должно быть указано именно доменное имя, в случае указания IP-адреса, web-интерфейс не запустится.
Например: srv01.domain.ru
Обратите внимание!
MULTIDIRECTORY использует порт 53 для запуска и работы контейнера с DNS сервером. Для корректного запуска MULTIDIRECTORY освободите данный порт.
Важно!
При использовании локального домена требуется сгенерировать или добавить свой сертификат вручную. Для генерации или добавления см. секцию Вопросы и ответы.
Запустите сервисы при помощи команды:
docker compose pull; docker compose up -d
Настройка Web-интерфейса MULTIDIRECTORY
После успешной настройки и запуска сервисов Docker – перейдите в браузер. В поисковую строку внесите домен, который ранее был указан при генерации .env-файла.
Вы попадете в настройку WEB-интерфейса вашей MULTIDIRECTORY.
Проверьте правильность написания домена, выберите необходимые вам настройки:
Настроить DNS. Если стоит галочка, то настройка DNS будет произведена сразу же (настройку DNS можно произвести и позже в WEB-интерфейсе администратора).
Настроить Kerberos. Если стоит галочка, то настройка керберос произойдет сразу же (настройку керберос можно произвести и позже из интерфейса администраторMULTIDIRECTORY).
Сгенерировать пароли для Kerberos. Если стоит галочка, то произойдет автоматическая генерация паролей для Kerberos. После настройки WEB-интерфейса сгенерированные пароли будут выгруженны в файл.
Нажмите кнопку «Далее».
Примечание
Домен в данном поле заполняется автоматически из файла .env. Вы можете изменить данное поле. Например: веб-интерфейс доступен по адресу srv01.domain.ru. Этот адрес автоматически подставится, вы можете изменить его на domain.ru
Настройка DNS
Если был выбран пункт «Настроить DNS» откроется мастер настройки DNS, все поля будут заполнены:
Обозначение полей
Имя зоны — по умолчанию заполняется автоматически именем используемого домена. Можно переименовать. Данное именя нельзя будет сменить в дальнейшем.
Домен — по умолчанию заполняется автоматически из файла .env.
TTL по умолчанию — продолжительность кэширования записи серверами и клиентами до её истечения. Значение измеряется в секундах.
Если был выбран пункт «Привязать к внешнему DNS серверу»
IP — адрес Вашего внешнего DNS сервера, который будет использоваться.
TSIG Ключ — содержимое файла, которое было сгенерировано на внешнем DNS сервере.
После заполнения всех полей нажмите кнопку «Далее».
Настройка Kerberos
Если НЕ была выбрана автоматическая генерация паролей для Kerberos
Если вы сняли галочку с пункта «Сгенерировать пароли для Kerberos автоматически», появится окно, в которое необходимо будет внести пароли для krbadmin и стэша.
Krbadmin — это служебная учетная запись сервера Kerberos. Она используется для взаимодействия с сервером LDAP. Данная учетная запись ограничена полномочиями и может управлять только своей выделенной областью в дереве LDAP.
Пароль stash, используется для защиты мастер ключа шифрования базы данных Kerberos. Вы можете выгрузить внесенные вами пароли в файл.
Требование к паролям:
Пароли должны быть более 7 символов;
Пароли не должны быть одинаковыми у krbadmin и стэша (они должны отличаться друг от друга);
Пароли должны содержать заглавные и строчные буквы (A-Z и a-z) и цифры (0-9).
После внесния паролей нажмите кнопку «Далее».
Внесите данные администратора, под которыми будет осуществлен первоначальный вход.
Требование к паролям:
Пароли должны быть более 7 символов;
Пароли должны содержать заглавные и строчные буквы (A-Z и a-z) и цифры (0-9).
Для продолжения нажмите кнопку «Далее».
В появившемся окне проверьте правильность созданной учетной записи администратора:
UPN.
Отображаемое имя.
Email.
Нажмите кнопку «Далее».
Создание учетной записи администратора завершено. Вход в WEB-интерфейс MULTIDIRECTORY будет осуществлен автоматичекси.
Обновление MULTIDIRECTORY
Важно!
Для обновления на версию 2.5.2 необходимо обновить и запустить setup.sh
Чтобы обновить вашу MULTIDIRECTORY, ипользуйте следующие шаги:
Linux
Windows(PowerShell)
Скачайте файлы docker-compose.yml, traefik.yml и setup.sh
docker compose down; docker compose pull; docker compose up -d
Проверка логирования сервисов и контейнеров
Расширенное логирование
Если вы хотите, чтобы логи передавались в расширеном формате, то в файле .env укажите формат логирования:
DEBUG=1
После добавления расширенного логирования перезагрузите сервисы командой:
docker compose down; docker compose up -d
Проверка логирования контейнеров
Просматривать логи контейнеров вы можете обращаясь к контейнеру по его имени, или же по ID. Для просмотра имен и ID контейнеров воспользуйтесь командой:
docker ps
Для просмотра логов по имени контейнера в реальном времени используйте команду:
docker logs -f CONTAINER NAME # вместо CONTAINER NAME укажите имя контейнера, указанного в соответсвующим столбце.
Для просмотра логов по ID контейнера в реальном времени используйте команду:
docker logs -f CONTAINER ID # вместо CONTAINER NAME укажите имя контейнера, указанного в соответсвующим столбце.
Просмотр файлов логирования MULTIDIRECTORY
Файлы логирования MULTIDIRECTORY располагаются в каталоге /MultiDirectory/logs. Записываются 4 вида файлов логирования в следующем формате:
admin_dd-mm-yyyy.log — в данный файл ведется логирование действий в WEB-интерфейсе администратора.
kadmin_dd-mm-yyyy.log — в данный файл ведется логирование Kerberos (если он ранее был настроен).
ldap_dd-mm-yyyy.log — в данный файл ведется логирование действий по протоколам ldap и ldaps.
mfa_dd-mm-yyyy.log — в данный файл ведется логирование двухфакторной аутентификации (если ранее она была настроена).
Для просмотра файла логирования вы можете использовать команду:
tail -f admin_dd-mm-yyyy.log # файл admin используется как пример
Проверка версии MULTIDIRECTORY
Проверка версии в web-интерфейсе
Для проверки версии в web-интерфейсе нажмите на значок шестеренки и выберите пункт «Настройка MULTIDIRECTORY».
В открывшемся окне выберите пункт «О программе».
Проверка версии на сервере
Для проверки версии MULTIDIRECTORY в контейнере Docker используйте команду:
docker image inspect ghcr.io/multidirectorylab/multidirectory | grep VERSION
Ответ: Неправильное имя сертификатов или их отсутствие. Проверьте папку ./certs. Файлы сертификатов должны строго называться:
cert.pem
privkey.pem
Шаги для генерации или добавления сертификатов описаны ниже.
Вопрос: Контейнеры multidirectory-ldap-server-* не запускаются (статус «Error») В логах:
File "/app/ldap_protocol/server.py", line 176, in _read_acme_cert
raise acme_exc from err
SystemError: Let's Encrypt certificate not found. The `acme.json` file might not have been generated or lacks certificate details.
This can also occur if the certificate failed to generate for localhost, as Let's Encrypt only issues certificates for public domains.
Try deleting and recreating the `acme.json` file, or consider using a self-signed certificate for local environments or closed networks.
Ответ: Проблема с генерацией сертификата. Выполните:
Перейдите в папку ../MultiDirectory/.
Выполните команду для генерации сертификата (замените your-domain.ru на имя вашего домена):