Linux: logwatch (8) est trop bruyant. Comment contrôler le niveau de bruit?

30

Nos systèmes Linux exécutent l' utilitaire logwatch (8) par défaut. Sur un système RedHat / CentOS / SL, Logwatch est appelé par le /etc/cron.daily/cronjob, qui envoie ensuite un e-mail quotidien avec les résultats. Ces e-mails ont un sujet comme:

Subject: Logwatch for $HOSTNAME

Le problème est que par défaut ces e-mails quotidiens sont trop bruyants et contiennent beaucoup d'informations superflues (erreurs HTTP, utilisation quotidienne du disque, etc.) qui sont déjà surveillées par d'autres services (Nagios, Cacti, syslog central, etc.). Pour 100 systèmes, la charge des e-mails est insupportable. Les gens ignorent les e-mails, ce qui signifie que nous pouvons manquer des problèmes qui sont détectés par logwatch.

Comment puis-je réduire la quantité de bruit généré par logwatch, mais toujours utiliser logwatch pour nous signaler des problèmes importants?

Je posterai ma propre réponse ci-dessous, mais j'aimerais voir ce que les autres ont fait.

Remarque : J'ai une question similaire concernant FreeBSD, chez FreeBSD: périodique (8) est trop bruyant. Comment contrôler le niveau de bruit?

Stefan Lasiewski
la source

Réponses:

39

Dans l'ensemble, la documentation disponible pour Logwatch manque d'explications adéquates et est souvent beaucoup trop vague. J'ai rassemblé quelques exemples utiles et j'ai réduit le bruit Logwatch de plus de 95%.

Voici ce que j'ai trouvé.

Gardez à l'esprit que vous pouvez trouver de la documentation Logwatch sur /usr/share/doc/logwatch-*/HOWTO-Customize-LogWatch, et elle contient quelques exemples utiles.

  1. Sur RHEL / CentOS / SL, la configuration de surveillance par défaut est sous /usr/share/logwatch/default.conf/logwatch.conf

    Ces paramètres peuvent être remplacés en plaçant votre configuration locale sous /etc/logwatch/conf/logwatch.conf. Placez ce qui suit dans ce fichier pour indiquer à logwatch d'ignorer complètement les services comme «httpd» et les vérifications quotidiennes de l'utilisation du disque:

    # Don't spam about the following Services
    Service = "-http"
    Service = "-zz-disk_space"
    
  2. Parfois, je ne veux pas désactiver complètement la surveillance des journaux pour un service spécifique, je veux juste affiner les résultats pour les rendre moins bruyants. /usr/share/logwatch/default.conf/services/*.confcontient la configuration par défaut des services. Ces paramètres peuvent être remplacés en plaçant votre configuration locale sous /etc/logwatch/conf/services/$SERVICE.conf. Malheureusement, la capacité de logwatch ici est limitée, et de nombreux exécutables de logwatch sont remplis de Perl non documenté. Votre choix est de remplacer l'exécutable par autre chose, ou essayez de remplacer certains paramètres à l'aide de /etc/logwatch/conf/services.

    Par exemple, j'ai un scanner de sécurité qui exécute des analyses sur le réseau. Pendant l'exécution des tests, le scanner de sécurité génère de nombreux messages d'erreur dans les journaux d'application. Je voudrais que logwatch ignore les erreurs de mes scanners de sécurité, mais me prévienne toujours des attaques d'autres hôtes. Ceci est couvert plus en détail dans Logwatch: Ignorer certaines adresses IP pour les vérifications SSH et PAM? . Pour ce faire, je place ce qui suit sous /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 vous permet également de supprimer la sortie des e-mails de logwatch en plaçant des expressions régulières dans /etc/logwatch/conf/ignore.conf. HOWTO-Customize-LogWatch dit:

    ignore.conf: ce fichier spécifie des expressions régulières qui, lorsqu'elles sont mises en correspondance par la sortie de logwatch, suppriment la ligne correspondante, quel que soit le service en cours d'exécution.

    Cependant, je n'ai pas eu beaucoup de chance avec ça. Mes exigences nécessitent une déclaration conditionnelle, qui ressemble à «S'il y a des avertissements de sécurité dus à mon scanner de sécurité, alors n'imprimez pas la sortie. Mais s'il y a des avertissements de sécurité de mon scanner de sécurité et de certains méchants, imprimez les parties utiles - l'en-tête qui dit "Échec de la connexion à partir de:", les adresses IP des mauvais hôtes, mais pas les adresses IP des scanners. '

  4. Étouffez-le à la source (comme suggéré par @ user48838). Ces messages sont générés par une application, puis Logwatch vous envoie volontiers les résultats. Dans ces cas, vous pouvez modifier l'application pour vous connecter moins.

    Ce n'est pas toujours souhaitable, car vous voulez parfois que les journaux complets soient envoyés quelque part (vers un serveur syslog central, un serveur IDS central, Splunk, Nagios, etc.), mais vous ne voulez pas que logwatch vous envoie un e-mail à ce sujet à partir de chaque serveur, chaque jour.

Stefan Lasiewski
la source
C'est exactement ce que j'ai fait, mais si je me souviens bien, certains services (je crois que cela a à voir avec les rejets d'e-mails) n'étaient pas analysés correctement à partir des journaux et étaient donc répertoriés dans une sorte de catégorie "autre" et les lignes entières des journaux étaient envoyées par e-mail. C'était extrêmement bruyant. J'ai donc juste édité le code source de logwatch et ajouté / changé les filtres respectifs et coupé probablement 20kb par email. C'était il y a quelques années, donc je suis sûr que la surveillance des journaux s'est améliorée depuis, mais je n'ai pas mis à jour ma version au cas où ce ne serait pas le cas.
Mike
5

Oui - la logwatch est souvent trop bruyante. Vous avez déjà mentionné la désactivation complète des vérifications.

Si vous ne voulez pas faire cela, vous devez empêcher certains événements d'apparaître. Par exemple - ce n'est pas intéressant si nagios se connecte via ssh à un système DMZ. Mais c'est intéressant s'il y a d'autres connexions via ssh.

Nous utilisons rsyslog au lieu de ksyslogd (installez d'abord rsyslog, puis supprimez ksyslogd). Avec rsyslog, vous pouvez affiner ce qui va dans les journaux et ce qui ne l'est pas (par exemple construire une expression qui supprime les messages de sshd co-contenant "nagios connected"). De cette façon, logwatch ne rapportera que des informations utiles.

Un autre cas pourrait être xinetd - je ne veux pas être informé des connexions réussies - cela peut être configuré dans xinetd itselv - sans désactiver la vérification de la journalisation pour xinetd.

Nils
la source
3

Comme point d'intérêt, j'ai suivi l'option 2 de la réponse de Stefan Lasiewski mais pour mes besoins, je voulais uniquement inclure des lignes spécifiques plutôt que d'exclure tout le bruit que je ne voulais pas.

Je configurais vsftpd donc j'ai créé /etc/logwatch/conf/services/vsftpd.confet au lieu d'utiliser quelque chose comme *Remove = testuserqui supprime les lignes qui incluent le texte, testuserj'ai utilisé la ligne *OnlyContains = "testuser"qui ne renvoie que les lignes comprenant ce texte.

Ces 2 scripts fonctionnent très basiquement en utilisant grepet grep -v.

La différence étant que vous pouvez utiliser *Removeautant de fois que vous le souhaitez, mais avec *OnlyContainsvous devez l'utiliser une fois si vous voulez quelque chose ou quelque chose d'autre ou quelque chose d'autre. Donc, pour plusieurs valeurs que vous faites*OnlyContains = "testuser|testuser2|testuser3"

Jacob Tomlinson
la source
1

Avez-vous envisagé de canaliser les messages d'état des e-mails vers un serveur de liste, peut-être un qui peut fournir des résumés basés sur des attributs programmables de taille et / ou de durée / âge? L'approche ne réduit pas la quantité de journalisation envoyée par e-mail, mais peut contrôler la quantité d'e-mails individuels par lots pour réduire la fréquence des e-mails.

user48838
la source
J'ai. Nous avons également envisagé une solution syslog uniquement, où nous filtrons une partie du bruit. Cependant, pour plus de simplicité, nous voulions voir s'il était possible de contrôler ce genre de choses à la source.
Stefan Lasiewski
1
Si vous envisagez de "l'étouffer" à la source et de minimiser les incidents lors de cette opération, vous pouvez envisager de limiter les efforts d'ajustement des niveaux de journalisation lorsqu'ils sont disponibles.
user48838
0

J'ai récemment eu besoin de calmer la sortie du service sshd. Certaines sections étaient assez longues et ne pouvaient pas être contrôlées en définissant le niveau de détail.

Ce n'est pas une solution idéale, mais j'ai fini par remplacer le script sshd en le copiant d'ici: /usr/share/logwatch/scripts/services/sshdici:/etc/logwatch/scripts/services/sshd

Bien sûr, vous devez maintenant suivre les mises à jour de ce fichier de script, mais cela vous donne un contrôle très fin sur ce qui est sorti. Alternativement, je suppose que vous pouvez diriger la sortie de logwatchvia un outil comme awkou sedpour supprimer ce que vous ne voulez pas, mais cela m'a semblé plus difficile.

Dominic P
la source
0

J'ai eu la même question sur UNIX & Linux Stackexchange et voici la réponse que j'ai corrigée pour moi:

Vous pouvez dire à logwatch de regarder 7 jours au lieu de 1 jour en modifiant le paramètre Range dans votre logwatch.conf:

Range = between -7 days and -1 days

Vous pouvez dire logwatchd'exécuter chaque semaine au lieu de tous les jours en le déplaçant du répertoire hebdomadaire cron vers le cronrépertoire quotidien :

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

Merci à @JeffSchaller

quelque chose quelque chose
la source