Linux: logwatch (8) es demasiado ruidoso. ¿Cómo puedo controlar el nivel de ruido?

30

Nuestros sistemas Linux ejecutan la utilidad logwatch (8) de forma predeterminada. En un sistema RedHat / CentOS / SL, el /etc/cron.daily/cronjob llama a Logwatch , que luego envía un correo electrónico diario con los resultados. Estos correos electrónicos tienen un tema como:

Subject: Logwatch for $HOSTNAME

El problema es que, por defecto, estos correos electrónicos diarios son demasiado ruidosos y contienen mucha información superflua (errores HTTP, uso diario del disco, etc.) que otros servicios ya supervisan (Nagios, Cacti, syslog central, etc.). Para 100 sistemas, la carga del correo electrónico es insoportable. La gente ignora los correos electrónicos, lo que significa que podemos pasar por alto los problemas que registra Logwatch.

¿Cómo puedo reducir la cantidad de ruido generado por logwatch, pero seguir usando logwatch para notificarnos sobre problemas importantes?

Publicaré mi propia respuesta a continuación, pero me gustaría ver lo que otros han hecho.

Nota : Tengo una pregunta similar con respecto a FreeBSD, en FreeBSD: periódico (8) es demasiado ruidoso. ¿Cómo puedo controlar el nivel de ruido?

Stefan Lasiewski
fuente

Respuestas:

39

En general, la documentación disponible para Logwatch carece de una explicación adecuada y, a menudo, es demasiado vaga. Reuní algunos ejemplos útiles y reduje el ruido de Logwatch en más del 95%.

Esto es lo que he encontrado.

Tenga en cuenta que puede encontrar documentación de Logwatch en /usr/share/doc/logwatch-*/HOWTO-Customize-LogWatch, y contiene algunos ejemplos útiles.

  1. En RHEL / CentOS / SL, la configuración predeterminada de logwatch está bajo /usr/share/logwatch/default.conf/logwatch.conf

    Estas configuraciones se pueden anular colocando su configuración local en /etc/logwatch/conf/logwatch.conf. Coloque lo siguiente en ese archivo para indicarle a logwatch que ignore por completo los servicios como 'httpd' y las comprobaciones diarias de uso del disco:

    # Don't spam about the following Services
    Service = "-http"
    Service = "-zz-disk_space"
    
  2. A veces no quiero deshabilitar por completo el registro de registro para un servicio específico, solo quiero ajustar los resultados para que sean menos ruidosos. /usr/share/logwatch/default.conf/services/*.confcontiene la configuración predeterminada para los servicios. Estos parámetros se pueden anular colocando su configuración local en /etc/logwatch/conf/services/$SERVICE.conf. Desafortunadamente, la capacidad de logwatch aquí es limitada, y muchos de los ejecutables de logwatch están llenos de Perl indocumentado. Su elección es reemplazar el ejecutable con otra cosa, o intentar anular algunas configuraciones usando /etc/logwatch/conf/services.

    Por ejemplo, tengo un escáner de seguridad que ejecuta escaneos a través de la red. A medida que se ejecutan las pruebas, el escáner de seguridad genera muchos mensajes de error en los registros de la aplicación. Me gustaría que logwatch ignore los errores de mis escáneres de seguridad, pero aún así me notifique de los ataques de otros hosts. Esto se cubre con más detalle en Logwatch: ¿Ignorar ciertas IP para las comprobaciones SSH y PAM? . Para hacer esto, coloco lo siguiente debajo de /etc/logwatch/conf/services/sshd.conf:

    # Ignore these hosts
    *Remove = 192.168.100.1
    *Remove = X.Y.123.123
    # Ignore these usernames
    *Remove = testuser
    # Ignore other noise. Note that we need to escape the ()
    *Remove = "pam_succeed_if\(sshd:auth\): error retrieving information about user netscan.*
    

    "

  3. logwatch también le permite eliminar la salida de los correos electrónicos de logwatch colocando expresiones regulares en /etc/logwatch/conf/ignore.conf. HOWTO-Customize-LogWatch dice:

    ignore.conf: este archivo especifica expresiones regulares que, cuando coinciden con la salida de logwatch, suprimirán la línea coincidente, independientemente del servicio que se esté ejecutando.

    Sin embargo, no he tenido mucha suerte con esto. Mis requisitos necesitan una declaración condicional, que es algo así como 'Si hay advertencias de seguridad debido a mi escáner de seguridad, entonces no imprima el resultado. Pero si hay advertencias de seguridad de mi escáner de seguridad y de algunos tipos malos, imprima las partes útiles.

  4. Córtalo en la fuente (como lo sugiere @ user48838). Estas aplicaciones están generando estos mensajes, y luego Logwatch está felizmente arrojándote los resultados. En estos casos, puede modificar la aplicación para iniciar sesión menos.

    Esto no siempre es deseable, porque a veces desea que los registros completos se envíen a algún lugar (a un servidor central de syslog, servidor IDS central, Splunk, Nagios, etc.), pero no desea que logwatch le envíe un correo electrónico sobre esto desde Todos los servidores, todos los días.

Stefan Lasiewski
fuente
Esto es exactamente lo que hice, sin embargo, si recuerdo correctamente, había algunos servicios (creo que tienen algo que ver con los rechazos de correo electrónico) que no se analizaban correctamente desde los registros y, por lo tanto, se incluían en algún tipo de categoría de "otro" y Todas las líneas de los registros se enviaban por correo electrónico. Esto fue extremadamente ruidoso. Por lo tanto, solo edité el código fuente de logwatch y agregué / cambié los filtros respectivos y corté probablemente 20kb por correo electrónico. Esto fue hace unos años, así que estoy seguro de que logwatch ha mejorado desde entonces, pero no he actualizado mi versión en caso de que no lo haya hecho.
Mike
5

Sí, logwatch a menudo es demasiado ruidoso. Ya mencionaste deshabilitar los cheques por completo.

Si no desea hacerlo, debe evitar que aparezcan ciertos eventos. Por ejemplo, no es interesante si nagios se conecta a través de ssh a un sistema DMZ. Pero es interesante si hay otros inicios de sesión a través de ssh.

Usamos rsyslog en lugar de ksyslogd (primero instalamos rsyslog, luego eliminamos ksyslogd). Con rsyslog puede ajustar lo que va a los registros y lo que no (por ejemplo, crear una expresión que elimine los mensajes de sshd que mantienen "nagios conectados"). De esa forma, logwatch informará solo información útil.

Otro caso podría ser xinetd: no quiero que me informen sobre las conexiones exitosas; esto se puede configurar en xinetd itselv, sin deshabilitar logwatch-check para xinetd.

Nils
fuente
3

Como punto de interés, seguí la opción 2 de la respuesta de Stefan Lasiewski, pero para mis propósitos solo quería incluir líneas específicas en lugar de excluir todo el ruido que no quería.

Estaba configurando vsftpd, así que creé /etc/logwatch/conf/services/vsftpd.confy, en lugar de usar algo como lo *Remove = testuserque elimina las filas que incluyen el texto testuser, usé la línea *OnlyContains = "testuser"que solo devuelve filas que incluyen ese texto.

Estos 2 scripts funcionan básicamente usando grepy grep -v.

La diferencia es que puedes usar *Removetantas veces como quieras pero *OnlyContainsdebes usarlo una vez si quieres algo o algo más. Entonces, para múltiples valores que haces*OnlyContains = "testuser|testuser2|testuser3"

Jacob Tomlinson
fuente
1

¿Ha considerado canalizar los mensajes de estado del correo electrónico a un servidor de listas, tal vez uno que pueda proporcionar resúmenes basados ​​en atributos programables de tamaño y / o duración / edad? El enfoque no reduce la cantidad de registros que se envían por correo electrónico, pero puede controlar la cantidad de correos electrónicos individuales por lotes para reducir la frecuencia de los correos electrónicos.

usuario48838
fuente
Yo tengo. También hemos considerado una solución solo de syslog, donde filtramos parte del ruido. Sin embargo, por simplicidad, queríamos ver si era posible controlar esto en la fuente.
Stefan Lasiewski
1
Si está buscando "cortarlo" en la fuente y minimizar cualquier percance al hacerlo, entonces podría considerar limitar los esfuerzos para ajustar los niveles de registro cuando estén disponibles.
user48838
0

Recientemente necesité silenciar la salida del servicio sshd. Algunas de las secciones eran bastante largas y no podían controlarse estableciendo el nivel de detalle.

No es una solución ideal, pero terminé anulando el script sshd copiándolo de aquí: /usr/share/logwatch/scripts/services/sshda aquí:/etc/logwatch/scripts/services/sshd

Por supuesto, ahora tiene que mantenerse al día con las actualizaciones de ese archivo de script, pero le da un control muy fino sobre lo que se genera. Alternativamente, supongo que podría canalizar la salida a logwatchtravés de una herramienta como awko sedquitar lo que no desea, pero eso me pareció más difícil.

Dominic P
fuente
0

Tenía la misma pregunta sobre UNIX y Linux Stackexchange y aquí está la respuesta que me solucionó:

Puede indicarle a logwatch que mire 7 días en lugar de 1 día cambiando el parámetro Range en su logwatch.conf:

Range = between -7 days and -1 days

Puede indicar logwatchque se ejecute semanalmente en lugar de a diario moviéndolo del directorio cron semanal al directorio diario cron:

mv /etc/cron.daily/00logwatch /etc/cron.weekly/

Gracias a @JeffSchaller

algo algo
fuente