Checkmk
to checkmk.com

Important

This is a machine translation based on the English version of the article. It might or might not have already been subject to text preparation. If you find errors, please file a GitHub issue that states the paragraph that has to be improved.

1. Introduction

linux

Depuis la version 2.1.0 de Checkmk, le nouvel agent Linux avec l’Agent Controller prend en charge le mode pull enregistré, chiffré par TLS et compressé. Pour cela, l’Agent Controller doit toutefois être lancé en tant que processus d’arrière-plan (démon) par le système d’initialisation sur l’hôte sur lequel il doit être installé. Actuellement, seule la version systemd sur la plateforme x86_64 est prise en charge à cet égard, et la gestion des paquets pour les paquets deb ou rpm est requise pour la configuration.

Si toutes les conditions suivantes sont remplies…​

  • Votre système Linux utilise systemd à partir de la version 219 ou ultérieure comme système d'initialisation

  • L'architecture du processeur est x86_64

  • Les paquets sont gérés via deb ou rpm

…​vous pouvez découvrir comment installer, configurer et étendre l'agent à l'aide de l'Agent Controller dans l'article « Surveillance sous Linux ».

Si la plupart des serveurs et des postes de travail Linux répondent à ces exigences, les systèmes ayant subi des mises à niveau de version au fil des ans, les anciennes machines virtuelles avec des instances i686, les conteneurs sans distribution ou les systèmes Linux embarqués ne sont pas simplement des éléments marginaux, mais des composants normaux de nombreux environnements système pour lesquels une surveillance est nécessaire. Grâce à la structure modulaire de Checkmk, vous pouvez tout de même inclure ces hôtes Linux dans la surveillance.

Tip

La dernière phrase fait spécifiquement référence aux hôtes Linux. Bien que l’installation d’agents pour d’autres systèmes Unix en mode legacy suive les mêmes principes de base que pour les hôtes Linux, il peut y avoir des différences dans de nombreux détails. Par exemple, le script d’agent pour AIX ne prend pas en charge le chiffrement symétrique, et les chemins d’accès standard sont adaptés aux conventions des systèmes cibles respectifs.

Étant donné que le transport chiffré des données de l'agent via l'Agent Controller est ici hors de question, nous expliquons dans cet article comment procéder soit au transport non chiffré via un super-serveur Internet, soit à la configuration de SSH en tant que tunnel chiffré.

Le mode push dépend également de l’Agent Controller et n’est donc pas disponible en mode legacy. Si un hôte inaccessible au serveur Checkmk doit être inclus dans la surveillance en mode legacy, vous devrez trouver une autre solution. Vous pouvez utiliser des programmes de source de données pour vous connecter depuis l’hôte surveillé et les utiliser pour transmettre la sortie de l’agent au serveur Checkmk.

Les cas pour lesquels le mode de l'agent n'a pas d'importance sont présentés dans l'article consacré à l'agent Linux avec Agent Controller :

2. Installation

En fonction du système de gestion des paquets, trois options d'installation s'offrent à vous : Des paquets DEB ou RPM pour Debian, Ubuntu, Red Hat Enterprise Linux (RHEL), SLES (et leurs dérivés), une archive TGZ pour toutes les autres distributions (éditions commerciales) ou encore un script shell (Checkmk Community) pour toute autre distribution.

2.1. Installation à partir de paquets

Vous trouverez une description détaillée de l'installation à partir des paquets deb ou rpm dans l'article « Monitoring Linux » ; nous nous contenterons donc ici de vous présenter brièvement la procédure.

Dans CRE Checkmk Community, vous trouverez les paquets Linux de l’agent via Setup > Agents > Linux. Dans les éditions commerciales, vous accédez d’abord à l’Agent Bakery dans le menu Setup via Agents > Windows, Linux, Solaris, AIX, où vous trouverez les paquets précompilés. De là, l’option de menu Related > Linux, Solaris, AIX files vous mènera à la liste des fichiers de l’agent.

Vous pouvez télécharger ces fichiers via le navigateur ou utiliser wget ou curl pour les télécharger directement sur l’hôte dans la surveillance :

root@linux# wget http://mycmkserver/mysite/check_mk/agents/check-mk-agent-2.4.0p25-1.noarch.rpm
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Sur RHEL, SLES et les distributions apparentées, le paquet RPM est installé sous le nom root à l'aide de la commande rpm -U :

root@linux# rpm -U check-mk-agent-2.4.0p25-1.noarch.rpm
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

À noter que l'option -U signifie « mise à jour », mais elle permet également d'effectuer correctement une installation initiale.

L'installation du paquet DEB sur Debian, Ubuntu ou des distributions apparentées s'effectue en tant qu'root, à l'aide de la commande dpkg -i :

root@linux# dpkg -i check-mk-agent_2.4.0p25-1_all.deb
(Reading database ... 739920 files and directories currently installed.)
Preparing to unpack .../check-mk-agent_2.4.0p25-1_all.deb ...
Unpacking check-mk-agent (2.4.0p25-1) ...
Setting up check-mk-agent (2.4.0p25-1) ...
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

2.2. Installation à partir de l'archive TGZ

CEE Pour une installation pratique indépendante de la distribution, vous aurez besoin de l'agent Linux au format d'archive TGZ (« Tarball »), que vous pouvez télécharger à partir des éditions commerciales dans le menu Configuration via Agents > Windows, Linux, Solaris, AIX. L'archive TGZ contient la structure de répertoires complète de l'agent Linux à décompresser dans le répertoire racine de l'hôte surveillé.

agent linux legacy agents

Le paramètre « -C » (« changer de répertoire ») est essentiel lors de la décompression afin de garantir que tous les chemins d'accès aux fichiers sont corrects. Nous utilisons également « --no-overwrite-dir » afin que les permissions des répertoires existants ne soient pas modifiées :

root@linux# tar -C / --no-overwrite-dir -xvf /tmp/check-mk-agent_2.4.0p25.tar.gz
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Si vous avez tout fait correctement, le script de l'agent devrait désormais s'exécuter simplement en tant que commande et produire sa sortie habituelle. L'| heade tout ce qui suit la 11e ligne de sortie :

root@linux# check_mk_agent | head
<<<check_mk>>>
Version: 2.4.0p25
AgentOS: linux
Hostname: mycmkserver
AgentDirectory: /etc/check_mk
DataDirectory: /var/lib/check_mk_agent
SpoolDirectory: /var/lib/check_mk_agent/spool
PluginsDirectory: /usr/lib/check_mk_agent/plugins
LocalDirectory: /usr/lib/check_mk_agent/local
<<<df>>>
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Si un numéro de version inférieur à 2.2.0 s'affiche ici, vous avez probablement encore une ancienne version du script de l'agent installée en tant que /usr/local/bin/check_mk_agent. Déplacez cet ancien script ou renommez-le, par exemple en ajoutant .bak à la fin du nom de fichier.

2.3. Installation manuelle du script de l'agent

Une installation manuelle du script de l'agent est rarement nécessaire, mais elle n'est pas très difficile non plus. Dans ce type d'installation, seul le script de l'agent est installé dans un premier temps, mais aucune configuration de l'accès n'est encore effectuée. Pour cela, vous avez besoin de la boîte Agents disponible sur la page des fichiers de l'agent. Vous y trouverez le fichier check_mk_agent.linux :

List of agent scripts for download.

Chargez ce fichier sur le système cible et copiez-le dans un répertoire accessible à l'root. Le répertoire /usr/local/bin/est un bon choix, car il se trouve dans le chemin de recherche et est destiné aux extensions personnalisées. Vous pouvez également utiliser le répertoire /usr/bin ou un sous-répertoire de /opt. Nous utilisons le répertoire /usr/bin afin que tous les tests correspondent aux autres méthodes d'installation. Vous pouvez également effectuer l'installation directement à l'aide de wget si celui-ci est disponible :

root@linux# cd /usr/bin
root@linux:/usr/bin# wget http://mycmkserver/mysite/check_mk/agents/check_mk_agent.linux
root@linux:/usr/bin# mv check_mk_agent.linux check_mk_agent
root@linux:/usr/bin# chmod 755 check_mk_agent
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

N'oubliez pas les deux dernières commandes : elles supprimeront l'extension .linux et rendront le fichier exécutable. L'agent devrait désormais être exécutable en tant que commande et produire sa sortie habituelle. L'| heade tronque tout ce qui suit la 10e ligne de sortie :

root@linux# check_mk_agent | head
<<<check_mk>>>
Version: 2.4.0p25
AgentOS: linux
Hostname: mycmkserver
AgentDirectory: /etc/check_mk
DataDirectory: /var/lib/check_mk_agent
SpoolDirectory: /var/lib/check_mk_agent/spool
PluginsDirectory: /usr/lib/check_mk_agent/plugins
LocalDirectory: /usr/lib/check_mk_agent/local
<<<df>>>
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Si vous souhaitez configurer ou étendre l'agent, vous devrez créer vous-même les répertoires nécessaires. L'emplacement des trois répertoires obligatoires est codé en dur dans l'agent dans des variables commençant par MK_ et est également fourni aux plug-ins via l'environnement système :

root@linux# grep 'export MK_' check_mk_agent
export MK_LIBDIR="/usr/lib/check_mk_agent"
export MK_CONFDIR="/etc/check_mk"
export MK_VARDIR="/var/lib/check_mk_agent"
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Vous devez créer ces trois répertoires (avec les permissions par défaut 755 et root comme propriétaire) :

root@linux# mkdir /usr/lib/check_mk_agent /etc/check_mk /var/lib/check_mk_agent
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Si vous souhaitez utiliser d'autres chemins d'accès, il vous suffit de modifier le fichier /usr/bin/check_mk_agent.

3. Vérification de l'état après l'installation

Après l'installation, vérifiez si un service est déjà configuré pour écouter sur le port TCP 6556. En particulier, lors d'une installation via un gestionnaire de paquets, un service xinetd ou systemd (en mode super-serveur) existant est utilisé pour fournir la sortie non chiffrée de l'agent sur le port TCP 6556.

Nous utilisons la commande ss. Si cette commande n'est pas disponible (sur les anciennes distributions), l'un des programmes netstat, sockstat ou lsof peut être utilisé à la place.

root@linux# ss -tulpn | grep 6556
tcp	LISTEN 0	64	*:6556	*:*	users:(("xinetd",pid=1573,fd=5))
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

S'il n'y a pas de sortie, le port 6556 n'est pas encore ouvert. Si une ligne s'est affichée, cela signifie que le port 6556 est ouvert. Dans ce cas, nous nous intéressons au nom du programme entre parenthèses, ici xinetd. Mémorisez ce nom de programme, car vous en aurez besoin lors de la suite de la procédure, quelle que soit la méthode d'accès choisie.

Si, après l'installation à partir d'un paquet DEB ou RPM, le nom du programme cmk-agent-ctl s'affiche ici, vous pouvez vous réjouir : votre système Linux (en particulier la version de systemd utilisée) est en effet suffisamment à jour pour utiliser l'Agent Controller, comme décrit dans l'article Surveillance sous Linux, et vous pouvez procéder à l'enregistrement de l'agent.

4. Choix du mode d'accès

À ce stade, vous devez prendre une décision :

  • Souhaitez-vous autoriser une connexion non chiffrée, facile à configurer ?

  • Ou bien la sécurité accrue offerte par le chiffrement vaut-elle pour vous un certain effort supplémentaire ?

Les aspects pertinents à cet égard sont les informations auxquelles un attaquant potentiel a accès et l'ampleur des efforts qu'il devrait déployer. Par exemple, la table des processus, qui est toujours transmise, peut déjà fournir des indices précieux, et une liste des mises à jour logicielles qui n'ont pas encore été effectuées rend possibles des attaques ciblées.

En règle générale, nous recommandons donc le transfert de données chiffré via un tunnel SSH.

Important

Lorsque vous appelez le script de l'agent directement dans un shell, d'autres variables d'environnement peuvent être disponibles que lors d'un appel via (x)inetd, via Agent Controller ou dans une session SSH sans terminal de contrôle. En cas de problèmes avec l'une ou l'autre méthode d'exécution, il peut être nécessaire de s'assurer de la présence de certaines variables d'environnement. La méthode utilisée à cet effet dépend trop de chaque cas particulier pour que nous puissions formuler des recommandations à ce stade.

5. Non chiffré : configuration de (x)inetd

Si vous estimez que le recours à un transfert de données non chiffré constitue un risque acceptable, l'étape suivante consiste à configurer un super-serveur Internet. Si le test avec ss a montré que xinetd, inetd ou systemd écoute déjà sur le port TCP 6556, passez au test de connexion.

Si ce n'est pas le cas, utilisez la commande ps pour vérifier si un inetd est déjà actif :

root@linux# ps ax | grep inetd
 1913 ?        Ss     0:00 /usr/sbin/xinetd -pidfile /run/xinetd.pid -stayalive -inetd_compat -inetd_ipv6
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Vous pouvez déterminer, à partir du processus en cours d'exécution, s'il s'agit de la version plus récente d'xinetd ou de l'un des autres super-serveurs Internet (GNU-Inetutils, OpenBSD-Inetd, Busybox-Inetd). Si aucun processus n'est actif, installez xinetd via le gestionnaire de paquets de votre distribution. Si un « classique » inetd est actif, il est généralement judicieux de le configurer et de l'utiliser plutôt que de passer à xinetd.

5.1. Configuration de xinetd

CEE Pour configurer un service existant utilisant le répertoire /etc/xinetd.d/, l’archive TGZ ainsi que les paquets DEB et RPM sont fournis avec un script qui automatise les deux étapes nécessaires : il installe d’abord la configuration, puis force xinetd à relire les paramètres modifiés. Vous devez exécuter le script en indiquant les chemins d’accès complets :

root@linux# /var/lib/cmk-agent/scripts/super-server/1_xinetd/setup deploy
root@linux# /var/lib/cmk-agent/scripts/super-server/1_xinetd/setup trigger
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Si vous installez le script de l'agent manuellement, créez le fichier de configuration /etc/xinetd.d/check-mk-agent à l'aide de l'éditeur. Le contenu suivant suffit :

/etc/xinetd.d/check-mk-agent
service check_mk
{
        type           = UNLISTED
        port           = 6556
        socket_type    = stream
        protocol       = tcp
        wait           = no
        user           = root
        server         = /usr/local/bin/check_mk_agent
        # only_from    = 10.118.14.5 10.118.14.37
        disable        = no
}

Nous avons ajouté ici une ligne (commentée) limitant l'accès à deux serveurs Checkmk. Vous pouvez consulter d'autres options de configuration en examinant le fichier ~/share/check_mk/agents/scripts/super-server/1_xinetd/check-mk-agent sur votre serveur Checkmk.

Si votre fichier xinetd utilise l'ancien schéma de configuration avec un seul grand fichier /etc/xinetd.conf, transférez l'exemple de configuration de /etc/check_mk/xinetd-service-template.cfg vers /etc/xinetd.conf.

Une fois la configuration d'xinetd terminée, redémarrez-le :

root@linux# service xinetd restart
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Vous êtes désormais prêt pour le test de connexion.

5.2. Configuration d'un autre inetd

Vérifiez d'abord si votre fichier /etc/services contient déjà une entrée pour le port 6556 :

root@linux# grep 6556/ /etc/services
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Si ce n'est pas le cas, Checkmk doit être enregistré en tant que service. Pour ce faire, ajoutez la ligne suivante. La notation utilisée ici est exactement la même que celle stockée dans la table IANA, avec un seul tiret :

/etc/services
checkmk-agent        6556/tcp   #Checkmk monitoring agent

Le format du fichier de configuration d'/etc/inetd.confs diffère selon les variantes. Reportez-vous aux commentaires dans le fichier de configuration et à la page de manuel (man 5 inetd.conf) pour connaître le format correspondant à votre inetd. Voici la configuration correspondant à openbsd-inetd, avec deux lignes pour la prise en charge d'IPv4 et d'IPv6. Une fois encore, il est important de noter la notation correcte :

/etc/inetd.conf
checkmk-agent stream tcp  nowait root /usr/bin/check_mk_agent
checkmk-agent stream tcp6 nowait root /usr/bin/check_mk_agent

Après avoir modifié le fichier de configuration, redémarrez l'inetd, par exemple avec :

root@linux# /etc/init.d/inetd restart
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Selon le système d'initialisation utilisé et le super-serveur installé, cette commande peut varier.

5.3. Test de connexion

Vérifiez d'abord si l'xinetd ou l'inetd a pu être (re)démarré :

root@linux# ss -tulpn | grep 6556
tcp	LISTEN 0	64	*:6556	*:*	users:(("xinetd",pid=1573,fd=5))
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Vous pouvez désormais vous connecter à telnet ou nc (netcat) sur le port TCP 6556 — d'abord depuis l'hôte lui-même, puis depuis le serveur Checkmk :

OMD[mysite]:~$ nc 12.34.56.78 6556
<<<check_mk>>>
Version: 2.4.0p25
AgentOS: linux
Hostname: myhost123
AgentDirectory: /etc/check_mk
DataDirectory: /var/lib/check_mk_agent
SpoolDirectory: /var/lib/check_mk_agent/spool
PluginsDirectory: /usr/lib/check_mk_agent/plugins
LocalDirectory: /usr/lib/check_mk_agent/local
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Si vous recevez une notification de connexion refusée alors que le service (x)inetd est actif, vérifiez les paramètres de votre pare-feu.

6. Crypté : utilisation d'un tunnel SSH

La configuration du tunnel SSH s'effectue en suivant les étapes suivantes :

  1. Créez une paire de clés SSH spécialement à cet effet.

  2. Sur les systèmes cibles, autorisez l'accès à l'agent à l'aide de cette clé.

  3. Configurez le serveur Checkmk pour qu'il utilise SSH à la place de la connexion TCP sur le port 6556.

  4. Si possible : désactivez l'accès via (x)inetd.

Voici maintenant la procédure complète, étape par étape, avec tous les détails nécessaires :

6.1. Création d'une paire de clés SSH

SSH fonctionne avec l'« authentification par clé publique ». Pour ce faire, vous devez d'abord générer une paire de clés appariées, dont l'une est publique et l'autre privée. Lors du choix de l'algorithme, vous pouvez choisir entre rsa, ecdsa ou ed25519. Dans l'exemple ci-dessous, vous utilisez la commande ssh-keygen -t ed25519 en tant qu'utilisateur du site :

OMD[mysite]:~$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/omd/sites/mysite/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /omd/sites/mysite/.ssh/id_ed25519.
Your public key has been saved in /omd/sites/mysite/.ssh/id_ed25519.pub.
The key fingerprint is:
cc:87:34:d2:ed:87:ed:f7:1b:ec:58:1f:7c:23:00:e2 mysite@mycmkserver
The key's randomart image is:
+--[ED25519  256--+
|                 |
|       . .       |
|      ..+..      |
|      .=.+.o     |
|       ES +.o    |
|         . o. o  |
|            ...B.|
|             .=.*|
|             . o+|
+-----------------+
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Laissez le champ du nom de fichier vide pour utiliser le nom de fichier suggéré. Vous pouvez bien sûr spécifier un autre chemin d'accès, par exemple si vous souhaitez utiliser des clés distinctes pour chaque hôte.

Important : ne spécifiez pas de phrase de passe ! Chiffrer le fichier avec la clé secrète ne servirait à rien, après tout, vous ne souhaitez certainement pas devoir saisir la phrase de passe à chaque fois que vous démarrez le serveur Checkmk…​

Le résultat est deux fichiers dans le répertoire .ssh :

OMD[mysite]:~$ ll .ssh
total 8
-rw------- 1 mysite mysite 1679 Feb 20 14:18 id_ed25519
-rw-r--r-- 1 mysite mysite  398 Feb 20 14:18 id_ed25519.pub
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

La clé privée s’appelle id_ed25519 et n’est lisible que par l’utilisateur du site (-rw-------) — et c’est une bonne chose ! La clé publique id_ed25519.pub ressemble à ceci :

OMD[mysite]:~$ cat .ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGb6AaqRPlbEmDnBkeIW3Q6Emb5lr2QEbWEQLmA5pb48 mysite@mycmkserver
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

6.2. Autorisation d’accès via SSH

L'étape suivante doit maintenant être effectuée sur (chacun des) hôtes Linux surveillés via SSH. Connectez-vous en tant qu'root et créez le sous-répertoire .ssh dans son répertoire personnel (/root), s'il n'existe pas déjà. Avec la commande suivante, les privilèges d'accès seront immédiatement définis correctement sur 700 :

root@linux# mkdir -m 700 /root/.ssh
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Ouvrez maintenant le fichier authorized_keys à l'aide d'un éditeur de texte (en mode console) de votre choix. Si ce fichier n'existe pas encore, l'éditeur le créera automatiquement :

root@linux# vim /root/.ssh/authorized_keys
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Copiez le contenu des clés publiques dans ce fichier. Vous pouvez le faire, par exemple, à l'aide de la souris et de la fonction copier-coller. Soyez précis ! Chaque espace compte. Veillez également à ce qu'il n'y ait jamais deux espaces sur une même ligne. Et : le tout doit tenir sur une seule ligne ! Si le fichier existe déjà, ajoutez simplement une nouvelle ligne en dessous.

6.3. Restriction de l'accès à l'exécution de l'agent

Ce qui suit est très important ! La clé SSH doit être utilisée exclusivement pour l'exécution de l'agent. SSH propose une fonctionnalité de ce type sous le nom de « restriction de commande ». Pour ce faire, insérez le texte « command="/usr/bin/check_mk_agent" » au début de la ligne que vous venez de créer — séparé du reste par un seul espace. Cela ressemblera à quelque chose comme ceci :

/root/.ssh/authorized_keys
command="/usr/bin/check_mk_agent" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGb6AaqRPlbEmDnBkeIW3Q6Emb5lr2QEbWEQLmA5pb48 mysite@mycmkserver

Enregistrez le fichier et vérifiez les droits d'accès. Seul le propriétaire doit disposer des droits d'écriture sur ce fichier.

root@linux# chmod 600 /root/.ssh/authorized_keys
root@linux# ll /root/.ssh/authorized_keys
-rw------- 1 root root 1304 Feb 20 14:36 authorized_keys
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Ensuite, testez l'accès à l'agent à l'aide de la commande ssh :

OMD[mysite]:~$ ssh root@myhost23
The authenticity of host 'myhost23 (10.11.12.13)' can't be established.
ECDSA key fingerprint is SHA256:lWgVK+LtsMgjHUbdsA1FK12PdmVQGqaEY4TE8TEps3w.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
<<<check_mk>>>
Version: 2.4.0p25
AgentOS: linux
Hostname: myhost123
AgentDirectory: /etc/check_mk
DataDirectory: /var/lib/check_mk_agent
SpoolDirectory: /var/lib/check_mk_agent/spool
PluginsDirectory: /usr/lib/check_mk_agent/plugins
LocalDirectory: /usr/lib/check_mk_agent/local
<<<df>>>
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

La première fois, vous devrez confirmer l'empreinte digitale de la clé en saisissant yes. Tous les accès suivants pourront alors être effectués sans intervention de l'utilisateur, y compris l'interrogation automatique du script de l'agent par le serveur Checkmk toutes les minutes.

Si cela ne fonctionne pas, veuillez vérifier :

  • Le serveur SSH est-il bien installé sur le système cible ?

  • Les fichiers et répertoires spécifiés disposent-ils des permissions appropriées ?

  • Avez-vous saisi correctement la syntaxe de authorized_keys ?

  • Avez-vous saisi la bonne clé publique à cet endroit ?

  • Vous êtes-vous connecté en tant qu'utilisateur approprié (root@…​) ?

  • Vous êtes-vous souvenu de l'command="…​" ?

Sur les systèmes cibles très anciens, il est également possible que les clés utilisant les courbes elliptiques (ed25519 et ecdsa) soient inconnues. Dans ce cas, générez une clé RSA supplémentaire et saisissez-la également dans l'authorized_keys. SSH utilisera alors automatiquement la clé la plus forte connue pour la connexion.

6.4. Modification de l'accès de Checkmk à SSH

Le système cible est désormais prêt. Il ne reste plus qu’à configurer Checkmk lui-même. Cela s’effectue via le jeu de règles Setup > Agents > Other integrations> Custom integrations > Individual program call instead of agent access. Créez ici une règle pour les hôtes concernés et saisissez ssh -T root@$HOSTNAME$ ou ssh -C -T root@$HOSTNAME$ (pour une compression supplémentaire des données de l’agent) comme commande :

rule for calling the agent via SSH.
L'appel de l'agent via SSH s'effectue par règle

Vous pouvez exécuter le test de connexion dans l’interface graphique sous « Setup > Hosts > Properties of host > Test connection to host » à l’aide du bouton « Run tests ». Si le test échoue en raison d’un délai d’attente ou d’un accès refusé, vérifiez si vous avez utilisé le nom d’hôte avec la même orthographe que lors du test en ligne de commande — OpenSSH fait la distinction entre le nom d’hôte court, le nom de domaine complet (FQDN) et l’adresse IP. Vous pouvez également accéder à l’hôte en utilisant son adresse IP. Dans ce cas, vous devez utiliser la macro $HOSTADDRESS$, qui est remplacée par l'adresse IP de l'hôte mise en cache (par Checkmk).

Après avoir enregistré et exécuté « Activer les modifications », l’hôte est ajouté à la surveillance. Dans la surveillance, le service Check-MK Agent s’affiche désormais avec la mention « Transport via SSH ». Pour des diagnostics plus approfondis, vous pouvez utiliser les commandes cmk -D et cmk -d, qui sont expliquées dans l’article consacré à la ligne de commande.

6.5. Clés SSH multiples

Vous pouvez également utiliser plusieurs clés SSH. Placez les clés dans n’importe quel répertoire. Dans la règle Individual program call instead of agent access, vous devez ensuite spécifier le chemin d’accès à la clé privée correspondante à l’aide de l’option -i. Il est préférable d’utiliser ici $OMD_ROOT à la place du chemin d’accès au répertoire du site (/omd/sites/mysite). La commande complète pourrait alors être ssh -i $OMD_ROOT/.ssh/my_key -T root@$HOSTADDRESS$, ce qui permettrait également d’exécuter la configuration sur un site portant un nom différent :

Rule to invoke the agent with multiple SSH keys.
Pour utiliser plusieurs clés SSH, la commande ci-dessus doit généralement être étendue

Cela vous permet d'utiliser différentes clés SSH pour différents groupes d'hôtes en utilisant plusieurs règles distinctes.

6.6. Désactivation de l'accès au port 6556

Afin d'éviter de fournir à des attaquants potentiels des données en clair malgré les tunnels SSH, vous devez désactiver tout accès au port 6556 qui pourrait encore être disponible dans la surveillance sur l'hôte. Si la commande ss -tulpn | grep 6556 ci-dessus n'a trouvé aucun processus à l'écoute sur le port TCP 6556, la configuration du tunnel SSH est terminée. Si une ligne s'affiche, le processus qui a été trouvé doit être désactivé de manière permanente.

xinetd

Pour fermer le port fourni par xinetd, désactivez le service xinetd de Checkmk en définissant la valeur de disabled sur yes. Ne supprimez pas l’intégralité du fichier de configuration — cela réapparaîtrait sinon dans certaines configurations lors des mises à jour de l’agent !

La désactivation s’effectue dans le fichier /etc/xinetd.d/check-mk-agent (sur les systèmes équipés d’anciennes versions de l’agent, le fichier peut s’appeler /etc/xinetd.d/check_mk) :

/etc/xinetd.d/check-mk-agent
service check_mk
{
        type           = UNLISTED
        port           = 6556
        socket_type    = stream
        protocol       = tcp
        wait           = no
        user           = root
        server         = /usr/bin/check_mk_agent
        disable        = yes
}

Redémarrez ensuite xinetd :

root@linux# /etc/init.d/xinetd restart
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

ou

root@linux# service xinetd restart
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Vérifiez maintenant que l'accès via le port 6556 n'est plus possible.

inetd

Si c'est inetd qui contrôle l'accès au port 6556, modifiez le fichier de configuration /etc/inetd.conf. Recherchez-y la ligne correspondante :

root@linux# grep -n check.*mk /etc/inetd.conf
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Mettez cette ligne en commentaire à l'aide d'un signe dièse #, puis redémarrez le processus.

root@linux# /etc/init.d/inetd restart
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Ensuite, à l'aide de telnet ou nc, vérifiez si l'accès est toujours possible.

systemd

Si la recherche a montré que le service systemd dispose d'un port TCP 6556 ouvert, vous devez maintenant déterminer le nom exact de la configuration fournissant le socket :

root@linux# systemctl list-units | grep 'check.*mk.*socket'
  check-mk-agent.socket		loaded active listening CheckMK Agent Socket
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Vous pouvez maintenant d'abord arrêter le service, puis le désactiver :

root@linux# systemctl stop check-mk-agent.socket
root@linux# systemctl disable check-mk-agent.socket
Removed /etc/systemd/system/sockets.target.wants/check-mk-agent.socket.
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

L'accès au port 6556 ne devrait désormais plus être possible.

6.7. Vérification de la réussite

Dans tous les cas, n'oubliez pas d'effectuer un dernier test. Il ne devrait désormais plus être possible de se connecter au port 6556 :

OMD[mysite]:~$ telnet myhost123 6556
Trying 10.118.15.23...
telnet: Unable to connect to remote host: Connection refused
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

7. Autres options de sécurité

Nous décrivons ici les options de sécurité principalement pour des raisons de compatibilité avec les installations existantes. Dans de nombreux cas, la transmission des données de l'agent via SSH répondra aux exigences en matière de restriction d'accès et de protection contre l'écoute clandestine. Néanmoins, dans certains cas particuliers, il peut s'avérer judicieux d'utiliser en plus les mécanismes de protection présentés ci-dessous ou de les utiliser lorsqu'aucun tunnel SSH n'est possible.

Le script de l'agent Checkmk peut chiffrer ses propres données sans avoir besoin d'outils supplémentaires. Ce chiffrement symétrique intégré ne remplace pas le contrôle d'accès. Cependant, comme un attaquant ne peut envoyer aucune commande et ne peut rien faire avec ces données de sortie chiffrées, l'objectif de protection contre l'écoute clandestine est généralement suffisamment atteint.

Bien entendu, le chiffrement nécessite une configuration appropriée tant sur l’agent que sur le serveur. Celle-ci peut être créée manuellement dans Checkmk Community ou à l’aide de l’Agent Bakery dans les éditions commerciales.

Remarque : Étant donné que le chiffrement symétrique utilise la même clé pour le chiffrement et le déchiffrement, un paquet de mise à jour créé par Agent Bakery et contenant la clé de chiffrement pourrait, par exemple, être intercepté par un attaquant qui pourrait alors déchiffrer le contenu des communications.

7.1. Mise en œuvre du chiffrement intégré

Activation du chiffrement

La première étape consiste à se rendre dans le menu «Setup» et à créer une règle dans l'ensemble de règles «Setup > Agents > Access to agents > Checkmk agent > Symmetric encryption (Linux, Windows)». Cette règle doit s'appliquer à tous les hôtes pour lesquels vous souhaitez utiliser le chiffrement. Les hôtes SNMP ignorent ce paramètre ; vous n'avez donc pas besoin de les exclure explicitement.

Rule to enable built-in encryption.
Le chiffrement intégré est activé par une règle

Avec l'option « Configure shared secret and apply symmetric encryption », vous spécifiez que l'agent envoie les données sous forme chiffrée. Le chiffrement fonctionne avec un mot de passe partagé (secret partagé) que vous spécifiez ici et qui doit être stocké en clair à la fois sur le serveur Checkmk et sur l'agent. Si vous le souhaitez, sélectionnez l'icône « Symbol for rolling a password. » pour que Checkmk génère un mot de passe aléatoire à votre place, et gardez ce mot de passe à portée de main pour la deuxième étape, la configuration de l'agent.

Configuration de l'agent

Sur l'hôte de l'agent, créez le fichier « /etc/check_mk/encryption.cfg » avec le contenu suivant :

/etc/check_mk/encryption.cfg
ENCRYPTED=yes
PASSPHRASE='MyPassword'

Vous devez bien sûr indiquer votre propre mot de passe à la place de « PASSPHRASE », et vous devez impérativement empêcher les autres utilisateurs d’accéder au fichier « .cfg » en lecture :

root@linux# chmod 600 /etc/check_mk/encryption.cfg
Copier la ou les commandes dans le presse-papiers
Commande(s) copiée(s) avec succès dans le presse-papiers !
L'accès en écriture au presse-papiers a été refusé !

Configuration du serveur Checkmk

À la troisième et dernière étape, utilisez la règle Enforce agent data encryption pour spécifier comment le serveur Checkmk doit traiter les données non chiffrées.

Vous disposez des options suivantes :

  • Accept all incoming data, including unencrypted : les données provenant d'agents avec ou sans chiffrement seront acceptées.

  • Accept all types of encryption : seules les données chiffrées seront acceptées, soit via TLS, soit via un chiffrement symétrique, tel qu'activé lors de la première étape.

  • Accept TLS encrypted connections only : seules les données chiffrées par TLS seront acceptées.

Rule to define which agent data the Checkmk server accepts.
Avec cette sélection, les données chiffrées de manière symétrique ainsi que les données chiffrées via TLS seront acceptées

Il est judicieux de commencer par Accept all incoming data, including unencrypted. Une fois que vous estimez que tous les agents ont été basculés vers le chiffrement, configurez Accept all types of encryption pour détecter les hôtes qui pourraient encore envoyer des données en clair. Les hôtes qui envoient des données non chiffrées seront détectés et signalés en « rouge ».

Tests

Vous pouvez désormais effectuer les tests suivants (voir également l'article sur Checkmk en ligne de commande) :

  • L'appel de check_mk_agent sur le système cible doit produire une chaîne de caractères aléatoire.

  • L'accès via telnet myhost123 6556 depuis le serveur Checkmk doit produire le même enchevêtrement de caractères.

  • La commande cmk -d myhost123 sur le serveur Checkmk doit afficher les données en texte clair.

7.2. Configuration du chiffrement intégré avec l'Agent Bakery

CEE La configuration du chiffrement avec Agent Bakery se déroule comme suit : Avec la première étape, la création de la règle « Symmetric encryption (Linux, Windows) », vous avez presque terminé. Il ne vous reste plus qu’à générer et à distribuer les nouveaux agents. Le fichier « /etc/check_mk/encryption.cfg » est créé automatiquement pour vous et sera inclus dans les paquets d’agents. Il ne reste plus que la troisième étape, à savoir la création de la règle « Enforce agent data encryption ».

7.3. xinetd : restrictions IP

Même si un attaquant ne peut exécuter aucune commande, les données de surveillance de l’agent pourraient tout de même lui être utiles, car elles contiennent, entre autres, une liste de tous les processus en cours d’exécution sur le système. Il est donc préférable que ces données ne soient pas facilement accessibles à quiconque.

Si vous partagez l’agent Checkmk via xinetd, il est très simple et efficace de restreindre l’accès à des adresses IP spécifiques — et à celles du serveur de surveillance, bien sûr. Cela peut être rapidement mis en place via la directive only_from dans votre fichier de configuration xinetd. Saisissez les adresses IP ou les plages d’adresses (sous la forme 12.34.56.78/29 ou 1234::/46) séparées par des espaces. Les noms d’hôtes sont également autorisés. Dans ce cas, le système vérifie si le nom d’hôte déterminé par la résolution inverse de l’adresse IP de l’hôte demandeur correspond à celui saisi :

/etc/xinetd.d/check-mk-agent
service check_mk
{
        type           = UNLISTED
        port           = 6556
        socket_type    = stream
        protocol       = tcp
        wait           = no
        user           = root
        server         = /usr/bin/check_mk_agent
        only_from      = 10.118.14.5 10.118.14.37
        disable        = no
}

CEE Dans les éditions commerciales, les utilisateurs d’Agent Bakery peuvent configurer les adresses IP autorisées via le jeu de règles « Allowed agent access via IP address (Linux, Windows) ». Ce jeu de règles est accessible via Setup > Agents > Windows, Linux, Solaris, AIX > Agent rules > Generic Options.

Bien sûr, un attaquant peut très facilement usurper son adresse IP et ainsi se connecter à l’agent. Mais il est alors très probable qu’il ne reçoive pas de réponse, car celle-ci sera envoyée au serveur de surveillance légitime. Ou bien l’attaquant reçoit effectivement une réponse, mais le serveur Checkmk ne reçoit aucune donnée et signalera rapidement une erreur.

8. Messages d'erreur courants lors de l'utilisation de SSH

Si vous souhaitez récupérer l'agent Checkmk via SSH, il peut arriver que cette récupération échoue et que le service « Check_MK » sur votre hôte passe à l'état « CRIT ». Ces messages d'erreur commencent souvent par « Agent exited with code 255 ».

Vous trouverez des informations sur la manière de résoudre ces erreurs dans la base de connaissances Checkmk.


Last modified: Thu, 02 Apr 2026 08:56:24 GMT via commit 82935c426
Sur cette page