Utilisation de Keepalived pour la haute-disponibilité LDAP et HTTP

Nous déployons régulièrement des infrastructures LDAP et WebSSO chez nos clients, et se pose toujours la question de la haute-disponibilité : la plate-forme d’authentification devenant centrale, il est indispensable de se prémunir d’un arrêt de service, que ce soit de l’annuaire LDAP ou du portail d’authentification Web. Nous allons voir comment le logiciel Keepalived peut nous aider à répondre à ce besoin.

ka-header

Des logiciels d’infrastructure adaptés

Avant d’envisager la mise en place d’outils de haute-disponibilité, il faut s’assurer que les logiciels principaux de l’infrastructure sauront fonctionner dans ce mode, c’est-à-dire qu’ils peuvent être installés sur plusieurs nœuds (serveurs physiques, virtuels ou conteneurs) et opérer de la même façon quelque soit le nœud actif.

Dans notre cas, nous utiliserons les logiciels suivants :

  • OpenLDAP : serveur d’annuaire compatible LDAPv3
  • LemonLDAP::NG : produit de WebSSO compatible CAS, SAML et OpenID Connect

OpenLDAP-logo

OpenLDAP sait fonctionner en mode multi-maîtres depuis plusieurs années, via le protocole SyncRepl. Le mode « miroir » (mirror mode) est particulièrement pertinent dans une architecture à deux nœuds où un seul d’entre eux sera contacté par les clients (l’important ici est d’éviter que des opérations d’écriture soient faites simultanément sur les deux nœuds). La configuration de ce mode est détaillée dans le guide d’administration d’OpenLDAP.

LemonLDAP::NG

LemonLDAP::NG pour sa part a été conçu dès le départ pour pouvoir utiliser des bases externes pour la gestion de ses données (configuration et sessions). Ainsi il est possible de déployer autant de nœuds que nécessaire en partageant les données entre les nœuds. Pour ma part, j’utilise régulièrement l’annuaire OpenLDAP comme stockage de la configuration et des sessions : l’annuaire étant déjà redondé, pas besoin de travail supplémentaire pour le WebSSO. Mais vous pouvez également utiliser des bases de données SQL (MySQL, PostGreSQL) ou NoSQL (MongoDB, Redis, Cassandra) pour assurer ce service.

Utilisation d’une adresse virtuelle

Une fois les deux nœuds installés, chacun possède son adresse IP propre et il faut trouver un moyen d’indiquer aux applications clientes quel nœud utiliser.

Une première solution est le Round-Robin DNS : au nom DNS ldap.example.com ou auth.example.com on associe les deux adresses IP, et charge aux clients de se débrouiller avec ça. Dans le cas de HTTP, la plupart des clients sauront rejouer les requêtes sur la seconde IP si la première ne fonctionne pas, mais ce n’est pas aussi évident pour les clients LDAP.

L’autre solution est d’utiliser une adresse IP virtuelle qui sera associée au nœud principal. Le nœud secondaire est opérationnel mais ne sera pas associé à l’adresse IP virtuelle, jusqu’à ce que celle-ci bascule en cas de problème du nœud principal. Dans cette situation, la haute-disponibilité est bien gérée du côté des serveurs, et non du côté des clients qui ne contacte qu’une seule adresse, l’adresse IP virtuelle.

Utilisation de Keepalived

Le logiciel Keepalived permet de gérer une IP virtuelle qui sera associée au nœud principal tant que celui-ci est opérationnel. Le protocole VRRP est utilisé entre les nœuds pour gérer cette adresse IP virtuelle.

Sa configuration est assez simple :

vrrp_instance VI_SFL {
  state MASTER
  priority 150
  nopreempt
  interface eth0
  virtual_router_id 69
  advert_int 5
  authentication {
     auth_type PASS
     auth_pass KEEPALIVED_PASSWORD
  }
  virtual_ipaddress {
    10.10.0.10/22 brd 10.10.0.255 dev eth0 scope global
  }
}

Il est intéressant de paramétrer la partie « authentication » pour éviter que les ordres VRRP soient pris en compte par d’autres routeurs non associés à la grappe de serveurs. Seuls les serveurs disposant du même mot de passe consommeront les requêtes.

Le paramètre « priority » permet d’indiquer le nœud principal. Le ou les nœuds secondaires auront une priorité plus faible (par exemple 100).

Script de surveillance

Cette configuration initiale n’est pas suffisante pour palier à des problèmes applicatifs : l’adresse IP virtuelle basculera si le nœud principal ne répond plus au protocole VRRP, mais rien n’est fait pour surveiller l’annuaire LDAP ou le serveur HTTP.

Keepalived permet d’utiliser un « track_script » dans lequel nous sommes libres de lancer les commandes que nous souhaitons. Si ce script s’exécute sans erreurs, alors le nœud est considéré comme opérationnel, sinon il est mis en quarantaine.

L’appel au script se configure simplement :

vrrp_script check_server_health {
  script "/usr/local/bin/check_server_health.sh"
  interval 2
  fall 2
  rise 2
}

vrrp_instance VI_SFL {
  ...
  track_script {
    check_server_health
  }
}

Voici un exemple de script :

#!/bin/bash

# Script that do several checks to verify LDAP/SSO service is up
#
# Returns 0 if all is fine
#
# Copyright (c) 2016 Clement Oudot @ Savoir-faire Linux


# Disks

rootuse=$(df -H / | grep -v 'Filesystem' | awk '{ print $5 }' | cut -d'%' -f1)

if [ $rootuse -ge 95 ]; then
        echo "Partition / is full ($rootuse%)"
        exit 1
else
        echo "Partition / is OK ($rootuse%)"
fi

# Process
            
openldapprocess=$(/bin/pidof slapd)
apacheprocess=$(/bin/pidof apache2)

/usr/local/openldap/bin/ldapsearch -x -H ldap://localhost -b '' -s base -l 3 > /dev/null 2>&1
ldapresponse=$?

if [ -z "$openldapprocess" ]; then  
        echo "OpenLDAP is not running"
        exit 1
else
        echo "OpenLDAP is running (PID $openldapprocess)"
fi

if [ "$ldapresponse" -gt 0 ]; then
        echo "OpenLDAP is not anwering on RootDSE"
        exit 1
else
        echo "OpenLDAP is answering on RootDSE"
fi

if [ -z "$apacheprocess" ]; then
        echo "Apache is not running"
        exit 1
else
        echo "Apache is running (PID $apacheprocess)"
fi

# Exit without problem
exit 0

J’utilise plusieurs type de vérifications dans ce script :

  • Contrôle de l’espace disque
  • Contrôle des démons lancés
  • Réponse à une requête LDAP

Bien entendu, charge à vous d’y mettre les vérifications qui vous semblent pertinentes.

Sortie de LemonLDAP::NG 1.9

Ce billet a été publié à l’origine sur LinuxFR

LemonLDAP::NG est un logiciel libre d’authentification unique (SSO), contrôle d’accès et fédération d’identités. La version 1.9.0 a été publiée le 2 mars 2016.

LemonLDAP::NG

LemonLDAP::NG est écrit en Perl et publié sous licence GPL. Cette nouvelle version majeure apporte de grands changements au logiciel comme le support OpenID Connect, une nouvelle interface d’administration et la compatibilité Nginx.

Présentation des nouveautés

OpenID Connect

OpenID Connect est un nouveau protocole de SSO porté par la fondation OpenID et basé sur le framework OAuth 2.0. Ce standard est adopté par de nombreux acteurs, comme par exemple Google qui l’utilise pour son authentification en remplacement de OpenID 2.0. L’État Français a lui aussi fait le choix de OpenID Connect pour sa nouvelle plate-forme France Connect.

Il est donc désormais possible d’utiliser LemonLDAP::NG pour s’authentifier sur ces services :

En plus du rôle de client (Relying Party), LemonLDAP::NG a aussi le rôle de serveur (OpenID Provider) ce qui lui permet d’authentifier toute application compatible avec ce protocole.

Interface d’administration

L’interface d’administration, appelée aussi Manager, a été réécrite avec AngularJS afin d’améliorer son ergonomie et son utilisation. Pour les habitués des précédentes versions, sachez que désormais vous n’aurez plus à cliquer sur « Appliquer » à chaque changement de valeur, et que vous pourrez éditer tous les en-têtes ou toutes les règles dans un seul écran.

Manager LemonLDAP::NG

Cette nouvelle interface permet la navigation entre les différentes versions de la configuration, l’import/export de configuration (au format JSON), la duplication d’hôte virtuels.

L’interface propose aussi toujours un explorateur de sessions, avec comme nouveauté la possibilité de parcourir les sessions persistantes (sessions conservées entre chaque connexion d’un utilisateur). Le gestionnaire de notification est aussi présent, au même niveau fonctionnel que dans les précédentes versions.

Support Nginx

Bonne nouvelle pour les réfractaires à Apache, la réécriture du code du Handler (agent assurant la protection des applications) passant par l’implémentation d’une API a permis d’offir un support FastCGI. Un petit serveur FastCGI est désormais livré avec LemonLDAP::NG (paquet lemonldap-ng-fastcgi-server) et permet de contacter le portail, le Manager et le Handler depuis Nginx.

Attributs CAS

Le serveur CAS de LemonLDAP::NG implémentait jusqu’à présent les versions 1.0 et 2.0. Désormais, une partie du protocole CAS 3.0 est pris en charge avec la possibilité de partager des attributs dans les réponses de validation CAS. Cela permet en particulier d’utiliser l’API PHP-CAS et sa fonction getAttributes().

MongoDB

MongoDB est utilisable pour le stockage des configurations et des sessions. Il s’ajoute à la liste des nombreux backends disponibles : Fichiers (JSON), DBI (MySQL, PgSQL, SQLite, …), LDAP, Redis.

Mettre à jour sa version

L’utilisation de fonctionnalités récentes de Perl contraint à restreindre les systèmes sur lesquels cette nouvelle version peut être installée. En particulier CentOS 5 et CentOS 6 ne sont pas utilisables.

D’autres changements techniques importants ont eu lieu et il est préférable d’avoir bien pris connaissances des notes de mise à jour avant de se lancer.

Enfin, nous espérons que cette nouvelle version apportera bonheur et prospérité à votre système d’information. Si vous êtes un utilisateur satisfait, vous pouvez le dire sur OpenHub et également faire partie de nos références.

À la découverte de Liferay 7 au Liferay North America Symposium #LRNAS2015

merci-chicagoAlors que tous les êtres humains de bonne volonté étaient endeuillés par l’assassinat barbare d’au moins 129 innocents à Paris — à quelques coins de rues à peine de notre bureau européen — une petite délégation de notre équipe montréalaise s’envolait vers Chicago samedi et dimanche, afin de participer au Liferay North America Symposium. Elle y trouva une ville magnifique, un hâvre de paix, la solidarité et une communauté Liferay au grand cœur. Merci, Chicago!

La grande question au Symposium, cette année, c’est la prochaine version finale de Liferay 7 qui est officiellement présentée pour la première fois en Amérique du Nord. On s’attend à ce qu’elle fasse sa marque, notamment dans les domaines de l’expérience utilisateur, de la personnalisation et de l’optimisation de la performance. Nos collègues Nicolas Juneau, Sven Werlen et Serjik Sayad comptent bien y acquérir le plus de connaissances possibles sur les bénéfices et les bonnes pratiques induits par cette nouvelle version de Liferay, tout en partageant notre propre expertise avec nos clients et partenaires présents à l’événement.

 
LRNAS 2015

Le Liferay North America Symposium à l’heure du DevOps

Liferay Symposium Gold SponsorLors du Liferay North America Symposium 2015, qui se tient à Chicago les 16 et 17 novembre, Sven Werlen présentera nos outils de déploiement Liferay automatisés. Grâce à ces outils, il suffit d’appuyer sur un bouton pour qu’une VM se monte, avec toute la pile logicielle requise par un environnement Liferay complet, basée sur JBoss, avec un serveur frontal, un serveur d’indexation et de recherche, etc. Si vous avez la chance de visiter le kiosque de Savoir-faire Linux, allez voir la démo, ça vaut la peine.

Le Liferay North American Symposium, c’est le plus grand rassemblement de développeurs, intégrateurs, clients et utilisateurs Liferay de l’année. Plusieurs de nos clients y seront présents. Pour la sixième année consécutive, le chef de file des portails web open-source figure en tête du fameux quadrant de Gartner et son succès n’est plus à démontrer. Or, cette fantastique dynamique repose en grande partie sur l’expertise et la motivation de sa vibrante communauté.

Le positionnement de Savoir-faire Linux dans cet écosystème est très particulier. Nous sommes à la fois Partenaire avancé Red Hat et Partenaire platine Liferay, deux chefs de file ayant annoncé au début de l’été une entente stratégique qui fait de la plate-forme JBoss de Red Hat le middleware privilégié pour les déploiements Liferay. Nous avons donc un accès privilégié à leurs ressources et disposons d’équipes de développeurs et administrateurs de systèmes certifiés par ces deux éditeurs, ce qui nous permet de mobiliser et d’optimiser de solides expertises Java, Web, DevOps et infonuagique autour des projets de nos clients. C’est ainsi que nous avons mis au point des méthodes de travail très sophistiquées, tant au niveau de l’intégration et du développement Liferay que du déploiement et de la maintenance.

Commanditaire Or de ce symposium, nous serons heureux d’y retrouver nos clients, collègues et amis et d’accueillir les visiteurs à notre kiosque afin de leur partager les petits secrets de nos outils DevOps. Et qui sait? Ayant eu l’honneur d’y recevoir un Liferay Community Excellence Award chaque année depuis 2011, nous gardons l’espoir d’en rapporter un cinquième à la maison cette année. 😉

Gold Sponsor depuis 2012

Présentation des modules de la paie Québéc/Canada pour Odoo

Odoo Québec MeetupLe 29 avril, lors du Meetup Odoo Québec, Pierre Lamarche et David Dufresne présenteront pour la première fois en public les nouveaux modules de paie d’Odoo localisés pour le Québec et le Canada. Disponibles pour la version 7.0 de la plate-forme ERP open-source, cette ensemble de modules spécialisés permettent désormais à toute petite ou moyenne entreprise du Québec de gérer la paie de ses employés de A à Z, du calcul à l’émission des fiches de paie en passant par les écritures comptables associées.

Inscrivez-vous!

Un projet de stage bien encadré

Pierre Lamarche« Odoo comprenait déjà des modules standards pour faire la gestion de la paie, explique Pierre Lamarche, consultant fonctionnel chez Savoir-faire Linux, mais ils n’étaient pas du tout adaptés à la réalité québécoise. On se les faisait souvent demander et c’était un réel problème. Alors, on a profité de l’embauche de David, un stagiaire au profil très particulier, pour les développer. »
David Dufresne

Employé à notre bureau de Québec depuis septembre dernier, David Dufresne détient en effet un baccalauréat en administration des affaires, avec une spécialisation en comptabilité, et il prépare un second baccalauréat en informatique. Il avait donc le profil idéal pour s’attaquer à ces modules sous la supervision de nos experts techniques Odoo et de nos consultants fonctionnels.

« Ça a été un projet de stage vraiment passionnant, dit-il. Les seules spécifications du Québec et du Canada prennent quelque 30 000 lignes, incluant les gabarits et la traduction. Au total, j’ai travaillé sur ce projet un bon millier d’heures, car outre l’écriture du code et de la documentation, nous avons réalisé une centaine de tests unitaires afin d’assurer la stabilité du code. »

David a également appris le fonctionnement d’une communauté internationale de logiciel libre, puisque les nouveaux modules ont été contribués par l’entremise de la Odoo Community Association, dont notre directeur Qualité, Environnement et Sécurité et chef de pratique Odoo, Maxime Chambreuil, est l’actuel vice-président.

Un système de gestion de la paie autorisé par Revenu Québec

Grâce à cette contribution, Odoo est le seul logiciel libre de gestion ayant reçu une autorisation officielle de Revenu Québec pour l’émission des fiches de paie. « Les fonctionnaires du ministère ont mis du temps à nous donner accès aux spécifications de la paie, se rappelle Pierre, car ils ne comprenaient pas que l’on fasse tout ce travail sans vendre le logiciel. C’était nouveau pour eux. Nous leur avons expliqué le modèle d’affaires de l’open-source, qui nous permet de gagner notre vie en offrant simplement des services à valeur ajoutée d’installation, de configuration, d’intégration et de support, bien que le logiciel lui-même et l’accès à son code soient gratuits. »

Lors de la présentation du 29 avril (de 17h30 à 19h), Pierre et David présenteront les modules, de leur installation à leur fonctionnement détaillé, tant au niveau de la configuration des employés, des contrats, des taux horaires, etc., qu’au niveau de l’utilisation finale. Lors de la discussion, ils présenteront la feuille de route pour la suite des choses, qui comprend notamment une future mise à jour pour la version 8 d’Odoo/OpenERP.

Programme de la démo

  • Installation des nouveaux modules de la paie (en cours de révision).
  • Définition des règles précises pour chaque employé ou catégorie d’employés: création du contrat contenant un ou plusieurs « emplois », des taux horaires, des cotisations sociales ou professionnelles, un salaire annuel, etc.
  • Ajout de feuille(s) de temps selon les tâches prévues au contrat
  • Calcul et création automatique d’une fiche de paie: on définit la période, on appuie sur un bouton et le logiciel se charge du reste en fonction des paramètres enregistrés, incluant les bons prélèvements.
  • Présentation du traitement par lot (batch) des fiches de paie.

Il ne reste plus qu’à les vérifier en y intégrant au besoin des corrections manuelles, puis à les valider et à les imprimer. En arrière, toutes les écritures comptables sont créées et sauvegardées automatiquement.