Este artículo explica cómo instalar logwatch en Debian y habilitar el resumen de logs de Nginx en la salida del mismo.

Logwatch es una poderosa y versátil herramienta de análisis forense de logs de servicios (Web, correo, sistema, etc.) Está diseñado para elaborar un reporte unificado de toda la actividad en el servidor para un período determinado (típicamente el último día), el cual puede ser enviado por mail. De esta forma podemos recibir a diario, en nuestra casilla de correo electrónico, un resumen de la actividad sospechosa/anormal del día anterior.



Más allá de ayudar a detectar/corregir fallos de seguridad, esta herramienta puede ser muy útil para detectar fallos funcionales en nuestro sitio Web (errores HTTP 4XX/5XX) que puedan estar afectando a los usuarios de nuestro sitio.

Incluso detecta los robos que pasaron por nuestro sitio, intentos de acceso a servicios como SSH, cambios en la paquetería del sistema (actualizaciones, instalación de nuevos paquetes), mensajes del kernel, y más. Como para que ninguna situación anormal sea pasada por alto.

Luego es tarea del SysAdmin repasar una vez al día los logwatchs de todos los servidores.

En sistemas Debian y derivados, instalar Logwatch ejecutando:

root@linuxito:~# apt-get install logwatch

Logwatch incluye una configuración "de fábrica" que sirve para la mayoría de los casos, aunque es recomendable generar una configuración personalizada para mejorar su funcionamiento.

Copiar el archivo logwatch.conf por defecto al directorio /etc/logwatch/conf/ y editarlo:

root@linuxito:~# cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/
root@linuxito:~# nano /etc/logwatch/conf/logwatch.conf

Cambiar la salida para que sea por mail (por defecto es por salida estándar, lo cual hace que la tarea de cron termine generando un mail de todos modos). Cambiar al formato HTML para que la salida sea más amigable.

Output = mail
Format = html

La variable MailTo indica a qué destinatario se envía el resumen de Logwatch por mail. Es posible indicar directamente una dirección de correo electrónico o un usuario

MailTo = root

En este caso, el correo destinado a root es redirigido a una casilla externa.

Por último, habilitar el uso de "archivos" (archivos de log comprimidos), especificar el rango "yesterday" para que analice entradas en archivos de log desde el día de ayer, seleccionar todos los servicios disponibles y escoger un nivel de detalle ("Low", "Med", "High"):

Archives = Yes
Range = yesterday
Detail = High
Service = All

Agregar Nginx a la salida de Logwatch

Si hemos compilado Nginx desde sus fuentes utilizando el prefijo /usr/local, los archivos de log quedan por defecto en la ruta /usr/local/nginx/logs/.

Una limitación que tiene Logwatch, es que asume que todos los archivos de log se encuentran dentro de un mismo directorio base ("LogDir"), típicamente /var/log. Por lo tanto, para examinar logs por fuera de este directorio base, no queda otra alternativa que agregar un nuevo servicio en la configuración de Logwatch.

Para comenzar, copiar la configuración de los servicios "http" y "http-error" (son dos debido a que los logs de accesos y errores poseen diferente formato):

root@linuxito:~# cp /usr/share/logwatch/scripts/services/http /etc/logwatch/scripts/services/nginx
root@linuxito:~# cp /usr/share/logwatch/scripts/services/http-error /etc/logwatch/scripts/services/nginx-error
root@linuxito:~# cp /usr/share/logwatch/default.conf/services/http.conf /etc/logwatch/conf/services/nginx.conf 
root@linuxito:~# cp /usr/share/logwatch/default.conf/services/http-error.conf /etc/logwatch/conf/services/nginx-error.conf
root@linuxito:~# cp /usr/share/logwatch/default.conf/logfiles/http.conf /etc/logwatch/conf/logfiles/nginx.conf
root@linuxito:~# cp /usr/share/logwatch/default.conf/logfiles/http-error.conf /etc/logwatch/conf/logfiles/nginx-error.conf

Se deben copiar los scripts (dentro del directorio /usr/share/logwatch/scripts/services/), la configuración de servicios (dentro del directorio /usr/share/logwatch/default.conf/services/), y la configuración de los archivos de log (dentro del directorio /usr/share/logwatch/default.conf/logfiles/).

Editar la configuración del nuevo servicio "nginx":

root@linuxito:~# nano /etc/logwatch/conf/services/nginx.conf

Reemplazar "http" por "nginx":

Title = "nginx"
LogFile = nginx

Luego editar la configuración del nuevo servicio "nginx-error":

root@linuxito:~# nano /etc/logwatch/conf/services/nginx-error.conf

Reemplazar "http" por "nginx":

Title = nginx errors
LogFile = nginx-error

A continuación, editar la configuración de los archivos de log para ambos servicios, indicando las rutas adecuadas:

root@linuxito:~# nano /etc/logwatch/conf/logfiles/nginx.conf

Borrar todas las líneas de configuración de LogFile y Archive y reemplazarlas por las siguientes:

LogFile = /usr/local/nginx/logs/access.log
LogFile = /usr/local/nginx/logs/access.log.1
Archive = /usr/local/nginx/logs/access.log*gz

De forma similar para el servicio "nginx-error":

root@linuxito:~# nano /etc/logwatch/conf/logfiles/nginx-error.conf

Borrar todas las líneas de configuración de LogFile y Archive y reemplazarlas por las siguientes:

LogFile = /usr/local/nginx/logs/error.log
LogFile = /usr/local/nginx/logs/error.log.1
Archive = /usr/local/nginx/logs/error.log*gz

Finalmente, crear el directorio /var/cache/logwatch y lanzar logwatch por primera vez:

root@linuxito:~# mkdir -p /var/cache/logwatch
root@linuxito:~# logwatch

Al finalizar, y si todo es correcto, se recibe el mail en la casilla indicada:

La salida para Nginx es idéntica que para un servidor Apache:

Es importante aclarar que, para que el servicio Nginx funcione, el servidor Nginx debe guardar los archivos de log utilizando el formato Common Log Format. Sin embargo este es el formato que utiliza Nginx por defecto.

En Debian Wheezy, Logwatch corre por defecto todos los días a las 6:25 AM:

root@linuxito:/etc/logwatch# ll /etc/cron.daily/00logwatch 
-rwxr-xr-x 1 root root 268 May  6  2012 /etc/cron.daily/00logwatch
root@linuxito:/etc/logwatch# grep daily /etc/crontab 
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

Referencias

Logwatch

Logwatch - ArchWiki


Tal vez pueda interesarte


Compartí este artículo