Recibir informes sobre sucesos de Ubuntu Server 20.04 LTS con Logcheck
Cuando necesitamos controlar lo que está pasando en un sistema, debemos recurrir a su registro de sucesos. Y en los sistemas GNU/Linux en general, y Ubuntu en particular, podemos lograrlo accediendo directamente a los archivos donde se almacenan, que se encuentran en la ruta /var/log. Además, para facilitarnos la tarea, guardan su información en texto plano.
También podemos utilizar otras herramientas, como Cockpit o Webmin, que nos hacen un poco más grata la tarea.
En SomeBooks.es ya hemos dedicado sendos artículos a dichas herramientas:
-
Cockpit (parte 4): Administrar eventos del sistema en Ubuntu.
-
Administrar eventos de Ubuntu 18.04 LTS con Webmin (que es perfectamente válido en versiones más recientes).
Sin embargo, existe una alternativa, llamada Logcheck, que nos simplifica bastante el trabajo. A diferencia de las anteriores, Logcheck compara las entradas recientes en el registro de sucesos con un conjunto de reglas predefinidas. Dichas reglas identifican los eventos como urgentes o los desestiman como rutinarios. Al final, envía el resultado por correo electrónico al administrador del sistema. También hace un seguimiento de los eventos procesados, para no repetirlos en sucesivas ejecuciones.
Los archivos de registro que se tienen en cuenta de forma predeterminada son /var/log/syslog y /var/log/auth.log, aunque este comportamiento puede ser modificado según nuestras necesidades.
Además, para construir el informe, se pueden establecer tres niveles de tolerancia diferentes:
-
Workstation: Está orientado a estaciones de trabajo y otros equipos que no sean críticos. Ignora todos los eventos que coincidan con las reglas contenidas en los archivos ignore.d.workstation, ignore.d.server e ignore.d.paranoid.
-
Server. Pensado para ordenadores que actúan como servidores de red. Ignora todos los eventos que coincidan con las reglas contenidas en los archivos ignore.d.server e ignore.d.paranoid.
-
Paranoid. Está dirigido a equipos con una función crítica, por ejemplo, los que actúan como cortafuegos. Únicamente ignora los eventos que coincidan con las reglas contenidas en el archivo ignore.d.paranoid.
Este modo de funcionar nos permite automatizar, en parte, la supervisión del sistema a la vez que mejoramos la seguridad. Su único inconveniente es que debemos dedicar algún esfuerzo para su correcta instalación y configuración. Pero a eso nos dedicaremos en este artículo…
Antes de instalar
Para su correcto funcionamiento, Logcheck necesita que se encuentre instalado, y correctamente configurado, el servidor de correo PostFix. Si en el momento de instalar Logcheck, Postfix no se encuentra en el sistema, se añadirá como una dependencia más e, incluso, se ejecutará su asistente de configuración.
Sin embargo, instalándolo de forma separada, podemos independizar ambas tareas y asegurarnos que Postfix funciona correctamente antes de afrontar la instalación de Logcheck. Este es el modo en el que hemos enfocado el presente artículo. De hecho, antes de continuar, te recomiendo que hagas lo mismo.
Para lograrlo, puedes seguir las indicaciones de un artículo que ya publicamos en SomeBooks.es con el título Configurar Postfix para usar el SMTP de Gmail en Ubuntu 20.04 LTS.
Actualizar el sistema
Afortunadamente, Logcheck se encuentra en los repositorios oficiales de Ubuntu, por lo que su instalación será muy sencilla.
Como es habitual cuando instalamos nuevos programas, lo primeros será actualizar la base de datos de paquetes de nuestro equipo. De esta forma, nos aseguramos de que instalamos la última versión del software que necesitemos. Lo conseguiremos ejecutando la siguiente orden:
sudo apt update
Al ejecutarlo, obtendremos un resumen del tamaño de la descarga y el tiempo empleado. También nos informaría sobre el número de paquetes que podemos actualizar.
Al final de su salida, el propio comando update nos dice cómo podemos obtener información más detallada sobre los paquetes que pueden actualizarse.
Se trata del siguiente comando:
sudo apt list --upgradable
Al hacerlo, obtendríamos la lista con el nombre de cada paquete que tenga una versión más moderna en el repositorio que en nuestro sistema.
Sin embargo, nosotros usaremos directamente el comando upgrade, que utiliza la información descargada por update para instalar las últimas versiones de los paquetes actualizables, es decir, aquellos que tienen una versión más moderna en el repositorio que en nuestro equipo.
También podrán instalarse nuevos paquetes cuando éstos sean necesarios para satisfacer dependencias.
Para ejecutarlo, solo tendremos que escribir lo siguiente:
sudo apt upgrade
El sistema nos muestra información sobre el proceso que va a realizar: el nombre y el número de paquetes que serán actualizados y el nombre y número de paquetes nuevos que habrá que instalar para satisfacer las dependencias. También el número de paquetes que habría que eliminar y el número de paquetes que quedarán sin actualizar (si fuese el caso).
Por último, veremos la cantidad de información que será preciso descargar y el espacio total que será necesario ocupar en el disco para llevar a cabo la tarea.
Una vez leída la información, si estamos de acuerdo, bastará con pulsar la tecla Y para continuar con el proceso.
Solo tendremos que esperar un momento para que se complete la tarea.
Instalar Logcheck
Una vez actualizado el sistema, estamos listos para instalar Logcheck y, como está incluido en los repositorios oficiales de Ubuntu, la tarea no puede ser más sencilla. Solo tenemos que ejecutar el siguiente comando:
sudo apt install logcheck
Como se necesitan instalar algunas dependencias, el sistema nos solicita nuestra aprobación.
Podemos pulsar la tecla Y o, sencillamente, Intro, ya que la respuesta afirmativa es la predeterminada.
Después de esto, la instalación continuará unos instantes más.
Configurar Logcheck
Una vez concluida la instalación, estamos casi listos para comprobar si el sistema funciona correctamente. Sin embargo, aún tenemos que editar el archivo de configuración de Logcheck para indicarle dos detalles.
Se trata del archivo /etc/logcheck/logcheck.conf y estos son los valores a incluir:
-
La dirección de correo electrónico donde deben enviarse los informes, que se encuentra en la variable SENDMAILTO.
-
Que dichos informes deben incluirse como archivos adjuntos. Esto se hace asignando a la variable MAILASATTACH el valor 1.
Con algunas direcciones de correo que incluyen signos (como, por ejemplo, somebooks_es@gmail.com), Logcheck puede no funcionar correctamente.
Como aquí solemos utilizar el editor nano, escribiremos algo como esto:
sudo nano /etc/logcheck/logcheck.conf
Inmediatamente después tendremos el contenido del archivo en la pantalla.
A continuación, nos desplazamos hasta la línea que contiene la variable SENDMAILTO y sustituimos el valor predeterminado por el que nos convenga (para nuestro ejemplo, somebooks.es@gmail.com, pero tu debes usar la dirección donde quieras recibir los informes).
Después, descendemos hasta la línea que contiene la variable MAILASATTACH y ponemos su valor a 1.
Al hacerlo, el editor nos preguntará si queremos guardar los cambios que hemos realizado.
A continuación, nos da la oportunidad de cambiar el nombre del archivo, para no perder su valor anterior.
Comprobar el funcionamiento de Logcheck
Una vez completados los cambios anteriores, estamos listos para probar el funcionamiento de Logcheck. Sin embargo, antes debemos saber que durante su instalación, se ha creado un usuario, también llamado logcheck, con el fin de evitar que el comando tenga que ejecutarse como root. De hecho, si intentas ejecutarlo con privilegios de root, obtendrás un error.
Para ejecutar el comando logcheck con el usuario logcheck, necesitamos recurrir al argumento -u del comando sudo. Su formato general es este…
sudo -u usuario comando
Es decir, ejecutamos el comando con los privilegios de la cuenta indicada.
Nosotros, además, añadiremos dos argumentos a logcheck:
-
-o, que sustituye el envío del correo electrónico por la salida en pantalla. Así, vemos el resultado de forma inmediata y comprobamos que funciona satisfactoriamente.
-
-t, que inhibe el seguimiento de los eventos procesados, lo que nos permite seguir haciendo pruebas sin perder los eventos anteriores.
Por lo tanto, el comando nos queda así:
sudo -u logcheck logcheck -o -t
La ejecución del comando empleará un tiempo que estará en función del número de sucesos que deba procesar.
Un momento más tarde, el resultado aparecerá en pantalla.
Una vez comprobado que el mecanismo funciona, nos queda asegurarnos de que se reciben los correos electrónicos que produzca Logcheck. Y para lograrlo, solo tenemos que repetir el comando anterior, pero eliminando la opción -o:
sudo -u logcheck logcheck -t
Si todo ha sido correcto, unos instantes después tendremos, en la bandeja de entrada de la cuenta de correo que hayamos configurado como destinataria, un nuevo mensaje.
Por cierto, para facilitar su lectura o procesamiento, el informe se genera en formato de texto plano.
En cualquier caso, debes tener en cuenta que, si Logcheck no encuentra mensajes nuevos, no enviará ningún correo electrónico.
Ajustar el funcionamiento de Logcheck
Existen varias cuestiones que podemos adecuar a nuestras necesidades en el funcionamiento de Logcheck:
-
Los archivos de sucesos a monitorizar: El archivo /etc/logcheck/logcheck.logfiles contiene el nombre de los archivos de los que Logcheck obtiene los sucesos que analiza.
De forma predeterminada proceden de auth.log y syslog, pero podemos añadir aquellos que consideremos oportunos.
Para lograrlo, bastaría con editar el archivo logcheck.logfiles:
sudo nano /etc/logcheck/logcheck.logfiles
Cuando se abra, veremos qué archivos está analizando actualmente Logcheck.
Por ejemplo, podríamos añadir el archivo /var/log/boot.log, que es donde se anotan las incidencias de inicio del sistema.
Cuando terminemos de escribirlo, salimos del editor pulsando las teclas Ctrl + X y asegurándonos de guardar los cambios.
También podríamos haber añadido los ficheros generados por cualquier aplicación, como /var/log/apache2/error.log o /var/log/apache2/localhost/error.log.
-
La frecuencia con la que se ejecuta Logcheck: El archivo /etc/cron.d/logcheck representa una tarea para cron e indica con qué frecuencia se generan los informes.
Para comenzar, podemos editarlo para ver su contenido:
sudo nano /etc/cron.d/logcheck
Comprobamos que Logcheck se pondrá en marcha con cada reinicio o en el minuto 2 de cada hora.
Como ves en la imagen siguiente, la única diferencia entre ambas líneas es el argumento -R, que incluirá el texto «Reboot:» en el asunto del mensaje enviado por email. De ese modo, el administrador también tendrá constancia de que se ha producido un reinicio.
-
Las reglas de filtrado: Logcheck procesa los sucesos según una serie de reglas redactadas como expresiones regulares. Estas líneas representan patrones que aparecen en los archivos de sucesos cuando se produce un determinado evento. Por ejemplo, una regla podría ser así:
login.*: .*LOGIN FAILURE.* FROM .*root
Con ella buscamos líneas en las que el subsistema login indique cualquier fallo al tratar de iniciar sesión como root.
Se escapa de los objetivos de este documento entrar en detalle sobre la construcción y eliminación de reglas para Logcheck. Basta con decir que se almacenan en archivos de texto, dentro de diferentes carpetas, según su tipo:
-
Las que identifican un suceso como un intento de intrusión se guardan en el directorio /etc/logcheck/cracking.d.
-
Las que excluyen un suceso como un intento de intrusión se guardan en el directorio /etc/logcheck/cracking.ignore.d.
-
Las que identifican un suceso como una alerta de seguridad se guardan en el directorio /etc/logcheck/violations.d.
-
Las que excluyen un suceso como una alerta de seguridad se guardan en el directorio /etc/logcheck/violations.ignore.d.
Las demás son consideradas sucesos del sistema.
Puedes encontrar información detallada sobre el filtrado de sucesos en /usr/share/doc/logcheck-database/README.logcheck-database.gz.
-
Y esto es todo por el momento. Espero que te haya resultado útil.
El artículo de hoy lo hemos desarrollado sobre Ubuntu Server pero, para ponerlo en práctica sobre la versión de escritorio, solo tienes que abrir una ventana de terminal. Por ejemplo, usando la combinación de teclas Alt + Control + T.