Вопрос или проблема
Можете объяснить, как я могу изменить текущую конфигурацию для olcSyncRepl?
У меня следующая ситуация:
- Я настроил главный LDAP-сервер и подчиненный сервер
- Я настроил репликацию между этими двумя серверами (все работает)
- У меня есть следующая конфигурация для подчиненного клиента:
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
И я хочу добавить:
- Учетные данные не в виде простого текста (хочу добавить {SSHA}….)
- Добавить сертификаты (я также включил 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 позволит защитить данные, которые передаются между главным и второстепенным серверами, от перехвата и вмешательства злоумышленников.
Для этого необходимо:
- Изменить адрес провайдера на использование
ldaps://
вместоldap://
, что указывает на использование защищенного соединения. - Использовать клиентские сертификаты для аутентификации, которые обеспечат дополнительный уровень безопасности.
- Не хранить пароли в открытом виде, а использовать хеширование (например,
{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-параметров.
Применение
-
Хеширование пароля: используйте утилиты OpenLDAP для создания хеша. Например:
slappasswd -h {SSHA}
После запуска, введите ваш пароль и получите значение, которое будет выглядеть примерно так:
{SSHA}d2FsdCBlbmNvZGVkIHBhc3N3b3Jk
. -
Конфигурация SSL: Вам нужно сгенерировать самоподписанные сертификаты или использовать существующие, выпущенные вашим CA. Убедитесь, что:
- Главный сервер имеет сертификат для
ldaps://
. - Второстепенный сервер имеет доступ к этому сертификату.
- Главный сервер имеет сертификат для
-
Замена IP на DNS-имя: Для увеличения уровня безопасности, используйте DNS-имена вместо IP-адресов. Это позволит OpenLDAP проверять, совпадает ли имя в сертификате с именем хоста, предотвращая атаки типа MITM.
-
Редактирование конфигурации через LDIF: Используйте команду
ldapmodify
для применения изменений через LDIF. К примеру:ldapmodify -H ldapi:/// -Y EXTERNAL -f modify.ldif
Где
modify.ldif
содержит ваши изменения в формате LDIF. -
Добавление olcAuthzRegexp: Это необходимо, чтобы сопоставить идентификатор аутентификации из сертификата с DN в LDAP, тем самым обеспечивая правильные права доступа. Этот параметр добавляется в
cn=config
.
Это руководство поможет вам настроить безопасную репликацию OpenLDAP с использованием SSL/TLS и защищенной аутентификации. Не забывайте тестировать все изменения в тестовой среде перед применением их в производственной, чтобы избежать простоев и возникновения ошибок.