OpenLDAP 2.4 – Replikation einrichten

Im folgenden möchte ich beschreiben, wie ich in OpenLDAP 2.4 eine Replikation eingerichtet habe.

Für eine Dovecot / Postfix Installation welche die Benutzer in einem LDAP sichert nutzen wir OpenLDAP zur
Ablage der Benutzerobjekte. Damit die Umgebung auch beim Ausfall des LDAP Servers weiter funktioniert,
benötigen wir eine Replikation aller Objekte im LDAP von einem Server zu einer zweiten OpenLDAP Instanz.
Darum soll es in diesem Artikel gehen.

Die Instanzen laufen auf einem Ubuntu 14.04, das LDAP ist auf beiden Servern entsprechend dieser Anleitung
vorbereitet worden https://wiki.ubuntuusers.de/OpenLDAP_ab_Precise

Anmerkung: Dieser Artikel kommt original von hier. Ich habe diesen übersetzt, stellenweise ergänzt und
angepasst und für mich als Erinnerung aufgeschrieben.

Voraussetzungen an OpenLDAP und die Systeme

Bei einer Replikation im LDAP Umfeld redet man von „Master“ und „Consumer“, daher werden wir auch hier
diese Bezeichnungen nutzen.

In älteren OpenLDAP Versionen wurde die Konfiguration noch in eigenen Konfigurationsdateien gespeichert,
mittlerweile wird dies direkt im LDAP abgelegt. Daher müssen wir für die Replikation diese Einstellungen per
ldif Dateien in die config Partition einspielen.

Meine Beispiele gehen davon aus, das die Domäne eine Base von „dc=domain,dc=local“ hat. Der Hauptbenutzer
bei mir ist „cn=admin,dc=domain,dc=local“.
Unser Masterserver ist „ldap1.domain.local“ (IP 10.0.0.4), und der aktuell einzige Consumer ist
ldap2.domain.local“ (IP 10.0.0.5).

Weiterhin ist das Schema auf beiden Hosts identisch.
Um zu starten ist es sinnvoll, auf dem Masterserver einmal einen Export zu machen und den resultierende Dump
auf dem Consumer wieder einzuspielen. Dies geht mit OpenLDAP z.B. so:

[email protected]:~# ldapsearch -Wx -D "cn=admin,dc=domain,dc=local" -b "dc=domain,dc=local" -H ldap://master.domain.local-LLL > ldap_dump.ldif
[email protected]:~# ldapadd -Wx -D "cn=admin,dc=domain,dc=local" -H ldap://localhost -f ldap_dump.ldif

Die nötigen LDIF Scripte

Als allererstes benötigen wir auf dem Master OpenLDAP Server einen Benutzer, der alles im LDAP lesen darf.
Dieser Benutzer sollte ein userPassword erhalten, dieses erzeugen wir mit slappasswd und sollte einigermaßen
„stark“ sein, da der Benutzer sehr weitreichende Rechte im LDAP erhält.

[email protected]:~# slappasswd
New password:
Re-enter new password:
{SSHA}LHiMKOP5hNN5pmafvzrQ57lSBKQZZcck

Ich habe hier das Passwort „replication“ genutzt, wie gesagt sollte dies in einer Produktionsumgebung natürlich
ein stärkeres sein.

Dann legen wir die Datei „create_repl_user.ldif“ an mit folgendem Inhalt an:

dn: cn=ldapsync,dc=domain,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: ldapsync
userPassword: {SSHA}LHiMKOP5hNN5pmafvzrQ57lSBKQZZcck
description: LDAP replication user

Im zweiten Schritt müssen wir den Provider Service auf dem Master Server aktivieren und dem ldapsync Benutzer Lesezugriff auf das gesamte Verzeichnis geben.
Hierzu legen wir die Datei „enable_sync_prov.ldif“ mit folgendem Inhalt an:

dn: olcDatabase={1}hdb,cn=config
changetype: modify
delete: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
  by self write
  by anonymous auth
  by dn="cn=admin,dc=domain,dc=local write
  by * none
-
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
  by self write
  by dn="cn=admin,dc=domain,dc=local" write
  by dn="cn=ldapsync,dc=domain,dc=local" read
  by anonymous auth
  by * none
-
add: olcDbIndex
olcDbIndex: entryUUID eq
-
add: olcDbIndex
olcDbIndex: entryCSN eq

dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: {1}syncprov

dn: cn=config
changeType: modify
add: olcServerID
olcServerID: 0

dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: {0}syncprov
olcSpCheckpoint: 100 10
olcSpSessionlog: 100

Im dritten und letzten Schritt erzeugen wir auf dem Consumer Server die Datei „enable_sync_consumer.ldif„. Bitte
darauf achten, die Zeile „provider=“ und „credentials=“ entsprechend der eigenen Umgebung anzupassen.

dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
-
add: olcServerID
olcServerID: 1

dn: olcDatabase={1}hdb,cn=config
changetype: modify
delete: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
  by self write
  by anonymous auth
  by dn="cn=admin,dc=domain,dc=local" write
  by * none
-
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
  by anonymous auth
  by * none
-
delete: olcAccess
olcAccess: {2}to *
  by self write
  by dn="cn=admin,dc=domain,dc=local" write
  by * read
-
add: olcAccess
olcAccess: {2}to *
  by * read
-
replace: olcRootDN
olcRootDN: cn=manager
-
delete: olcRootPW
-
add: olcDbIndex
olcDbIndex: entryCSN eq
-
add: olcDbIndex
olcDbIndex: entryUUID eq
-
add: olcDbIndex
olcDbIndex: uid eq
-
add: olcDbIndex
olcDbIndex: cn eq
-
add: olcDbIndex
olcDbIndex: ou eq
-
add: olcDbIndex
olcDbIndex: dc eq
-
add: olcSyncrepl
olcSyncrepl: rid=123
  provider="ldap://master.domain.local:389/"
  type=refreshAndPersist
  retry="60 30 300 +"
  searchbase="dc=domain,dc=local"
  bindmethod=simple
  binddn="cn=ldapsync,dc=domain,dc=local"
  credentials=replication
  schemachecking=on
-
add: olcMirrorMode
olcMirrorMode: TRUE

Alles ins OpenLDAP importieren

Nachdem alle Konfigurationsdateien erzeugt sind, können wir diese nun gegen das LDAP laufen lassen.

Auf dem Master Server starten wir die ersten beiden Scripte:

[email protected]:~# ldapadd -x -W -D cn=admin,dc=domain,dc=local -f create_repl_user.ldif
Enter LDAP Password:
adding new entry "cn=ldapsync,dc=domain,dc=local"

Da wir für die nächste Konfiguration alle Partitionen „anfassen“ müssen, für wir diese mit SASL/EXTERNAL
Authentifizierung durch. Diese sollte bei einer Standard Debian/Ubuntu Installation aktiv sein.

[email protected]:~# ldapmodify -Y EXTERNAL -H ldapi:/// -f enable_sync_prov.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}hdb,cn=config"

modifying entry "cn=module{0},cn=config"

adding new entry "olcOverlay=syncprov,olcDatabase={1}hdb,cn=config"

Hiermit sollte nun der frisch angelegt Benutzer ldapsync Zugriff haben, das syncprov Modul geladen werden
sowie die Grundeinstellungen für dieses Modul vorgenommen sein.

Jetzt wird auf dem Consumer Server das enable_sync_consumer.ldif Script ausgeführt, um die
Replikation zu starten.

[email protected]:~# ldapadd -Y EXTERNAL -H ldapi:/// -f enable_sync_consumer.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

modifying entry "olcDatabase={1}hdb,cn=config"

modifying entry "cn=config"

Wenn alles sauber durchgelaufen ist sollten die Objektänderungen sowie Anlagen und Löschungen direkt
auf dem zweiten LDAP Host sichtbar werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.