Mise en situation
J'ai réalisé cette maquette pour mettre en œuvre le flux inversé. Imaginons une petite structure souhaitant avoir un accès de sa plateforme Centreon sur le WAN. Pour assurer un minimum de sécurité, nous plaçons le Central dans une DMZ. Le Central sera accessible du LAN et du WAN. Les flux sortants sont interdits à partir de la DMZ. Pour augmenter la sécurité, les flux entrants du LAN seront masqués avec la méthode MASQUERADE du pare-feu. A l'occasion de cette solution, nous verrons qu'il faudra aussi modifier la configuration de Centreon-Broker.
Je ne suis pas un expert sécurité, cette solution n'est pas une préconisation Centreon, il s'agit d'une maquette pour expliquer le flux inversé. Je vous mets en garde sur les risques d'exposer une plateforme Centreon sur Internet :
- Utilisation obligatoire d'un certificat pour le protocole http,
- limiter les actions (de préférence que de la visualisation),
- réaliser les mises à jour Centreon
- authentification très forte pour l'accès à l'IHM
- augmenter la sécurité du serveur Linux
Voir le document ANSSI
Voici le schéma de mon installation. J'utilise VirtualBox avec deux réseaux internes LAN et DMZ. Les serveurs sont des serveurs DEBIAN, le principe reste le même pour des ISO Centreon sauf pour la configuration du Routeur Debian. Le serveur Central est déjà installé, je n'ai pas ajouté les flux pour l'installation de la plateforme, seul les flux nécessaires au fonctionnement ont été configurés.
La plateforme Centreon est une architecture distribuée constituée d'un Central dans la DMZ et de deux collecteurs distants dans le LAN. On pourra accéder au Central par le LAN avec la VM debian 10 ou par la machine hôte avec une redirection du port 80 par le routeur. Pour accéder via Internet, il faudrait installer une redirection de port mais ceci dépasse le cadre de ce tutoriel. Ci-dessous, le principe de notre DMZ.
On autorise le flux sortant pour le LAN vers Internet (pour info, dans la vraie vie, on utilisera un proxy web passant par la DMZ pour filtrer le flux Web). On autorise aussi le flux entrant du LAN vers la DMZ et le flux entrant du WAN vers la DMZ. Tous les autres flux seront interdits.
Configuration du routeur, pare-feu
Voici rapidement, la configuration de notre routeur pare-feu sur Virtualbox. Les options les plus importantes sont dans la partie réseau, le son, la vidéo et l'usb ne sont pas nécessaire. L'installation du système est déjà réalisée.
Pour éviter les confusions lors de la connexion en ssh, modifiez le hostname de la machine.
root@vmdebian:~# cat /etc/hosts routeurdeb root@vmdebian:~# cat /etc/hostname 127.0.0.1 localhost 127.0.1.1 routeurdeb.home routeurdeb
Paramétrages des interfaces réseaux
Il n'y aura pas de serveur DHCP, tout se fera en adresse statique. Une seule passerelle est définie, celle du réseau inet.
root@routerdebian:~# cat /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # Inet network interface allow-hotplug enp0s3 iface enp0s3 inet static address 192.168.1.111 network 255.255.255.0 gateway 192.168.1.1 # LAN network interface allow-hotplug enp0s8 iface enp0s8 inet static address 192.168.10.1 netmask 255.255.255.0 # DMZ network interface allow-hotplug enp0s9 iface enp0s9 inet static address 192.168.20.1 netmask 255.255.255.0
Paramétrages des routes statiques
Continuons par les routes statiques pour la communication des réseaux LAN et DMZ. Ces routes seront rajoutées dans le même fichier à la fin.
root@routerdebian:~# cat /etc/network/interfaces …….. # add route up route add -net 192.168.20.0 netmask 255.255.255.0 enp0s3 up route add -net 192.168.10.0 netmask 255.255.255.0 enp0s3
Activation du routage
Activons le routage avec cette fonctionnalité du noyau linux. Dé-commentez dans le fichier /etc/sysctl.conf, la ligne suivante :
net.ipv4.ip_forward=1
Activez la prise en charge du routage
root@routeurdeb:~# sysctl -p /etc/sysctl.conf net.ipv4.ip_forward = 1
Activation des règles de NAT
On commence par les choses sérieuses. Nous allons activer les règles de NAT pour que les machines du LAN puissent accéder à Internet. Pour cela il faut encapsuler l'adresse source du LAN pour que le résultat de la requête puisse revenir vers le poste du LAN ayant effectué cette requête. Nous allons utiliser l'application iptables.
iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
Pour les besoins de la maquette, nous allons rediriger le flux http (port 80) de l'interface inet du routeur vers le serveur Central situé sur la DMZ. Nous aurons accès à l'IHM de Centreon à partir de la machine hôte. J'en profite pour rappeler le risque d'exposer une architecture de supervision sur Internet sans prendre toutes les précautions d'usage.
iptables -t nat -A PREROUTING -i enp0s3 -d 192.168.1.111/24 -p tcp --destination-port 80 -j DNAT --to-destination 192.168.20.30:80
Mise en place des règles de filtrage
On continue avec les règles de filtrage, la bonne pratique c'est d'interdire tous les flux par défaut et d'ouvrir juste ce qui est nécessaire. Lancez ces commandes pour tout bloquer.
iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP
On autorise les ping, dans l'ordre : LAN vers routeur, DMZ vers routeur, LAN vers DMZ, LAN vers Internet
iptables -A INPUT -i enp0s8 -s 192.168.10.0/24 -p icmp -j ACCEPT iptables -A OUTPUT -o enp0s8 -d 192.168.10.0/24 -p icmp -j ACCEPT iptables -A INPUT -i enp0s9 -s 192.168.20.0/24 -p icmp -j ACCEPT iptables -A OUTPUT -o enp0s9 -d 192.168.20.0/24 -p icmp -j ACCEPT iptables -A FORWARD -i enp0s8 -o enp0s9 -s 192.168.10.0/24 -d 192.168.20.0/24 -p icmp -j ACCEPT iptables -A FORWARD -s 192.168.10.0/24 -o enp0s3 -p icmp -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
On masquera l'adresse source du LAN à destination de la DMZ.
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o enp0s9 -j MASQUERADE
On va autoriser les machines du LAN à se connecter à l'IHM du Central.
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o enp0s9 -j MASQUERADE
On va autoriser les machines du LAN à se connecter à l'IHM du Central.
iptables -A FORWARD -s 192.168.10.0/24 -d 192.168.20.30 -p tcp --dport 80 -j ACCEPT
On va autoriser les machines du LAN à naviguer sur Internet. On ouvrira le flux DNS fourni par la box, les flux 80 et 443 pour la navigation WEB.
iptables -A FORWARD -s 192.168.10.0/24 -d 192.168.1.1 -o enp0s3 -p udp --dport 53 -j ACCEPT iptables -A FORWARD -s 192.168.10.0/24 -o enp0s3 -p tcp --dport 80 -j ACCEPT iptables -A FORWARD -s 192.168.10.0/24 -o enp0s3 -p tcp --dport 443 -j ACCEPT
On autorisera le port 80 (HTTP) du réseau inet vers le serveur Central.
iptables -A FORWARD -i enp0s3 -o enp0s9 -d 192.168.20.30 -p tcp --dport 80 -j ACCEPT
Il reste à autoriser les flux pour la plateforme Centreon. Ils seront abordés dans le chapitre suivant.
Sauvegarde des règles d'Iptables
Il faut sauvegarder notre configuration sinon au prochain reboot, il faudra tout recommencer. Installer le paquet suivant.
apt install iptables-persistent
A chaque modification, il faudra lancer la commande pour sauvegarder.
iptables-save -c >/etc/iptables/rules.v4
Pour mes besoins d'accès aux machines virtuelles, j'ai dû ajouter des règles pour le flux ssh, respectivement le routeur, le Central, le poller 1 et le poller 2
iptables -A INPUT -i enp0s3 -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o enp0s3 -d 192.168.1.0/24 -p tcp --sport 22 -j ACCEPT
iptables -A OUTPUT -o enp0s9 -d 192.168.20.30 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i enp0s9 -s 192.168.20.30 -p tcp --sport 22 -j ACCEPT
iptables -A OUTPUT -o enp0s8 -d 192.168.10.34 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i enp0s8 -s 192.168.20.34 -p tcp --sport 22 -j ACCEPT
iptables -A INPUT -i enp0s8 -s 192.168.10.25 -p tcp --sport 22 -j ACCEPT
iptables -A OUTPUT -o enp0s8 -d 192.168.10.25 -p tcp --dport 22 -j ACCEPT
Attention ces ouvertures de flux ne sont pas conseillées dans une architecture de production.
Configuration du flux inverse pour gorgone
Si vous avez lu les articles précédents sur Centreon-Gorgone, vous allez être confrontés à un problème de flux tcp entre le Central et ses collecteurs distants. Le fonctionnement par défaut désigne le collecteur comme serveur et le Central comme client. Le flux à autoriser devrait partir du Central vers le collecteur, malheureusement le Central ne peut pas accéder au réseau LAN en sortie, nous devons inverser le flux de Centreon-Gorgone. Commençons par autoriser le flux tcp 5556 du réseau LAN vers le réseau DMZ. On autorisera les deux collecteurs.
iptables -A FORWARD -s 192.168.10.34 -d 192.168.20.30 -p tcp --dport 5556 -j ACCEPT iptables -A FORWARD -s 192.168.10.25 -d 192.168.20.30 -p tcp --dport 5556 -j ACCEPT
Maintenant, passons à la configuration proprement dite de Gorgone. Nous n'utiliserons pas l'outil automatique de configuration gorgone car le Central ne doit plus faire office de serveur. Connectez-vous sur un collecteur distant. Nous devons connaître l'empreinte de ce serveur en utilisant cette commande ci-dessous.
Pour Debian en version compilé, utilisez ce fichier en indiquant la bonne version de Centreon-Gorgone.
Pour Debian en version compilé, utilisez ce fichier en indiquant la bonne version de Centreon-Gorgone.
perl /usr/local/src/centreon-gorgone-20.10.1/contrib/gorgone_key_thumbprint.pl --key-path='/var/lib/centreon-gorgone/.keys/rsakey.pub.pem' 2021-02-17 22:53:02 - INFO - File '/var/lib/centreon-gorgone/.keys/rsakey.pub.pem' JWK thumbprint: lFtAjNQdAqGI83_rFWGtRApPaq1Zf_m1XW26zxnJLDY
Pour CentOS il faudra télécharger le fichier sur le GitHub Centreon.
wget -O /root/gorgone_key_thumbprint.pl https://raw.githubusercontent.com/centreon/centreon-gorgone/master/contrib/gorgone_key_thumbprint.pl perl /root/gorgone_key_thumbprint.pl --key-path='/var/lib/centreon-gorgone/.keys/rsakey.pub.pem' 2021-02-17 22:53:02 - INFO - File '/var/lib/centreon-gorgone/.keys/rsakey.pub.pem' JWK thumbprint: lFtAjNQdAqGI83_rFWGtRApPaq1Zf_m1XW26zxnJLDY
Récupérez l'empreinte indiqué en gras sur l'exemple pour la configuration du Central. Activez le mode serveur de Centreon-Gorgone sur le collecteur. Ajoutez pour une nouvelle installation ou modifiez le fichier /etc/centreon-gorgone/config.d/40-gorgoned.yaml.
name: gorgoned-poller1 description: Configuration for poller poller1 gorgone: gorgonecore: id: 2 privkey: "/var/lib/centreon-gorgone/.keys/rsakey.priv.pem" pubkey: "/var/lib/centreon-gorgone/.keys/rsakey.pub.pem" modules: - name: action package: gorgone::modules::core::action::hooks enable: true - name: pull package: gorgone::modules::core::pull::hooks enable: true target_type: tcp target_path: "192.168.20.30:5556" ping: 1 - name: engine package: gorgone::modules::centreon::engine::hooks enable: true command_file: "/var/lib/centreon-engine/rw/centengine.cmd"
L'id doit être unique dans toute la configuration gorgone de la plateforme, il doit correspondre à l'id de la table nagios_server de la base centreon. Voici un exemple de requête sur la table.
MariaDB [centreon]> select id,name from nagios_server; +----+---------+ | id | name | +----+---------+ | 1 | Central | | 2 | poller1 | | 3 | poller2 | | 6 | poller5 | +----+---------+ 4 rows in set (0.000 sec)
Une autre méthode est de survoler le nom du collecteur dans la page de configuration. Un lien s'affiche en bas du navigateur et indique l'id du collecteur (server_id=x)
La nouveauté de cette configuration est le module pull. Il permet d'activer le mode client et indique à Centreon-Gorgone de se connecter sur le Central qui a pour adresse IP 192.168.20.30 avec le port TCP 5556.
Passons à la configuration du Central en modifiant le fichier /etc/centreon-gorgone/config.d/40-gorgoned.yaml. Je vous présente la configuration finale permettant de visualiser les deux empreintes des deux collecteurs et la manière de les insérer. Les modifications sont affichées en gras. Il faudra aussi ajouter un nouveau module register pour indiquer au module nodes que le collecteur fonctionne en mode pull.
gorgone: gorgonecore: privkey: "/var/lib/centreon-gorgone/.keys/rsakey.priv.pem" pubkey: "/var/lib/centreon-gorgone/.keys/rsakey.pub.pem" external_com_type: tcp external_com_path: "*:5556" authorized_clients: - key: lFtAjNQdAqGI83_rFWGtRApPaq1Zf_m1XW26zxnJLDY - key: HjRlmMYsgl9F19dq2rs0XPAuvvE50VhtWs-Tj_XjXUA modules: - name: httpserver package: "gorgone::modules::core::httpserver::hooks" enable: true address: "0.0.0.0" port: "8085" ssl: false auth: enabled: false allowed_hosts: enabled: true subnets: - 127.0.0.1/32 - name: action package: "gorgone::modules::core::action::hooks" enable: true - name: cron package: "gorgone::modules::core::cron::hooks" enable: true cron: !include cron.d/*.yaml - name: nodes package: "gorgone::modules::centreon::nodes::hooks" enable: true - name: register package: "gorgone::modules::core::register::hooks" enable: true config_file: /etc/centreon-gorgone/nodes-register-override.yml - name: proxy package: "gorgone::modules::core::proxy::hooks" enable: true - name: legacycmd package: "gorgone::modules::centreon::legacycmd::hooks" enable: true cmd_dir: "/var/lib/centreon/centcore/" cmd_file: "/var/lib/centreon/centcore.cmd" cache_dir: "/var/cache/centreon" cache_dir_trap: "/etc/snmp/centreon_traps" remote_dir: "/var/cache/centreon/config/remote-data/" - name: engine package: "gorgone::modules::centreon::engine::hooks" enable: true command_file: "/var/lib/centreon-engine/rw/centengine.cmd" - name: statistics package: "gorgone::modules::centreon::statistics::hooks" enable: true broker_cache_dir: "/var/cache/centreon/broker-stats/" cron: - id: broker_stats timespec: "*/5 * * * *" action: BROKERSTATS parameters: timeout: 10 - id: engine_stats timespec: "*/5 * * * *" action: ENGINESTATS parameters: timeout: 10
Ajoutez le fichier /etc/centreon-gorgone/nodes-register-override.yml. Les id correspondent au id des collecteurs
nodes: - id: 2 type: pull prevail: 1 - id: 3 type: pull prevail: 1
Démarrez ou redémarrez votre démon gorgone sur les collecteurs et le Central.
systemctl restart gorgoned
Les options external_com_type et external_com_path permettent d'activer le mode serveur du démon gorgone. Le démon écoute sur le port 5556. Voici un test avec netstat.
root@testcentreon:~# netstat -an | grep 5556 tcp 0 0 0.0.0.0:5556 0.0.0.0:* LISTEN tcp 0 0 192.168.20.30:5556 192.168.20.1:49734 ESTABLISHED tcp 0 0 192.168.20.30:5556 192.168.20.1:56364 ESTABLISHED
Les deux collecteurs ont la même adresse IP de la passerelle DMZ, c'est la règle de NAT qui encapsule les adresses IP du LAN. Cela permet d'anonymiser les adresses du LAN pour améliorer la sécurité.
Le message suivant sur le poller distant indique que le flux Collecteur vers le Central n'est pas ouvert.
root@poller2:~# netstat -an | grep 5556
tcp 0 1 192.168.10.34:41592 192.168.20.30:5556 SYN_SENT
Vous constaterez les messages suivants dans les logs
2021-02-18 10:33:16 - INFO - [proxy] cannot override node '3' registration: prevails!!!
2021-02-18 10:33:26 - INFO - [proxy] cannot override node '2' registration: prevails!!!
2021-02-18 10:33:31 - INFO - [proxy] Send pings
2021-02-18 10:33:31 - INFO - [proxy] Pong received from '3'
2021-02-18 10:33:31 - INFO - [proxy] Pong received from '2'
Ce sont des messages d'informations indiquant au proxy d'éviter l'écrasement de la configuration du flux inversé. Dans les prochaines versions de Centreon, ces messages disparaitront.
Configuration de Centreon-Broker
Autre configuration à adapter, le flux broker entre le Central et les collecteurs. Il faudra modifier la configuration du pare-feu.
iptables -A FORWARD -s 192.168.10.34 -d 192.168.20.30 -p tcp --dport 5669 -j ACCEPT iptables -A FORWARD -s 192.168.10.25 -d 192.168.20.30 -p tcp --dport 5669 -j ACCEPT
Vérification du fonctionnement
Si vous supervisez le Central par un collecteur distant, il faut aussi ouvrir le flux SNMP.
iptables -A FORWARD -s 192.168.10.34 -d 192.168.20.30 -p udp --dport 161 -j ACCEPT
Il vous reste à exporter la configuration du collecteur et admirez le résultat.
Références
La documentation officielle :
- poller_pull_configuration.md : https://github.com/centreon/centreon-gorgone/blob/master/docs/poller_pull_configuration.md