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 Linux con el Controlador de agentes admite el modo pull registrado, cifrado TLS y comprimido. Para ello, sin embargo, el Controlador de agentes debe iniciarse como un proceso en segundo plano(daemon) por el sistema init en el host en el que se va a instalar. Actualmente, sólo se admite en este sentido systemd en la plataforma x86_64, y para la configuración se requiere la administració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 o posterior como sistema init

  • 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 Controlador de agentes en el artículo Monitorización de Linux.

Aunque la mayoría de los servidores y ordenadores de sobremesa Linux cumplen estos requisitos, los sistemas actualizados con versiones de hace años, las máquinas virtuales antiguas con instancias i686, los contenedores sin distribución o los sistemas Linux embebidos no son elementos marginales, sino componentes normales de muchos entornos de sistemas para los que existe la necesidad de monitorización. Gracias a la estructura modular de Checkmk, puedes incluir estos host Linux en la monitorización.

Como el transporte cifrado de los datos del agente a través del Controlador de agentes no es posible en este caso, en este artículo explicamos cómo realizar el transporte no cifrado a través de un súper servidor de internet o la configuración de SSH como túnel cifrado.

El modo push también depende del Controlador de agentes y, por tanto, no está disponible en el modo Legacy. Si quieres incluir en la monitorización en modo Legacy un host al que no puede llegar el servidor Checkmk, tendrás que encontrar otra solución. Puedes utilizar programas de fuente de datos para conectarte desde el host monitorizado y utilizarlo para transmitir la salida del agente al servidor Checkmk.

Las cuestiones para las que no importa el modo agente se pueden consultar en el artículo sobre el agente Linux con Controlador de agentes:

2. Instalación

Según el administrador de paquetes, puedes elegir entre tres opciones de instalación: 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 también un script shell (Checkmk edición Raw) para cualquier otra distribución.

2.1. Instalación a partir de paquetes

Hay una descripción exhaustiva de la instalación desde paquetes deb o rpm en el artículo Monitorización de Linux, por lo que aquí sólo explicaremos el procedimiento en un breve repaso.

En Checkmk Raw, puedes encontrar los paquetes Linux del agente a través de Setup > Agents > Linux. En las ediciones comerciales, primero llegas a Agent bakery en el menú Setup a través de Agents > Windows, Linux, Solaris, AIX, donde encontrarás los paquetes horneados. Desde ahí, el elemento 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 utilizar wget o curl para descargarlos directamente en el host en la monitorización:

root@linux# wget http://mycmkserver/mysite/check_mk/agents/check-mk-agent-2.3.0p31-1.noarch.rpm

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.3.0p31-1.noarch.rpm

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

La instalación del paquete DEB en Debian, Ubuntu o distribuciones afines se realiza como root con el comando dpkg -i:

root@linux# dpkg -i check-mk-agent_2.3.0p31-1_all.deb
(Reading database ... 739920 files and directories currently installed.)
Preparing to unpack .../check-mk-agent_2.3.0p31-1_all.deb ...
Unpacking check-mk-agent (2.3.0p31-1) ...
Setting up check-mk-agent (2.3.0p31-1) ...

2.2. Instalación desde el archivo TGZ

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 de las ediciones comerciales en el Menú de configuración a través de Agents > Windows, Linux, Solaris, AIX. El archivo TGZ contiene la estructura completa de directorios del agente de Linux para desempaquetarlo en el directorio raíz del host monitorizado.

agent linux legacy agents

El parámetro -C ("cambiar directorio") es esencial al desempaquetar para garantizar que todas las rutas de los archivos son correctas. También utilizamos --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.3.0p31.tar.gz

Si lo has hecho todo correctamente, ahora el script del agente debería ser simplemente ejecutable como un comando y producir su salida típica. El | head trunca todo lo que sigue a la 11ª línea de salida:

root@linux# check_mk_agent | head
<<<check_mk>>>
Version: 2.3.0p31
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>>>

Si aquí se imprime un número de versión inferior a 2.2.0, es probable que aún tengas instalada una versión antigua 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 sólo se instala el script del agente, pero todavía no se realiza ninguna configuración del acceso. Para ello necesitas la caja 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 que sea ejecutable para root./usr/local/bin/ es una buena elección, ya que se encuentra en la ruta de búsqueda y está pensado para extensiones personalizadas. Alternativamente, puedes utilizar /usr/bin o un subdirectorio de /opt. Nosotros utilizamos /usr/bin para que todas las pruebas se correspondan 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# wget http://mycmkserver/mysite/check_mk/agents/check_mk_agent.linux
root@linux# mv check_mk_agent.linux check_mk_agent
root@linux# chmod 755 check_mk_agent

No olvides los dos últimos comandos: 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 producir su salida típica. El | head trunca todo lo que sigue a la 10ª línea de salida:

root@linux# check_mk_agent | head
<<<check_mk>>>
Version: 2.3.0p31
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>>>

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 Plugin 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"

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

Si quieres utilizar rutas diferentes, simplemente edita /usr/bin/check_mk_agent.

3. Check del estado tras la instalación

Tras 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 administrador de paquetes, se utiliza un xinetd o systemd existente (en modo súper servidor) para proporcionar la salida no cifrada del agente en el puerto TCP 6556.

Nosotros utilizamos el comando ss. Si este comando no está disponible (en distribuciones antiguas), uno de los programas netstat, sockstat o lsof está disponible como alternativa.

root@linux# ss -tulpn | grep 6556
tcp	LISTEN 0	64	*:6556	*:*	users:(("xinetd",pid=1573,fd=5))

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 dentro del 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 satisfecho: tu Linux (especialmente la versión de systemd utilizada) está de hecho lo suficientemente actualizado para utilizar el Controlador de agentes, como se describe en el artículo Monitorizar Linux, y puedes proceder a registrar el agente.

4. Selección del método de acceso

En este punto te enfrentas a una decisión:

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

  • ¿O te merece la pena un cierto esfuerzo adicional la mayor seguridad con encriptación?

Los aspectos relevantes para ello son a qué información tiene acceso un posible atacante y cómo de grande tendría que ser su esfuerzo. 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 llevado a cabo hace posibles los ataques dirigidos.

Por regla general, recomendamos la transferencia de datos encriptada a través de un túnel SSH.

Important

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

5. Sin cifrar: Configurar (x)inetd

Si decides que utilizar una transferencia de datos sin cifrar es un riesgo aceptable, el siguiente paso es configurar un súper servidor de internet.Si la prueba con ss mostró que xinetd, inetd o systemd ya están escuchando en el puerto TCP 6556, pasa a la prueba de conexión.

Si no es así, utiliza 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

Puedes identificar a partir del proceso en ejecución si se trata del más moderno xinetd o de uno de los otros súper servidores de internet (GNU-Inetutils, OpenBSD-Inetd, Busybox-Inetd). Si no hay ningún proceso activo, instala un xinetd a través del administrador de paquetes de tu distribución. Si hay un inetd "clásico" activo, normalmente tiene sentido instalarlo y utilizarlo en lugar de cambiar a xinetd.

5.1. Configurar xinetd

Para configurar un xinetd existente que utiliza el directorio /etc/xinetd.d/ para la configuración, tanto el archivo TGZ como los paquetes DEB y RPM vienen con un script que automatiza los dos pasos necesarios: primero instala la configuración y luego hace que xinetd vuelva a leer la configuración modificada. Tienes que llamar al script con las rutas de archivo completas:

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

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 de tu servidor Checkmk.

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

Cuando la configuración de xinetd esté completa, reinícialo:

root@linux# service xinetd restart

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

5.2. Configurar otro inetd

En primer lugar, comprueba si tu /etc/services ya contiene una entrada para el puerto 6556:

root@linux# grep 6556/ /etc/services

Si no es así, debes registrar Checkmk 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/servicios
checkmk-agent        6556/tcp   #Checkmk monitoring agent

El formato del archivo de configuración /etc/inetd.conf difiere entre las distintas variantes. Consulta los comentarios del archivo de configuración y la página del manual (man 5 inetd.conf) para saber cuál es el formato que coincide con tu inetd. A continuación, aparece la configuración que coincide con openbsd-inetd, con dos líneas para el soporte IPv4 e IPv6. De nuevo, 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

Tras editar el archivo de configuración, reinicia inetd, por ejemplo con:

root@linux# /etc/init.d/inetd restart

Dependiendo del sistema init utilizado y del súper servidor instalado, este comando puede variar.

5.3. Prueba de conexión

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

root@linux# ss -tulpn | grep 6556
tcp	LISTEN 0	64	*:6556	*:*	users:(("xinetd",pid=1573,fd=5))

Ahora puedes conectarte con 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.3.0p31
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

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 con los siguientes pasos:

  1. Crea un par de claves SSH específicas 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 está disponible: Desactiva el acceso a través de (x)inetd.

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

6.1. Crear un par de claves SSH

SSH funciona con "autenticación de clave pública". Para ello, primero generas un par de claves coincidentes, donde una es pública y la otra privada. Al seleccionar el algoritmo puedes elegir entre rsa, ecdsa o ed25519. En el siguiente ejemplo, utilizas el comando ssh-keygen -t ed25519 como usuario del 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+|
+-----------------+

Deja el nombre de archivo vacío para utilizar el nombre de archivo sugerido. Por supuesto, puedes especificar una ruta diferente, por ejemplo si quieres trabajar con claves separadas para host individuales.

Importante: No especifiques una frase de contraseña! Cifrar el archivo con la clave secreta no serviría de nada, después de todo, 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

La clave privada se llama id_ed25519 y sólo puede leerla el usuario del site (-rw-------) - ¡y eso es bueno! La clave pública id_ed25519.pub tiene este aspecto:

OMD[mysite]:~$ cat .ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGb6AaqRPlbEmDnBkeIW3Q6Emb5lr2QEbWEQLmA5pb48 mysite@mycmkserver

6.2. Permitir el acceso mediante SSH

El siguiente paso debe tener lugar en (cada uno de) los host(s) Linux monitorizados mediante 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

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

root@linux# vim /root/.ssh/authorized_keys

Copia el contenido de las claves públicas en este archivo. Esto puede hacerse, por ejemplo, con el ratón y copiar y pegar. Sé preciso! Cada espacio cuenta. Asegúrate también de que nunca hay dos espacios en una línea. Y: Si el archivo ya existe, simplemente añade una nueva línea a continuación .

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

Lo que viene ahora es muy importante! La clave SSH debe utilizarse exclusivamente para ejecutar el agente. SSH ofrece algo así bajo el nombre de restricción de comandos. Para ello, pon 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-. Tendrá un aspecto parecido a este

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

Guarda el archivo y comprueba los permisos: sólo 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

A continuación, prueba 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.3.0p31
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>>>

La primera vez tendrás que confirmar la huella digital de la clave introduciendo yes. A partir de ese momento, todos los demás accesos podrán realizarse sin interacción del usuario, incluido el sondeo automático del script del agente por parte del servidor Checkmk cada minuto.

Si no funciona, por favor, check:

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

  • ¿Los archivos y directorios especificados tienen 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@…​)?

  • ¿Recordaste el command="…​"?

Con 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 fuerte conocida para la conexión.

6.4. Cambiar el acceso de Checkmk a SSH

El sistema de destino ya está preparado. Ahora sólo falta la configuración del propio Checkmk. Esto se hace mediante el conjunto de reglas Setup > Agents > Other integrations> Custom integrations > Individual program call instead of agent access. Crea aquí una regla para los host 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 GUI en Setup > Hosts > Properties of host > Test connection to host con el botón Run tests. Si la prueba falla con timeout o acceso denegado, comprueba si has utilizado el nombre del host con la misma ortografía que al realizar la prueba en la línea de comandos - OpenSSH diferencia entre nombre corto del host, FQDN y dirección IP. También puedes acceder al host utilizando su dirección IP. En este caso tienes que utilizar la macro $HOSTADDRESS$ que se sustituye por la dirección IP cacheada (por Checkmk) del host.

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 a través de SSH". Para realizar más diagnósticos, 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. Múltiples 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 entonces la ruta a la respectiva clave privada con la opción -i. Lo mejor es utilizar aquí $OMD_ROOT en sustitución de la ruta al directorio del site (/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 site con un nombre diferente:

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

Esto te permite utilizar distintas claves SSH para distintos grupos de host utilizando 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 aún pueda estar disponible en la monitorización del host. Si el comando ss -tulpn | grep 6556 anterior no ha encontrado ningún proceso escuchando en el puerto TCP 6556, ya has terminado de configurar el túnel SSH. Si sale una línea, el proceso que se ha encontrado debe ser desactivado permanentemente.

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 constelaciones durante las actualizaciones de los agentes!

La desactivación se realiza en el archivo /etc/xinetd.d/check-mk-agent (en sistemas con instalaciones de agentes más antiguas, 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

o

root@linux# service xinetd restart

Comprueba ahora que ya no es posible acceder a través del puerto 6556.

inetd

Si es inetd quien 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

Comenta esta línea con la almohadilla # y reinicia el proceso.

root@linux# /etc/init.d/inetd restart

Luego, utilizando telnet o nc verifica si el acceso sigue siendo posible.

systemd

Si la búsqueda mostró 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

Ahora puedes primero detener 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.

Ahora el acceso al puerto 6556 no debería ser posible.

6.7. Verificación del éxito

En cualquier caso, no olvides 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

7. Otras opciones de seguridad

Describimos las opciones de seguridad presentadas aquí principalmente por razones de compatibilidad con las instalaciones existentes. En muchos casos, la transmisión de la salida del agente a través de SSH satisfará los requisitos de restricción de acceso y seguridad contra escuchas. No obstante, en casos concretos puede tener sentido utilizar adicionalmente los mecanismos de protección presentados a continuación o utilizarlos cuando no sea posible utilizar un túnel SSH.

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

Por supuesto, el cifrado necesita una configuración adecuada tanto en el agente como en el servidor, que puede crearse manualmente en Checkmk edición Raw o con el Agent bakery de 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 la Agent bakery que incluya la clave de cifrado podría, por ejemplo, ser interceptado por un atacante, que podría descifrar el contenido de las comunicaciones.

7.1. Implementación de la encriptación integrada

Activar la encriptación

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 host para los que quieras utilizar la encriptación. Los host SNMP ignoran esta configuración, por lo que no necesitas 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 encriptada. La encriptación funciona con una contraseña compartida(secreto compartido) que especificas aquí y que debe almacenarse en texto plano tanto en el servidor Checkmk como en el agente. Si lo deseas, selecciona el icono para que Checkmk genere una contraseña aleatoria por ti, y ten esta contraseña preparada para el segundo paso, la configuración del agente.

Configurar el agente

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

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

Naturalmente, aquí debes especificar tu propia contraseña en PASSPHRASE, y definitivamente debes proteger el archivo .cfg del acceso de lectura por parte de otros usuarios:

root@linux# chmod 600 /etc/check_mk/encryption.cfg

Configuración del servidor Checkmk

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

Tienes las siguientes opciones:

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

  • Accept all types of encryption: Sólo se aceptarán datos encriptados, ya sea mediante TLS o mediante encriptación simétrica, como se activó en el primer paso.

  • Accept TLS encrypted connections only: Sólo se aceptarán datos encriptados por TLS.

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

Tiene sentido empezar con Accept all incoming data, including unencrypted. Una vez que creas que todos los agentes han pasado a la encriptación, configura Accept all types of encryption para encontrar cualquier host que todavía pueda estar enviando datos en texto plano. Los hosts que envíen datos sin encriptar serán detectados y marcados en "rojo".

Probando

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 dar como resultado una cadena de caracteres desordenada.

  • El acceso a través de telnet myhost123 6556 desde el servidor Checkmk debe producir el mismo revoltijo de caracteres.

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

7.2. Configurar la encriptación integrada con el Agent bakery

La configuración de la encriptación con el Agent bakery es la siguiente: con el primer paso, la creación de la regla Symmetric encryption (Linux, Windows), casi has terminado. Ahora sólo tienes que crear y distribuir los nuevos agentes. El archivo /etc/check_mk/encryption.cfg se crea automáticamente y se incluye en los paquetes de los agentes. Sólo queda el tercer paso, es decir, la creación de la regla Enforce agent data encryption.

7.3. xinetd: restricciones IP

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

Si compartes el Agente Checkmk a través de xinetd, es muy fácil y eficaz restringir el acceso a direcciones IP concretas -y a las del servidor de monitorización, por supuesto-. Esto puede conseguirse rápidamente mediante la directiva only_from de tu archivo de configuración xinetd. Introduce direcciones IP o rangos de direcciones (en la forma 12.34.56.78/29 o 1234::/46) separados por espacios. También se permiten nombres del host. En este caso, el sistema comprueba si el nombre del 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
}

En las ediciones comerciales, los usuarios de Agent bakery pueden configurar las direcciones IP permitidas mediante el 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 conectarse así al agente. Pero entonces es muy probable que no reciba la respuesta, porque la respuesta irá al servidor de monitorización legítimo. O bien el atacante recibe realmente una respuesta, pero el servidor Checkmk no recibe ningún dato e informará rápidamente de un error.

8. Mensajes de error habituales al utilizar SSH

Si quieres recuperar el agente Checkmk mediante SSH, puede ocurrir que esta recuperación falle y que el servicio Check_MK de tu host cambie al estado CRIT. Estos mensajes de error suelen empezar por Agent exited with code 255.

Puedes encontrar información sobre cómo solucionar estos errores en la Base de conocimientos de Checkmk.

En esta página