понедельник, 23 мая 2011 г.

Отказоустойчивый кластер Open LDAP c репликацией данных по шифрованному соединению

Хотел бы пролить свет на построение высокой отказоустойчивости сервиса LDAP, используя два сервера в режиме репликации Multi-Master (MirrorMode). Режим Multi-Master предоставляет гарантированную репликацию master-master, а также обеспечивает высокую доступность между несколькими master серверами.  Обе системы приведенных в статье, установлены и сконфигурированы с программным обеспечением OpenLDAP в режиме репликации Multi-Master. Этот режим также называется Active - Active Hot-Standby. Для необходимой балансировки нагрузки между серверами LDAP, необходим внешний сервер либо устройство для управления активными нодами и их автоматического переключения (failover). В данном проекте роль балансировщика будет исполнять DNS сервер. В случае необходимости использования другого программного продукта, существует рекомендация использовать Linux LVS либо коммерческое решение от компании Red Hat – Cluster Suite для автоматической активации вторичного master-сервера в случаях, когда первичный выходит из строя. Настройка этих продуктов выходит за рамки даной статьи.



Объект
Сервер LDAP 1
Сервер LDAP 2
1
base object
dn=dc=ldap,dc=domain,dc=com
dn=dc=ldap,dc=domain,dc=com
2
rootpw
Passw0rd
Passw0rd
3
rootdn
cn=Manager,dc=ldap,dc=domain,dc=com
cn=Manager,dc=ldap,dc=domain,dc=com
4
eth0 IP адрес
192.168.7.54
192.168.7.55
5
Каталог конфигурационных файлов Open LDAP
/etc/openldap2.4/
/etc/openldap2.4/
5
Основной конфигурационный файл
/etc/opendap2.4/slapd.conf
/etc/opendap2.4/slapd.conf
6
Mirror Mode Replication Server ID
1
2
7
Версия Open LDAP
2.4.22
2.4.22


Установка необходимых пакетов (Установка RPM пакетов их зависимостей)

Режим репликации Multi-Master доступен только в версии релизов Open LDAP 2.4.x. В настоящее время Red Hat предоставляет пакеты только с версией релизов 2.3.x. Open LDAP 2.4 RPM скачаны по этому адресу http://staff.telkomsa.net/packages/rhel5/openldap/ и установлены на оба сервера.

Требуемые и установленные RPM файлы , приведены ниже :
• lib64ldap2.4_2-2.4.22-1.el5.x86_64.rpm
• openldap2.4-2.4.22-1.el5.x86_64.rpm
• openldap2.4-clients-2.4.22-1.el5.x86_64.rpm
• openldap2.4-extra-schema-2.4.22-1.el5.x86_64.rpm
openldap2.4-servers-2.4.22-1.el5.x86_64.rpm

Установить данные пакеты, можно командами:

# rpm -i *.rpm               (При перманентном скачивании пакетов)
# yum install *ldap2.4* -y   (При добавление репозитария)

Требуемые RPM зависимости для вышеописанных пакетов :
libtool-ltdl
unixODBC

Установить данные пакеты, можно командами:

# yum search libtool=ltd
# yum seach unixODBC

Из вывода поиска команды
yum search
, выберите необходимые пакеты и воспользуйтесь командой установки

Создание сертификатов для организации шифрованного соединения

Весь трафик репликации будет шифроваться. В этом проекте сервера используют сертификаты, подписанные одним CA. Это обеспечивает дополнительную защиту и позволяет клиенту репликации доверять серверу. Создаем сертификаты для каждого сервера. Если в организации уже имеется CA, то просто создаем по сертификату для каждого из серверов.  Сертификаты должны быть без пароля. Если же CA в организации нет - создаем свой:

Создаем рабочие каталоги:

# mkdir  /var/db/certs/
# mkdir  /var/db/certs/keys
# mkdir  /var/db/certs/requests
# cd     /var/db/certs/

Генерируем ключ для CA. Вводим пароль для CA

# openssl genrsa -des3 -out keys/ca.key 2048
Создаем самоподписанный CA сертификат, заполняем все поля по желанию - от них ничего не зависит.


# openssl req -new -x509 -days 3650 -key keys/ca.key -out ca.crt

Создаем ключ для сервера enio.domain.com :

# openssl genrsa -out keys/enio_ldap.key 2048

Создаем запрос на подпись сертификата сервера enio.domain.com, Внимательно заполняем все поля, в поле Common Name пишем DNS адрес сервера - enio.domain.com, пароль не вводим, т.е просто жмем enter:

# openssl req -new -key keys/enio_ldap.key -out requests/enio_ldap.csr

Подписываем сертификат, вводим пароль для CA:

# openssl x509 -req -days 3650 -in requests/enio_ldap.csr -CA ca.crt -CAkey keys/ca.key -CAcreateserial -out enio_ldap.crt

Создаем ключ для сервера pemfredo.domain.com:

# openssl genrsa -out keys/pemfredo_ldap.key 2048
  
Создаем запрос на подпись сертификата сервера pemfredo.domain.com, Внимательно заполняем все поля, в поле Common Name пишем DNS адрес сервера - pemfredo.domain.com, пароль не вводим, т.е просто жмем enter:

# openssl req -new -key keys/pemfredo_ldap.key -out requests/pemfredo_ldap.csr

Подписываем сертификат, вводим пароль для CA:

# openssl x509 -req -days 3650 -in requests/pemfredo_ldap.csr -CA ca.crt -CAkey keys/ca.key -CAcreateserial -out pemfredo_ldap.crt

Ок, сертификаты готовы, теперь на серверах enio и pemfredo создаем необходимые каталоги:

# mkdir /var/db/certs
# mkdir /var/db/certs/keys

В каталог /var/db/certs кладем сертификаты  ca.crt и enio_ldap.crt (pemfredo_ldap.crt для сервера pemfredo)
В каталог /var/db/certs/keys кладем ключ  pemfredo_ldap.key ( enio_ldap.key для сервера pemfredo)

Задаем права на сервере
enio:

# chown ldap:ldap /var/db/certs/enio_ldap.crt
# chown ldap:ldap /var/db/certs/keys/enio_ldap.key
# chmod 0400 /var/db/certs/enio_ldap.crt
# chmod 0400 /var/db/certs/keys/enio_ldap.key
# chmod 444 /var/db/certs/ca.crt

Задаем права на сервере pemfredo:

# chown ldap:ldap /var/db/certs/pemfredo_ldap.crt
# chown ldap:ldap /var/db/certs/keys/pemfredo_ldap.key
# chmod 0400 /var/db/certs/pemfredo_ldap.crt
# chmod 0400 /var/db/certs/keys/pemfredo_ldap.key
# chmod 444 /var/db/certs/ca.crt


Конфигурирование Open LDAP в режиме репликации Multi-Master и корневой каталог

Описание
LDAP сервер 1 enio.domain.com
( /etc/openldap2.4/slapd.conf )
LDAP сервер 2 pemfredo.domain.com
( /etc/openldap2.4/slapd.conf )

Значение rootpw для базы данных, генерируемое утилитой slappasswd2.4. Настоящий пароль установлен как: Passw0rd на обоих серверах.

database  bdb
suffix    "dc=ldap,dc=domain,dc=com"
rootdn    "cn=Manager,dc=ldap,dc=domain,dc=com"
rootpw    {SSHA}79LrbNJ435tC6mgn1ZsEA7BF8CpwagBN
directory /var/lib/ldap2.4
database  bdb
suffix    "dc=ldap,dc=domain,dc=com"
rootdn    "cn=Manager,dc=ldap,dc=domain,dc=com"
rootpw    {SSHA}79LrbNJ435tC6mgn1ZsEA7BF8CpwagBN
directory /var/lib/ldap2.4

Загрузка модулей и указание путей до необходимых модулей, требуемых для репликации

modulepath      /usr/lib64/openldap2.4
moduleload      back_bdb
moduleload      syncprov.la
modulepath      /usr/lib64/openldap2.4
moduleload      back_bdb
moduleload      syncprov.la
Описание директивы репликации Mirror Mode. Выделенная подсеть 192.168.7.0 используется для репликации между интерфейсами eth0

serverID 001
syncrepl rid=000
 provider=ldaps://pemfredo.domain.com
 type=refreshAndPersist
 retry="5 10 300 +"
 searchbase="dc=ldap,dc=domain,dc=com"
 attrs="*,+"
 bindmethod=simple
 binddn="uid=ldapsync_service,ou=systemusers,
 dc=ldap,dc=domain,dc=com"
 credentials=Passw0rd
 tls_cert=/var/db/certs/enio_ldap.crt
 tls_key=/var/db/certs/keys/enio_ldap.key
 tls_cacert=/var/db/certs/ca.crt
mirrormode TRUE
overlay syncprov
syncprov-checkpoint 100 5


serverID 002
syncrepl rid=000
 provider=ldaps://enio.domain.com
 type=refreshAndPersist
 retry="5 10 300 +"
 searchbase="dc=ldap,dc=domain,dc=com"
 attrs="*,+"
 bindmethod=simple
 binddn="uid=ldapsync_service,ou=systemusers,
 dc=ldap,dc=domain,dc=com"
 credentials=Passw0rd
 tls_cert=/var/db/certs/pemfredo_ldap.crt
 tls_key=/var/db/certs/keys/pemfredo_ldap.key
 tls_cacert=/var/db/certs/ca.crt
mirrormode TRUE
overlay syncprov
syncprov-checkpoint 100 5




Добавление базовых объектов в базу сервера LDAP. Создается файл base.ldif (Соблюдение в название имени файла необязательно)

dn: dc=ldap,dc=domain,dc=com
objectClass: dcObject
objectClass: organization
dc: ldap
o: ldap
description: Top Level for domain

dn: cn=Manager,dc=ldap,dc=domain,dc=com
ou: People
description: All People in domain
objectClass: organizationalRole
description: Administrative account for Top Level

dn: ou=People,dc=ldap,dc=domain,dc=com
ou: People
objectclass: organizationalUnit
description: for UNIX users

dn: ou=Groups,dc=ldap,dc=domain,dc=com
ou: Groups
description: All People in Organisation
objectClass: organizationalUnit
description: for UNIX groups


Применение базовых объектов к базе сервера LDAP
Используйте следующую команду на сервере LDAP 1 (enio) :

# ldapadd2.4 -x -D “cn=Manager,dc=ldap,dc=domain,dc=com” -W -f /etc/openldap2.4/base.ldif

Убедитесь в том, что службы ldap2.4 запущенны на обоих серверах, при выполнении данного действия. Базовые объекты требовательны в добавлении только к одному серверу LDAP (Зеркальная репликация автоматически добавит все объекты на второй сервер)


Добавление системного пользователя для репликации
в базу сервера LDAP. Создается файл ldapsync_service.ldif (Соблюдение в название имени файла необязательно). Пароль: Passw0rd


dn: ou=systemusers,dc=ldap,dc=domain,dc=com
objectClass: top
objectClass: organizationalUnit
ou: systemusers
description: for System user ldapsync_service

dn: uid=ldapsync_service,ou=systemusers,dc=ldap,
dc=domain,dc=com
objectClass: person
objectClass: uidObject
uid: ldapsync_service
cn: ldapsync_service
sn: ldapsync_service
userPassword: {SSHA}DfUa1r5TNlNd0fn/Yt1GnvipuPrdXX72

Применение пользователя в базу сервера LDAP
Используйте следующую команду на сервере LDAP 1 (enio) :

# ldapadd2.4 -x -D “cn=Manager,dc=ldap,dc=domain,dc=com” -W -f /etc/openldap2.4/ldapsync_service.ldif

Убедитесь в том, что службы ldap2.4 запущенны на обоих серверах, при выполнении данного действия. Базовые объекты требовательны в добавлении только к одному серверу LDAP (Зеркальная репликация автоматически добавит все объекты на второй сервер)


Собственно вот и все. Обязательно на данном этапе изучаем файлы журналов на обоих системах /var/log/ldap2.4/access.log. Далее при успешном соединении по шифрованному каналу и репликации мы уже можем создавать пользователей и подключать клиентские серверы для их аутентификации как это было описано в статье ранее - Сервер LDAP аутентификации для SSH.

Комментариев нет: