---
categories: monitoring
title: Howto NRPE
---

* Documentation : <https://assets.nagios.com/downloads/nagioscore/docs/nrpe/NRPE.pdf>
* Statut de cette page : test / bookworm

NRPE (Nagios Remote PluginExecutor) permet d'exécuter de façon légère des commandes prédéfinies sur un serveur distant.
Historiquement il est utilisé par NAGIOS pour des « checks » sur un serveur distant.
Il peut également être utilisé par [Icinga](HowtoIcinga).
Il supporte SSL/TLS ce qui permet d'avoir un minimum de sécurité.

## Installation

~~~
# apt install nagios-nrpe-server monitoring-plugins monitoring-plugins-basic monitoring-plugins-common monitoring-plugins-standard nagios-plugins-contrib

$ /usr/sbin/nrpe --version
NRPE - Nagios Remote Plugin Executor
Version: 4.1.0

# systemctl status nagios-nrpe-server
● nagios-nrpe-server.service - Nagios Remote Plugin Executor
     Loaded: loaded (/lib/systemd/system/nagios-nrpe-server.service; enabled; preset: enabled)
     Active: active (running) since Fri 2023-07-28 15:55:54 CEST; 3 days ago
       Docs: http://www.nagios.org/documentation
   Main PID: 549 (nrpe)
      Tasks: 1 (limit: 2356)
     Memory: 1.7M
        CPU: 15ms
     CGroup: /system.slice/nagios-nrpe-server.service
             └─549 /usr/sbin/nrpe -c /etc/nagios/nrpe.cfg -f
~~~


## Configuration

Nous utilisons le fichier `/etc/nagios/nrpe.d/evolix.cfg` pour surcharger la configuration par défaut.

`/etc/nagios/nrpe.d/evolix.cfg` :

~~~
# Allowed IPs
allowed_hosts=192.0.2.42,192.0.2.43

# System checks
command[check_load]=/usr/lib/nagios/plugins/check_load --percpu --warning=0.7,0.6,0.5 --critical=0.9,0.8,0.7
command[check_swap]=/usr/lib/nagios/plugins/check_swap -a -w 30% -c 20%
command[check_disk1]=/usr/lib/nagios/plugins/check_disk -e -w 10% -c 3% -W 10% -K 3% -C -w 5% -c 2% -W 5% -K 2% -p /home -x /lib/init/rw -x /dev -x /dev/shm -x /run -I '^/run/' -I '^/sys/'
command[check_zombie_procs]=sudo /usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=sudo /usr/lib/nagios/plugins/check_procs -w 400 -c 600
command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10

# Generic services checks
command[check_smtp]=/usr/lib/nagios/plugins/check_smtp -H localhost
command[check_dns]=/usr/lib/nagios/plugins/check_dns -H evolix.net
command[check_ntp]=/usr/lib/nagios/plugins/check_ntp -H ntp.evolix.net
command[check_ssh]=/usr/lib/nagios/plugins/check_ssh localhost
command[check_mailq]=/usr/lib/nagios/plugins/check_mailq -M postfix -w 10 -c 20

# Specific services checks
command[check_pgsql]=/usr/lib/nagios/plugins/check_pgsql -H localhost -l nrpe -p 'PASSWORD'
command[check_mysql]=/usr/lib/nagios/plugins/check_mysql -H localhost -f ~nagios/.my.cnf
...
~~~

> *Note* : dans des versions précédentes de Debian, il n'était pas vraiment possible de surcharger la configuration : des options en double provoquait une activation aléatoire d'une option ou d'une autre !


Les directives importantes & utiles sont : 

* `allowed_hosts` : Permet d'énumérer les adresses IP qui sont autorisées à parler avec le daemon NRPE
* `command[CHECK_NAME]=/usr/lib/nagios/plugins/check_XXX` : Définis une commande NRPE  `CHECK_NAME` 


## Principe

Le principe est qu'un démon écoute sur le port TCP/5666 et qu'on peut ainsi exécuter une commande distante définie dans la configuration.

On utilise la commande check_nrpe, celle-ci est distribuée dans le paquet `nagios-nrpe-plugin` dans Debian

~~~
# apt install nagios-nrpe-plugin
$ /usr/lib/nagios/plugins/check_nrpe -V
NRPE Plugin for Nagios
Version: 4.1.0

## Exemple: /usr/lib/nagios/plugins/check_nrpe -H HOTE_NRPE -c CHECK_NAME
$ /usr/lib/nagios/plugins/check_nrpe -H 192.0.2.42 -c check_load
OK - load average: 0.01, 0.01, 0.01|load1=0.012;0.700;0.900;0; load5=0.010;0.600;0.800;0; load15=0.010;0.500;0.700;0; 
~~~

> *Note* : il faut savoir que le `check_load` lance simplement la commande définie dans la configuration.
Cela peut-être un check, mais aussi n'importe quelle commande ou script de son choix !


## checks

Même si ce n'est pas directement lié à NRPE, listons quelques checks intéressants.

### check_load

Vu l'utilisation massive de plusieurs CPUs, il est très intéressant d'utiliser l'option `--percpu` qui permet au check de s'adapter tout seul au nombre de CPUs :

~~~
$ /usr/lib/nagios/plugins/check_load --percpu --warning=0.7,0.6,0.5 --critical=0.9,0.8,0.7
~~~

### check_disk

Plusieurs options sont intéressantes :

* `-e` : check toutes les partitions mais en cas d'erreur, n'affiche que les partitions qui sont en erreur (WARN, CRIT ou UNKN)
* `-x /run` : ignore une partition
* `-I '^/run/' : ignore les partitions selon un pattern
* `-C -w 5% -c 2% -W 5% -K 2% -p /home` : donne des seuils d'alertes différents pour une partition

### check_http

Plusieurs options sont intéressantes :

* `-S -H example.com -C 15,5` : vérifie que la validité d'un certificat SSL/TLS est inférieure à 15 jours (WARN) ou 5 jours (CRIT)


## Plomberie

### Erreur SSL avec le service NRPE sur une ancienne Debian depuis un client NRPE récent (Debian 10+)

Les versions récentes (Debian 10 et suivantes) ont une version plus récente d'OpenSSL, la bibliothèque qui gère le chiffrement TLS de la connexion NRPE. 
Celle-ci refusera d'établir la connexion chiffrée avec une ancienne version de NRPE, notamment celle présente dans Debian 8 (et plus ancien).

Pour le détail technique, c'est OpenSSL côté client qui refuse de faire un échange Diffie Hellman de 512 bits. 
Sauf que cette taille de clé est malheureusement codée en dur dans NRPE. 

Plusieurs alternatives sont possibles pour continuer de surveiller une ancienne machine : 
* A/ (Déconseillée) Désactiver SSL/TLS pour la communication entre le client et le serveur NRPE
* B/ Encapsuler l'utilisation de NRPE dans SSH. Le service de monitoring fait une connexion SSH vers l'hôte surveillé pour utiliser la commande `check_nrpe` localement
* C/ Patcher le serveur NRPE pour qu'il utilise à place une clé de 2048bits ([patch](https://gitea.evolix.org/evolix/nagios-nrpe-jessie-gbp/commit/b988357a7f58c2f28055f75bd3eec129ee1957bc)) - Cette version patchée est disponible sur notre dépôt [pub.evolix.org](/HowtoDebian/SourcesList)

### Désactiver SSL/TLS

Nous déconseillons cette configuration, mais c'est possible de désactiver le chiffrement.

Dans le fichier de configuration `/etc/default/nagios-nrpe-server`, il y a la variable `NRPE_OPTS`. Il faut la décommenter et rajouter `-n` pour désactiver SSL et redémarrer le servce.

> **Attention** :  ça implique que **tous** les clients devront désactiver SSL pour communiquer avec le service NRPE.

Côté client, on ajoutera aussi l'option `-n` pour désactiver l'utilisation de SSL/TLS lors de la connexion : 

Exemple : `/usr/lib/nagios/plugins/check_nrpe -n -H 192.0.2.42 -c check_load`


### Configurer un certificat SSL/TLS serveur

Dans la configuration de NRPE, il est possible de configurer un certificat serveur. Ça permet notamment au client de valider l'identité du serveur.


Côté serveur, ça se configure avec les directives suivantes pour donner les fichiers du certificat et la clé privée : 

```
ssl_cert_file=/etc/nagios/cert.pem
ssl_privatekey_file=/etc/nagios/privkey.key
```

Attention à ce que l'utilisateur `nagios` ait bien le droit de lecture sur ces fichiers.


> **Remarque importante** : Il semble que `check_nrpe` ne valide pas la correspondance du `CN` (CommonName) du certificat avec l'adresse de destination utilisée en argument (le `-H`) mais seulement la validité du certificat face à la CA utilisée avec l'argument.

Exemple : 

```
## Si la CA de notre PKI est dans /etc/ssl/ca-pki.pem
$ /usr/lib/nagios/plugins/check_nrpe -H 192.0.2.10 -A /etc/ssl/ca-pki.pem -c check_load
```

> *Note* : On peut utiliser `/etc/ssl/certs/ca-certificates.crt` si le certificat est issu d'une autorité de certification classique

## FAQ