Řešení 1:
Celkově dostupná dokumentace pro Logwatch postrádá adekvátní vysvětlení a je často příliš vágní. Dal jsem dohromady několik užitečných příkladů a snížil jsem hluk Logwatch o více než 95 %.
Zde je to, co jsem našel.
Mějte na paměti, že nějakou dokumentaci k Logwatch můžete najít na /usr/share/doc/logwatch-*/HOWTO-Customize-LogWatch
a obsahuje několik užitečných příkladů.
-
Na RHEL/CentOS/SL je výchozí konfigurace logwatch pod
/usr/share/logwatch/default.conf/logwatch.conf
Tato nastavení lze přepsat umístěním místní konfigurace pod
/etc/logwatch/conf/logwatch.conf
. Umístěte do tohoto souboru následující, abyste řekli logwatch, aby zcela ignorovaly služby jako 'httpd' a denní kontroly využití disku:# Don't spam about the following Services Service = "-http" Service = "-zz-disk_space"
-
Někdy nechci úplně deaktivovat logwatch pro konkrétní službu, chci jen doladit výsledky, aby byly méně hlučné.
/usr/share/logwatch/default.conf/services/*.conf
obsahuje výchozí konfiguraci pro služby. Tyto parametry lze přepsat umístěním místní konfigurace pod/etc/logwatch/conf/services/$SERVICE.conf
. Schopnost logwatch je zde bohužel omezená a mnoho spustitelných souborů logwatch je plných nezdokumentovaného Perlu. Vaší volbou je nahradit spustitelný soubor něčím jiným, nebo zkusit přepsat některá nastavení pomocí/etc/logwatch/conf/services
.Mám například bezpečnostní skener, který spouští skenování v síti. Jak testy běží, bezpečnostní skener generuje mnoho chybových zpráv v protokolech aplikace. Chtěl bych, aby logwatch ignoroval chyby z mých bezpečnostních skenerů, ale přesto mě upozorňoval na útoky z jiných hostitelů. To je podrobněji popsáno v Logwatch:Ignorovat určité IP adresy pro kontroly SSH a PAM?. Abych to udělal, umístím následující pod
/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 také umožňuje odstranit výstup z e-mailů logwatch umístěním regulárních výrazů do
/etc/logwatch/conf/ignore.conf
. HOWTO-Customize-LogWatch říká:ignore.conf:Tento soubor specifikuje regulární výrazy, které, když jsou porovnány výstupem logwatch, potlačí odpovídající řádek bez ohledu na to, která služba se provádí.
S tímhle jsem však moc štěstí neměl. Moje požadavky vyžadují podmíněné prohlášení, což je něco jako „Pokud se kvůli mému bezpečnostnímu skeneru objeví bezpečnostní varování, netiskněte výstup. Ale pokud se objeví bezpečnostní varování z mého bezpečnostního skeneru a od některých padouchů, pak vytiskněte užitečné části-- Záhlaví, které říká "Neúspěšné přihlášení z:", IP adresy špatných hostitelů, ale ne adresy IP skenerů.'
-
Odřízněte to u zdroje (jak navrhuje @user48838). Tyto zprávy generuje nějaká aplikace a Logwatch na vás pak vesele chrlí výsledky. V těchto případech můžete upravit aplikaci tak, aby protokolovala méně.
To není vždy žádoucí, protože někdy chcete, aby se úplné protokoly posílaly někam (na centrální syslog server, centrální IDS server, Splunk, Nagios atd.), ale nechcete, aby vám logwatch poslal e-mail z každý server, každý den.
Řešení 2:
Ano – logwatch je často příliš hlučný. Již jste zmínil úplné zakázání kontrol.
Pokud to nechcete, musíte zabránit výskytu určitých událostí. Například - není zajímavé, když se nagios připojuje přes ssh k systému DMZ. Ale je zajímavé, pokud existují další přihlášení přes ssh.
Místo ksyslogd používáme rsyslog (nejprve nainstalujte rsyslog, pak odstraňte ksyslogd). Pomocí rsyslog můžete doladit, co jde do protokolů a co ne (např. vytvořit výraz, který odstraní zprávy z sshd obsahující „nagios connected“). Logwatch tak bude hlásit pouze užitečné informace.
Dalším případem může být xinetd - nechci být informován o úspěšných připojeních - to lze nakonfigurovat v samotném xinetd - bez deaktivace kontroly logwatch pro xinetd.
Řešení 3:
Pro zajímavost jsem se řídil možností 2 z odpovědi Stefana Lasiewského, ale pro své účely jsem chtěl spíše zahrnout konkrétní řádky, než vyloučit veškerý šum, který jsem nechtěl.
Konfiguroval jsem vsftpd, takže jsem vytvořil /etc/logwatch/conf/services/vsftpd.conf
a místo použití něčeho jako *Remove = testuser
který odstraní řádky obsahující text testuser
Použil jsem řádek *OnlyContains = "testuser"
který vrací pouze řádky obsahující tento text.
Tyto 2 skripty fungují velmi v podstatě pomocí grep
a grep -v
.
Rozdíl je v tom, že můžete použít *Remove
tolikrát, kolikrát chcete, ale s *OnlyContains
musíte to použít jednou, pokud chcete něco nebo něco jiného nebo něco jiného. Takže pro více hodnot uděláte *OnlyContains = "testuser|testuser2|testuser3"