jueves, 30 de marzo de 2017

Debian: Como resolver "Error: Could not complete SSL handshake." en un Nagios client server

Como resolver: "Error: Could not complete SSL handshake." en un Nagios client server


Revisando los logs del sistema se encontró lo siguiente:
root@sftpserver:/var/log# tail -300 syslog
Mar 20 16:29:18 sftpserver nrpe[23687]: Error: Could not complete SSL handshake. 1

Se verificó el archivo de configuración del agente de Nagios (/etc/nagios/nrpe.cfg) para corroborar que los parámetros estén correctos.

Se intento verificar el servicio nrpe pero el mismo no existía como nrpe:
root@sftpserver:/var/log# service nrpe status
nrpe: unrecognized service
root@sftpserver:/var/log# service --status-all | grep -i nrp
 [ ? ]  bootmisc.sh
 [ ? ]  checkfs.sh
 [ ? ]  checkroot-bootclean.sh
 [ ? ]  hwclock.sh
 [ ? ]  killprocs
 [ ? ]  kmod
 [ ? ]  mountall-bootclean.sh
 [ ? ]  mountall.sh
 [ ? ]  mountdevsubfs.sh
 [ ? ]  mountkernfs.sh
 [ ? ]  mountnfs-bootclean.sh
 [ ? ]  mountnfs.sh
 [ ? ]  mpt-statusd
 [ ? ]  mtab.sh
 [ + ]  nagios-nrpe-server
 [ ? ]  networking
 [ ? ]  rc.local
 [ ? ]  sendsigs
 [ ? ]  udev-mtab
 [ ? ]  umountfs
 [ ? ]  umountnfs.sh
 [ ? ]  umountroot

Arriba se encontró el servicio nagios-nrpe-server, pero se desestimó por que el software de las herramientas de monitoreo suelen ser dos paquetes, producto y agente.

Se buscaron archivos de nombres similares a "nrpe*":
root@sftpserver:/etc# find / -name "nrpe*"
/etc/nagios/nrpe_local.cfg
/etc/nagios/nrpe.d
/etc/nagios/nrpe.cfg
/run/nagios/nrpe.pid
/usr/share/man/man8/nrpe.8.gz
/usr/sbin/nrpe
root@sftpserver:/etc# cat /run/nagios/nrpe.pid
2608
root@sftpserver:/etc# ps -ef | grep 2608
nagios    2608     1  0 Mar17 ?        00:00:21 /usr/sbin/nrpe -c /etc/nagios/nrpe.cfg -d
root     24728 24424  0 17:28 pts/1    00:00:00 grep 2608


Fue encontrado el proceso "/usr/sbin/nrpe -c /etc/nagios/nrpe.cfg -d" pero a pesar de esto, el mismo mostraba errores en el servidor de monitoreo.

Ya que el único servicio encontrado fue nagios-nrpe-server fue reiniciado.
root@sftpserver:/etc# service nagios-nrpe-server restart
[ ok ] Stopping nagios-nrpe: nagios-nrpe.
[ ok ] Starting nagios-nrpe: nagios-nrpe.


Esta vez se encontró que luego del reinicio del servicio el mismo no iniciaba:
root@sftpserver:/etc# service  --status-all | grep nrpe
 [ ? ]  bootmisc.sh
 [ ? ]  checkfs.sh
 [ ? ]  checkroot-bootclean.sh
 [ ? ]  hwclock.sh
 [ ? ]  killprocs
 [ ? ]  kmod
 [ ? ]  mountall-bootclean.sh
 [ ? ]  mountall.sh
 [ ? ]  mountdevsubfs.sh
 [ ? ]  mountkernfs.sh
 [ ? ]  mountnfs-bootclean.sh
 [ ? ]  mountnfs.sh
 [ ? ]  mpt-statusd
 [ ? ]  mtab.sh
 [ - ]  nagios-nrpe-server
 [ ? ]  networking
 [ ? ]  rc.local
 [ ? ]  sendsigs
 [ ? ]  udev-mtab
 [ ? ]  umountfs
 [ ? ]  umountnfs.sh
 [ ? ]  umountroot

root@sftpserver:/etc# service  nagios-nrpe-server status
[FAIL] nagios-nrpe is not running ... failed!
root@sftpserver:/etc# service nagios-nrpe-server start
[ ok ] Starting nagios-nrpe: nagios-nrpe.
root@sftpserver:/etc# service nagios-nrpe-server status
[FAIL] nagios-nrpe is not running ... failed!


Se continuaron buscando fallas en el log del OS en caso de que el “milestone” (por su nombre en UNIX) que controla como levantan los servicios esté fallando y no se encontró nada.
root@sftpserver:~# dmesg
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 3.2.0-4-amd64 (debian-kernel@lists.debian.org) (gcc ver
[    5.962678] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
(...)
[   16.580996] eth0: no IPv6 routers present


Entendiendo que el server y el agente deberían estar instalandos, se buscó el archivo nrpe-2.13.tar.gz para reinstalar pensando que quizás hubo pérdida de algún archivo durante la recuperación del la password de root del server días atrás.


Al querer  instalar el cliente se obtuvieron nuevos errores, como la falta de compiladores y path preestablecidos en el profile de root.
root@sftpserver:/tmp/nrpe-2.13# ./configure --disable-ssl --enable-command-args
checking for a BSD-compatible install... /usr/bin/install -c
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking for gcc... no
checking for cc... no
checking for cc... no
checking for cl... no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.

Se eligió una instalación sin SSL por el error encontrado "Could not complete SSL handshake" y porque en la wiki se encontraron notas donde se informaba que por motivo desconocido se instaló Nagios sin SSL.

Se intentó instalar los paquetes faltantes usando un repositorio externo y saliendo por proxy pero se tuvo un error nuevamente.
root@sftpserver:/tmp/nrpe-2.13# export http_proxy=http://X.X.X.X:8080
root@sftpserver:/tmp/nrpe-2.13# apt-get install build-essential libssl-dev
(...)
Failed to fetch http://ftp.ccc.uba.ar/....deb  Unable to connect to X.X.X.Y:8080

Y con otro dirección lo mismo:
Failed to fetch http://ftp.ccc.uba.ar/....deb  Unable to connect to X.X.X.Z:8080

También falló configurando el apt.conf:
root@sftpserver:/tmp/nrpe-2.13# cat /etc/apt/apt.conf
Acquire::http::Proxy "http://X.X.X.Z:8080";
Nota: Apt-Get no soporta autenticación de HTTP proxy con dominio de Windows.

Se analizaron las posibilidades como la de instalar un paquete que permita usar autenticación de proxy y Apt-Get pero se dedujo que no sería conveniente.
El sofware que se intentó utilizar fue "Cntlm", pero la configuración retrasaría el troubleshooting.
root@sftpserver:/# vi /etc/cntlm.conf
#
# Cntlm Authentication Proxy Configuration
#
# NOTE: all values are parsed literally, do NOT escape spaces,
# do not quote. Use 0600 perms if you use plaintext password.
#

Username        userx
Domain          domainx
Password        xxx


En casos como este, y basado en mi experiencia en la familia "Fedora" (CentOS-RHEL) se suele realizar un repositorio desde el CD-Rom e instalar los paquetes esenciales, pero no se encontraba información de cuál es el archivo de configuración que hay que modificar para que funcione en Debian.

Se intentó crear un server de repositorio y realizar las instalaciones desde ahí, pero visto que se tenía el mismo problema para salir a internet (dominio de Windows) y que son pocos los servidores Debian ya que el estándar es Fedora, se abandonó esa tarea y se volvió al troubleshooting del software.

De esta manera se busco iniciar el proceso como demonio (-similar a servicio-) manualemente:
Usage: nrpe [-n] -c <config_file> <mode>

Options:
 -n            = Do not use SSL
 <config_file> = Name of config file to use
 <mode>        = One of the following two operating modes:
   -i          =    Run as a service under inetd or xinetd
   -d          =    Run as a standalone daemon

No se tuvo éxito:
root@sftpserver:~# /usr/sbin/nrpe -n -c /etc/nagios/nrpe.cfg -d
root@sftpserver:~# ps -ef | grep -i nag
root     13584 13061  0 10:10 pts/0    00:00:00 grep -i nag

Se realizó algo similar pero desde el init.d y con el usuario Nagios pero tampoco inició:
nagios@sftpserver:~$ /etc/rc.d/init.d/nagios restart

En una búsqueda detallada se intentó encontrar software dependiente del servicio pero no existía:
root@sftpserver:~# find / -name "nagio*"
/etc/nagios
/etc/nagios-plugins
/etc/init.d/nagios-nrpe-server
/etc/default/nagios-nrpe-server
/run/nagios
/var/lib/dpkg/info/nagios-nrpe-server.list
/var/lib/dpkg/info/nagios-plugins-common.md5sums
/var/lib/dpkg/info/nagios-plugins-standard.list
/var/lib/dpkg/info/nagios-plugins-common.list
/var/lib/dpkg/info/nagios-nrpe-server.prerm
/var/lib/dpkg/info/nagios-nrpe-server.preinst
/var/lib/dpkg/info/nagios-nrpe-server.postrm
/var/lib/dpkg/info/nagios-nrpe-server.conffiles
/var/lib/dpkg/info/nagios-nrpe-server.md5sums
/var/lib/dpkg/info/nagios-nrpe-plugin.conffiles
/var/lib/dpkg/info/nagios-plugins.list
/var/lib/dpkg/info/nagios-nrpe-plugin.list
/var/lib/dpkg/info/nagios-plugins-basic.md5sums
/var/lib/dpkg/info/nagios-plugins-standard.postinst
/var/lib/dpkg/info/nagios-plugins-basic.list
/var/lib/dpkg/info/nagios-nrpe-plugin.postrm
/var/lib/dpkg/info/nagios-plugins-basic.postrm
/var/lib/dpkg/info/nagios-nrpe-plugin.md5sums
/var/lib/dpkg/info/nagios-plugins-standard.postrm
/var/lib/dpkg/info/nagios-plugins-standard.md5sums
/var/lib/dpkg/info/nagios-plugins.md5sums
/var/lib/dpkg/info/nagios-plugins-basic.postinst
/var/lib/dpkg/info/nagios-nrpe-server.postinst
/var/lib/nagios
/usr/share/doc/nagios-plugins-common
/usr/share/doc/nagios-plugins-standard
/usr/share/doc/nagios-nrpe-plugin
/usr/share/doc/nagios-plugins
/usr/share/doc/nagios-plugins-basic
/usr/share/doc/nagios-nrpe-server
/usr/share/nagios-plugins
/usr/share/locale/de/LC_MESSAGES/nagios-plugins.mo
/usr/share/locale/fr/LC_MESSAGES/nagios-plugins.mo
/usr/lib/nagios
root@sftpserver:~#

Se intento directamente iniciar el proceso desde el init.d y como root y tampoco iniciaba:
root@sftpserver:~# /etc/init.d/nagios-nrpe-server start
[ ok ] Starting nagios-nrpe: nagios-nrpe.
root@sftpserver:~# /etc/init.d/nagios-nrpe-server status
[FAIL] nagios-nrpe is not running ... failed!


Se reviso nuevamente el /var/log/syslog intentando encontrar problemas en el milestone del inicio de los servicios y no sé encontró evidencia.


Se probó el script del check_nrpe propio de Nagios y mostraba errores:
root@sftpserver:~# /usr/lib/nagios/plugins/check_nrpe -H 192.168.X.X -c /etc/nagios/nrpe.cfg
Connection refused by host


Se reviso la red:
- No se encontraba actividad para el puerto asignado a Nagios
root@sftpserver:~# netstat -apn | grep :5666
root@sftpserver:~# lsof -i:5556
- No se encontraba iptables (filtración de paquetes) configurado con política restrictiva
root@sftpserver:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination


Se observó que el servidor de Nagios rechazaba el puerto del cliente. Luego se descartó por qué telnet está deshabilitado en el otro host.
root@sftpserver:~# telnet 127.0.0.1 5666
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

Volviendo a los servicios tampoco se encontró xinetd configurado
root@sftpserver:~# /etc/init.d/xinetd restart
-bash: /etc/init.d/xinetd: No such file or directory


Se revisó el estado del apache, en caso de que nagios-nrpe-server sea server zookeeper debería estar levantado. De esta forma faltaría un cliente definitivamente.
root@sftpserver:~# ps aux | grep -i zookeeper
root      3178  0.0  0.1   7832   892 pts/0    S+   11:03   0:00 grep -i zookeeper


Se hizo una modificación en /etc/nagios/nrpe.cfg y está vez el servicio inició:
root@sftpserver:~# service nagios-nrpe-server restart
[....] Stopping nagios-nrpe: nagios-nrpestart-stop-daemon: warning: failed to kill 2959: No such process
. ok
[ ok ] Starting nagios-nrpe: nagios-nrpe.
root@sftpserver:~# service nagios-nrpe-server status
[ ok ] nagios-nrpe is running.

root@sftpserver:~# ps -ef | grep -i nrpe
nagios    3800     1  0 11:46 ?        00:00:00 /usr/sbin/nrpe -c /etc/nagios/nrpe.cfg -d
root      3897  2788  0 11:46 pts/0    00:00:00 grep -i nrpe

root@sftpserver:~# /usr/lib/nagios/plugins/check_nrpe -H localhost
NRPE v2.13
root@sftpserver:~# /usr/lib/nagios/plugins/check_nrpe -H 192.168.X.X
Connection refused by host


El servició a pensar de estar levantado continuaba sin informar su actividad al server. Se encontró lo siguiente en el syslog:
Mar 27 11:51:49 sftpserver nrpe[3981]: Starting up daemon
Mar 27 11:51:49 sftpserver nrpe[3981]: Warning: Daemon is configured to accept command arguments from clients!
Mar 27 11:51:49 sftpserver nrpe[3981]: Listening for connections on port 5666
Mar 27 11:51:49 sftpserver nrpe[3981]: Allowing connections from: 127.0.0.1,192.168.X.X
Mar 27 11:52:15 sftpserver nrpe[4089]: Could not read request from client, bailing out...


Al intentar leer los datos de la memoria con el server como localhost se obtuvo nuevamente el error del SSL.
root@sftpserver:/var/log# /usr/lib/nagios/plugins/check_nrpe -H localhost -c check_mem
CHECK_NRPE: Error - Could not complete SSL handshake.

Se leyó el script de arranque y se vio que no estaba configurado para tomar automáticamente la opción de No SSL.
root@sftpserver:/var/log# cat /etc/init.d/nagios-nrpe-server
(...)
# Include nagios-nrpe defaults if available
if [ -f /etc/default/nagios-nrpe-server ] ; then
        . /etc/default/nagios-nrpe-server
fi
# we also used to include this file, so if it's there
# we include it as well
if [ -f /etc/default/nagios-nrpe ]; then
        . /etc/default/nagios-nrpe
fi
if [ "$NICENESS" ]; then NICENESS="-n $NICENESS"; fi

#since /var/run can be wiped completly we create our run directory here
if [ ! -d "$PIDDIR" ]; then
        mkdir "$PIDDIR"
        chown nagios "$PIDDIR"
fi
(...)


Se lanzó el proceso como demonio y con No SSL:
root@sftpserver:/var/log# /usr/sbin/nrpe -c /etc/nagios/nrpe.cfg -d --no-ssl
root@sftpserver:/var/log# ps -ef | grep -i nrpe
nagios    4915     1  0 14:47 ?        00:00:00 /usr/sbin/nrpe -c /etc/nagios/nrpe.cfg -d --no-ssl


Con esto los errores desaparecieron y el cliente comenzó a informar. Sin embargo el error con el check era el mismo:
root@sftpserver:/var/log# /usr/lib/nagios/plugins/check_nrpe -H 192.168.X.X
Connection refused by host

Se buscaron todos los scripts de inicio dependientes, en ninguno estaba configurado el No SSL a pesar de que el la Wiki se informaba de que había sido compilado de esta manera.
root@sftpserver:/home# find / -name "*nrpe*"
/etc/rc0.d/K01nagios-nrpe-server
/etc/rc6.d/K01nagios-nrpe-server
/etc/rc1.d/K01nagios-nrpe-server
/etc/rc4.d/S02nagios-nrpe-server
(...)
/etc/rc5.d/S02nagios-nrpe-server
(...)
/etc/rc2.d/S02nagios-nrpe-server
/etc/default/nagios-nrpe-server
/etc/rc3.d/S02nagios-nrpe-server
(...)



Conclusiones:

·         El agente de Debian se llama nagios-nrpe-server y no nrpe como en Fedora, esto se puede prestar a confusión pero es probable que se haya  hecho así con el fin de diferenciar los paquetes de los OS flavors.

·         Si se reinicia un equipo Debian Nagios siempre debe ser invocado manualmente como </usr/sbin/nrpe -c /etc/nagios/nrpe.cfg -d --no-ssl> de  lo contrario no funcionará.

·         Connection refused by host es normal usando check_nrpe ya que este utiliza SSL, el cual está deshabilitado en nuestros hosts.

El problema se puede resolver modificando todas las entradas de los scripts de inicio por una sin SSL, ó se puede poner un script sencillo realizado por uno mismo.


Saludos!

No hay comentarios:

Publicar un comentario