Linux: logwatch (8) è troppo rumoroso. Come posso controllare il livello di rumore?


30

I nostri sistemi Linux eseguono l' utilità logwatch (8) per impostazione predefinita. Su un sistema RedHat / CentOS / SL, Logwatch viene chiamato dal /etc/cron.daily/cronjob, che quindi invia un'e-mail giornaliera con i risultati. Queste e-mail hanno un argomento come:

Subject: Logwatch for $HOSTNAME

Il problema è che per impostazione predefinita queste e-mail quotidiane sono troppo rumorose e contengono molte informazioni superflue (errori HTTP, utilizzo quotidiano del disco, ecc.) Che sono già monitorate da altri servizi (Nagios, Cacti, syslog centrale, ecc.). Per 100 sistemi, il caricamento della posta elettronica è insopportabile. Le persone ignorano le e-mail, il che significa che potremmo perdere i problemi rilevati da logwatch.

Come posso ridurre la quantità di rumore generato da logwatch, ma utilizzare comunque logwatch per avvisarci di problemi significativi?

Di seguito posterò la mia risposta, ma vorrei vedere cosa hanno fatto gli altri.

Nota : ho una domanda simile riguardo a FreeBSD, su FreeBSD: periodic (8) è troppo rumoroso. Come posso controllare il livello di rumore?

Risposte:


39

Nel complesso, la documentazione disponibile per Logwatch manca di spiegazioni adeguate ed è spesso troppo vaga. Ho messo insieme alcuni esempi utili e ho ridotto il rumore di Logwatch di oltre il 95%.

Ecco cosa ho trovato.

Tieni presente che puoi trovare un po 'di documentazione su Logwatch /usr/share/doc/logwatch-*/HOWTO-Customize-LogWatche che contiene alcuni esempi utili.

  1. Su RHEL / CentOS / SL, la configurazione del logwatch predefinita è sotto /usr/share/logwatch/default.conf/logwatch.conf

    Queste impostazioni possono essere annullate posizionando la configurazione locale in /etc/logwatch/conf/logwatch.conf. Inserire quanto segue in quel file per indicare a logwatch di ignorare completamente i servizi come "httpd" e i controlli giornalieri sull'utilizzo del disco:

    # Don't spam about the following Services
    Service = "-http"
    Service = "-zz-disk_space"
    
  2. A volte non voglio disabilitare completamente logwatch per un servizio specifico, voglio solo mettere a punto i risultati per renderli meno rumorosi. /usr/share/logwatch/default.conf/services/*.confcontiene la configurazione predefinita per i servizi. Questi parametri possono essere sovrascritti posizionando la configurazione locale sotto /etc/logwatch/conf/services/$SERVICE.conf. Sfortunatamente, l'abilità di logwatch qui è limitata e molti degli eseguibili di logwatch sono pieni di Perl non documentato. La tua scelta è quella di sostituire l'eseguibile con qualcos'altro o provare a sovrascrivere alcune impostazioni usando /etc/logwatch/conf/services.

    Ad esempio, ho uno scanner di sicurezza che esegue scansioni attraverso la rete. Durante l'esecuzione dei test, lo scanner di sicurezza genera molti messaggi di errore nei registri dell'applicazione. Vorrei che logwatch ignori gli errori dei miei scanner di sicurezza, ma mi informi comunque degli attacchi di altri host. Questo è trattato in modo più dettagliato in Logwatch: ignorare determinati IP per i controlli SSH e PAM? . Per fare ciò, inserisco quanto segue in /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 consente inoltre di eliminare l'output dalle e-mail di logwatch inserendo espressioni regolari /etc/logwatch/conf/ignore.conf. HOWTO-Customize-LogWatch dice:

    ignore.conf: questo file specifica le espressioni regolari che, se abbinate all'output di logwatch, sopprimeranno la riga corrispondente, indipendentemente dal servizio in esecuzione.

    Tuttavia, non ho avuto molta fortuna con questo. I miei requisiti richiedono una dichiarazione condizionale, che è qualcosa come 'Se ci sono avvisi di sicurezza dovuti al mio scanner di sicurezza, allora non stampare l'output. Ma se ci sono avvisi di sicurezza dal mio scanner di sicurezza e da alcuni cattivi, quindi stampa le parti utili: l'intestazione che dice "accessi non riusciti da:", gli IP degli host cattivi, ma non gli IP degli scanner. "

  4. Trascinalo alla fonte (come suggerito da @ user48838). Questi messaggi vengono generati da alcune applicazioni, quindi Logwatch ti sta distribuendo felicemente i risultati. In questi casi, è possibile modificare l'applicazione per accedere meno.

    Questo non è sempre desiderabile, perché a volte si desidera che i registri completi vengano inviati da qualche parte (a un server syslog centrale, server IDS centrale, Splunk, Nagios, ecc.), Ma non si desidera che logwatch invii un'e-mail su questo da ogni server, ogni giorno.


Questo è esattamente quello che ho fatto, tuttavia, se ricordo bene, c'erano alcuni servizi (credo qualcosa a che fare con i rifiuti delle e-mail) che non venivano analizzati correttamente dai registri e pertanto venivano elencati in una sorta di categoria "altro" e tutte le righe dei registri venivano inviate via e-mail. Questo è stato estremamente rumoroso. Ho quindi appena modificato il codice sorgente di logwatch e aggiunto / modificato i rispettivi filtri e tagliato probabilmente 20kb per e-mail. Questo è stato alcuni anni fa, quindi sono sicuro che logwatch sia migliorato da allora, ma non ho aggiornato la mia versione nel caso non lo fosse.
Mike,

5

Sì - logwatch è spesso troppo rumoroso. Hai già menzionato completamente la disabilitazione dei controlli.

Se non si desidera farlo, è necessario impedire la visualizzazione di determinati eventi. Ad esempio, non è interessante se nagios si collega tramite ssh a un sistema DMZ. Ma è interessante se ci sono altri accessi tramite ssh.

Usiamo rsyslog invece di ksyslogd (prima installa rsyslog, quindi rimuoviamo ksyslogd). Con rsyslog puoi mettere a punto ciò che va nei registri e cosa no (es. Costruisci un'espressione che rilasci messaggi da sshd che contengano "nagios connessi"). In questo modo logwatch riporterà solo informazioni utili.

Un altro caso potrebbe essere xinetd - non voglio essere informato su connessioni riuscite - questo può essere configurato in xinetd itselv - senza disabilitare il logwatch-check per xinetd.


3

Come punto di interesse ho seguito l'opzione 2 dalla risposta di Stefan Lasiewski, ma per i miei scopi volevo includere solo linee specifiche anziché escludere tutto il rumore che non volevo.

Stavo configurando vsftpd così ho creato /etc/logwatch/conf/services/vsftpd.confe invece di usare qualcosa di simile *Remove = testuserche rimuove le righe che includono il testo testuserho usato la linea *OnlyContains = "testuser"che restituisce solo le righe incluso quel testo.

Questi 2 script funzionano fondamentalmente usando grepe grep -v.

La differenza è che puoi usare *Removetutte le volte che vuoi ma con *OnlyContainste devi usarlo una volta se vuoi qualcosa o qualcos'altro o qualcos'altro. Quindi per più valori lo fai*OnlyContains = "testuser|testuser2|testuser3"


1

Hai mai pensato di incanalare i messaggi di stato e-mail a un server di elenchi, forse uno in grado di fornire digest in base ad attributi programmabili di dimensione e / o durata / età? L'approccio non riduce la quantità di registrazioni inviate tramite e-mail, ma può controllare la quantità di singole e-mail raggruppando per ridurre la frequenza di invio.


Io ho. Abbiamo anche considerato una soluzione solo per syslog, in cui filtriamo parte del rumore. Tuttavia, per semplicità, volevamo vedere se era possibile controllare queste cose alla fonte.
Stefan Lasiewski,

1
Se stai cercando di "stroncarlo" alla fonte e minimizzare eventuali inconvenienti nel farlo, allora potresti considerare di limitare gli sforzi per adattare i livelli di registrazione quando disponibili.
user48838

0

Di recente ho avuto bisogno di calmare l'output dal servizio sshd. Alcune sezioni erano piuttosto lunghe e non potevano essere controllate impostando il livello di dettaglio.

Non è una soluzione ideale, ma ho finito per scavalcare lo script sshd copiandolo da qui: /usr/share/logwatch/scripts/services/sshda qui:/etc/logwatch/scripts/services/sshd

Ovviamente, ora devi tenere il passo su tutti gli aggiornamenti di quel file di script, ma ti dà un controllo molto preciso su ciò che viene generato. In alternativa, suppongo che potresti inviare l'output logwatchattraverso uno strumento simile awko sedeliminare quello che non vuoi, ma mi è sembrato più difficile.


0

Ho avuto la stessa domanda su UNIX e Linux Stackexchange ed ecco la risposta che l'ho risolto per me:

Puoi dire a logwatch di guardare 7 giorni invece di 1 giorno modificando il parametro Range nel tuo logwatch.conf:

Range = between -7 days and -1 days

Puoi dire logwatchdi eseguire settimanalmente anziché giornalmente spostandolo dalla directory cron settimanale alla crondirectory giornaliera :

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

Grazie a @JeffSchaller

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.