Správa linuxového serveru: Sledování logů pomocí nástroje logcheck

Každý zodpovědný správce linuxového serveru sleduje, co se na serveru děje, zdali nedochází k nějakým problémům či zdali nedošlo k nějakému bezpečnostnímu incidentu. Sledování serveru zahrnuje kromě monitorování základních veličin i prohlížení a sledování logů. Jelikož ruční procházení megabytů logů není ani pohodlné, ani reálné, existují nástroje, které tuto činnost usnadňují. Jedním z těchto nástrojů, konkrétně pak nástrojem logcheck, se bude zabývat tento díl.

Stručný úvod do logů

Jak jistě víte, logy jsou soubory obsahující hlášení různých komponent systému, počínaje jádrem až po hlášení jednotlivých démonů. Zaznamenávání systémových hlášení má na starosti démon syslog. Aby to nebylo jednoduché, existuje hned několik implementací syslogu. V Debianu je výchozí rsyslog, jehož konfigurační soubor sídlí v /etc/rsyslog.conf (a jeho doplňky v /etc/rsyslog.d). Zde se obvykle nastavuje především to, jaké hlášky putují do jakých logů.

Samotné soubory s logy sídlí ve /var/log, přičemž jednotlivé záznamy bývají rozděleny do řady souborů kvůli snazšímu vyhledávání. Mezi podstatné systémové logy v Debianu patří messagessyslogauth.logdebugkern.log a mail.log. Jednotliví démoni si obvykle založí adresář ve /var/log a zaznamenávají svoje hlášky do souborů v něm. Je nutné zmínit, že v jiných distribucích může být (a bývá) nastavení syslogu jiné, a tudíž i obsah jednotlivých souborů či jejich názvy se mohou lišit.

Jelikož logy mají tendenci s časem narůstat, provádí se jejich rotace a následný výmaz. Rotace logů způsobí, že po určité definované době se aktuální soubor přejmenuje, popřípadě ještě zkomprimuje, a začne se logovat do nového. Staré logy se pak vymažou. Toto chování má na starosti nástroj logrotate, který má konfigurační soubory v /etc/logrotate.conf a pro jednotlivé služby pak v /etc/logrotate.d.

Na závěr ještě doplním, že logování se může nasměrovat nejenom do souborů, ale je také možné jednotlivá hlášení přenášet sítí na nějaký počítač, který bude hlášky skladovat. To pak může pomoci v případě napadení, kdy útočník na napadeném stroji vymaže systémové logy. Pokud ovšem budou všechny hlášky kopírovány nebo ukládány mimo napadený počítač, na kterém bude přístupný třeba pouze démon syslog, pak bude mít útočník smůlu (nebude-li mít k dispozici exploit pro danou verzi syslogu).

Práce s logy

Možností, jak sledovat či efektivně prohlížet logy je celá řada. Samotné prohlížení logů lze realizovat pohodlně pomocí nástroje less, který patrně dobře znáte, či zless, který slouží k prohlížení komprimovaných souborů. Tyto nástroje jsou interaktivní (na rozdíl třeba od more), po textu je možné se pohybovat a hledat velmi podobným způsobem jako v editoru Vi. Pro úplnost uvádím seznam základních klávesových zkratek:

Pokud chcete v logu nebo celém stromu logů hledat nějaký výraz, určitě vám pomůže nástroj grep, popřípadě jeho rekurzivní režim grep -R.

Sledování logů

Inspekci logů můžete provádět ručně, ale jak už bylo řečeno v úvodu článku, je to přinejmenším nepraktické, zejména, pokud každý den přibudou tisíce či statisíce záznamů. Praktičtější je použít nástroj, který z logů vytáhne to podstatné a pošle vám to e-mailem. Mezi tyto nástroje lze zařadit logcheck a logwatch. Každý z nich pracuje na trošku jiném principu - logcheck posílá e-maily jednou za hodinu a posílá hlášky, které propadly přes všechny jeho filtry, zatímco logwatch (kterým se bude zabývat následující díl seriálu) se snaží určité typy zpráv sumarizovat, a v ideálním případě tak zasílat pouze souhrn událostí, popřípadě statistiky, spíše než konkrétní řádky z logů.

V některých případech můžete požadovat ohlášení určité události, jakmile nastane (např. úspěšné přihlášení roota nebo uživatele přes SSH apod.), popřípadě zareagovat na určitou událost jiným způsobem. Takovou funkcionalitu vám může nabídnout nástroj swatch, který se klasifikuje jako aktivní monitorovací nástroj pro logy, tzn. umí na hlášky vámi definovaného typu reagovat vámi nastaveným způsobem.

Logcheck

Logcheck je jednoduchý, lehký nástroj pro sledování logů. Pro své spouštění využívá cron a vždy jednou za určitou dobu (resp. při každém spuštění z cronu) zašle e-mail s relevantními hláškami z logů (výchozí dobou je jedna hodina). Jeho princip práce spočívá v eliminaci „obvyklých“ hlášek, které nemají pro správce příliš velký význam, přičemž všechny hlášky, které tyto filtry propustí, se pošlou v těle e-mailu.

Cron tabulky náležející jednotlivým démonům naleznete obvykle v /etc/cron.d. V případě Logwatch tomu není jinak, takže jeho cronový záznam naleznete v /etc/cron.d/logcheck, kde si můžete frekvenci jeho spouštění upravit.

Instalace a základní konfigurace

Nejprve je samozřejmě třeba Logcheck nainstalovat, což lze v Debianu provést následujícím způsobem:

aptitude install logcheck

Výchozí nastavení v Debianu je plně funkční, ale je vhodné změnit přinejmenším e-mailovou adresu, kam se mají výňatky z logů posílat. Zde postačí upravit hodnotu proměnné SENDMAILTO v hlavním konfiguračním souboru Logchecku, /etc/logcheck/logcheck.conf, podle následujícího vzoru:

SENDMAILTO="michal@example.org"

Pokud toto nastavení neprovedete, budou se hlášky zasílat na logcheck@localhost, který je aliasem pro root@localhost. To je sice obvykle funkční nastavení, ale vhodnější je posílat výňatky z logů do poštovní schránky mimo server, který sledujete (případný útočník může e-maily z místních schránek vymazat).

Konfigurace Logchecku podrobněji

Pro úplnost bych rád prošel konfiguraci Logchecku malinko podrobněji. Základem pro jeho nastavení je určení sady pravidel, která se má použít pro filtraci. Tyto sady jsou dostupné celkem tři - wo class="western"rkstationserver a paranoid - a jejich volba ovlivňuje množství filtrovaných informací. Výchozí hodnotou je server, což by mělo pro běžné použití na serveru postačovat. Každý z těchto režimů si samozřejmě budete moci upravit (viz dále). Nastavení konkrétního režimu provedete v proměnné REPORTLEVEL v /etc/logcheck/logcheck.conf. Zbylé volby jsou velmi dobře okomentované a pro základní funkčnost postačí je ponechat tak, jak jsou.

Dalším důležitým souborem je /etc/logcheck/logcheck.logfiles, který, jak naznačuje jeho název, slouží k určení souborů, ze kterých se bude samotný extrakt provádět. V základní konfiguraci Debianu je to syslog a auth.log. Tento seznam můžete samozřejmě podle libosti rozšířit.

Úpravy filtrovacích pravidel

Sady filtrovacích pravidel se nachází v /etc/logwatch/ignore.d.[režim], kde za [režim] dosaďte hodnotu, kterou jste nastavili v proměnné REPORTLEVEL, tedy ve výchozím stavu by to měl být /etc/logwatch/ignore.d.server. Tento adresář obsahuje značné množství souborů s filtrovacími pravidly. Při filtrování se použijí filtrovací pravidla ze všech souborů v tomto adresáři, takže na názvu souboru nezáleží a není problém si zde vytvořit řadu souborů s vlastními pravidly, kterým filtrování doladíte podle svých představ. Nemusí být od věci svoje vlastní pravidla umisťovat do jasně označených souborů, abyste pak byli schopni dohledat, které soubory pochází z distribuce Logchecku a které jste vytvořili sami. Nutné to ale samozřejmě není.

Co se týče pravidel pro filtrování, pak pokud umíte regulární výrazy, nebudete mít sebemenší problém vytvářet vlastní filtrovací pravidla, protože ničeho jiného než regulárních výrazů se zde nepoužívá. Filtrovací pravidlo tedy vypadá třeba takto (tato ukázka pochází ze souboru /etc/logwatch/ignore.d.server/postfix, z distribuce Logchecku):

^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ postfix/n?qmgr\[[[:digit:]]+\]: [[:alnum:]]+: removed$

Tato řádka odstraní hlášky o odstranění e-mailu z fronty Postfixu, tedy obrovskou spoustu hlášek tohoto typu:

Mar 28 09:01:12 debian postfix/qmgr[2266]: 841B2214405: removed
Mar 28 09:01:12 debian postfix/qmgr[2266]: 405CF214404: removed
Mar 28 09:10:06 debian postfix/qmgr[2266]: 91427214405: removed
Mar 28 09:10:06 debian postfix/qmgr[2266]: CEA7D214404: removed
Mar 28 09:10:06 debian postfix/qmgr[2266]: DE3D9214405: removed
Mar 28 09:20:07 debian postfix/qmgr[2266]: 68F4E214405: removed

Regulárním výrazům se v tomto článku věnovat nebudu, ale v odkazech pod článkem (nebo v manuálové stránce nástroje grep) naleznete více než dostatek materiálu. Můžete se také podívat podrobněji na existující filtrovací pravidla a podle potřeby je zkopírovat a upravit.