Vous êtes ici:

Menu


Stacks Image 17415
La nouvelle version des plugins Centreon datant du 24 janvier 2019 va nous permettre l'utilisation de fichiers chiffrés pour certaines macros comme par exemple le nom de communauté SNMP. L'intérêt est de pouvoir cacher certaines informations à certains utilisateurs qui ne seraient pas habilités à les connaître. Pour cela, Quentin nous a concocter une option pass-manager permettant l'utilisation d'un logiciel de chiffrage de mot de passe. Vous avez la possibilité d'utiliser Teampass en utilisant une API ou KeePass en utilisant un fichier plat. Dans ce tutoriel nous utiliserons KeePass sur une architecture CentOS 7 et Debian 9 avec Centreon 18.10. Cette option est normalement disponible pour tous les plugins (Global Options).

1 Prérequis

Avant de réaliser la configuration dans Centreon, nous devons installer les prérequis pour le plugin.

1.1 CentOS 7 (ISO Centreon)

Tout d'abord, nous aurons besoin de wget pour récupérer certaines sources et gcc pour les compiler.
yum install wget gcc
Ensuite il faudra activer le dépôt epel.
yum install epel-release
Et récupérer quelques packages de librairies Perl.
yum install perl-File-KeePass perl-Carp-Assert perl-JSON-MaybeXS perl-Readonly

1.1a Compilation de librairies Perl

Nous continuerons avec des librairies à compiler car introuvable dans les repos. L'option pass-manager a besoin de la librairie JSON::Path version 0.420. Suivez la procédure :
cd /usr/local/src 
wget https://cpan.metacpan.org/authors/id/N/NE/NEILB/Exporter-Easy-0.18.tar.gz 
tar xzf Exporter-Easy-0.18.tar.gz 
cd Exporter-Easy-0.18 
perl Makefile.PL 
make 
make install 
cd .. 
wget https://cpan.metacpan.org/authors/id/P/PE/PEVANS/Scalar-List-Utils-1.50.tar.gz 
tar xzf Scalar-List-Utils-1.50.tar.gz 
cd Scalar-List-Utils-1.50 
perl Makefile.PL 
make 
make install 
cd .. 
wget https://cpan.metacpan.org/authors/id/P/PO/POPEFELIX/JSON-Path-0.420.tar.gz 
tar xzf JSON-Path-0.420.tar.gz 
cd JSON-Path-0.420 
perl Makefile.PL 
make 
make install
N'oubliez pas de désactiver le repo epel pour éviter des soucis avec les prochaines mises à jour Centreon.
yum remove epel-release
Continuez au chapitre suivant.

1.2 Debian 9

Tout d'abord, nous aurons besoin de wget pour récupérer certaines sources et gcc pour les compiler.
apt-get install wget gcc
Ensuite il faudra installer quelques packages de librairies Perl.
apt-get install libfile-keepass-perl libcarp-assert-perl libjson-maybexs-perl libreadonly-perl libexporter-tiny-perl

1.2a Compilation de librairies Perl

Nous continuerons avec des librairies à compiler car introuvable dans les repos. L'option pass-manager a besoin de la librairie JSON::Path version 0.420. Suivez la procédure :
cd /usr/local/src
wget https://cpan.metacpan.org/authors/id/T/TO/TOBYINK/LV-0.006.tar.gz
tar xzf LV-0.006.tar.gz
cd LV-0.006
perl Makefile.PL 
make 
make install 
cd .. 
wget https://cpan.metacpan.org/authors/id/N/NE/NEILB/Exporter-Easy-0.18.tar.gz 
tar xzf Exporter-Easy-0.18.tar.gz 
cd Exporter-Easy-0.18 
perl Makefile.PL 
make 
make install 
cd .. 
wget https://cpan.metacpan.org/authors/id/P/PE/PEVANS/Scalar-List-Utils-1.50.tar.gz 
tar xzf Scalar-List-Utils-1.50.tar.gz 
cd Scalar-List-Utils-1.50 
perl Makefile.PL 
make 
make install 
cd .. 
wget https://cpan.metacpan.org/authors/id/P/PO/POPEFELIX/JSON-Path-0.420.tar.gz 
tar xzf JSON-Path-0.420.tar.gz 
cd JSON-Path-0.420 
perl Makefile.PL 
make 
make install

1.3 Installation des plugins Centreon

Vous devez récupérez les plugins Centreon à partir du GitHub. Actuellement, il ne sont pas encore packagé pour l'ISO Centreon. Vous pouvez néanmoins les copier dans le dossier /usr/lib/centreon/plugins. Voir le document suivant pour l'installation.

2 Création du fichier keepass

Nous allons aborder la création de notre fichier keepass. Notre exemple est réalisé avec KeePassX pour MacOS mais fonctionne sans problème sur d'autres système. Créez votre fichier avec un mot de passe maître "centreon" pour l'exemple.
Stacks Image 17582
création du fichier
Voici l'organisation que je vous propose. Un groupe serveurs et un groupe Reseaux. Dans le groupe Serveurs, nous ajouterons autant d'entrées que nous avons de noms de communauté SNMP différents.
Stacks Image 17611
Organisation du fichier
Nous utiliserons le champ password pour insérer notre nom de communauté SNMP.
Stacks Image 17632
Exemple pour Central
Le nom de communauté pour le Central sera P@blik et pour le Poller sera Paublic. Sauvegardez ce fichier et copiez-le sur le serveur Centreon dans le dossier /etc/centreon/keepas par exemple. Le fichier aura l'extension kdbx.

3 Configuration de l'accès au fichier pour le plugin.

Maintenant, il s'agit de d'indiquer aux plugins l'accès à ce fichier. Nous utiliserons un nouveau fichier comme ceci :
vi /etc/centreon/keepass/keepass_conn.pm
insérez les lignes suivantes :
our $keepass_connections = {
    general => {
        file => '/etc/centreon/keepass/Centreon_SNMP.kdbx',
        password => 'centreon',
    }
};
 
1;
Ce fichier indique le chemin du fichier KeePass et le mot de passe maître.

4 Premier test

Avant toute chose, vérifiez que l'option pass-manager est disponible sur votre plugin. Exemple :
/usr/lib/centreon/plugins/centreon_plugins.pl --plugin=os::linux::snmp::plugin --plugin=os::linux::snmp::plugin.pm --help

Plugin Description:
    Check Linux operating systems in SNMP.

Global Options:
    --mode  Choose a mode.

    --dyn-mode
            Specify a mode with the path (separated by '::').

    --list-mode
            List available modes.

    --mode-version
            Check minimal version of mode. If not, unknown error.

    --version
            Display plugin version.

    --pass-manager
            Use a password manager.
Nous ferons un test en ligne de commande pour l'instant. Nous utiliserons le plugin os::linux::snmp::plugin pour les serveurs Central et Poller. Commençons d'abord à lire le fichier KeePass pour voir la structure du fichier. N'oubliez pas de vous connecter en tant que centreon-engine sur le Central (bonne pratique Centreon).
/usr/lib/centreon/plugins/centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=load --hostname=127.0.0.1 --pass-manager=keepass --keepass-endpoint=general --keepass-endpoint-file=/etc/centreon/keepass/keepass_conn.pm --debug
Voici les principaux paramètres :
--pass-manager=keepass —> type de logiciel keepass ou teampass
--keepass-endpoint=general —> point d'entrée dans le fichier de configuration. Il est possible d'avoir plusieurs configurations keepass ou teampass
--keepass-endpoint-file=/etc/centreon/keepass/keepass_conn.pm —> l'emplacement du fichier de configuration.
Le paramètre optionnel --debug nous permet d'afficher au format json le fichier lu par le plugin ci-dessous le résultat :
UNKNOWN: SNMP GET Request : Timeout 
$VAR1 = [
          {
            'entries' => [],
            'icon' => '48',
            'auto_type_enabled' => undef,
            'id' => ' *a&  S3  D 
                                    ',
            'location_changed' => '2019-02-14 16:35:59',
            'accessed' => '2019-02-14 16:35:59',
            'enable_searching' => undef,
            'groups' => [
                          {
                            'groups' => [],
                            'usage_count' => '0',
                            'enable_searching' => undef,
                            'location_changed' => '2019-02-14 16:37:02',
                            'accessed' => '2019-02-14 16:37:02',
                            'id' => ' + ~ գb    ',
                            'auto_type_enabled' => undef,
                            'icon' => '3',
                            'entries' => [
                                           {
                                             'foreground_color' => '',
                                             'auto_type_enabled' => 1,
                                             'history' => [],
                                             'id' => '   a !?r  Oח',
                                             'icon' => '3',
                                             'username' => '',
                                             'usage_count' => '0',
                                             'password' => 'P@blik',
                                             'tags' => '',
                                             'auto_type_munge' => 0,
                                             'accessed' => '2019-02-14 16:39:38',
                                             'location_changed' => '2019-02-14 16:39:38',
                                             'protected' => {
                                                              'password' => 1
                                                            },
                                             'override_url' => '',
                                             'comment' => '',
                                             'title' => 'Central',
                                             'modified' => '2019-02-14 16:39:38',
                                             'auto_type' => [],
                                             'expires_enabled' => 0,
                                             'expires' => '2019-02-14 16:38:35',
                                             'background_color' => '',
                                             'url' => '',
                                             'created' => '2019-02-14 16:38:35'
                                           },
                                           {
                                             'password' => 'Paublic',
                                             'usage_count' => '0',
                                             'username' => '',
                                             'location_changed' => '2019-02-14 16:40:17',
                                             'protected' => {
                                                              'password' => 1
                                                            },
                                             'accessed' => '2019-02-14 16:40:17',
                                             'tags' => '',
                                             'auto_type_munge' => 0,
                                             'id' => ' @       >Z   ',
                                             'history' => [],
                                             'auto_type_enabled' => 1,
                                             'foreground_color' => '',
                                             'icon' => '0',
                                             'expires' => '2019-02-14 16:39:41',
                                             'expires_enabled' => 0,
                                             'auto_type' => [],
                                             'modified' => '2019-02-14 16:40:17',
                                             'created' => '2019-02-14 16:39:41',
                                             'background_color' => '',
                                             'url' => '',
                                             'comment' => '',
                                             'override_url' => '',
                                             'title' => 'Poller'
                                           }
                                         ],
                            'expires' => '2019-02-14 16:36:46',
                            'auto_type_default' => '',
                            'expires_enabled' => 0,
                            'modified' => '2019-02-14 16:37:02',
                            'created' => '2019-02-14 16:36:46',
                            'level' => 1,
                            'expanded' => 1,
                            'notes' => '',
                            'title' => 'Serveurs',
                            'last_top_entry' => 0
                          },
                          {
                            'icon' => '27',
                            'entries' => [],
                            'id' => '0^u    IeJ [  p',
                            'auto_type_enabled' => undef,
                            'accessed' => '2019-02-14 16:37:28',
                            'location_changed' => '2019-02-14 16:37:28',
                            'usage_count' => '0',
                            'groups' => [],
                            'enable_searching' => undef,
                            'title' => 'Reseaux',
                            'last_top_entry' => 0,
                            'notes' => '',
                            'expanded' => 1,
                            'created' => '2019-02-14 16:37:06',
                            'level' => 1,
                            'expires' => '2019-02-14 16:37:06',
                            'auto_type_default' => '',
                            'modified' => '2019-02-14 16:37:28',
                            'expires_enabled' => 0
                          }
                        ],
            'usage_count' => '0',
            'last_top_entry' => 0,
            'title' => 'Racine',
            'expanded' => 1,
            'notes' => '',
            'level' => 0,
            'created' => '2019-02-14 16:35:59',
            'expires_enabled' => 0,
            'modified' => '2019-02-14 16:35:59',
            'auto_type_default' => '',
            'expires' => '2019-02-14 16:35:59'
          }
        ];
Pour retrouver les valeurs qui nous intéresse, il faudra utiliser le paramètre --keepass-search-value. Les champs utiles sont le champ title et le champ password. Ils sont dans un ensemble entries qui lui-même est dans un ensemble groups. Voici la syntaxe de la recherche pour le serveur Central un peu abscons, il faut l'admettre ;)
--keepass-search-value='snmpcommunity=$..groups..entries.[?($_->{title} =~ /Central/i)].password'
La recherche se fait sur la chaine Central dans le champ title, le caractère i annule le case sensitive. On récupère le champ password associé au champ title dans la variable snmpcommunity. Ensuite on utilise un autre paramètre --keepass-map-option permettant de surcharger le paramètre SNMP du plugin avec le résultat de la recherche.
--keepass-map-option="snmp-community=%{snmpcommunity}"
Finalement la commande complète pour récupérer la charge du serveur Central donne ceci :
/usr/lib/centreon/plugins/centreon_plugins.pl --plugin=os::linux::snmp::plugin.pm --mode=load --hostname=127.0.0.1 --pass-manager=keepass --keepass-endpoint=general --keepass-endpoint-file=/etc/centreon/keepass/keepass_conn.pm --keepass-search-value='snmpcommunity=$..groups..entries.[?($_->{title} =~ /Central/i)].password' --keepass-map-option="snmp-community=%{snmpcommunity}"
OK: Load average: 0.00, 0.03, 0.06 | 'load1'=0.00;;;0; 'load5'=0.03;;;0; 'load15'=0.06;;;0;
Dans ce cas, l'option --debug nous permettra de visualiser le résultat de la recherche.
lookup = $..groups..entries.[?($_->{title} =~ /central/i)].password - response = $VAR1 = 'P@blik';

5 Configuration dans Centreon

Avec l'ISO Centreon, actuellement, les plugins livrés n'ont pas cette option, il faudra entièrement reprendre la configuration commandes, templates de service et d'hôte. Pour l'exemple, nous prendrons seulement le mode cpu. Il suffira de dupliquer les autres service de la même façon et de faire la relation avec le modèle d'hôte.

5.1 Création de la commande

créez la commande OS-Linux-SNMP-passmanager-Cpu
Stacks Image 17833
La commande de vérification
$CENTREONPLUGINS$/centreon_linux_snmp.pl --plugin=os::linux::snmp::plugin --mode=cpu --hostname=$HOSTADDRESS$ --snmp-version='$_HOSTSNMPVERSION$' $_HOSTSNMPPASSMANAGER$ $_HOSTSNMPEXTRAOPTIONS$ --warning-average='$_SERVICEWARNING$' --critical-average='$_SERVICECRITICAL$' $_SERVICEEXTRAOPTIONS$

5.2 Création du template de service

créez le template de service OS-Linux-Cpu-SNMP-passmanager
Stacks Image 43729
Le template de service

5.3 Création du template d'hôte

créez le template d'hôte OS-Linux-SNMP-passmanager
Stacks Image 43734
Le template d'hôte
Associez le template de service
Stacks Image 43739
Relation template de service -> template d'hôte

5.4 Création de l'hôte

Créons l'hôte Central avec le template d'hôte OS-Linux-SNMP-passmanager
Stacks Image 43746
Création de l'hôte Central
Insérez les données suivantes dans la macro SNMPPASSMANAGER
--pass-manager=keepass --keepass-endpoint=general --keepass-endpoint-file=/etc/centreon/keepass/keepass_conn.pm --keepass-search-value='snmpcommunity=$..groups..entries.[?($_->{title} =~ /Central/i)].password' --keepass-map-option="snmp-community=%{snmpcommunity}"
Pour chaque nouvel hôte, il ne faudra pas oublier de changer le nom d'hôte dans la macro.

5.5 Test de la configuration

Une fois la configuration appliquée, on constate qu'il n'est pas possible de voir le nom de communauté.
Stacks Image 43759
Les services de l'hôte Central
Stacks Image 43762
Vue détail du service cpu, on constate qu'il n'est pas possible de visualiser le nom de communauté.
comments powered by Disqus