Включение SSL в репликации OpenLDAP

Вопрос или проблема

Можете объяснить, как я могу изменить текущую конфигурацию для olcSyncRepl?

У меня следующая ситуация:

  1. Я настроил главный LDAP-сервер и подчиненный сервер
  2. Я настроил репликацию между этими двумя серверами (все работает)
  3. У меня есть следующая конфигурация для подчиненного клиента:
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
  provider=ldap://10.101.11.130:389/
  bindmethod=simple
  binddn="uid=rpuser,dc=itzgeek,dc=local"
  credentials=root1234
  searchbase="dc=itzgeek,dc=local"
  scope=sub
  schemachecking=on
  type=refreshAndPersist
  retry="30 5 300 3"
  interval=00:00:05:00

И я хочу добавить:

  1. Учетные данные не в виде простого текста (хочу добавить {SSHA}….)
  2. Добавить сертификаты (я также включил ldaps с самоподписанными сертификатами .crt и .key)

Я хотел бы получить советы о том, как безопасно это настроить и изменить. Я не хочу портить текущие настройки сервера. Например, как я могу изменить IP-адрес текущего главного сервера? Если кто-то ответит, я смогу протестировать остальные изменения настроек.

PS

Я знаю, что можно модифицировать файлы в /etc/openldap/slapd.d/cn=config, но можете ли вы рассказать, как я могу использовать файлы LDIF и ldapi для обновления конфигурации?

В качестве примера я публикую директивы syncrepl, используемые в Æ-DIR:

olcSyncrepl: rid=001
  provider=ldaps://ae-dir-p1.example.com
  bindmethod=sasl
  saslmech=EXTERNAL
  starttls=no
  tls_cert="/opt/ae-dir/etc/tls/ae-dir-c1.example.com.crt"
  tls_key="/opt/ae-dir/etc/tls/ae-dir-c1.example.com.key"
  tls_cacert="/opt/ae-dir/etc/tls/my-ae-dir-testca-2017-06.pem"
  tls_reqcert=demand
  crlcheck=none
  filter="(objectClass=*)"
  searchbase="dc=ae-dir,dc=example,dc=org"
  scope=sub
  schemachecking=on
  type=refreshAndPersist
  retry="30 +"

Прежде всего, вы не должны использовать IP-адрес в LDAP URL для provider=. Вместо этого получите корректно выданный TLS-сертификат сервера для имени хоста, и тогда OpenLDAP slapd выполнит корректную проверку TLS-имени хоста, чтобы предотвратить атаки MITM (см. RFC 6125).

Я предполагаю, что у вас настроен TLS на ваших провайдерских и клиентских инстанциях. Указанная выше конфигурация syncrepl использует уже настроенный TLS серверный сертификат также в качестве TLS клиентского сертификата для репликации.

В случае TLS-клиентских сертификатов результирующая идентификация (authc-DN) — это DN субъекта в клиентском сертификате. Вы можете захотеть сопоставить это с идентификацией авторизации (authz-DN) существующей записи LDAP. Это может быть достигнуто путем добавления olcAuthzRegexp в cn=config следующим образом:

olcAuthzRegexp:
  "(cn=[^,]+,OU=ITS,O=My Org)"
  "ldap:///dc=ae-dir,dc=example,dc=org??sub?(&(objectClass=pkiUser)(seeAlso=$1)(seeAlso:dnSubordinateMatch:=OU=ITS,O=My Org)(aeStatus=0))"

С помощью вышеуказанного DN субъекта, оканчивающегося на OU=ITS,O=My Org, будет сопоставлено с записью LDAP с классом объекта pkiUser с DN субъекта клиентского сертификата, хранящегося в атрибуте seeAlso, например:

dn: uid=ae-dir-slapd_ae-dir-deb-c1,cn=ae,dc=ae-dir,dc=example,dc=org
aeStatus: 0
cn: ae-dir-slapd_ae-dir-deb-c1
memberOf: cn=ae-replicas,cn=ae,dc=ae-dir,dc=example,dc=org
objectClass: account
objectClass: aeObject
objectClass: aeService
objectClass: pkiUser
objectClass: posixAccount
seeAlso: cn=ae-dir-c1.example.com,OU=ITS,O=My Org
[..]

Вы можете затем правильно авторизовать эту пользовательскую сервисную запись, в приведенном выше примере через LDAP группу ae-replicas.

Ответ или решение

Для того чтобы включить SSL на репликации OpenLDAP, необходимо внести некоторые изменения в текущую конфигурацию, с учетом безопасности и надежности. Давайте рассмотрим методологию, примеры и примеры применения для решения вашей задачи.

Теория

SSL (или TLS) — это протокол, обеспечивающий конфиденциальность и безопасность передачи данных между клиентом и сервером. В случае репликации LDAP, применение SSL позволит защитить данные, которые передаются между главным и второстепенным серверами, от перехвата и вмешательства злоумышленников.

Для этого необходимо:

  1. Изменить адрес провайдера на использование ldaps:// вместо ldap://, что указывает на использование защищенного соединения.
  2. Использовать клиентские сертификаты для аутентификации, которые обеспечат дополнительный уровень безопасности.
  3. Не хранить пароли в открытом виде, а использовать хеширование (например, {SSHA}).

Пример

Ваш текущий пример настройки:

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
  provider=ldap://10.101.11.130:389/
  bindmethod=simple
  binddn="uid=rpuser,dc=itzgeek,dc=local"
  credentials=root1234
  searchbase="dc=itzgeek,dc=local"
  scope=sub
  schemachecking=on
  type=refreshAndPersist
  retry="30 5 300 3"
  interval=00:00:05:00

Должен быть модифицирован следующим образом для включения SSL:

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSyncRepl
olcSyncRepl: rid=001
  provider=ldaps://your-master-ldap-server.example.com
  bindmethod=sasl
  saslmech=EXTERNAL
  tls_cert="/path/to/your/certificate.crt"
  tls_key="/path/to/your/private.key"
  tls_cacert="/path/to/your/ca.cert"
  tls_reqcert=demand
  searchbase="dc=itzgeek,dc=local"
  scope=sub
  schemachecking=on
  type=refreshAndPersist
  retry="30 5 300 3"
  interval=00:00:05:00

Теперь перейдем к хешированию пароля и использованию SSL-параметров.

Применение

  1. Хеширование пароля: используйте утилиты OpenLDAP для создания хеша. Например:

    slappasswd -h {SSHA}

    После запуска, введите ваш пароль и получите значение, которое будет выглядеть примерно так: {SSHA}d2FsdCBlbmNvZGVkIHBhc3N3b3Jk.

  2. Конфигурация SSL: Вам нужно сгенерировать самоподписанные сертификаты или использовать существующие, выпущенные вашим CA. Убедитесь, что:

    • Главный сервер имеет сертификат для ldaps://.
    • Второстепенный сервер имеет доступ к этому сертификату.
  3. Замена IP на DNS-имя: Для увеличения уровня безопасности, используйте DNS-имена вместо IP-адресов. Это позволит OpenLDAP проверять, совпадает ли имя в сертификате с именем хоста, предотвращая атаки типа MITM.

  4. Редактирование конфигурации через LDIF: Используйте команду ldapmodify для применения изменений через LDIF. К примеру:

    ldapmodify -H ldapi:/// -Y EXTERNAL -f modify.ldif

    Где modify.ldif содержит ваши изменения в формате LDIF.

  5. Добавление olcAuthzRegexp: Это необходимо, чтобы сопоставить идентификатор аутентификации из сертификата с DN в LDAP, тем самым обеспечивая правильные права доступа. Этот параметр добавляется в cn=config.

Это руководство поможет вам настроить безопасную репликацию OpenLDAP с использованием SSL/TLS и защищенной аутентификации. Не забывайте тестировать все изменения в тестовой среде перед применением их в производственной, чтобы избежать простоев и возникновения ошибок.

Оцените материал
Добавить комментарий

Капча загружается...