titre informatique

L'annuaire fait partie des pièces maîtresses d'un réseau informatique. En cas de panne, les utilisateurs ne peuvent plus accéder aux différentes ressources dont les permissions dépendent de l'utilisateur. Il est donc nécessaire d'assurer une haute disponibilité de ces serveurs. Pour un annuaire OpenLDAP, la haute disponibilité peut se mettre en place avec le logiciel Keepalived.

 

Configuration des deux serveurs LDAP

Après avoir mis en place un serveur OpenLDAP avec son arborescence (voir cet article), il faut exporter les données de l'annuaire vers un deuxième serveur OpenLDAP afin que les deux serveurs aient les mêmes données avant la mise en place de la haute disponibilité.

Deux exportations sont à faire sur le premier serveur (où vous avez votre annuaire) : la configuration et l'arborescence.

  • Exportation de la configuration : slapcat -b cn=config > config.ldif
  • Exportation de l'arborescence : slapcat -b dc=domaine,dc=tld > domaine.tld.ldif (avec en remplaçant domaine.tld par le domaine de votre arborescence).

Les deux fichier LDIF sont ensuite à transférer sur le deuxième serveur LDAP, où les paquets slapd et ldap-utils doivent être installés.

Avant d'importer les fichiers sur le deuxième serveur, vous devez supprimer toute trace d'une ancienne configuration et d'une ancienne arborescence :

  • Arrêt du service slapd : service slapd stop
  • Suppression des précédentes configurations : rm -rf /etc/ldap/slapd.d/* /var/lib/ldap/*

Vous pouvez ensuite importer la configuration du premier serveur sur le deuxième :

  • Importation de la configuration : slapadd -F /etc/ldap/slapd.d -b cn=config -l config.ldif
  • Importation de l'arborescence : slapadd -F /etc/ldap/slapd.d -b dc=domaine,dc=tld -l domaine.tld.ldif
  • Modification des droits sur les répertoires :
    • chown -R openldap:openldap /etc/ldap/slapd.d/
    • chown -R openldap:openldap /var/lib/ldap/
  • Redémarrage du service slapd : service slapd start

Vos deux serveurs OpenLDAP possèdent maintenant les mêmes informations.

 

Réplication

Afin que les modifications appliquées à l'arborescence LDAP d'un serveur soient appliquées à celle de l'autre serveur, vous devez mettre en place une réplication multi-master entre ces deux serveurs. Pour cela le module syncprov d'OpenLDAP est nécessaire.

Sur les deux serveurs, créez le fichier mod_syncprov.ldif avec le contenu suivant :

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/ldap
olcModuleLoad: syncprov.la

Chargez le module syncprov en important votre fichier dans vos deux serveurs OpenLDAP avec la commande ldapadd -Y EXTERNAL -H ldapi:/// -f mod_syncprov.ldif

Vous devez obtenir les lignes de sortie suivantes :

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=module,cn=config"

Toujours sur les deux serveurs, créez le fichier syncrpov.ldif avec le contenu suivant :

dn: olcOverlay=syncprov,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpSessionLog: 100

Importez le contenu ce nouveau fichier pour configurer syncprov avec la commande ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov.ldif

Vous devez obtenir les lignes de sortie suivantes :

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcOverlay=syncprov,olcDatabase={1}mdb,cn=config"

Il ne vous reste plus qu'à configurer la réplication. Pour cela, vous devez créer un dernier fichier que vous pouvez nommer master.ldif avec le contenu suivant (attention, certains éléments doivent être modifiés sur les deux serveurs) :

dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 101

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
  provider=ldap://10.0.0.52:389/
  bindmethod=simple
  binddn="cn=admin,dc=domaine,dc=tld"
  credentials=motdepasse
  searchbase="dc=domaine,dc=tld"
  scope=sub
  schemachecking=on
  type=refreshAndPersist
  retry="30 5 300 3"
  interval=00:00:05:00

Les valeurs soulignées sont à modifier :

  • OlcServerID : identifiant du serveur, valeur différente pour les deux serveurs OpenLDAP (101 et 102 par exemple) ;
  • provider : adresse de l'autre serveur (mettre l'adresse du deuxième serveur pour le fichier du premier serveur et vice-versa) ;
  • binddn : DN de l'administrateur LDAP de votre serveur ;
  • credentials : mot de passe de l'administrateur de votre serveur ;
  • searchbase : domaine de votre annuaire LDAP.

Certaines autres valeurs peuvent également être modifiées pour les adapter au mieux à votre contexte, en vous aidant de la documentation d'OpenLDAP.

Pour activer la réplication multi-master, vous n'avez qu'à importer le fichier master.ldif dans vos deux serveurs OpenLDAP avec la commande ldapmodify -Y EXTERNAL -H ldapi:/// -f master.ldif

Vous devez obtenir les lignes de sortie suivantes :

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}mdb,cn=config"

Normalement, votre réplication est activée. Si vous modifiez le contenu de votre arborescence LDAP sur un serveur, la modification se fait sur l'autre serveur.

 

Haute disponibilité

Une fois la réplication des deux serveurs OpenLDAP en place, la haute disponibilité est mise en place avec le service Keepalived, qu'il faut installer (apt install keepalived).

Afin de vérifier si un serveur OpenLDAP fonctionne, Keepalived a besoin d'un script qui renvoie 0 si le service LDAP n'est pas actif sur le serveur et 1 s'il est actif.

Sur les deux serveurs LDAP, créez le script test_ldap.sh dans le répertoire /etc/keepalived/scripts/ (répertoire scripts à créer pour plus de clarté) :

#!/bin/bash
ldapsearch -x -H ldap://$1 -D cn=utilisateur,ou=entite,dc=domaine,dc=tld -w motdepasse -b dc=domaine,dc=tld -l 3 > /dev/null 2>&1
ldapreponse=$?
if [ "$ldapreponse" -gt 0 ]; then
    echo "eteint"
    exit 1
else
    echo "actif"
fi
exit 0 

Les valeurs soulignées sont à adapter à votre contexte. L'utilisateur à dont vous indiquez le DN et le mot de passe doit avoir le droit d'interroger les serveurs LDAP.

Rendez ensuite exécutable le fichier test_ldap.sh (chmod +x test_ldap.sh).

Keepalived se configure avec le fichier /etc/keepalived/keepalived.conf. Afin de mettre en place la haute disponibilité pour nos serveurs, ce fichier doit contenir les instructions suivantes :

vrrp_script verif_serveur {
    script "/etc/keepalived/scripts/test_ldap.sh X.X.X.X"
    interval 2
    fall 2
    rise 2
}
vrrp_instance VI_LDAP {
    state BACKUP
    interface enp0s3
    virtual_router_id 50
    priority xxx
    advert_int 1
    lvs_sync_daemon_interface enp0s3

    authentication {
        auth_type PASS
        auth_pass motdepasse
    }

    track_script {
        verif_serveur
    }

    virtual_ipaddress {
        Y.Y.Y.Y
    }
}

Valeurs à modifier :

  • Lors de l'appel du script test_ldap.sh : indiquer l'adresse IP de l'autre serveur LDAP ;
  • Instructions interfaces et lvs_sync_daemon : nom de l'interface du serveur ;
  • Instruction priority : valeur numérique indiquant la priorité d'un serveur par rapport à l'autre (la valeur la plus haute est prioritaire, les deux serveurs doivent avoir une valeur différentes) ;
  • Instruction auth_pass : mot de passe commun aux deux serveurs ;
  • Instruction virtual_ipaddress : adresse IP virtuelle attribuée au serveur en cours d'utilisation

Une fois le fichier créé sur les deux serveurs, il suffit de relancer le service keepalived pour activer la haute disponibilité (service keepalived restart).