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. Introducción

linux

Desde la versión 2.1.0 de Checkmk, el nuevo agente de Linux con el controlador de agentes admite el modo pull registrado, cifrado con TLS y comprimido. Para ello, sin embargo, el controlador de agentes debe iniciarse como un proceso en segundo plano (demonio) mediante el sistema init en el host en el que se vaya a instalar. Actualmente, solo se admite systemd en la plataforma x86_64, y para la configuración se requiere la gestión de paquetes para deb o rpm.

Si se cumplen todos los requisitos siguientes…​

  • Tu Linux utiliza systemd a partir de la versión 219 como sistema de inicio

  • La arquitectura del procesador es x86_64

  • Los paquetes se gestionan como deb o rpm

…​puedes aprender a instalar, configurar y ampliar el agente con el Agent Controller en el artículo «Monitorización de Linux».

Aunque la mayoría de los servidores y equipos de escritorio Linux cumplen estos requisitos, los sistemas que llevan años actualizando versiones, las máquinas virtuales más antiguas con instancias i686, los contenedores sin distribución o los sistemas Linux integrados no son elementos marginales, sino componentes normales de muchos entornos de sistemas que necesitan supervisión. Gracias a la estructura modular de Checkmk, puedes incluir estos hosts Linux en la supervisión.

Tip

La última frase se refiere específicamente a los hosts Linux. Aunque la instalación de agentes para otros sistemas Unix en modo heredado sigue los mismos principios básicos que para los hosts Linux, puede haber diferencias en muchos detalles. Por ejemplo, el script del agente para AIX no admite el cifrado simétrico, y las rutas estándar se adaptan a las convenciones de los respectivos sistemas de destino.

Dado que el transporte cifrado de los datos del agente a través del Agent Controller queda descartado en este caso, en este artículo explicamos cómo realizar el transporte sin cifrar a través de un super-servidor de Internet o la configuración de SSH como túnel cifrado.

El modo push también depende del Agent Controller y, por lo tanto, no está disponible en el modo legacy. Si quieres incluir en la monitorización en modo legacy un host al que el servidor de Checkmk no puede acceder, tendrás que buscar otra solución. Puedes utilizar programas de fuentes de datos para conectarte desde el host monitorizado y usar esto para transmitir la salida del agente al servidor de Checkmk.

Los casos en los que el modo de agente no importa se pueden encontrar en el artículo sobre el agente de Linux con el controlador de agentes:

2. Instalación

Dependiendo del gestor de paquetes, hay tres opciones de instalación entre las que elegir: Paquetes DEB o RPM para Debian, Ubuntu, Red Hat Enterprise Linux (RHEL), SLES (y sus derivados), un archivo TGZ para todas las demás distribuciones (ediciones comerciales) o, del mismo modo, un script de shell (Checkmk Community) para cualquier otra distribución.

2.1. Instalación desde paquetes

En el artículo «Monitoring Linux» hay una descripción detallada de la instalación a partir de paquetes de deb o rpm, así que aquí solo explicaremos el procedimiento de forma breve.

En CRE Checkmk Community, puedes encontrar los paquetes Linux del agente a través de Setup > Agents > Linux. En las ediciones comerciales, primero debes acceder a Agent Bakery en el menú Setup a través de Agents > Windows, Linux, Solaris, AIX, donde encontrarás los paquetes ya preparados. Desde allí, la opción de menú Related > Linux, Solaris, AIX files te llevará a la lista de archivos del agente.

Puedes descargar estos archivos a través del navegador o usar wget o curl para descargarlos directamente en el host de la supervisión:

root@linux# wget http://mycmkserver/mysite/check_mk/agents/check-mk-agent-2.4.0p25-1.noarch.rpm
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

En RHEL, SLES y distribuciones relacionadas, el paquete RPM se instala como root con el comando rpm -U:

root@linux# rpm -U check-mk-agent-2.4.0p25-1.noarch.rpm
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Por cierto, la opción -U significa «actualizar», pero también puede realizar una instalación inicial correctamente.

La instalación del paquete DEB en Debian, Ubuntu o distribuciones relacionadas se realiza como root con el comando 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) ...
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

2.2. Instalación desde el archivo TGZ

CEE Para una instalación cómoda e independiente de la distribución, necesitarás el agente de Linux en formato de archivo TGZ («Tarball»), que puedes descargar desde las ediciones comerciales en el menú Configuración a través de Agents > Windows, Linux, Solaris, AIX. El archivo TGZ contiene la estructura de directorios completa del agente de Linux para descomprimir en el directorio raíz del host supervisado.

agent linux legacy agents

El parámetro «-C» («cambiar de directorio») es esencial al descomprimir para garantizar que todas las rutas de los archivos sean correctas. También usamos --no-overwrite-dir para que no se modifiquen los permisos de los directorios ya existentes:

root@linux# tar -C / --no-overwrite-dir -xvf /tmp/check-mk-agent_2.4.0p25.tar.gz
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Si has hecho todo correctamente, el script del agente debería ejecutarse ahora como un comando y generar su salida habitual. El comando «| head» trunca todo lo que sigue a la undécima línea de salida:

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>>>
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Si aquí aparece un número de versión inferior a 2.2.0, es probable que todavía tengas instalada una versión anterior del script del agente como /usr/local/bin/check_mk_agent. Mueve este script antiguo o cámbiale el nombre, por ejemplo, añadiendo .bak al nombre del archivo.

2.3. Instalación manual del script del agente

Rara vez es necesaria una instalación manual del script del agente, pero tampoco es muy difícil. En este tipo de instalación, al principio solo se instala el script del agente, pero aún no se realiza ninguna configuración del acceso. Para ello, necesitas el cuadro Agents de la página de archivos del agente. Allí encontrarás el archivo check_mk_agent.linux:

List of agent scripts for download.

Carga este archivo en el sistema de destino y cópialo en un directorio ejecutable para root. /usr/local/bin/es una buena opción, ya que está en la ruta de búsqueda y está pensado para extensiones personalizadas. Como alternativa, puedes usar /usr/bin o un subdirectorio de /opt. Nosotros usamos /usr/bin para que todas las pruebas coincidan con los otros métodos de instalación. También puedes realizar la instalación directamente con wget si 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
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

No te olvides de los dos últimos comandos: estos eliminarán la extensión .linux y harán que el archivo sea ejecutable. Ahora el agente debería ser ejecutable como un comando y generar su salida habitual. El comando | head trunca todo lo que sigue a la décima línea de salida:

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>>>
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Si quieres configurar o ampliar el agente, tendrás que crear tú mismo los directorios necesarios. La ubicación de los tres directorios obligatorios está codificada en el agente en variables que empiezan por MK_ y también se proporcionan a los complementos a través del entorno del sistema:

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"
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Debes crear estos tres directorios (con los permisos predeterminados de 755 y root como propietario):

root@linux# mkdir /usr/lib/check_mk_agent /etc/check_mk /var/lib/check_mk_agent
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Si quieres usar rutas diferentes, solo tienes que editar /usr/bin/check_mk_agent.

3. Comprobación del estado tras la instalación

Después de la instalación, comprueba si ya hay un servicio configurado para escuchar en el puerto TCP 6556. En concreto, cuando se instala a través del gestor de paquetes, se utiliza un xinetd o un systemd (en modo super-servidor) ya existente para proporcionar la salida sin cifrar del agente en el puerto TCP 6556.

Usamos el comando ss. Si este comando no está disponible (en distribuciones más antiguas), puedes usar como alternativa alguno de los programas netstat, sockstat o lsof.

root@linux# ss -tulpn | grep 6556
tcp	LISTEN 0	64	*:6556	*:*	users:(("xinetd",pid=1573,fd=5))
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Si no hay salida, el puerto 6556 aún no está abierto. Si se ha impreso una línea, entonces el puerto 6556 está abierto. En este caso nos interesa el nombre del programa entre paréntesis, aquí xinetd. Recuerda este nombre de programa, porque lo necesitarás en el proceso posterior, independientemente del método de acceso seleccionado.

Si tras la instalación desde un paquete DEB o RPM aparece aquí el nombre del programa cmk-agent-ctl, puedes estar tranquilo: Tu Linux (especialmente la versión de systemd utilizada) está lo suficientemente actualizado como para usar el Agent Controller, tal y como se describe en el artículo Supervisión de Linux, y puedes proceder a registrar el agente.

4. Seleccionar el método de acceso

En este punto tienes que tomar una decisión:

  • ¿Quieres permitir una conexión sin cifrar y fácil de configurar?

  • ¿O te merece la pena el esfuerzo adicional que supone la mayor seguridad que ofrece el cifrado?

Los aspectos relevantes para esto son a qué información tiene acceso un posible atacante y cuánto esfuerzo tendría que realizar. Por ejemplo, la tabla de procesos que siempre se transmite ya puede proporcionar pistas valiosas, y una lista de actualizaciones de software que aún no se han realizado hace posibles los ataques dirigidos.

Por lo tanto, por regla general, recomendamos la transferencia de datos cifrada a través de un túnel SSH.

Important

Al llamar al script del agente directamente en un shell, pueden estar disponibles otras variables de entorno que cuando se llama a través de (x)inetd, a través del Agent Controller o en una sesión SSH sin terminal de control. En caso de problemas con uno u otro método de ejecución, puede ser necesario garantizar la presencia de ciertas variables de entorno. El método utilizado para ello depende demasiado de cada caso concreto como para que podamos hacer recomendaciones en este momento.

5. Sin cifrar: Configuración de (x)inetd

Si decides que usar una transferencia de datos sin cifrar es un riesgo aceptable, el siguiente paso es configurar un super-servidor de Internet. Si la prueba con ss mostró que xinetd, inetd o systemd ya están a la escucha en el puerto TCP 6556, pasa a la prueba de conexión.

Si no es así, usa el comando ps para comprobar si ya hay un inetd activo:

root@linux# ps ax | grep inetd
 1913 ?        Ss     0:00 /usr/sbin/xinetd -pidfile /run/xinetd.pid -stayalive -inetd_compat -inetd_ipv6
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Puedes identificar, a partir del proceso en ejecución, si se trata del «xinetd» más moderno o de uno de los otros super-servidores de Internet (GNU-Inetutils, OpenBSD-Inetd, Busybox-Inetd). Si no hay ningún proceso activo, instala un «xinetd» a través del gestor de paquetes de tu distribución. Si hay un «inetd» «clásico» activo, suele tener sentido configurarlo y utilizarlo en lugar de cambiar a xinetd.

5.1. Configuración de xinetd

CEE Para configurar un xinetd existente que utilice el directorio /etc/xinetd.d/ para la configuración, tanto el archivo TGZ como los paquetes DEB y RPM incluyen un script que automatiza los dos pasos necesarios: primero instala la configuración y luego hace que xinetd vuelva a leer los ajustes modificados. Tienes que ejecutar el script con las rutas completas de los archivos:

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
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Si instalas el script del agente manualmente, crea el archivo de configuración /etc/xinetd.d/check-mk-agent con el editor. El contenido es suficiente:

/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
}

Aquí hemos añadido una línea (comentada) que restringe el acceso a dos servidores Checkmk. Puedes ver más opciones de configuración consultando el archivo ~/share/check_mk/agents/scripts/super-server/1_xinetd/check-mk-agent en tu servidor Checkmk.

Si tu xinetd utiliza el esquema de configuración antiguo con un único archivo grande /etc/xinetd.conf, transfiere la configuración de ejemplo de /etc/check_mk/xinetd-service-template.cfg a /etc/xinetd.conf.

Cuando hayas terminado de configurar xinetd, reinícialo:

root@linux# service xinetd restart
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Ya estás listo para la prueba de conexión.

5.2. Configuración de otro inetd

Primero, comprueba si tu archivo «/etc/services» ya contiene una entrada para el puerto 6556:

root@linux# grep 6556/ /etc/services
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Si no es así, Checkmk debe registrarse como servicio. Para ello, añade la siguiente línea. La notación aquí es exactamente la misma que la almacenada en la tabla de la IANA, con un solo guión:

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

El formato del archivo de configuración de /etc/inetd.conf varía según las distintas variantes. Consulta los comentarios del archivo de configuración y la página del manual (man 5 inetd.conf) para encontrar el formato que se ajuste a tu inetd. A continuación, se incluye la configuración correspondiente a openbsd-inetd con dos líneas para la compatibilidad con IPv4 e IPv6. Una vez más, es importante tener en cuenta la notación correcta:

/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

Después de editar el archivo de configuración, reinicia inetd, por ejemplo, con:

root@linux# /etc/init.d/inetd restart
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Dependiendo del sistema de inicio que uses y del super-servidor instalado, este comando puede variar.

5.3. Prueba de conexión

Primero comprueba si se ha podido (re)iniciar xinetd o inetd:

root@linux# ss -tulpn | grep 6556
tcp	LISTEN 0	64	*:6556	*:*	users:(("xinetd",pid=1573,fd=5))
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Ahora puedes conectarte a telnet o nc (netcat) en el puerto TCP 6556 — primero desde el propio host, después desde el servidor 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
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Si recibes una notificación de conexión denegada aunque (x)inetd esté activo, comprueba la configuración de tu cortafuegos.

6. Cifrado: uso de un túnel SSH

La configuración del túnel SSH se realiza siguiendo estos pasos:

  1. Crea un par de claves SSH específicamente para este fin.

  2. En los sistemas de destino, permite el acceso al agente utilizando esta clave.

  3. Configura el servidor Checkmk para que utilice SSH en lugar de la conexión TCP en el puerto 6556.

  4. Si es posible: desactiva el acceso a través de (x)inetd.

Y ahora todo el procedimiento, paso a paso con todos los detalles necesarios:

6.1. Creación de un par de claves SSH

SSH funciona con «autenticación de clave pública». Para ello, primero debes generar un par de claves a juego, una pública y otra privada. Al seleccionar el algoritmo, puedes elegir entre rsa, ecdsa o ed25519. En el ejemplo siguiente, utiliza el comando ssh-keygen -t ed25519 como usuario del sitio:

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+|
+-----------------+
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Deja el nombre del archivo en blanco para usar el nombre sugerido. Por supuesto, puedes especificar una ruta diferente, por ejemplo, si quieres trabajar con claves distintas para hosts individuales.

Importante: ¡No especifiques una frase de contraseña! Cifrar el archivo con la clave secreta no serviría de nada; al fin y al cabo, seguro que no quieres tener que introducir la frase de contraseña cada vez que inicies el servidor Checkmk…​

El resultado son dos archivos en el directorio .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
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

La clave privada se llama id_ed25519 y solo puede leerla el usuario del sitio (-rw-------)— ¡y eso es bueno! La clave pública id_ed25519.pub tiene un aspecto similar a este:

OMD[mysite]:~$ cat .ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGb6AaqRPlbEmDnBkeIW3Q6Emb5lr2QEbWEQLmA5pb48 mysite@mycmkserver
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

6.2. Permitir el acceso a través de SSH

El siguiente paso debe realizarse ahora en (cada uno de) los hosts Linux supervisados a través de SSH. Inicia sesión allí como root y crea el subdirectorio .ssh en su directorio de inicio (/root), si aún no existe. Con el siguiente comando, los privilegios de acceso se establecerán correctamente en 700 de inmediato:

root@linux# mkdir -m 700 /root/.ssh
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Ahora abre el archivo authorized_keys con un editor de texto (basado en consola) de tu elección. Si este archivo aún no existe, el editor lo creará automáticamente:

root@linux# vim /root/.ssh/authorized_keys
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Copia el contenido de las claves públicas en este archivo. Puedes hacerlo, por ejemplo, con el ratón y copiar y pegar. ¡Sé preciso! Cada espacio cuenta. Asegúrate también de que nunca haya dos espacios en una línea. Y: ¡Todo debe estar en una sola línea! Si el archivo ya existe, simplemente añade una nueva línea debajo.

6.3. Restringir el acceso a la ejecución del agente

¡Lo que viene ahora es muy importante! La clave SSH debe usarse exclusivamente para ejecutar el agente. SSH ofrece algo parecido bajo el nombre de restricción de comandos. Para ello, escribe el texto command="/usr/bin/check_mk_agent" al principio de la línea que acabas de crear, separado del resto por un solo espacio. Quedará algo así:

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

Guarda el archivo y comprueba los permisos. Solo el propietario puede tener permisos de escritura en este archivo.

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
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

A continuación, comprueba el acceso al agente con el comando `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>>>
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

La primera vez tendrás que confirmar la huella digital de la clave introduciendo yes. A partir de ahí, todos los accesos posteriores se pueden realizar sin intervención del usuario, incluida la consulta automática del script del agente por parte del servidor Checkmk cada minuto.

Si no funciona, comprueba lo siguiente:

  • ¿Está instalado el servidor SSH en el sistema de destino?

  • ¿Tienen los archivos y directorios especificados los permisos correctos?

  • ¿Has escrito correctamente la sintaxis de authorized_keys?

  • ¿Has introducido allí la clave pública correcta?

  • ¿Has iniciado sesión como el usuario correcto (root@…​)?

  • ¿Te acordaste de la command="…​"?

En sistemas de destino muy antiguos, también es posible que las claves con las curvas elípticas (ed25519 y ecdsa) sean desconocidas. En este caso, genera una clave RSA adicional e introdúcela también en authorized_keys. SSH utilizará entonces automáticamente la clave más segura conocida para la conexión.

6.4. Cambiar el acceso de Checkmk a SSH

El sistema de destino ya está preparado. Ahora solo falta la configuración de Checkmk. Esto se hace a través del conjunto de reglas Setup > Agents > Other integrations> Custom integrations > Individual program call instead of agent access. Crea aquí una regla para los hosts afectados e introduce ssh -T root@$HOSTNAME$ o ssh -C -T root@$HOSTNAME$ (para una compresión adicional de los datos del agente) como comando:

rule for calling the agent via SSH.
La llamada al agente a través de SSH se realiza mediante la regla

Puedes ejecutar la prueba de conexión en la interfaz gráfica de usuario, en «Setup > Hosts > Properties of host > Test connection to host», con el botón «Run tests». Si la prueba falla por tiempo de espera agotado o acceso denegado, comprueba si has utilizado el nombre de host con la misma ortografía que al realizar la prueba en la línea de comandos: OpenSSH distingue entre el nombre de host corto, el FQDN y la dirección IP. Como alternativa, puedes acceder al host utilizando su dirección IP. En este caso, tienes que usar la macro $HOSTADDRESS$, que se sustituye por la dirección IP del host almacenada en caché (por Checkmk).

Después de guardar y ejecutar «Activar cambios», el host se añade a la monitorización. En la monitorización, el servicio Check-MK Agent se muestra ahora con la nota «Transporte vía SSH». Para un diagnóstico más detallado, se pueden utilizar los comandos cmk -D y cmk -d, que se explican en el artículo sobre la línea de comandos.

6.5. Varias claves SSH

También puedes trabajar con más de una clave SSH. Coloca las claves en cualquier directorio. En la regla Individual program call instead of agent access debes especificar la ruta a la clave privada correspondiente con la opción -i. Lo mejor es usar $OMD_ROOT aquí como sustituto de la ruta al directorio del sitio (/omd/sites/mysite). El comando completo podría ser entonces ssh -i $OMD_ROOT/.ssh/my_key -T root@$HOSTADDRESS$, y así la configuración también sería ejecutable en un sitio con un nombre diferente:

Rule to invoke the agent with multiple SSH keys.
Para usar varias claves SSH, normalmente hay que ampliar el comando anterior

Esto te permite utilizar diferentes claves SSH para diferentes grupos de hosts mediante el uso de varias reglas diferentes.

6.6. Desactivar el acceso al puerto 6556

Para evitar proporcionar a posibles atacantes datos en texto plano a pesar de los túneles SSH, debes desactivar cualquier acceso al puerto 6556 que pueda seguir estando disponible en la supervisión del host. Si el comando ss -tulpn | grep 6556 anterior no ha encontrado ningún proceso a la escucha en el puerto TCP 6556, ya has terminado de configurar el túnel SSH. Si se muestra una línea, el proceso que se ha encontrado debe desactivarse de forma permanente.

xinetd

Para cerrar el puerto proporcionado por xinetd, desactiva el servicio xinetd de Checkmk estableciendo el valor de disabled en yes. No borres todo el archivo de configuración; de lo contrario, volvería a aparecer en algunas configuraciones durante las actualizaciones del agente.

La desactivación se realiza en el archivo /etc/xinetd.d/check-mk-agent (en sistemas con instalaciones antiguas del agente, el archivo puede llamarse /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
}

A continuación, reinicia xinetd:

root@linux# /etc/init.d/xinetd restart
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

o

root@linux# service xinetd restart
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Ahora comprueba que ya no es posible acceder a través del puerto 6556.

inetd

Si es un servicio deinetds el que controla el acceso al puerto 6556, modifica el archivo de configuración /etc/inetd.conf. Busca allí la línea correspondiente:

root@linux# grep -n check.*mk /etc/inetd.conf
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Comenta esta línea con un símbolo de almohadilla # y, a continuación, reinicia el proceso.

root@linux# /etc/init.d/inetd restart
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

A continuación, utiliza telnet o nc para comprobar si el acceso sigue siendo posible.

systemd

Si la búsqueda ha mostrado que systemd tiene abierto el puerto TCP 6556, ahora tienes que determinar el nombre exacto de la configuración que proporciona el socket:

root@linux# systemctl list-units | grep 'check.*mk.*socket'
  check-mk-agent.socket		loaded active listening CheckMK Agent Socket
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Ahora puedes detener primero el servicio y luego desactivarlo:

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.
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Ahora no debería ser posible acceder al puerto 6556.

6.7. Verificación del éxito

En cualquier caso, no te olvides de hacer una prueba final. Ahora ya no debería ser posible conectarse al puerto 6556:

OMD[mysite]:~$ telnet myhost123 6556
Trying 10.118.15.23...
telnet: Unable to connect to remote host: Connection refused
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

7. Otras opciones de seguridad

Describimos las opciones de seguridad que te presentamos aquí principalmente por motivos de compatibilidad con instalaciones ya existentes. En muchos casos, la transmisión de la salida del agente a través de SSH cumplirá con los requisitos de restricción de acceso y seguridad contra escuchas. No obstante, en casos concretos puede tener sentido utilizar además los mecanismos de protección que se presentan a continuación, o recurrir a ellos cuando no sea posible establecer un túnel SSH.

El script del agente de Checkmk puede cifrar sus propios datos sin necesidad de herramientas adicionales. Este cifrado simétrico integrado no sustituye al control de acceso. Sin embargo, dado que un atacante no puede enviar ningún comando ni hacer nada con esos datos de salida cifrados, el objetivo de la seguridad contra el espionaje suele cumplirse suficientemente.

Por supuesto, el cifrado requiere una configuración adecuada tanto en el agente como en el servidor. Esto se puede crear manualmente en Checkmk Community o con Agent Bakery en las ediciones comerciales.

Nota: Dado que el cifrado simétrico utiliza la misma clave tanto para el cifrado como para el descifrado, un paquete de actualización creado con Agent Bakery que incluya la clave de cifrado podría, por ejemplo, ser interceptado por un atacante, quien podría entonces descifrar el contenido de las comunicaciones.

7.1. Implementación del cifrado integrado

Activación del cifrado

El primer paso es ir al menú «Setup» y crear una regla en el conjunto de reglas «Setup > Agents > Access to agents > Checkmk agent > Symmetric encryption (Linux, Windows)». Esta regla debe aplicarse a todos los hosts en los que quieras utilizar el cifrado. Los hosts SNMP ignoran esta configuración, por lo que no es necesario excluirlos explícitamente.

Rule to enable built-in encryption.
El cifrado integrado se activa mediante una regla

Con la opción «Configure shared secret and apply symmetric encryption», especificas que el agente envíe los datos de forma cifrada. El cifrado funciona con una contraseña compartida (secreto compartido) que especificas aquí y que debe almacenarse en texto plano tanto en el servidor de Checkmk como en el agente. Si lo deseas, selecciona el icono «Symbol for rolling a password.» para que Checkmk genere una contraseña aleatoria por ti, y ten esta contraseña a mano para el segundo paso: la configuración del agente.

Configuración del agente

En el host del agente, crea el archivo /etc/check_mk/encryption.cfg con el siguiente contenido:

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

Por supuesto, aquí debes especificar tu propia contraseña en PASSPHRASE, y es imprescindible que protejas el archivo .cfg para que otros usuarios no puedan leerlo:

root@linux# chmod 600 /etc/check_mk/encryption.cfg
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Configuración del servidor Checkmk

En el tercer y último paso, utiliza la regla Enforce agent data encryption para especificar cómo debe gestionar el servidor Checkmk los datos sin cifrar.

Tienes las siguientes opciones:

  • Accept all incoming data, including unencrypted: Se aceptarán datos de agentes con y sin cifrado.

  • Accept all types of encryption: Solo se aceptarán datos cifrados, ya sea mediante TLS o mediante cifrado simétrico, tal y como se activó en el primer paso.

  • Accept TLS encrypted connections only: Solo se aceptarán datos cifrados mediante TLS.

Rule to define which agent data the Checkmk server accepts.
Con esta selección se aceptarán tanto los datos cifrados simétricamente como los cifrados mediante TLS

Lo mejor es empezar con Accept all incoming data, including unencrypted. Cuando creas que todos los agentes ya están cifrados, configura Accept all types of encryption para encontrar cualquier host que aún pueda estar enviando datos en texto plano. Los hosts que envíen datos sin cifrar serán detectados y marcados en «rojo».

Pruebas

Ahora puedes realizar las siguientes pruebas (consulta también el artículo sobre Checkmk en la línea de comandos):

  • La llamada a check_mk_agent en el sistema de destino debe generar una cadena de caracteres desordenada.

  • El acceso a través de telnet myhost123 6556 desde el servidor de Checkmk debe mostrar la misma cadena de caracteres desordenados.

  • El comando cmk -d myhost123 en el servidor Checkmk debe mostrar los datos de texto sin formato.

7.2. Configuración del cifrado integrado con Agent Bakery

CEE La configuración del cifrado con Agent Bakery se realiza de la siguiente manera: Con el primer paso, la creación de la regla «Symmetric encryption (Linux, Windows)», ya casi has terminado. Ahora solo tienes que compilar y distribuir los nuevos agentes. El archivo «/etc/check_mk/encryption.cfg» se crea automáticamente y se incluirá en los paquetes de los agentes. Solo queda el tercer paso, es decir, la creación de la regla «Enforce agent data encryption».

7.3. xinetd: restricciones de IP

Aunque un atacante no pueda ejecutar ningún comando, los datos de monitorización del agente podrían seguir siendole útiles, ya que contienen, entre otras cosas, una lista de todos los procesos que se ejecutan en el sistema. Por lo tanto, es mejor que nadie pueda acceder fácilmente a los datos.

Si compartes el agente de Checkmk a través de xinetd, es muy fácil y eficaz restringir el acceso a direcciones IP específicas —y a las del servidor de monitorización, por supuesto. Esto se puede conseguir rápidamente mediante la directiva only_from en tu archivo de configuración xinetd. Introduce direcciones IP o rangos de direcciones (en el formato 12.34.56.78/29 o 1234::/46) separados por espacios. También se permiten nombres de host. En este caso, el sistema comprueba si el nombre de host determinado por la resolución inversa de la dirección IP del host solicitante coincide con el introducido:

/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 En las ediciones comerciales, los usuarios de Agent Bakery pueden configurar las direcciones IP permitidas a través del conjunto de reglas «Allowed agent access via IP address (Linux, Windows)». Este conjunto de reglas se encuentra en Setup > Agents > Windows, Linux, Solaris, AIX > Agent rules > Generic Options.

Por supuesto, un atacante puede falsificar muy fácilmente su dirección IP y, así, conectarse al agente. Pero entonces es muy probable que no reciba la respuesta, ya que esta se enviará al servidor de monitorización legítimo. O bien el atacante sí recibe una respuesta, pero el servidor de Checkmk no recibe ningún dato y rápidamente informará de un error.

8. Mensajes de error habituales al usar SSH

Si quieres recuperar el agente de Checkmk a través de SSH, puede ocurrir que la recuperación falle y que el servicio «Check_MK» de tu host pase al estado «CRIT». Estos mensajes de error suelen empezar por «Agent exited with code 255».

Encontrarás información sobre cómo solucionar estos errores en la Base de conocimientos de Checkmk.


Last modified: Thu, 02 Apr 2026 08:56:24 GMT via commit 82935c426
En esta página