Vous êtes ici:

Menu


Stacks Image 36558
Ce le mode à privilégier pour la supervision d'un serveur Windows.

1 Activation du module CheckSystem

Si vous avez suivi le tutoriel précédent L'agent NSClient ++, après l'installation de l'agent NSClient sur le serveur Windows., vous pouvez tester la connectivité mais aucune commande comme cet exemple ci-dessous :
[root@centreon1910 plugins]# /usr/lib/nagios/plugins/check_centreon_nrpe3 -H 192.168.1.22 -c check_uptime
Unknown command(s): check_uptime
Si vous regardez le fichier de configuration nsclient.ini situé dans le dossier c:\Program Files\NSClient++, dans la section [/modules], aucun module n'est activé.
; in flight - TODO
[/settings/default]

; Undocumented key
password = monitoring

; Undocumented key
allowed hosts = 127.0.0.1,192.168.1.250,192.168.1.99


; in flight - TODO
[/settings/NRPE/server]

; Undocumented key
verify mode = none

; Undocumented key
insecure = true


; in flight - TODO
[/modules]

; Undocumented key
CheckExternalScripts = disabled

; Undocumented key
CheckHelpers = disabled

; Undocumented key
CheckEventLog = disabled

; Undocumented key
CheckNSCP = disabled

; Undocumented key
CheckDisk = disabled

; Undocumented key
CheckSystem = disabled

; Undocumented key
NRPEServer = enabled
Nous allons commencer par activer le module CheckSystem. Mettre la valeur enabled à CheckSystem soit en éditant le fichier soit en ligne de commande comme ci-dessous.
nscp settings --path /modules --key "CheckSystem" --set "enabled"
N'oubliez pas de redémarrer le service. Vous avez plusieurs modes de supervision que vous pouvez tester sans paramètres. Voici la liste, entre parenthèses le nom Legacy. Seul le service check_pdh exige des paramètres, nous ne le traitons pas ici.

2 Modification du buffer (Payload)

Si vous avez lu le paragraphe précédent sur l'explication du mode check_process, je vous explique que le résultat est tronqué. En fait, l'agent NSClient++ et le client NRPE ont un buffer de données limité à 1ko. Il est possible d'augmenter celui à 8ko, la limite du moteur de supervision Centreon (voir le guidelines Nagios). Pour cela, il faut procéder au paramètrage de l'agent et du client. Commençons par l'agent NSClient++ en modifiant son fichier de configuration. Dans la section [/settings/NRPE/server], ajoutez la ligne suivante
payload length = 8192
ou en ligne de commande
nscp settings --path /settings/NRPE/server --key "payload length" --set "8192"
L'avantage de la ligne de commande est l'ajout automatique d'un commentaire pour l'option. N'oubliez pas de redémarrez l'agent après chaque modification. Testons avec le client en ajoutant le paramètre adéquat pour obtenir le résultat suivant.
/usr/lib/nagios/plugins/check_centreon_nrpe3 -2 -P 8192 -H 192.168.1.22 -c check_process
OK: all processes are ok.|'winlogon.exe state'=1;0;0 'lsass.exe state'=1;0;0 'svchost.exe state'=1;0;0 'svchost.exe state'=1;0;0 'dwm.exe state'=1;0;0 'svchost.exe state'=1;0;0 'svchost.exe state'=1;0;0 'svchost.exe state'=1;0;0 'svchost.exe state'=1;0;0 'VBoxService.exe state'=1;0;0 'svchost.exe state'=1;0;0 'svchost.exe state'=1;0;0 'svchost.exe state'=1;0;0 'spoolsv.exe state'=1;0;0 'svchost.exe state'=1;0;0 'svchost.exe state'=1;0;0 'snmp.exe state'=1;0;0 'svchost.exe state'=1;0;0 'wlms.exe state'=1;0;0 'msdtc.exe state'=1;0;0 'svchost.exe state'=1;0;0 'MpCmdRun.exe state'=1;0;0 'RuntimeBroker.exe state'=1;0;0 'sihost.exe state'=1;0;0 'svchost.exe state'=1;0;0 'taskhostw.exe state'=1;0;0 'Explorer.EXE state'=1;0;0 'ShellExperienceHost.exe state'=1;0;0 'SearchUI.exe state'=1;0;0 'VBoxTray.exe state'=1;0;0 'cmd.exe state'=1;0;0 'conhost.exe state'=1;0;0 'ApplicationFrameHost.exe state'=1;0;0 'svchost.exe state'=1;0;0 'fontdrvhost.exe state'=1;0;0 'winlogon.exe state'=1;0;0 'LogonUI.exe state'=1;0;0 'dwm.exe state'=1;0;0 'rdpclip.exe state'=1;0;0 'rdpinput.EXE state'=1;0;0 'TabTip.exe state'=1;0;0 'TabTip32.exe state'=1;0;0 'notepad++.exe state'=1;0;0 'cmd.exe state'=1;0;0 'conhost.exe state'=1;0;0 'wmiprvse.exe state'=1;0;0 'wmiprvse.exe state'=1;0;0 'wmiprvse.exe state'=1;0;0 'ServerManager.exe state'=1;0;0 'mmc.exe state'=1;0;0 'nscp.exe state'=1;0;0 'count'=51;0;0
Si vous comparez ce résultat avec le résultat précédent dans la liste des check, vous constatez le plus grand nombre d'informations grâce à l'augmentation du buffer. Vous pouvez obtenir ce même résultat avec le client version 2 comme ceci.
/usr/lib/nagios/plugins/check_centreon_nrpe -m 8192 -H 192.168.1.22 -c check_process
Pour information, les messages d'erreurs à cause d'un mauvais paramètrage de buffer.
Payload à 8192 sur l'agent NSClient++
/usr/lib/nagios/plugins/check_centreon_nrpe -H 192.168.1.22 -c check_process
CHECK_NRPE: Socket timeout after 10 seconds.
/usr/lib/nagios/plugins/check_centreon_nrpe3 -H 192.168.1.22 -c check_process
CHECK_NRPE STATE CRITICAL: Socket timeout after 10 seconds.
Payload à 2048 sur l'agent NSClient++
/usr/lib/nagios/plugins/check_centreon_nrpe -m 8192 -H 192.168.1.22 -c check_process
CHECK_NRPE: Response packet had invalid CRC32.
/usr/lib/nagios/plugins/check_centreon_nrpe3 -2 -P 8192 -H 192.168.1.22 -c check_process
CHECK_NRPE: Receive underflow - only 2050 bytes received (4 expected).

3 Activation des arguments

Maintenant que nous avons un agent NSClient++ fonctionnel, nous allons améliorer la supervision de notre serveur Windows en ajustant les modes avec des seuils. Par exemple, pour le mode cpu, nous ajoutons les paramètres suivants.
/usr/lib/nagios/plugins/check_centreon_nrpe3 -2 -P 8192 -H 192.168.1.22 -c check_cpu -a "warn=load > 60" "crit=load > 70"
Exception processing request: Request contained arguments (not currently allowed, check the allow arguments option).
Nous avons un magnifique message d'erreur nous indiquant que les arguments ne sont pas autorisés. Nous devons activer cette option pour l'agent NSClient++. Ajoutons la commande suivante dans la section [/settings/NRPE/server]
allow arguments = true
Mais cela ne suffit pas, car les arguments contiennent des caractères spéciaux, comme le montre le message suivant.
/usr/lib/nagios/plugins/check_centreon_nrpe3 -2 -P 8192 -H 192.168.1.22 -c check_cpu -a "warn=load > 60" "crit=load > 70"
Exception processing request: Request command contained illegal metachars!
Rajoutons la ligne suivante, toujours dans la section [/settings/NRPE/server]
allow nasty characters = true
Vous pouvez utilisez ces lignes de commande pour effectuer les opérations précédentes.
nscp settings --path /settings/NRPE/server --key "allow arguments" --set true
nscp settings --path /settings/NRPE/server --key "allow nasty characters" --set true
net stop nscp
net start nscp
Votre commande fonctionnera avec les arguments.
/usr/lib/nagios/plugins/check_centreon_nrpe3 -2 -P 8192 -H 192.168.1.22 -c check_cpu -a "warn=load > 60" "crit=load > 70"
OK: CPU load is ok.|'total 5m'=0%;60;70 'total 1m'=2%;60;70 'total 5s'=0%;60;70

4 Gestion des logs

Il est toujours instructif d'avoir des traces de fonctionnement d'un programmes. Par défaut, le fichier de log nsclient.log se créé dans le dossier de l'application lorsqu'il y a une erreur comme l'appel à un mode inexistant par exemple.
Stacks Image 36703
Ce logs indique un mode check_cpue inexistant. A ma connaissance, il existe quatre options pour les fichiers de log :
level : niveau de verbosité de log du moins verbeux au plus verbeux : error, warning, info, debug, trace
date format : modification de l'affichage date/heure
file name : emplacement du fichier de log
max size : Taille max du fichier de log en octets pour effectuer une rotation de log
Nous allons créer notre fichier de log dans le dossier log se trouvant dans le dossier de l'application avec un niveau info et un format de date JJ-MM-AAAA hh:mm:ss
nscp settings --path /settings/log --key "level" --set "info"
nscp settings --path /settings/log --key "date format" --set "%d-%m-%Y %H:%M:%S"
nscp settings --path /settings/log --key "file name" --set "${exe-path}/log/nsclient.log"
nscp settings --path /settings/log/file --key "max file" --set 2048000
net stop nscp
net start nscp
Le dossier est automatiquement créé à la première écriture dans le fichier de log. Voici la configuration dans le fichier nsclient.ini
; LOG SECTION - Configure log properties.
[/settings/log]

; LOG LEVEL - Log level to use. Available levels are error,warning,info,debug,trace
level = info

; DATEMASK - The size of the buffer to use when getting messages this affects the speed and maximum size of messages you can recieve.
date format = %d-%m-%Y %H:%M:%S

; FILENAME - The file to write log data to. Set this to none to disable log to file.
file name = ${exe-path}/log/nsclient.log

[/settings/log/file]

; Undocumented key
max file = 2048000

4 Gestion des certificats

Sujet difficile à traiter, la gestion des certificats pour améliorer le chiffrement du flux entre le client NRPE et l'agent NSCLient++. Après avoir surfé sur la toile sur de nombreux articles sur le sujet, je suis arrivé à vous proposer cette solution. Il existe certainement d'autre solution.

4.1 Création du certificat

Je suis parti de la documentation Nagios pour créer un certificat auto-signé. Commençons par choisir l'emplacement du certificat et quelques ajustements
mkdir -p -m 750 /etc/centreon/certificat
chown root.centreon-engine /etc/centreon/certificat
cd /etc/centreon/certificat
mkdir -m 750 ca centreon_server_certs client_certs
chown root.centreon-engine ca
chown root.centreon-engine centreon_server_certs client_certs
touch /etc/pki/CA/index.txt
echo '1000' > /etc/pki/CA/serial
Créons le certificat d'autorité
cd /etc/centreon/certificat/ca/
openssl req -x509 -newkey rsa:4096 -keyout ca_key.pem -out ca_cert.pem -utf8 -days 3650
Saisir un mot de passe, garder-le en lieu sûr. Il sera nécessaire pour la création des autres certificats.
Generating a 4096 bit RSA private key
.............................++
....................................++
writing new private key to 'ca_key.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
Saisir vos informations en vous inspirant de mon exemple.
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:FR
State or Province Name (full name) []:Sarthe
Locality Name (eg, city) [Default City]:Le Mans
Organization Name (eg, company) [Default Company Ltd]:Duchmol
Organizational Unit Name (eg, section) []:Demo
Common Name (eg, your name or your server's hostname) []:CA
Email Address []:email@domain.local
Nous continuons avec le certificat du client NRPE
cd /etc/centreon/certificat/client_certs
openssl req -new -newkey rsa:2048 -keyout client_cert.key -out client_cert.csr -nodes
Ne saisissez pas de mot de passe.
Generating a 2048 bit RSA private key
....................................+++
..................................................+++
writing new private key to 'client_cert.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:FR
State or Province Name (full name) []:Sarthe
Locality Name (eg, city) [Default City]:Le Mans
Organization Name (eg, company) [Default Company Ltd]:Duchmol
Organizational Unit Name (eg, section) []:Demo
Common Name (eg, your name or your server's hostname) []:NRPE_client
Email Address []:email@domain.local

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Signez votre certificat avec le certificat d'autorité
cd /etc/centreon/certificat/
openssl ca -days 365 -notext -md sha256 -keyfile ca/ca_key.pem -cert ca/ca_cert.pem -in client_certs/client_cert.csr -out client_certs/client_cert.pem
Nous avons besoin du mot de passe défini précédemment. Acceptez la signature.
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for ca/ca_key.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 4097 (0x1001)
        Validity
            Not Before: Dec 20 08:27:29 2019 GMT
            Not After : Dec 19 08:27:29 2020 GMT
        Subject:
            countryName               = FR
            stateOrProvinceName       = Sarthe
            organizationName          = Duchmol
            organizationalUnitName    = Demo
            commonName                = NRPE_client
            emailAddress              = email@domain.local
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                D4:1D:77:2F:32:66:16:95:40:80:83:07:5C:1D:F8:99:8D:11:AE:6E
            X509v3 Authority Key Identifier:
                keyid:9F:66:FF:D9:B6:6B:A8:26:C6:5C:32:C8:4C:AF:06:5D:ED:4F:B7:C3

Certificate is to be certified until Dec 19 08:27:29 2020 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Finalement, nous avons trois fichiers qui nous serviront à l'établissement de la connexion.
ls -lR
.:
total 0
drwxr-x--- 2 root centreon-engine            43 20 déc.  09:07 ca
drwxr-x--- 2 root centreon-engine  6 20 déc.  09:04 centreon_server_certs
drwxr-x--- 2 root centreon-engine 75 20 déc.  09:27 client_certs

./ca:
total 8
-rw-r--r-- 1 root root 2086 20 déc.  09:07 ca_cert.pem
-rw-r--r-- 1 root root 3406 20 déc.  09:07 ca_key.pem

./centreon_server_certs:
total 0

./client_certs:
total 12
-rw-r--r-- 1 root root 1054 20 déc.  09:23 client_cert.csr
-rw-r--r-- 1 root root 1704 20 déc.  09:23 client_cert.key
-rw-r--r-- 1 root root 1773 20 déc.  09:27 client_cert.pem
Récupérez les fichiers ca_cert.pem, client_cert.key et client_cert.pem et les copiez dans le serveur Windows dans le dossier C:\Program Files\NSClient++\security
Stacks Image 36787

4.2 Configuration de l'Agent NSClient++

Il est temps de configurer votre agent NSClient++ pour n'accepter que le certificat que nous avons créé. Ajoutez les commandes suivantes :
nscp settings --path /settings/NRPE/server --key "verify mode" --set "peer-cert"
nscp settings --path /settings/NRPE/server --key "insecure" --set false
nscp settings --path /settings/NRPE/server --key "certificate" --set "${certificate-path}/client_cert.pem"
nscp settings --path /settings/NRPE/server --key "ca" --set "${certificate-path}/ca_cert.pem"
nscp settings --path /settings/NRPE/server --key "certificate key" --set "${certificate-path}/client_cert.key"
nscp settings --path /settings/NRPE/server --key "allowed ciphers" --set "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"
nscp settings --path /settings/NRPE/server --key "ssl options" --set "no-sslv2,no-sslv3"
nscp settings --path /settings/NRPE/server --key "dh" --set none
net stop nscp
net start nscp
Vous obtenez la modification du fichier ci-dessous
[/settings/NRPE/server]

; VERIFY MODE - Comma separated list of verification flags to set on the SSL socket.  none	The server will not send a client certificate request to the client, so the client will not send a certificate. peer	The server sends a client certificate request to the client and the certificate returned (if any) is checked. fail-if-no-cert	if the client did not return a certificate, the TLS/SSL handshake is immediately terminated. This flag must be used together with peer. peer-cert	Alias for peer and fail-if-no-cert. workarounds	Various bug workarounds. single	Always create a new key when using tmp_dh parameters. client-once	Only request a client certificate on the initial TLS/SSL handshake. This flag must be used together with verify-peer   
verify mode = peer-cert

; ALLOW INSECURE CHIPHERS and ENCRYPTION - Only enable this if you are using legacy check_nrpe client.
insecure = false

; SSL CERTIFICATE - 
certificate = ${certificate-path}/client_cert.pem

; CA - 
ca = ${certificate-path}/ca_cert.pem

; SSL CERTIFICATE - 
certificate key = ${certificate-path}/client_cert.key

; ALLOWED CIPHERS - The chipers which are allowed to be used. The default here will differ is used in "insecure" mode or not. check_nrpe uses a very old chipers and should preferably not be used. For details of chipers please see the OPEN ssl documentation: https://www.openssl.org/docs/apps/ciphers.html
allowed ciphers = ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH

; VERIFY MODE - Comma separated list of verification flags to set on the SSL socket.  default-workarounds	Various workarounds for what I understand to be broken ssl implementations no-sslv2	Do not use the SSLv2 protocol. no-sslv3	Do not use the SSLv3 protocol. no-tlsv1	Do not use the TLSv1 protocol. single-dh-use	Always create a new key when using temporary/ephemeral DH parameters. This option must be used to prevent small subgroup attacks, when the DH parameters were not generated using "strong" primes (e.g. when using DSA-parameters).   
ssl options = no-sslv2,no-sslv3

; DH KEY - 
dh = none


; in flight - TODO
Pour vous connecter à l'agent en tant que centreon-engine, utilisez cette ligne de commande
-bash-4.2$ /usr/lib/nagios/plugins/check_centreon_nrpe3 -A /etc/centreon/certificat/ca/ca_cert.pem -C /etc/centreon/certificat/client_certs/client_cert.pem -K /etc/centreon/certificat/client_certs/client_cert.key -2 -P 8192 -H 192.168.1.22
I (0.5.2.35 2018-01-28) seem to be doing fine...
Vérifions que notre agent NSClient++ n'accepte que les connexions avec certificat
-bash-4.2$ /usr/lib/nagios/plugins/check_centreon_nrpe3  -2 -P 8192 -H 192.168.1.22
CHECK_NRPE: Error - Could not connect to 192.168.1.22. Check system logs on 192.168.1.22
Et si nous utilisons un certificat différent
-bash-4.2$ /usr/lib/nagios/plugins/check_centreon_nrpe3 -A /root/ssl/ca/ca_cert.pem -C /root/ssl/client_certs/client_cert.pem -K /root/ssl/client_certs/client_cert.key -2 -P 8192 -H 192.168.1.22
CHECK_NRPE: (ssl_err != 5) Error - Could not complete SSL handshake with 192.168.1.22: 1

4.3 Intégration dans Centreon

Il nous reste a finaliser l'intégration dans Centreon en utilisant les modèles d'hôtes et de services. Commençons par la commande de vérification.
Stacks Image 36816
Nom : check-os-windows-nrpe-cpu
commande : $USER1$/$_HOSTNRPECLIENT$ -H $HOSTADDRESS$ -p $_HOSTNRPEPORT$ -t $_HOSTNRPETIMEOUT$ -A $_HOSTCA-CERT$ -C $_HOSTCLIENT-CERT$ -K $_HOSTKEY-FILE$ $_HOSTNRPEOPTIONS$ -c check_cpu -a "warning=$_SERVICEWARNING$" "critical=$_SERVICECRITICAL$" $_SERVICEOPTIONS$
Ensuite nous allons créer le modèle d'hôte htpl_os_windows_nrpe basé sur le modèle générique.
Stacks Image 36732
Liste des macros
NRPECLIENT : check_centreon_nrpe3
NRPEPORT : 5666
NRPETIMEOUT : 30
CA-CERT : /etc/centreon/certificat/ca/ca_cert.pem
CLIENT-CERT : /etc/centreon/certificat/client_certs/client_cert.pem
KEY-FILE : /etc/centreon/certificat/client_certs/client_cert.key
NRPEOPTIONS : -2 -P 8192
Stacks Image 36850
Pour les utilisateurs des plugins-pack
Il est possible d'ajouter les arguments pour les certificats dans la macro EXTRAOPTIONS du modèle OS-Windows-NSClient-05-NRPE-custom

plugin-pack-nrpe
Modifiez les macros suivantes
NRPECLIENT : check_centreon_nrpe3
NRPEEXTRAOPTIONS : -u -2 -P 8192 -A /etc/centreon/certificat/ca/ca_cert.pem -C /etc/centreon/certificat/client_certs/client_cert.pem -K /etc/centreon/certificat/client_certs/client_cert.key
Nous terminerons par le modèle de service stpl_windows_nrpe_cpu basé sur le service générique.
Stacks Image 36830
Ne pas oublier la relation avec le template d'hôte.
Stacks Image 36837
Il reste à créer l'hôte.
Stacks Image 36840
Et le superviser
Stacks Image 36845
Dans l'état actuel du paramétrage, nous n'avons pas de données de performances, nous verrons dans un prochain article les bons arguments à mettre en place. Un script permettant de vérifier la date d'expiration se trouve sur cette page le plugin check_cert.sh.
comments powered by Disqus
 Vous êtes ici: