Vous êtes ici:

Menu


Stacks Image 34274
Centreon-Gorgone contient de nombreuses fonctionnalités dont la possibilité de réaliser des flux inverses. Par défaut, c'est le processus gorgone du collecteur qui a la fonction serveur, il écoute sur le port par défaut 5556. Le Central a une fonction de client et va établir une connexion sur le collecteur. Dans certains cas, le flux Central vers le collecteur n'est pas autorisé, il faudra inverser le flux. Nous allons découvrir cette fonctionnalité à travers un cas concret avec ce tutoriel. Merci à Olivier et Quentin pour leur aide apportée à ce tutoriel.

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.
Stacks Image 701561
Avertissement
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.
Stacks Image 701556
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.
Stacks Image 701566
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.
Stacks Image 701585
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
Stacks Image 701654
Accès ssh
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.
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)
Stacks Image 701696
Trouver l'id du collecteur
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)

id_collecteur

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é.
Stacks Image 701693
Flux non-ouvert
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
Stacks Image 701714
Les messages prevails dans les logs
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.
Stacks Image 701707

Références

La documentation officielle :
comments powered by Disqus
 Vous êtes ici:

Nous utilisons des cookies pour nous permettre de mieux comprendre comment le site est utilisé. En continuant à utiliser ce site, vous acceptez cette politique.