Logcheck: Análisis y alerta sobre logs

Publicado 10-04-2016

Leer los ficheros de registro (logs) de nuestro servidor es un tarea tediosa y muy pesada, y dependiendo del volumen, completamente inalcanzable para una sola persona. Tanto el sistema como las aplicaciones son muy prolijos a la hora de escribir logs, llenándolos con información completamente irrelevante, de ruido que no nos deja escuchar los eventos realmente importantes.

Por contra en estos ficheros se encuentra información vital sobre el estado de nuestro sistema. Cualquier problema presente o futuro se va encontrar reflejado en ellos, y haríamos mal en simplemente pasarlos por alto debido a su tamaño y habitual irrelevancia.

La solución “pro”: logstash

Existen varias formas de encarar este problema. La complicada y aconsejable si tenemos bastantes servidores que administrar y un equipo de personas para ello, consistiría en instalar un nuevo servidor o instancia con un software del tipo Logstash que recibiría por la red todos los logs de los otros servidores almacenándolos, permitiendo su revisión y búsqueda y generando alertas programadas.

No vamos a ir tan lejos en este artículo, ya que para uno, o unos pocos servidores o máquinas virtuales realmente no necesitamos tanto.

Una solución sencilla: logcheck

Vamos a utilizar la herramienta logcheck. Se trata de un software libre que va a analizar periódicamente todos nuestros logs y, esto es importante, nos va a avisar por email de todas aquellas líneas que no tengamos ignoradas previamente.

Es necesario entender este punto: Tendremos que instruir a logcheck para que no nos avise de las cosas irrelevantes, y él nos va a avisar de todo el resto de cosas, por tanto si en esos avisos recibimos información que no nos interesa tendremos que añadir reglas a su configuración para que las obvie en las siguientes ocasiones.

Por suerte viene con bastante reglas preconfiguradas así que lo más común que aparece en los logs ya está ignorado de entrada.

Nosotros vamos a instalarlo en nuestro servidor, a configurarlo y a añadir un par de reglas para que veáis como seguir trabajando con él.

Instalación

Las instrucciones son para Debian pero en otras distribuciones variarán muy poco, simplemente busca como instalar paquetes en tu distribución.

1root> apt-get update
2root> apt-get install logcheck

Configuración

Editar el fichero /etc/logcheck/logcheck.conf y cambiar las siguientes líneas:

1DATE="$(date +'%d-%m-%Y %H:%M')"
2SENDMAILTO="tu@direccion.com"

Con esto está listo para una primera prueba.

Primera prueba

Ejecutaremos logcheck desde el shell y especificando que es una prueba (-t) para que no actualice los offsets y que muestre la salida por pantalla (-o) sin enviar ningún email, la orden es su -s /bin/bash -c "/usr/sbin/logcheck -o -t" logcheck:

 1root> su -s /bin/bash -c "/usr/sbin/logcheck -o -t" logcheck
 2This email is sent by logcheck. If you no longer wish to receive
 3such mail, you can either deinstall the logcheck package or modify
 4its configuration file (/etc/logcheck/logcheck.conf).
 5
 6System Events
 7=-=-=-=-=-=-=
 8Aug 27 16:34:30 panel sshd[1580]: Received signal 15; terminating.
 9Aug 27 16:39:17 panel groupadd[28958]: group added to /etc/group: name=redis, GID=109
10Aug 27 16:39:17 panel groupadd[28958]: group added to /etc/gshadow: name=redis
11Aug 27 16:39:17 panel groupadd[28958]: new group: name=redis, GID=109
12Aug 27 16:39:17 panel useradd[28964]: new user: name=redis, UID=104, GID=109, home=/var/lib/redis, shell=/bin/false
13Aug 27 16:39:18 panel chage[28969]: changed password expiry for redis
14Aug 27 16:39:18 panel chfn[28972]: changed user 'redis' information
15Aug 28 16:03:44 panel groupadd[29958]: group added to /etc/group: name=logcheck, GID=110
16Aug 28 16:03:44 panel groupadd[29958]: group added to /etc/gshadow: name=logcheck
17Aug 28 16:03:44 panel groupadd[29958]: new group: name=logcheck, GID=110
18Aug 28 16:03:44 panel useradd[29962]: new user: name=logcheck, UID=105, GID=110, home=/var/lib/logcheck, shell=/bin/false
19Aug 28 16:03:45 panel usermod[29967]: change user 'logcheck' password
20Aug 28 16:03:45 panel chage[29972]: changed password expiry for logcheck
21Aug 28 16:03:45 panel gpasswd[29983]: user logcheck added by root to group adm
22Aug 28 16:03:45 panel chfn[29993]: changed user 'logcheck' information

Como veis no ha cantado mucho, me está diciendo que se han creado un par de usuarios y grupos y unos cambios de contraseñas totalmente normales ya que acabo de instalar algún software.

Configurando las reglas

Ahora vamos a configurar un par de reglas de ejemplo. Dado el resultado anterior imaginemos que no queremos que nos informe de cuando se creen nuevos usuarios (es mucho imaginar, normalmente querremos).

Para eso editaremos un nuevo fichero /etc/logcheck/ignore.d.server/mis-reglas. En este fichero simplemente tenemos que teclear un lista de expresiones regulares. En caso de que la línea de log que esté siendo analizada concuerde con una de estas expresiones, no seremos informados de ella:

1^.*panel\ useradd\[.*\]\:\ new\ user.*$

Es una expresión bastante sencilla para ignorar la líneas de useradd. Queda fuera del ámbito de este artículo explicar más sobre las expresiones regulares, pero hay mucha información en Internet y siempre podéis tirar de los ficheros que hay preconfigurados en /etc/logcheck a modo de ejemplo.

Probemos:

 1su -s /bin/bash -c "/usr/sbin/logcheck -o -t" logcheck
 2This email is sent by logcheck. If you no longer wish to receive
 3such mail, you can either deinstall the logcheck package or modify
 4its configuration file (/etc/logcheck/logcheck.conf).
 5
 6System Events
 7=-=-=-=-=-=-=
 8Aug 27 16:34:30 panel sshd[1580]: Received signal 15; terminating.
 9Aug 27 16:39:17 panel groupadd[28958]: group added to /etc/group: name=redis, GID=109
10Aug 27 16:39:17 panel groupadd[28958]: group added to /etc/gshadow: name=redis
11Aug 27 16:39:17 panel groupadd[28958]: new group: name=redis, GID=109
12Aug 27 16:39:18 panel chage[28969]: changed password expiry for redis
13Aug 27 16:39:18 panel chfn[28972]: changed user 'redis' information
14Aug 28 16:03:44 panel groupadd[29958]: group added to /etc/group: name=logcheck, GID=110
15Aug 28 16:03:44 panel groupadd[29958]: group added to /etc/gshadow: name=logcheck
16Aug 28 16:03:44 panel groupadd[29958]: new group: name=logcheck, GID=110
17Aug 28 16:03:45 panel usermod[29967]: change user 'logcheck' password
18Aug 28 16:03:45 panel chage[29972]: changed password expiry for logcheck
19Aug 28 16:03:45 panel gpasswd[29983]: user logcheck added by root to group adm
20Aug 28 16:03:45 panel chfn[29993]: changed user 'logcheck' information

¿Veis que ha ocurrido? Ahora las líneas de useradd ya no aparecen en el listado de eventos del sistema.

Conclusión

No tiene más misterio, se trata de ir viendo los emails que nos llegan con los avisos y configurar nuestro conjunto de reglas para ignorar todo lo que no nos interesa, de forma que al poco tiempo sólo nos llegarán las alarmas realmente importantes.

Logcheck ya se ha autoinstalado en el cron, en el fichero /etc/cron.d/logcheck por si lo queremos ver, así que nos irán llegando los emails automáticamente.

¡Hasta pronto!

Comentarios por Disqus