Nous allons ajouter un peu de sécurité à notre plateforme de supervision Centreon en contrôlant les flux entrants et sortants avec un pare-feu. Ce tutoriel sera d'abord consacré à la plateforme Debian. Nous utiliserons le programme UFW ou Uncomplicated Firewall. Comme son nom l'indique, il est conçu pour simplifier les commandes de configuration.
Nous partons du principe que nous avons une architecture distribuée composée d'un Central et d'un collecteur distant.
Nous partons du principe que nous avons une architecture distribuée composée d'un Central et d'un collecteur distant.
Attention, lors de vos tests et configurations, réinitialisez toutes les connexions actives pour vérifier l'efficacité du pare-feu.
1 Installation d'UFW
Tout d'abord, Il faudra installer le paquet suivant sur le Central et sur le collecteur en super administrateur.
apt install ufw -y
Pour l'instant, le firewall n'est pas démarré donc celui-ci n'est pas actif.
2 Les flux réseaux de la plateforme Centreon
Nous allons passer en revue tous les flux réseaux utilisés par la plateforme Centreon.
Le schéma représente une partie des flux réseaux utilisés par la plateforme. Il ne faudra pas oublier les flux pour le fonctionnement du système (NTP, DNS, notifications, etc).
3 première configuration
La bonne pratique pour configurer un pare-feu est de bloquer tous les flux entrants et autoriser les flux sortants, puis ensuite d'autoriser les flux entrants nécessaires à la bonne marche de notre plateforme de supervision. Il est évident que si vous faites cette première configuration à partir d'un terminal, il faudra suivre un mode opératoire pour éviter la déconnexion.
3.1 Le collecteur
Nous commencerons par le collecteur. Commençons par les règle de base (en gras).
root@testpollerbuster:~# ufw default deny incoming Default incoming policy changed to 'deny' (be sure to update your rules accordingly) root@testpollerbuster:~# ufw default allow outgoing Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)
Ensuite, autorisons la connexion ssh.
root@testpollerbuster:~# ufw allow ssh Rules updated Rules updated (v6)
Activons notre pare-feu.
root@testpollerbuster:~# ufw enable
Un message d'avertissement vous demande de valider car les connexions ssh risquent d'être désactivées.
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
Une fois validé, on peut vérifier le statut de notre pare-feu
root@testpollerbuster:~# ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere 22/tcp (v6) ALLOW IN Anywhere (v6)
Maintenant, pour exporter la configuration du collecteur à partir du Central, nous avons besoin d'autoriser la connexion tcp 5556 (ZMQ). Nous pouvons créer cette règle.
root@testpollerbuster:~# ufw allow 5556/tcp Rule added Rule added (v6)
Nous pouvons limiter plus finement en autorisant juste l'adresse IP du Central (192.168.1.30).
root@testpollerbuster:~# ufw allow from 192.168.1.30 to any port 5556 Rule added
On peut visualiser les nouvelles règles.
root@testpollerbuster:~# ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere 5556/tcp ALLOW IN Anywhere 5556 ALLOW IN 192.168.1.30 22/tcp (v6) ALLOW IN Anywhere (v6) 5556/tcp (v6) ALLOW IN Anywhere (v6)
En fonction des plugins utilisés, il faudra autoriser les flux SNMP, NRPE, etc. Pour la plateforme que j'utilise, je vais autoriser les flux SNMP pour que le Central puisse superviser le collecteur et pour que le collecteur puisse recevoir les traps des autres machines supervisées. Je vais utiliser les noms de services du fichier /etc/services. Comme j'ai besoin de l'UDP et du TCP, je ne précise pas le mode de transport.
root@testpollerbuster:~# ufw allow snmp Rule added Rule added (v6) root@testpollerbuster:~# ufw allow snmp-trap Rule added Rule added (v6)
3.2 Le Central
Continuons par la configuration du Central. Pour débuter, nous utiliserons les mêmes commandes qu'avec le collecteur.
ufw default deny incoming ufw default allow outgoing ufw allow ssh ufw enable
Maintenant nous devons autoriser la connexion de l'IHM du Central. Notre plateforme n'ayant pas de certificat nous utiliserons seulement le protocole http.
root@testbuster:~# ufw allow WWW Rule added Rule added (v6)
Si vous attendez quelques minutes, vous constaterez la perte de connexion avec le collecteur.
Il faut autoriser la connexion entrante du flux BBDO envoyé par le collecteur.
root@testbuster:~# ufw allow 5669/tcp Rule added Rule added (v6)
On peut aussi limiter les connexions aux collecteurs connectés. Nous retrouverons sans problème la connectivité du collecteur.
root@testbuster:~# ufw allow from 192.168.1.34 to any port 5669 Rule added
Attention, si vous limiter les connexions BBDO avec les adresses IP, il faudra aussi autoriser le flux interne du collecteur intégré au Central. Sinon vous aurez ce dysfonctionnement.
si vous visualiser les flux du broker sur le Central, vous constatez qu'il manque le flux du collecteur interne.
root@testbuster:~# netstat -an | grep 5669
tcp 0 0 0.0.0.0:5669 0.0.0.0:* LISTEN
tcp 0 0 192.168.1.30:5669 192.168.1.34:36946 ESTABLISHED
Il faut ouvrir le flux de ce collecteur sur le Central.
root@testbuster:~# ufw allow from 127.0.0.1 to any port 5669
Rule added
Les flux du broker sont de nouveaux opérationnels
root@testbuster:~# netstat -an | grep 5669
tcp 0 0 0.0.0.0:5669 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:5669 127.0.0.1:50178 ESTABLISHED
tcp 0 0 192.168.1.30:5669 192.168.1.34:36946 ESTABLISHED
tcp 0 0 127.0.0.1:50178 127.0.0.1:5669 ESTABLISHED
On terminera par les flux SNMP entrants.
ufw allow snmp ufw allow snmp-trap
On visualise les règles.
root@testbuster:~# ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere 80/tcp (WWW) ALLOW IN Anywhere 5669/tcp ALLOW IN Anywhere 5669 ALLOW IN 192.168.1.34 161 ALLOW IN Anywhere 162 ALLOW IN Anywhere 22/tcp (v6) ALLOW IN Anywhere (v6) 80/tcp (WWW (v6)) ALLOW IN Anywhere (v6) 5669/tcp (v6) ALLOW IN Anywhere (v6) 161 (v6) ALLOW IN Anywhere (v6) 162 (v6) ALLOW IN Anywhere (v6)
4 Configuration avancée
Continuons par une configuration plus musclé. Nous allons tout interdire et ouvrir les flux que nous avons besoin.
4.1 Le collecteur
Nous allons effectuer un reset de la table et désactivons le firewall.
root@testpollerbuster:~# ufw reset Resetting all rules to installed defaults. This may disrupt existing ssh connections. Proceed with operation (y|n)? y Backing up 'user.rules' to '/etc/ufw/user.rules.20210127_170231' Backing up 'before.rules' to '/etc/ufw/before.rules.20210127_170231' Backing up 'after.rules' to '/etc/ufw/after.rules.20210127_170231' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210127_170231' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210127_170231' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210127_170231' root@testpollerbuster:~# ufw disable Firewall stopped and disabled on system startup
Nous interdisons tous les flux entrants et sortants. Autorisons le flux entrant ssh.
root@testpollerbuster:~# ufw default deny incoming Default incoming policy changed to 'deny' (be sure to update your rules accordingly) root@testpollerbuster:~# ufw default deny outgoing Default outgoing policy changed to 'deny' (be sure to update your rules accordingly) root@testpollerbuster:~# ufw allow in 22/tcp Rules updated Rules updated (v6)
Activons le firewall, vous ne devriez pas perdre la connexion ssh.
root@testpollerbuster:~# ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
Néanmoins, il faudra rentrer un peu dans le cambouis pour le protocole ICMP. Par défaut, on autorise le ping entrant mais on ne peut pas réaliser un ping en sortie, gênant pour un collecteur qui va vérifier si ses hôtes sont toujours vivant !
root@testpollerbuster:~# ping 192.168.1.30 PING 192.168.1.30 (192.168.1.30) 56(84) bytes of data. ping: sendmsg: Opération non permise ping: sendmsg: Opération non permise ping: sendmsg: Opération non permise
Nous devrons rajouter deux lignes dans le fichier /etc/ufw/before.rules
# allow outbound icmp -A ufw-before-output -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT -A ufw-before-output -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
Relancez ufw pour prendre en compte cette modification, le collecteur pourra utiliser le protocole ICMP.
root@testpollerbuster:~# ufw reload Firewall reloaded
Il nous reste à ajouter tous les flux indispensables pour le fonctionnement de notre collecteur.
ufw allow out 53/udp ufw allow out 80/tcp ufw allow out 25/tcp ufw allow in snmp ufw allow in snmp-trap ufw allow out snmp ufw allow in 5556/tcp ufw allow from 192.168.1.30 to any port 5556 ufw allow out 5669/tcp ufw allow out ntp
Explications :
ufw allow out 53/udp : on autorise la résolution de nom DNS
ufw allow out 80/tcp : on autorise le port 80 http pour l'update
ufw allow out 25/tcp : on autorise le SMTP pour la notification
ufw allow in snmp : on autorise une requête SNMP entrante pour interroger le collecteur
ufw allow in snmp-trap : on autorise les traps SNMP pour les traiter par le collecteur
ufw allow out snmp : on autorise les requêtes SNMP sortantes pour monitorer les équipements
ufw allow in 5556/tcp : on autorise centreon-gorgone à envoyer les configurations venant du central et les commandes externes pour le moteur.
ufw allow from 192.168.1.30 to any port 5556 : on limite le port 5556 au seul serveur Central
ufw allow out 5669/tcp : on autorise le module cbmod à se connecter au Central
ufw allow out ntp : on autorise la connexion au serveur de temps
Nous obtiendrons cette règle de pare-feu :
ufw allow out 53/udp : on autorise la résolution de nom DNS
ufw allow out 80/tcp : on autorise le port 80 http pour l'update
ufw allow out 25/tcp : on autorise le SMTP pour la notification
ufw allow in snmp : on autorise une requête SNMP entrante pour interroger le collecteur
ufw allow in snmp-trap : on autorise les traps SNMP pour les traiter par le collecteur
ufw allow out snmp : on autorise les requêtes SNMP sortantes pour monitorer les équipements
ufw allow in 5556/tcp : on autorise centreon-gorgone à envoyer les configurations venant du central et les commandes externes pour le moteur.
ufw allow from 192.168.1.30 to any port 5556 : on limite le port 5556 au seul serveur Central
ufw allow out 5669/tcp : on autorise le module cbmod à se connecter au Central
ufw allow out ntp : on autorise la connexion au serveur de temps
Nous obtiendrons cette règle de pare-feu :
root@testpollerbuster:~# ufw status verbose Status: active Logging: on (low) Default: deny (incoming), deny (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere 161 ALLOW IN Anywhere 162 ALLOW IN Anywhere 5556/tcp ALLOW IN Anywhere 5556 ALLOW IN 192.168.1.30 22/tcp (v6) ALLOW IN Anywhere (v6) 161 (v6) ALLOW IN Anywhere (v6) 162 (v6) ALLOW IN Anywhere (v6) 5556/tcp (v6) ALLOW IN Anywhere (v6) 53/udp ALLOW OUT Anywhere 80/tcp ALLOW OUT Anywhere 25/tcp ALLOW OUT Anywhere 5669/tcp ALLOW OUT Anywhere 161 ALLOW OUT Anywhere 123/udp ALLOW OUT Anywhere 53/udp (v6) ALLOW OUT Anywhere (v6) 80/tcp (v6) ALLOW OUT Anywhere (v6) 25/tcp (v6) ALLOW OUT Anywhere (v6) 5669/tcp (v6) ALLOW OUT Anywhere (v6) 161 (v6) ALLOW OUT Anywhere (v6) 123/udp (v6) ALLOW OUT Anywhere (v6)
Si vous utilisez NRPE, il faudra aussi autoriser le flux sortant tcp 5666.
4.2 Le Central
Terminons par le Central. Nous allons effectuer un reset de la table et désactivons le firewall.
root@testbuster:~# ufw reset Resetting all rules to installed defaults. This may disrupt existing ssh connections. Proceed with operation (y|n)? y Backing up 'user.rules' to '/etc/ufw/user.rules.20210128_090616' Backing up 'before.rules' to '/etc/ufw/before.rules.20210128_090616' Backing up 'after.rules' to '/etc/ufw/after.rules.20210128_090616' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210128_090616' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210128_090616' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210128_090616' root@testbuster:~# ufw disable Firewall stopped and disabled on system startup
Nous interdisons tous les flux entrants et sortants. Autorisons le flux entrant ssh.
root@testbuster:~# ufw default deny incoming Default incoming policy changed to 'deny' (be sure to update your rules accordingly) root@testbuster:~# ufw default deny outgoing Default outgoing policy changed to 'deny' (be sure to update your rules accordingly) root@testbuster:~# ufw allow in 22/tcp Rules updated Rules updated (v6)
Nous autorisons le flux sortant ICMP. Ajoutez deux lignes dans le fichier /etc/ufw/before.rules
# allow outbound icmp -A ufw-before-output -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT -A ufw-before-output -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
Nous autorisons les flux nécessaires au fonctionnement du système.
ufw allow out 53/udp ufw allow out 80/tcp ufw allow in 80/tcp ufw allow out 25/tcp ufw allow out ntp ufw allow in snmp ufw allow in snmp-trap ufw allow out snmp ufw allow out 5556/tcp ufw allow in 5669/tcp
Explications :
ufw allow out 53/udp : on autorise la résolution de nom DNS
ufw allow out 80/tcp : on autorise le port 80 http pour l'update
ufw allow in 80/tcp : on autorise l'accès à l'IHM de Centreon
ufw allow out 25/tcp : on autorise le SMTP pour la notification
ufw allow out ntp : on autorise la connexion au serveur de temps
ufw allow in snmp : on autorise une requête SNMP entrante pour interroger le collecteur
ufw allow in snmp-trap : on autorise les traps SNMP pour les traiter par le collecteur
ufw allow out snmp : on autorise les requêtes SNMP sortantes pour monitorer les équipements
ufw allow out 5556/tcp : on autorise centreon-gorgone à envoyer les configurations vers le collecteur.
ufw allow in 5669/tcp : on autorise les modules cbmod à se connecter au Central
Activons le firewall, vous ne devriez pas perdre la connexion ssh.
ufw allow out 53/udp : on autorise la résolution de nom DNS
ufw allow out 80/tcp : on autorise le port 80 http pour l'update
ufw allow in 80/tcp : on autorise l'accès à l'IHM de Centreon
ufw allow out 25/tcp : on autorise le SMTP pour la notification
ufw allow out ntp : on autorise la connexion au serveur de temps
ufw allow in snmp : on autorise une requête SNMP entrante pour interroger le collecteur
ufw allow in snmp-trap : on autorise les traps SNMP pour les traiter par le collecteur
ufw allow out snmp : on autorise les requêtes SNMP sortantes pour monitorer les équipements
ufw allow out 5556/tcp : on autorise centreon-gorgone à envoyer les configurations vers le collecteur.
ufw allow in 5669/tcp : on autorise les modules cbmod à se connecter au Central
Activons le firewall, vous ne devriez pas perdre la connexion ssh.
root@testbuster:~# ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
Nous obtiendrons cette règle de pare-feu :
root@testbuster:~# ufw status verbose Status: active Logging: on (low) Default: deny (incoming), deny (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere 80/tcp ALLOW IN Anywhere 161 ALLOW IN Anywhere 162 ALLOW IN Anywhere 5669/tcp ALLOW IN Anywhere 22/tcp (v6) ALLOW IN Anywhere (v6) 80/tcp (v6) ALLOW IN Anywhere (v6) 161 (v6) ALLOW IN Anywhere (v6) 162 (v6) ALLOW IN Anywhere (v6) 5669/tcp (v6) ALLOW IN Anywhere (v6) 53/udp ALLOW OUT Anywhere 80/tcp ALLOW OUT Anywhere 25/tcp ALLOW OUT Anywhere 161 ALLOW OUT Anywhere 5556/tcp ALLOW OUT Anywhere 53/udp (v6) ALLOW OUT Anywhere (v6) 80/tcp (v6) ALLOW OUT Anywhere (v6) 25/tcp (v6) ALLOW OUT Anywhere (v6) 161 (v6) ALLOW OUT Anywhere (v6) 5556/tcp (v6) ALLOW OUT Anywhere (v6)
Petite précision si vous utilisez git pour récupérer des dépôts, il faut autoriser le protocole http sécurisé.
ufw allow out "WWW Secure"
Vous avez eu un petit aperçu des possibilités d'UFW avec Centreon. Il existe bien d'autres paramétrages en fonction de vos besoins et de votre configuration.
Références
Quelques liens qui m'ont aidé pour ce tutoriel :
- UFW un pare-feu facile : https://debian-facile.org/doc:systeme:ufw
- ufw, Uncomplicated FireWall : https://grafikart.fr/tutoriels/ufw-696
- Uncomplicated Firewall : https://doc.ubuntu-fr.org/ufw