Configuration d'EoleSSO en mode cluster

Fonctionnement en mode cluster

EoleSSO peut être paramétré pour stocker les sessions SSO dans une base de données Redis[1] (locale ou distante).

En branchant plusieurs services EoleSSO sur la même base, il est possible de mettre en place une configuration de type cluster en répartition de charge ou en basculement.

Remarque

Cette documentation couvre seulement la configuration d'un (ou plusieurs) services EoleSSO et d'un service Redis pour permettre le stockage des sessions SSO dans une base de données partagée. La configuration de la répartition de charge ou du basculement (à travers ha-proxy ou autre système) n'est pas abordée ici.

La configuration peut se faire :

  • en mode serveur (partage d'une base Redis) ;

  • en mode client (accès à la base Redis par EoleSSO).

Installation et configuration en mode serveur

Sur un module Eole, il faut installer le paquet dédié à l'aide de la commande suivante :

# apt-eole install eole-sso-cluster-server

Celui-ci va installer un serveur Redis et configurer une instance spécifique sur le port 6380 (service redis-eolesso), ainsi qu'un service stunnel4 permettant de sécuriser l'accès à l'aide d'un tunnel SSL.

Dans l'interface de configuration du module apparaît le nouvel onglet Eole sso cluster.

Tous les paramètres sont renseignés pour une utilisation par défaut, mais il est possible d'effectuer les réglages suivants :

  • Port pour l'accès au service Redis à travers un tunnel SSL : Permet de modifier le port sur lequel les clients se connecteront pour accéder à la base de données.

  • Nom d'hôte ou adresse pour l'accès au service Redis depuis l'extérieur (stunnel) : Permet de définir l'adresse sur laquelle le tunnel sera disponible. Par défaut, l'adresse IP de l'interface 0 est utilisée.

  • Chemin du certificat Serveur stunnel (Redis) et Chemin de la clé du Serveur stunnel (Redis): Permettent de renseigner un certificat serveur spécifique pour le tunnel SSL. Par défaut, un certificat est généré automatiquement (/etc/ssl/certs/stunnel_client.crt).

  • Nom d'hôte ou adresse IP du serveur Redis et Port du serveur Redis : Permettent de modifier le port sur lequel l'instance de Redis écoute, ou d'accéder à un autre serveur Redis. Si le nom d'hôte est différent de 127.0.0.1 ou localhost, le service local redis-eolesso est désactivé.

Attention

En cas d'utilisation d'un serveur Redis non local, il faut être conscient que les échanges circuleront en clair, ce qui est déconseillé en dehors d'un réseau sécurisé.

Installation et configuration en mode client

Sur un module Eole dont le service EoleSSO doit être utilisé en mode cluster il faut installer le paquet adéquat à l'aide de la commande suivante :

# apt-eole install eole-sso-cluster-client

Celui-ci va installer les librairies nécessaires à l'accès Redis par EoleSSO, ainsi qu'un service stunnel4 configuré en mode client.

Dans l'interface de configuration du module apparaît le nouvel onglet Eole sso cluster.

  • Port pour l'accès au service Redis à travers un tunnel SSL : Permet de spécifier le port sur lequel le service stunnel4 va se connecter. Il doit correspondre à la valeur configurée sur la machine en mode serveur.

  • Nom d'hôte ou adresse IP d'accès au service Redis distant (stunnel) : Renseigner l'adresse choisie pour l'accès à Redis sur la machine en mode serveur.

  • Les variables chemin du certificat et de la clé du client stunnel permettent d'utiliser un certificat spécifique pour le service stunnel local. Attention, ce certificat doit être un certificat client (nsCertType = client). par défaut, un certificat est généré automatiquement (/etc/ssl/certs/stunnel_client.crt)

Installation et configuration des 2 modes sur la même machine

Il est possible d'installer les paquets eole-sso-cluster-server et eole-sso-cluster-client sur une seule machine.

Dans ce cas, le service EoleSSO de cette machine accédera directement à la base Redis.

Le service stunnel sera configuré en mode serveur pour permettre l'accès à la base par d'autres instances d'EoleSSO.

Tunnel SSL

Échange des clés

Une fois la configuration renseignée, reconfigurer le serveur et générer les certificats à l'aide de la commande reconfigure sur chaque machine utilisée.

Il faut ensuite procéder à un échange des certificats entre le serveur et le client pour que la connexion par tunnel soit possible :

  • Exécuter reconfigure sur chaque machine après avoir copié les fichiers.

Sur la machine en mode serveur il faut recopier dans le répertoire /etc/stunnel/eole/ les fichiers /etc/ssl/certs/ca_local.crt et /etc/ssl/certs/stunnel_client.crt de chaque serveur en mode client. Il faut les renommer afin de ne pas les écraser au fur et à mesure de l'ajout de clients.

# scp root@<adresse_client> :/etc/ssl/certs/ca_local.crt /etc/stunnel/eole/ca_[adresse_client].crt

# scp root@<adresse_client> :/etc/ssl/certs/stunnel_client.crt /etc/stunnel/eole/stunnel_[nom_client].crt

Sur chaque machine en mode client il faut recopier dans le répertoire /etc/stunnel/eole/ les fichiers /etc/ssl/certs/ca_local.crt et /etc/ssl/certs/stunnel_server.crt de chaque serveur en mode serveur.

# scp root@<adresse_client> :/etc/ssl/certs/ca_local.crt /etc/stunnel/eole/

# scp root@<adresse_client> :/etc/ssl/certs/stunnel_server.crt /etc/stunnel/eole/

AttentionUtilisation de certificats spécifiques

En cas d'utilisation d'un autre certificat que celui généré par défaut, les fichiers à échanger sont :

  • le fichier du certificat utilisé pour le service stunnel ;

  • toute les autorités de certification permettant de valider celui-ci (autorité racine et éventuels certificats intermédiaires).

Truc & astuceVérifier le bon fonctionnement du tunnel

Une fois les machines configurées, il faut se connecter sur un des serveurs en mode client, se placer dans le répertoire /usr/share/sso/, exécuter l'interpréteur python et saisir le code suivant :

1
>>> import config, redis
2
>>> r = redis.Redis(host=config.REDIS_HOST, port=config.REDIS_PORT)
3
>>> r.ping()

La dernière commande doit retourner True.

Si la commande renvoie un message d'erreur se terminant par Error while reading from socket: (104, 'Connection reset by peer'), cela indique généralement un problème de validation des certificats (par le serveur ou le client), ou une interdiction d'accès au port du tunnel par le serveur (pare-feu, TCP Wrapper[2]...).