Configuration d'EoleSSO en mode cluster
Fonctionnement en mode cluster
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 9380
(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)
etChemin 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
etPort 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é.
Remarque
Sur EOLE 2.7, eole-sso-cluster-server
utilise partiellement le nouveau service eole-redis
.
Afin d'éviter tout conflit, le port par défaut du service a été modifié de 6380
en 9380
.
Attention
À partir d'EOLE 2.7.1, il n'est plus possible d'installer les paquets eole-sso-cluster-server
et eole-sso-cluster-client
sur la même machine.
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
)
Attention
À partir d'EOLE 2.7.1, il n'est plus possible d'installer les paquets eole-sso-cluster-server
et eole-sso-cluster-client
sur la même machine.
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 :
>>> import config, redis
>>> r = redis.Redis(host=config.REDIS_HOST, port=config.REDIS_PORT)
>>> 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]...).