Pour stocker ses données, Shinken Entreprise utilise le système de base de données MongoDB.
Une grande partie de la sécurisation de la base repose sur la limitation de l'écoute des requêtes sur la boucle locale ( localhost ). |
S'il n'y a qu'une seule machine pour l'installation de Shinken, la configuration par défaut de la base ( disponible dans le fichier /etc/mongod.conf ) lui permet seulement d'écouter les requêtes sur l'interface locale ( localhost ).
# Listen to local interface only. Comment out to listen on all interfaces. bind_ip=127.0.0.1 |
Cela implique qu'aucun autre serveur ne pourra se connecter directement à la base MongoDB, seuls les démons de la machine pourrons interroger MongoDB sur la boucle locale ( localhost ).
C'est le moyen le plus simple de sécuriser l'accès à la base.
Dans le cas, où il y a plusieurs machines sur l'infrastructure, Shinken préconise de laisser la configuration par défaut de la base ( disponible dans le fichier /etc/mongod.conf ) qui limite l'écoute à l'interface locale ( localhost ).
# Listen to local interface only. Comment out to listen on all interfaces. bind_ip=127.0.0.1 |
Pour que les démons, qui ne sont pas sur la machine qui héberge le MongoDB, puissent y accéder, il est recommandé d'utiliser des tunnels SSH.
Cette approche à deux avantages :
Il est possible d'utiliser les clés SSH crées lors de l'installation de Shinken pour faire ces tunnels ( voir la page Création automatique et gestion de la clé SSH de l'utilisateur shinken ).
Les étapes suivantes décrivent comment activer le chiffrement SSL pour les connexions entre Shinken et la base MongoDB.
Cette opération entraînera nécessairement une indisponibilité de Shinken le temps de redémarrer celui-ci ainsi que de la base MongoDB.
Toutefois, comme ce chiffrement ne présente aucun réel gain de sécurité — les communications se faisant soit au sein d’une même machine, soit via un tunnel SSH — et qu’il entraîne une surcharge en ressources ainsi qu’une complexité accrue, Shinken déconseille fortement l’activation du SSL dans ce contexte. |
Les différents certificats doivent être émis pas la même autorité de certification.
Remplacer ORGANIZATION INC. par le nom de la société du client ( éventuellement ).
|
Exécuter les commandes suivantes :
|
Il faut ensuite déployer le certificat sur le serveur MongoDB en adaptant la valeur SERVER :
|
|
Ensuite, il est nécessaire de déployer le certificat sur toutes les machines hébergeant au moins un des démons Shinken suivants : Synchronizer, Broker ou Scheduler ( dans le cas de la retention MongoDB ).
Dans la commande suivante, adapter la valeur SHINKEN_SERVER :
rsync -avP /etc/shinken/certs/mongodb/shinken.pem SHINKEN_SERVER:/etc/shinken/certs/mongodb/ |
Pour activer le chiffrement SSL dans Shinken, il faut préciser les paramètres de connexion dans le paramètre de l'uri de Mongo.
| Paramètres d'uri | Description | ||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Active SSL/TLS pour les communications avec le mongos. Valeurs possibles :
| ||||||||||||||||||||||||||||||||||||||||||||
| Accepter le certificat SSL de mongos même s’il est invalide, par exemple expiré. Valeurs possibles :
| ||||||||||||||||||||||||||||||||||||||||||||
| Accepter le certificat SSL de mongos même si le nom d’hôte du certificat ne correspond pas à celui du serveur. Valeurs possibles :
| ||||||||||||||||||||||||||||||||||||||||||||
| Chemin vers le fichier de l’autorité de certification ( CA ) utilisé pour vérifier le certificat SSL du mongos. | ||||||||||||||||||||||||||||||||||||||||||||
| Chemin vers le fichier contenant le certificat SSL de Shinken. | ||||||||||||||||||||||||||||||||||||||||||||
| Mot de passe du certificat SSL de Shinken .
| ||||||||||||||||||||||||||||||||||||||||||||
| Chemin vers le fichier CRL ( liste de révocation ) des certificats SSL à rejeter. |
Exemple d'uri qui active le chiffrement SSL :
|
Sur le serveur avec la base MongoDB, éditer /etc/mongod.conf pour ajouter le paragraphe en adaptant la valeur SERVER :
net:
ssl:
mode: preferSSL
PEMKeyFile: /etc/shinken/certs/mongodb/SERVER.pem
CAFile: /etc/shinken/certs/mongodb/ca-cert.pem |
Il faut dans l'ordre :
éteindre Shinken sur tous les serveurs :
service shinken stop |
Redémarrer tous mongodb:
service mongod restart |
Redémarrer Shinken sur tous les serveurs : :
service shinken start |
Ce chapitre suppose d'être déjà familier avec les composants d'un cluster MongoDB ( voir la page Haute disponibilité de la base MongoDB (mise en place d'un cluster) ).
Vu qu'il faut un mongos sur chaque machine qui contient un démon ou un module de Shinken qui a besoin d'un accès au cluster MongoDB, il est possible de limiter l'écoute des mongos à l'interface locale ( localhost ).
# Listen to local interface only. Comment out to listen on all interfaces. bind_ip=127.0.0.1 |
Dans ce cas, dans la configuration de Shinken, toutes les connexions à la base se feront sur l'adresse localhost.
Cette configuration va provoquer une erreur dans la validation de la configuration des modules de rétention. Il faut autoriser "localhost" comme adresse valide avec l'option "mongodb_retention__database__bypass_banning_localhost_uri" de la configuration du module MongodbRetention ( voir la page Module MongodbRetention ( Rétention en base de données centralisée par royaume ) ). |
Ce chiffrement ne présente aucun réel gain de sécurité — les communications se faisant au sein d’une même machine — et entraîne une surcharge en ressources ainsi qu’une complexité accrue. Shinken déconseille fortement l’activation du SSL dans ce contexte ( voir la page Activer le chiffrement ( SSL ) pour les communications d'un cluster MongoDB ).
Cette protection est assurée par :
Quelle que soit l'architecture, il est possible d'activer l'authentification par mot de passe à la base MongoDB :