Aller au contenu principal
Version: ⭐ 22.04

Sécurisez votre plateforme

Ce chapitre vous propose de sécuriser votre plateforme Centreon.

Renforcez la sécurité des comptes utilisateurs

Après l'installation de Centreon, il est nécessaire de changer les mots de passe par défaut des utilisateurs suivants:

  • root
  • centreon
  • centreon-engine
  • centreon-broker
  • centreon-gorgone

Pour cela, utilisez la commande suivante avec un compte privilégié (par exemple sudo) ou avec root (non recommandé - vous devez avoir un utilisateur dédié) :

passwd <account_name>

De plus, il est important de vérifier que le compte Apache ne dispose pas de droits de connexion au terminal. Exécutez la commande suivante :

cat /etc/passwd | grep apache

Vous devez avoir /sbin/nologin tel que :

apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

Pour rappel, la liste des utilisateurs et des groupes se trouve ici

Activer SELinux

Centreon a récemment développé des règles SELinux afin de renforcer le contrôle des composants par le système d'exploitation.

Ces règles sont actuellement en mode bêta et peuvent être activées. Vous pouvez les activer en suivant cette procédure. Lors de la détection d'un problème, il est possible de désactiver SELinux globalement et de nous envoyer vos commentaires afin d'améliorer nos règles sur Github.

Présentation de SELinux

Security Enhanced Linux (SELinux) fournit une couche supplémentaire de sécurité du système. SELinux répond fondamentalement à la question: Le <suject> peut-il faire cette <action> sur <object> ?, Par exemple: un serveur Web peut-il accéder aux fichiers des répertoires personnels des utilisateurs ?

La stratégie d'accès standard basée sur l'utilisateur, le groupe et d'autres autorisations, connue sous le nom de contrôle d'accès discrétionnaire (DAC), ne permet pas aux administrateurs système de créer des stratégies de sécurité complètes et précises, telles que la restriction d'applications spécifiques à l'affichage uniquement des fichiers journaux, tout en permettant à d'autres applications d'ajouter de nouvelles données aux fichiers journaux.

SELinux implémente le contrôle d'accès obligatoire (MAC). Chaque processus et ressource système possède une étiquette de sécurité spéciale appelée contexte SELinux. Un contexte SELinux, parfois appelé étiquette SELinux, est un identifiant qui fait abstraction des détails au niveau du système et se concentre sur les propriétés de sécurité de l'entité. Non seulement cela fournit un moyen cohérent de référencer des objets dans la stratégie SELinux, mais cela supprime également toute ambiguïté qui peut être trouvée dans d'autres méthodes d'identification. Par exemple, un fichier peut avoir plusieurs noms de chemin valides sur un système qui utilise des montages de liaison.

La politique SELinux utilise ces contextes dans une série de règles qui définissent comment les processus peuvent interagir entre eux et avec les différentes ressources système. Par défaut, la stratégie n'autorise aucune interaction à moins qu'une règle n'accorde explicitement l'accès.

Pour plus d'informations à propos de SELinux, visitez la documentation Red Hat

Activer SELinux en mode permissif

Par défaut, SELinux est désactivé lors du processus d'installation de Centreon. Pour activer SELinux en mode permissif, vous devez modifier le fichier /etc/selinux/config comme tel :

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

Puis redémarrez votre serveur :

shutdown -r now

Installer les paquets Centreon SELinux

Suivant le type de serveur, installer les paquets avec la commande suivante :

yum install centreon-common-selinux \
centreon-web-selinux \
centreon-broker-selinux \
centreon-engine-selinux \
centreon-gorgoned-selinux \
centreon-plugins-selinux

Pour vérifier l'installation, exécutez la commande suivante :

semodule -l | grep centreon

Suivant votre type de serveur, vous pouvez voir :

centreon-broker 0.0.5
centreon-common 0.0.10
centreon-engine 0.0.8
centreon-gorgoned 0.0.3
centreon-plugins 0.0.2
centreon-web 0.0.8

Auditer les journaux et activer SELinux

Avant d'activer SELinux en mode renforcé, vous devez vous assurer qu'aucune erreur n'apparaît à l'aide de la commande suivante :

cat /var/log/audit/audit.log | grep -i denied

Si des erreurs apparaissent, vous devez les analyser et décider si ces erreurs sont régulières et doivent être ajoutées en plus des règles SELinux par défaut de Centreon. Pour ce faire, utilisez la commande suivante pour transformer l'erreur en règles SELinux :

audit2allow -a

Exécutez ensuite les règles proposées.

Si après un certain temps, aucune erreur n'est présente, vous pouvez activer SELinux en mode renforcé en suivant cette procédure avec le mode enforcing.

N'hésitez pas à nous faire part de vos retours sur Github.

Sécuriser les fichiers de configuration

Changez les permissions des fichiers de configuration suivants:

chown centreon:centreon /etc/centreon/conf.pm
chmod 660 /etc/centreon/conf.pm

et

chown apache:apache /etc/centreon/centreon.conf.php
chmod 660 /etc/centreon/centreon.conf.php

Sécuriser l'accès root au SGBD

MariaDB propose une procédure par défaut pour sécuriser l'installation du SGBD. Vous devez obligatoirement définir un mot de passe pour l'utilisateur root de la base de données. Si vous ne l'avez pas déjà fait, exécutez la commande suivante et suivez les instructions :

mysql_secure_installation

Activer firewalld

Installez firewalld:

yum install firewalld

Activez firewalld:

systemctl enable firewalld
systemctl start firewalld

Ajoutez des règles pour firewalld :

La liste des flux réseau nécessaires pour chaque type de serveur est définie ici.

Exécutez les commandes suivantes (changez les numéros de port si vous avez personnalisé ceux-ci) :

# For default protocols
firewall-cmd --zone=public --add-service=ssh --permanent
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-service=https --permanent
firewall-cmd --zone=public --add-service=snmp --permanent
firewall-cmd --zone=public --add-service=snmptrap --permanent
# Centreon Gorgone
firewall-cmd --zone=public --add-port=5556/tcp --permanent
# Centreon Broker
firewall-cmd --zone=public --add-port=5669/tcp --permanent

Une fois les règles ajoutées, rechargez firewalld:

firewall-cmd --reload

Pour vérifier que la configuration a été correctement appliquée, utilisez la commande suivante afin de lister toutes les règles actives :

firewall-cmd --list-all

Par exemple :

public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: http snmp snmptrap ssh
ports: 5556/tcp 5669/tcp
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

Activer fail2ban

Fail2ban est un framework de prévention contre les intrusions, écrit en Python.

Installez le module inotify:

dnf install python3-inotify

Installez fail2ban :

yum install epel-release
yum install fail2ban fail2ban-systemd

Si SELinux est installé, mettez à jour les politiques SELinux :

yum update -y selinux-policy*

Activez fail2ban :

systemctl enable fail2ban
systemctl start fail2ban

Copiez le fichier de règles par défaut :

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Editez le fichier /etc/fail2ban/jail.local et recherchez le bloc [centreon], puis modifiez tel que :

[centreon]
port = http,https
logpath = /var/log/centreon/login.log
backend = pyinotify

Pour activer la règle centreon fail2ban, créez le fichier /etc/fail2ban/jail.d/custom.conf et ajoutez les lignes suivantes :

[centreon]
enabled = true
findtime = 10m
bantime = 10m
maxretry = 3

maxretry est le nombre d'authentifications échouées avant bannissement de l'adresse IP.

bantime est la durée du bannissement.

findtime est la plage de temps pour trouver les authentifications en échecs.

Puis redémarrez fail2ban pour charger votre règle :

systemctl restart fail2ban

Pour vérifier l'état de la règle centreon, vous pouvez exécuter :

fail2ban-client status centreon

Here is an example of output:

Status for the jail: centreon
|- Filter
| |- Currently failed: 1
| |- Total failed: 17
| `- File list: /var/log/centreon/login.log
`- Actions
|- Currently banned: 0
|- Total banned: 2
`- Banned IP list:

Pour plus d'informations, visitez le site officiel.

Sécuriser le serveur web en HTTPS

Par défaut, Centreon installe un serveur web en mode HTTP. Il est fortement recommandé de passer en mode HTTPS en ajoutant votre certificat. Il est également recommandé d'utiliser un certificat validé par une autorité plutôt qu'un certificat auto-signé.

  • Si vous avez déjà un certificat validé par une autorité, vous pouvez passer directement à cette étape pour activer le mode HTTPS sur votre serveur Apache.

  • Si vous ne disposez pas d'un certificat validé par une autorité, vous pouvez en générer un sur des plateformes telles que Let's Encrypt.

  • Si vous souhaitez créer un certificat selon la méthode auto-signée, suivez cette étape avant d'activer le mode HTTPS sur votre serveur.

Créer un certificat auto-signé

Cette procédure permet de créer :

  • Une clé privée pour le serveur : centreon7.key dans notre cas. Elle sera utilisée par le service Apache.
  • Un fichier CSR (Certificate Signing Request) : centreon7.csr dans notre cas.
  • Une clé privée pour le certificat de l'autorité de certification : ca_demo.key dans notre cas.
  • Un certificat x509 pour signer votre certificat pour le serveur : ca-demo.crt dans notre cas.
  • Un certificat pour le serveur : centreon7.crt dans notre cas.
  1. Installer le module SSL pour Apache :
dnf install mod_ssl mod_security openssl

Soit un serveur Centreon avec le FQDN suivant : centreon7.localdomain.

  1. Préparer la configuration OpenSSL :

En raison d'un changement de politique chez Google, les certificats auto-signés peuvent être rejetés par le navigateur Google Chrome (sans qu'il soit possible d'ajouter une exception). Pour continuer à utiliser ce navigateur, vous devez modifier la configuration OpenSSL.

Ouvrez le fichier /etc/pki/tls/openssl.cnf. L'objectif est de modifier ce fichier pour renseigner les différents IPs et FQDNs relatifs au serveur.

Recherchez la section [v3_ca] afin d'ajouter le nouveau tag alt_names :

# Add the alt_names tag that allows you to inform our various IPs and FQDNs for the server
[ alt_names ]
IP.1 = xxx.xxx.xxx.xxx
DNS.1 = centreon7.localdomain
# If you have several IP (HA: vip + ip)
# IP.2 = xxx.xxx.xxx.xxx
[ v3_ca ]
subjectAltName = @alt_names

Voici un exemple de ce à quoi le fichier peut ressembler :

[ alt_names ]
IP.1 = 10.25.11.73
DNS.1 = centreon7.localdomain

[ v3_ca ]
subjectAltName = @alt_names
  1. Créer une clé privée pour le serveur :

Créez une clé privée nommée centreon7.key sans mot de passe afin qu'elle puisse être utilisée par le service Apache.

openssl genrsa -out centreon7.key 2048

Protégez le fichier en modifiant ses droits :

chmod 400 centreon7.key
  1. Créer un fichier CSR :

Avec la clé que vous venez de créer, créez un fichier CSR (Certificate Signing Request). Remplissez les champs avec les informations propres à votre entreprise. Le champ Common Name doit être identique au hostname de votre serveur Apache (dans notre cas, centreon7.localdomain).

openssl req -new -key centreon7.key -out centreon7.csr
  1. Créer une clé privée pour le certificat de l'autorité de certification :

Créez une clé privée pour cette autorité : ca_demo.key dans notre cas. Ajoutez l'option -aes256 pour chiffrer la clé produite et y appliquer un mot de passe. Ce mot de passe sera demandé chaque fois que la clé sera utilisée.

openssl genrsa -aes256 2048 > ca_demo.key
  1. Créer un certificat x509 à partir de la clé privée du certificat de l'autorité de certification :

Créez un certificat x509 qui sera valide pendant un an : ca_demo.crt dans notre cas.

Notez qu'il est nécessaire de simuler un tiers de confiance : le Common Name doit être différent de celui du certificat du serveur.

openssl req -new -x509 -days 365 -key ca_demo.key -out ca_demo.crt

Ce certificat étant créé, vous pourrez l'utiliser pour signer le certificat du serveur.

  1. Créer un certificat pour le serveur :

Créez votre certificat pour le serveur en utilisant le certificat x509 (ca_demo.crt) pour le signer.

openssl x509 -req -in centreon7.csr -out centreon7.crt -CA ca_demo.crt -CAkey ca_demo.key -CAcreateserial -CAserial ca_demo.srl  -extfile /etc/pki/tls/openssl.cnf -extensions v3_ca

Le mot de passe créé à l'étape Créer une clé privée pour le certificat de l'autorité de certification doit être renseigné. Vous obtenez un certificat pour le serveur nommé centreon7.crt.

Vous pouvez voir le contenu du fichier :

less centreon7.crt
  1. Vous devez ensuite récupérer le fichier du certificat x509 (ca_demo.crt) et l'importer dans le magasin de certificats de votre navigateur.

Maintenant que vous avez votre certificat auto-signé, vous pouvez suivre la procédure suivante pour activer le mode HTTPS sur votre serveur Apache.

Activer le mode HTTPS sur le serveur web

  1. Installer le module SSL pour Apache :
dnf install mod_ssl mod_security openssl
  1. Installer les certificats :

Installez vos certificats (centreon7.key et centreon7.crt dans notre cas) en les copiant dans la configuration Apache :

cp centreon7.key /etc/pki/tls/private/
cp centreon7.crt /etc/pki/tls/certs/
  1. Sauvegarder la configuration actuelle du serveur Apache pour Centreon :
cp /etc/httpd/conf.d/10-centreon.conf{,.origin}
  1. Éditer la configuration Apache pour Centreon :

Centreon propose un fichier de configuration d'exemple HTTPS disponible dans le répertoire : /usr/share/centreon/examples/centreon.apache.https.conf

Éditez le fichier /etc/httpd/conf.d/10-centreon.conf en ajoutant la section <VirtualHost *:443>.

Define base_uri "/centreon"
Define install_dir "/usr/share/centreon"

ServerTokens Prod

<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

Voici un exemple de ce à quoi le fichier peut ressembler :

Define base_uri "/centreon"
Define install_dir "/usr/share/centreon"

ServerTokens Prod

<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

<VirtualHost *:443>
#####################
# SSL configuration #
#####################
SSLEngine On
SSLProtocol All -SSLv3 -SSLv2 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-DSS-AES256-GCM-SHA384:DHE-DSS-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-GCM-SHA256:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ADH:!IDEA
SSLHonorCipherOrder On
SSLCompression Off
SSLCertificateFile /etc/pki/tls/certs/centreon7.crt
SSLCertificateKeyFile /etc/pki/tls/private/centreon7.key

Alias ${base_uri}/api ${install_dir}
Alias ${base_uri} ${install_dir}/www/

<LocationMatch ^\${base_uri}/?(?!api/latest/|api/beta/|api/v[0-9]+/|api/v[0-9]+\.[0-9]+/)(.*\.php(/.*)?)$>
ProxyPassMatch "fcgi://127.0.0.1:9042${install_dir}/www/$1"
</LocationMatch>

<LocationMatch ^\${base_uri}/?(authentication|api/(latest|beta|v[0-9]+|v[0-9]+\.[0-9]+))/.*$>
ProxyPassMatch "fcgi://127.0.0.1:9042${install_dir}/api/index.php/$1"
</LocationMatch>

ProxyTimeout 300
ErrorDocument 404 ${base_uri}/index.html
Options -Indexes +FollowSymLinks

<IfModule mod_security2.c>
# https://github.com/SpiderLabs/ModSecurity/issues/652
SecRuleRemoveById 200003
</IfModule>

<Directory "${install_dir}/www">
DirectoryIndex index.php
AllowOverride none
Require all granted
FallbackResource ${base_uri}/index.html
</Directory>

<Directory "${install_dir}/api">
AllowOverride none
Require all granted
</Directory>

<If "'${base_uri}' != '/'">
RedirectMatch ^/$ ${base_uri}
</If>
</VirtualHost>

N'oubliez pas de changer les directives SSLCertificateFile et SSLCertificateKeyFile avec les chemins d'accès vers votre clé et votre certificat. Dans notre cas : SSLCertificateFile /etc/pki/tls/certs/centreon7.crt et SSLCertificateKeyFile /etc/pki/tls/private/centreon7.key.

  1. Activer les flags HttpOnly / Secure et cacher la signature du serveur Apache :

Éditez le fichier /etc/httpd/conf.d/10-centreon.conf en ajoutant la ligne suivante :

Header always edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure;SameSite=Strict
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
ServerSignature Off
ServerTokens Prod

Éditez le fichier /etc/php.d/50-centreon.ini en désactivant le paramètre expose_php :

expose_php = Off
  1. Cacher le répertoire par défaut /icons :

Éditez le fichier /etc/httpd/conf.d/autoindex.conf en commentant la ligne suivante :

#Alias /icons/ "/usr/share/httpd/icons/"
  1. Redémarrer le serveur web Apache et PHP pour prendre la configuration en compte :
systemctl restart php-fpm httpd

Puis vérifiez le statut :

systemctl status httpd

Si tout est correct, vous devriez avoir quelque chose comme :

● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Drop-In: /usr/lib/systemd/system/httpd.service.d
└─php-fpm.conf
Active: active (running) since Tue 2020-10-27 12:49:42 GMT; 2h 35min ago
Docs: man:httpd.service(8)
Main PID: 1483 (httpd)
Status: "Total requests: 446; Idle/Busy workers 100/0;Requests/sec: 0.0479; Bytes served/sec: 443 B/sec"
Tasks: 278 (limit: 5032)
Memory: 39.6M
CGroup: /system.slice/httpd.service
├─1483 /usr/sbin/httpd -DFOREGROUND
├─1484 /usr/sbin/httpd -DFOREGROUND
├─1485 /usr/sbin/httpd -DFOREGROUND
├─1486 /usr/sbin/httpd -DFOREGROUND
├─1487 /usr/sbin/httpd -DFOREGROUND
└─1887 /usr/sbin/httpd -DFOREGROUND

Vous pouvez maintenant accéder à votre plateforme via votre navigateur en mode HTTPS.

Une fois que votre serveur web est configuré en mode HTTPS et si vous avez un serveur MAP sur votre plateforme, vous devez le configurer en mode HTTPS également. Sinon, les navigateurs web récents peuvent bloquer la communication entre les deux serveurs. Voir la procédure détaillée ici.

URI personnalisée

Il est possible de modifier l'URI de Centreon. Par exemple, /centreon peut être remplacé par /monitoring.

Au moins un niveau de chemin est obligatoire.

Pour mettre à jour l'URI Centreon, vous devez suivre les étapes suivantes:

  1. Rendez-vous dans le menu Administration > Paramètres > Centreon web et modifiez le champ Centreon Web Directory

image

  1. Éditez le fichier de configuration Apache pour Centreon
vim /etc/httpd/conf.d/10-centreon.conf

et modifiez le chemin /centreon par le nouveau.

Activation du http2

Il est possible d'activer le protocole http2 pour améliorer les performances réseaux de Centreon.

Pour utiliser http2, vous devez suivre les étapes suivantes:

  1. Configurer le https pour Centreon

  2. Installer le module nghttp2:

dnf install nghttp2
  1. Enable http2 protocol in /opt/rh/httpd24/root/etc/httpd/conf.d/10-centreon.conf:
...
<VirtualHost *:443>
Protocols h2 h2c http/1.1
...
</VirtualHost>
...
  1. Modifier la méthode utilisée par apache pour le module multi-processus dans /etc/httpd/conf.modules.d/00-mpm.conf :
-LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
+#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

-#LoadModule mpm_event_module modules/mod_mpm_event.so
+LoadModule mpm_event_module modules/mod_mpm_event.so
  1. Redémarrer le processus Apache pour prendre en compte la nouvelle configuration:
systemctl restart httpd

Authentification des utilisateurs

Centreon propose plusieurs méthodes pour authentifier les utilisateurs :

Créer des profils d'utilisateurs

Centreon propose de gérer les autorisations d'accès aux différents menus, ressources et actions possibles sur ces ressources via la gestion de liste de contrôle d'accès.

Communications sécurisées entre les serveurs

Il est fortement recommandé de sécuriser les communications entre les différents serveurs de la plateforme Centreon si certains serveurs ne sont pas dans un réseau sécurisé.

Le tableau des flux réseau est disponible ici.

Communication Centreon Broker

Centreon Broker et pare-feu

Parfois, il n'est pas possible d'initialiser le flux Centreon Broker depuis le collecteur (ou Remote Server) vers le serveur Centreon Central ou le Remote Server. Voir la configuration suivante pour inverser le flux.

Authentification des flux Centreon Broker

Si vous devez authentifier des collecteurs qui envoient des données, vous pouvez utiliser le mécanisme d'authentification Centreon Broker, qui est basé sur des certificats X.509. Voir la configuration suivante pour authentifier les collecteurs.

Compressez et chiffrez la communication Centreon Broker

Il est également possible de compresser et de chiffrer la communication de Centreon Broker. Allez dans le menu Configuration > Pollers > Broker configuration, modifiez votre configuration Centreon Broker et activez les entrées et sorties IPv4:

  • Enable TLS encryption: Auto
  • Enable negotiation: Yes
  • Compression (zlib): Auto

Communication Centreon Gorgone

La documentation officielle de Centreon gorgone vous permettra de sécuriser la communication entre les processus Gorgone.

Gestion de l'information et des événements de sécurité (SIEM)

Les journaux des événements Centreon sont disponibles dans les répertoires suivants :

Répertoires des journauxCentral serverRemote ServerPollerCentreon Map serverCentreon MBI Server
/var/log/centreonXX
/var/log/centreon-brokerXXX
/var/log/centreon-engineXXX
/var/log/centreon-gorgoneXXX
/var/log/centreon-biXX
/var/log/centreon-mapXXXX

De plus, toutes les actions de modification de la configuration de Centreon effectuées par les utilisateurs sont disponibles via le menu Administration > Logs.

Sauvegardez votre plateforme

Centreon propose de sauvegarder la configuration de la plateforme. Pour ce faire, accédez au menu Administration > Parameters > Backup.