Vous êtes ici:

Menu


Stacks Image 1194449
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.
Stacks Image 1194560
Avis aux lecteurs
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.
Stacks Image 1194390
Flux utilisé 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.
Stacks Image 1194512
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
Stacks Image 1194537
Collecteur interne au Central
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 :
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.
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)
Stacks Image 1194569
Utilisation de git
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 :
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.