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!