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.
Configuración
Editar el fichero /etc/logcheck/logcheck.conf
y cambiar las siguientes líneas:
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 sí 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!