Centos + LDAP. Или отказоустойчивый кластер авторизации LDAP.

kolbosa.kz

Всем привет. Сегодня я расскажу вам, как из openLDAP собрать отказоустойчивый и легко масштабируемый кластер LDAP авторизации. Не для кого не секрет, что идеальным средством хранения учетных записей на сервере проверки авторизации, в силу ряда причин, является LDAP, минусом которого является то, что мало кто точно знает, как же эта штуковина работает и как ее настроить, я постараюсь объяснить основные элементы и описать процедуру настройки, отказоустойчивого кластера авторизации на openLDAP, но для начала немного теории.

Что такое LDAP и с чем его едят.

LDAP (Lightweight Directory Access Protocol— «облегчённый протокол доступа к каталогам») — относительно простой протокол, использующий IP/TCP и позволяющий производить аутентификации, поиск, сравнения, а также операции добавления, изменения или удаления записей. Обычно LDAP-сервер принимает входящие соединения на порт 389 по протоколам TCP или UDP для сеансов SSL, обычно используется порт 636. Технически, LDAP — это протокол определяющий методы доступа к каталогу. Он также определяет и описывает, как данные представлены в службе каталогов, а так же каким образом данные загружаются и выгружаются из службы каталогов (с использованием LDIF). LDAP не является БД и не отвечает за процесс хранения и манипулирование данными. За данные процедуры отвечают БД выступающие в роли back-end (в наше случае это BerkeleyDB — высокопроизводительная встраиваемая база данных, реализованная в виде библиотеки. BDB является нереляционной базой данных— она хранит пары ключ/значение как массивы байтов и поддерживает множество значений для одного ключа, может обслуживать тысячи процессов или потоков, одновременно.)

LDAP определяет четыре модели, я кратенько их перечислю, но по сути она не особо нужна для понимания.

  1. Информационная модель: определяет, каким образом данные представлены в DB. Как я уже писал, вопрос самой DB лежит за пределами LDAP.

  2. Модель именования: иерархическая структура хранения записей, определяет все, например ‘dc=kolbosa, dc=kz’.

  3. Функциональная модель: используется при поиске, чтении, записе или модификации LDAP

  4. Модель безопасности: ну тут все понятно, вопрос довольно сложный. Особо углубляться пока не будем, но стоит отметить, что процедура такая — Ваш пароль передается в открытом виде на сервер, там хэшируется и сравнивается с хранимым (опасненько!). Как нибудь поделюсь, как же это решить.

ldap kolbosa.kz

Вообщем принцип LDAP – “один раз записал — много раз прочитал”.

Так почему же нужно использовать LDAP? Вот список ключевых характеристик, которые как бе невелируют минусы сложности работы с LDAP.

  1. LDAP обладают унифицированным доступом к базе, как локально так и удаленно. Так что, вполне реально заменить один сервер LDAP на дрогой, без каких то геморроев. Реляционные СУБД позволяют использовать стандартизированные запросы (SQL), в то время как способы подключения к БД остаются уникальными для каждой СУБД.

  2. Поскольку в LDAP используются стандартизированные методы доступа к данным, клиенты и серверы могут быть разнообразными. С великого множества источников, мне кажется, что любая уважающая себя система, должна иметь коннектор LDAP и в большинстве случаев имеет. LDAP может быть использован для представления данных, содержащихся в ориентированных на транзакции БД, в нашем случае выполнения пользовательских запросов, позволяя прозрачно (для запросов LDAP) обращаться к разным поставщикам транзакционных БД.

  3. LDAP предоставляет метод, посредством которого данные могут быть перемещены в несколько мест, не изменяя при этом модели внешнего доступа к ним. Используя метод отсылок LDAP, данные могут быть перемещены на альтернативные LDAP-сервера путём изменения конфигурации самого сервера. Собственно об этом и пойдет речь.

Это если кратко :). По ходу пьесы, я буду рассказывать более подробно мелкие особенности и нюансы. Ну, с богом. В своем случае я использовал RHEL 6 с зашифрованными разделами, но я надеюсь, у вас не на столько суровые требования к безопасности. И так, у нас будет Centos 6 x86_64 minimal, ОЗУ 1024 Mb, HDD 20 Gb, этого более чем достаточно, для базы пользователей в 400-500. Так что нам за глаза :)

Ставим все необходимое

Я буду ставить все из исходников, ввиду того, что поставив последнюю версию openLdap из репозиториев я немного офигел — они переделали процедуру конфигурирования. Покапавшись минут 10-20, я нифига не понял… И решил делать по старинке, как говориться — старый конь…

Небольшая справка

Berkeley DB — высокопроизводительная встраиваемая БД, выполненная в виде библиотеки. BDB является нереляционной базой данных. BDB может обслуживать тысячи процессов или потоков, одновременно. Может обслуживать БД размером в 256 терабайт.

Давайте рассмотрим схему которую будем строить.

ldap kolbosa.kz
У нас имеется два мастера (MASTER1 и MASTER2) и реплики (количество не ограниченно, но в нашем случае три для каждого мастера). Различие между мастером и репликой очевидно: мастер — запись и чтение, реплика — только чтение, т.е. сервис проверки авторизации должен подключаться к реплике (в нашем случае к балансировщику), а сервис создания аккаунтов к мастеру. В случае падения любого элемента схемы, другие замещают его и после восстановления работоспособности — синхронизируются. По сути, данная схема может быть модернизирована под ваши, конкретные требования, так как, по сути, состоит из блоков. Так же, данный способ репликации является основополагающим для типа репликации N-Way Multi-Master — при такой конфигурации любое количество главных серверов может синхронизироваться друг с другом, но об этом способе я напишу как-нибудь потом. И так — начнем с MASTER.

system-auth-ac — конфигурационный для PAM. Каждая составляющая операционной системы, требующая аутентификации (telnet server, ftp server, web server и т.д. и т. п.) имеет специальный встроенный код. В нынешнее время мы используем подключаемые модули аутентификации (“Pluggable Authentication Modules”). В LDAP – окружении, РАМ — модуль используется LDAP сервером для аутентификации пользователей. РАМ поддерживается как NIX, так и Windows.

Ну а теперь самое главное — настраиваем LDAP
/usr/local/openldap/etc/openldap/slapd.conf

Теперь редактируем ldap.conf, для мастера.
/usr/local/openldap/etc/openldap/ldap.conf

Теперь настраиваем второй мастер…

Собственно все точно так же.

/usr/local/openldap/etc/openldap/slapd.conf

С мастерами усе ))) Приступаем к репликам. 

Теперь ldap.conf
/usr/local/openldap/etc/openldap/ldap.conf

Проверяем? Проверяем.
Запускаем службы

Коннектимся на MASTER1 и создаем там какую нибудь запись. Под windows у нас есть «LDAP Admin» под linux «Apache Directory Studio». Коннектимся на MASTER2 и смотрим есть ли там эта запись, смотрим на реплики… Все ок? Отключаем один из мастеров и удаляем с другого эту запись. Пускаем заново, смотрим… Запись пропала? Если да, то я вас поздравляю с настройкой отказоустойчивого кластера LDAP.

Осталось накидать какой нибудь скриптик, для удобного запуска служб ну и как то объединить их… А собственно вот:

С запуском решили. Теперь проблема с объединением, на мой взгляд самый простой и логичный способ это единый IP для мастеров и для реплик.

Создадим у каждого мастера виртуальный интерфейс.

Пропишем правило iptables

Разберём наше правило, все описывать не буду, только важное:

-j CLUSTERIP - над этими пакетами выполняется действие CLUSTERIP.
–new - указывает что это первое правило для данного кластерного ip-адреса.
–hashmode - задаёт режим распределения соединений между серверами кластера. Может быть sourceip, sourceip-sourceport или sourceip-sourceport-destport.
–clustermac - задаёт mac-адрес кластера. Это должен быть мультикастинговый mac.
–total-nodes - задаёт количество нод в кластере.
–local-node - задаёт номер ноды в кластере — ОН РАЗЛИЧЕН ДЛЯ КАЖДОГО НОДА.
–hash-init - задаёт целое положительное число, необходимое для инициализации хэша. Для каждого нода ОДИНАКОВО.

Теперь скриптик, для переключения при отказе сервиса.

Данный скрипт использует файл с параметрами по адресу
/usr/clusterip

Процедура зеркальна для второго мастера и повторяется, для каждой группы реплик.
Собственно все, если вы разобрались в процедуре настройки, то я вас уже уважаю… Ибо LDAP такой LDAP.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Перед отправкой формы:
Human test by Not Captcha