Solución 1:
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 de un 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.
-
En RHEL/CentOS/SL, la configuración predeterminada de logwatch está en
/usr/share/logwatch/default.conf/logwatch.conf
Estos ajustes 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 servicios como 'httpd' y las comprobaciones diarias de uso del disco:# Don't spam about the following Services Service = "-http" Service = "-zz-disk_space"
-
A veces no quiero deshabilitar por completo logwatch para un servicio específico, solo quiero ajustar los resultados para que sean menos ruidosos.
/usr/share/logwatch/default.conf/services/*.conf
contiene 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 no documentado. 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 los ataques de otros hosts. Esto se cubre con más detalle en Logwatch:¿Ignorar ciertas IP para verificaciones de 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.*
"
-
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-Personalizar-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 la salida. Pero si hay advertencias de seguridad de mi escáner de seguridad y de algunos tipos malos, luego imprima las partes útiles:el encabezado que dice "Inicios de sesión fallidos desde:", las IP de los hosts malos, pero no las IP de los escáneres.'
-
Córtalo en la fuente (según lo sugerido por @ user48838). Estos mensajes están siendo generados por alguna aplicación, y luego Logwatch felizmente le arroja los resultados. En estos casos, puede modificar la aplicación para registrar menos.
Esto no siempre es deseable, porque a veces desea que los registros completos se envíen a algún lugar (a un servidor syslog central, un 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.
Solución 2:
Sí, logwatch suele ser demasiado ruidoso. Ya mencionaste deshabilitar los cheques por completo.
Si no quiere hacer eso, 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 instale rsyslog, luego elimine ksyslogd). Con rsyslog puede ajustar lo que va a los registros y lo que no (por ejemplo, crear una expresión que suelte mensajes de sshd que contengan "nagios conectados"). De esa forma, logwatch solo reportará información útil.
Otro caso podría ser xinetd:no quiero que me informen sobre las conexiones exitosas; esto se puede configurar en xinetd, sin deshabilitar la verificación de logwatch para xinetd.
Solución 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.conf
y en lugar de usar algo como *Remove = testuser
que 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 grep
y grep -v
.
La diferencia es que puedes usar *Remove
tantas veces como quieras pero con *OnlyContains
tienes que usarlo una vez si quieres algo o algo más o algo más. Entonces, para valores múltiples, haces *OnlyContains = "testuser|testuser2|testuser3"