Top.Mail.Ru
Перейти к основному содержимому

Установка и настройка MultiDirectory

Общая информация

В статье описывается установка и первоначальная настройка WEB-интерфейса службы каталогов MULTIDIRECTORY.

Архитектура работы решения

Описание
1Пользователи и сервисы, которые используют Kerberos для аутентификации. Подключаются к порту 88 для работы с Kerberos.
2Пользователи взаимодействуют с системой через клиентов LDAP. Эти клиенты могут быть различными приложениями или устройствами, которые используют протокол LDAP для доступа к данным и сервисам в системе.
3Администраторы системы используют web-приложение для управления и конфигурирования системы в web-интерфейсе.
4Контейнеризация всех компонентов службы каталогов происходит при помощи Docker'a.
5Traefik является обратным прокси-сервером, который маршрутизирует запросы от пользователей, администраторов и автоматизированных систем к соответствующим внутренним сервисам. Он обеспечивает балансировку нагрузки, безопасность и управление маршрутизацией.
6Центр распределения ключей, который управляет аутентификацией по протоколу Kerberos.
7MULTIDIRECTORY Admin API выполняет роль серверного компонента, который отвечает за обработку запросов от административного интерфейса и запросов от систем автоматизации. Этот компонент обеспечивает все необходимые функции для безопасного и эффективного управления данными LDAP через административный интерфейс.
8Представляет компонент для загрузки веб интерфейса, который позволяет управлять службой каталогов, создавать пользователей, настраивать политики доступа и управлять учетными записями клиентов.
9Административный сервис управления Kerberos сервером.
10LDAP-сервер реализует протокол Lightweight Directory Access Protocol (LDAP), хранит и обрабатывает поступающие от пользователей запросы в каталоге данных. Он отвечает за идентификацию, аутентификацию и авторизацию пользователей, определяя права доступа на основе атрибутов и членства в группах.*
* LDAP - сервер представляет собой 4 сервиса в виде отдельных контейнеров, обеспечивая большую производительность и отказоустойчивость - на схеме представлен в виде одного блока.
11DNS-сервер для разрешения доменных имен.
12PostgreSQL является системой управления базами данных. База данных MULTIDIRECTORY хранит настройки конфигурации системы, данные службы каталогов, такие как информация о пользователях, группах, организационных единицах и т.д., а также другие важные данные.
Требования для установки каталога MultiDirectory
  • Компонент устанавливается на Linux-сервер, протестирован на Ubuntu, Debian, Astra.
  • Минимальные параметры сервера, рассчитанного на тысячу пользователей: 5 CPU, 10 GB RAM, 50 GB HDD.
  • Необходимо зарегистрировать домен и сопоставить его с IP вашего сервера.
  • В случае использования локального домена, необходимы сертификаты для SSL/TLS. Объект сертификата должен совпадать с доменным именем, по которому будет доступен веб-интерфейс.
Важно

Необходим статический IP-адрес. Пример: ваш_домен.ru -> 255.255.255.255.

При использовании локальной доменной записи необходимо добавить запись на ваш DNS-сервер со ссылкой на IP-адрес машины, где устанавливается MultiDirectory.

Пример: srv01.domain.ru -> 10.0.0.20

Для работы MULTIDIRECTORY необходимо произвести установку Docker и Docker-Compose.

MULTIDIRECTORY используют следующие репозитории:

Обратите внимание

Все сервисы работают при помощи 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.

Работа с паролями для учетных записей

С MULTIDIRECTORY работают два вида второго фактора:

  • Push-уведомления.
  • OTP-токен.

Когда срабатывают Push и OTP

Push-уведомление

Срабатывает в том случае, если:

  • в конце пароля отсутствуют цифры.
  • последним символом пароля является буква или спецсимвол.
  • в конце пароля есть цифры, но их количество меньше 6.

OTP-токен

Срабатывает в том случае, если:

  • в пароле для учетной записи последние 6 или более символов – цифры (в случае если в конце пароля стоит более 6 цифр – в OTP будут использоваться последние шесть).

Видеоинструкция по установке и настройке MultiDirectory

Создайте папку, в которой будет храниться MULTIDIRECTORY.

mkdir MultiDirectory; cd MultiDirectory;

Скачайте и сгенерируйте конфигурационный .env-файл при помощи:

bash <(curl https://raw.githubusercontent.com/MultiDirectoryLab/MultiDirectory/main/.package/setup.sh);
wget -O docker-compose.yml https://github.com/MultiDirectoryLab/MultiDirectory/releases/download/v2.3.0/docker-compose.yml;
wget -O traefik.yml https://github.com/MultiDirectoryLab/MultiDirectory/releases/download/v2.3.0/traefik.yml;
curl https://raw.githubusercontent.com/MultiDirectoryLab/MultiDirectory/main/LICENSE

Файл конфигурации ./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
Обратите внимание!

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.3.0 необходимо обновить и запустить setup.sh

Чтобы обновить вашу MULTIDIRECTORY, ипользуйте следующие шаги:

Скачайте файлы docker-compose.yml, traefik.yml и setup.sh

wget -O setup.sh https://raw.githubusercontent.com/MultiDirectoryLab/MultiDirectory/main/.package/setup.sh;
wget -O docker-compose.yml https://github.com/MultiDirectoryLab/MultiDirectory/releases/download/v2.3.0/docker-compose.yml;
wget -O traefik.yml https://github.com/MultiDirectoryLab/MultiDirectory/releases/download/v2.3.0/traefik.yml

Перезапустите контейнеры:

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

Проверка версии при помощи API

Для проверки версии MULTIDIRECTORY через API перейдите по ссылке https://your-domain.ru/api/docs

примечание

Замените «your-domain.ru» на имя вашего домена.


Вопросы и ответы

Вопрос: Как обновить сертификаты Kerberos?
Ответ:

  • Удалите старые сертификаты krbcert.pem и krbkey.pem в папке ../MultiDirectory/certs/.
  • Перезагрузите MULTIDIRECTORY командой:
docker compose down; docker compose up -d

Вопрос: Контейнер traefik_certs_dumper выдает ошибку:

ERROR | extra.dump_acme_certs:dump_acme_cert.39 - Error loading TLS certificate, exiting...

Ответ: Неправильное имя сертификатов или их отсутствие. Проверьте папку ./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 на имя вашего домена):
openssl req -nodes -new -x509 -keyout ./certs/privkey.pem -out ./certs/cert.pem -subj '/C=RU/ST=Moscow/L=Moscow/O=Global Security/OU=Multifactor/CN=your-domain.ru'

Вопрос: Я хочу чтобы MultiDirectoy работала с моим сертификатом, что мне для этого нужно сделать?
Ответ: Для добавления самоподписанных сертификатов выполните следующие действия:

  • В файле traefik.yml закомментируйте следующие строки:
    # certificatesResolvers:
    # md-resolver:
    # acme:
    # tlschallenge: true
    # email: support.md@multifactor.com
    # storage: /letsencrypt/acme.json
    P.S.: названия сертификатов обязательно должны быть:
    • privkey.pem
    • cert.pem

Вопрос: Я хочу, чтобы MultiDirectory работала с моим сертификатом
Ответ: Для добавления самоподписанных сертификатов:

  1. В файле traefik.yml закомментируйте строки:
# certificatesResolvers:
# md-resolver:
# acme:
# tlschallenge: true
# email: support@multifactor.com
# storage: /letsencrypt/acme.json
  1. Названия сертификатов обязательно должны быть:
    • privkey.pem
    • cert.pem

Вопрос: Контейнер при запуске возвращает ошибку "137"
Ответ: Для устранения выполните одно из действий:

  • Добавьте Swap-файл в папку MULTIDIRECTORY (пример инструкции);
  • Увеличьте объем ОЗУ;
  • Очистите память от сторонних процессов.

Вопрос: Я хочу добавить сертификат для ldaputil (только для Let's Encrypt)
Ответ:

  1. Загрузите сертификат и обновите хранилище:
wget -O /usr/local/share/ca-certificates/isrgrootx1.crt https://letsencrypt.org/certs/isrgrootx1.pem
update-ca-certificates
  1. В файл ldap.conf добавьте строку:
TLS_CACERT /etc/ssl/certs/isrgrootx1.pem

Вопрос: При работе в веб-интерфейсе меня перенаправляет на страницу входа (установлено на виртуализации: QEMU, Proxmox и т.п.)

Ответ:

  1. Посмотрите логи контейнера dragonfly.
  2. Если есть ошибка:
An attept to execute an istruction failed. The root cause might be an old hardware. Exiting...

То необходимо установить тип виртуализации CPU: host / host passthrough.