A Zimbra OSE naplók használata

Az összes előforduló esemény naplózása minden vállalati rendszer egyik legfontosabb funkciója. A naplók lehetővé teszik a felmerülő problémák megoldását, az információs rendszerek működésének auditálását, valamint az információbiztonsági események kivizsgálását. A Zimbra OSE részletes naplókat is vezet a működéséről. Tartalmaznak minden adatot a szerver teljesítményétől a felhasználók általi e-mailek küldéséig és fogadásáig. A Zimbra OSE által generált naplók olvasása azonban meglehetősen nem triviális feladat. Ebben a cikkben egy konkrét példán keresztül elmondjuk, hogyan kell olvasni a Zimbra OSE naplókat, és hogyan lehet azokat központosítani.

A Zimbra OSE naplók használata
A Zimbra OSE az összes helyi naplót az /opt/zimbra/log mappában tárolja, és a naplók a /var/log/zimbra.log fájlban is megtalálhatók. Ezek közül a legfontosabb a mailbox.log. Rögzíti az összes műveletet, amely a levelezőszerveren történik. Ide tartozik az e-mailek továbbítása, a felhasználói hitelesítési adatok, a sikertelen bejelentkezési kísérletek és egyebek. A mailbox.log bejegyzései egy szöveges karakterlánc, amely tartalmazza az esemény időpontját, az esemény szintjét, a szál számát, amelyben az esemény történt, a felhasználónevet és az IP-címet, valamint az esemény szöveges leírását .

A Zimbra OSE naplók használata

A naplózási szint jelzi, hogy az esemény milyen mértékben befolyásolja a szerver működését. Alapértelmezés szerint 4 eseményszint van: INFO, WARN, ERROR és FATAL. Nézzünk meg minden szintet növekvő súlyossági sorrendben.

  • INFORMÁCIÓ – Az ezen a szinten zajló események általában a Zimbra OSE fejlődéséről való tájékoztatást szolgálják. Az ezen a szinten lévő üzenetek jelentéseket tartalmaznak egy postafiók létrehozásáról vagy törléséről stb.
  • FIGYELMEZTETÉS - az ilyen szintű események olyan helyzetekről tájékoztatnak, amelyek potenciálisan veszélyesek, de nem befolyásolják a szerver működését. Például a WARN szint egy sikertelen felhasználói bejelentkezési kísérletről szóló üzenetet jelöl.
  • HIBA – ez az eseményszint a naplóban olyan helyi jellegű hiba előfordulásáról tájékoztat, amely nem zavarja a szerver működését. Ez a szint jelezheti azt a hibát, amelyben az egyes felhasználók indexadatai megsérültek.
  • FATAL – ez a szint olyan hibákat jelez, amelyek miatt a szerver nem tud normálisan működni. Például a FATAL szint egy olyan rekordra vonatkozik, amely azt jelzi, hogy nem tud csatlakozni a DBMS-hez.

A levelezőszerver naplófájlja minden nap frissül. A fájl legfrissebb verziója mindig a Mailbox.log nevet viseli, míg az adott dátumra vonatkozó naplók nevében szerepel egy dátum, és az archívumban találhatók. Például mailbox.log.2020-09-29.tar.gz. Ez sokkal könnyebbé teszi a tevékenységnaplók biztonsági mentését és a naplókban való keresést.

A rendszergazda kényelmét szolgálja, hogy az /opt/zimbra/log/ mappa más naplókat is tartalmaz. Csak olyan bejegyzéseket tartalmaznak, amelyek bizonyos Zimbra OSE-elemekhez kapcsolódnak. Például az audit.log csak a felhasználói hitelesítéssel kapcsolatos rekordokat tartalmazza, a clamd.log a víruskereső működésével kapcsolatos adatokat stb. Mellesleg, egy kiváló módszer a Zimbra OSE szerver megvédésére a behatolóktól szervervédelem Fail2Ban használatával, ami csak az audit.log alapján működik. Szintén jó gyakorlat egy cron feladat hozzáadása a parancs végrehajtásához grep -ir „érvénytelen jelszó“ /opt/zimbra/log/audit.loghogy megkapja a napi bejelentkezési hibákról szóló információkat.

A Zimbra OSE naplók használata
Példa arra, hogy az audit.log hogyan jeleníti meg a kétszer hibásan beírt jelszót és a sikeres bejelentkezési kísérletet.

A Zimbra OSE naplói rendkívül hasznosak lehetnek a különféle kritikus hibák okainak azonosításában. Kritikus hiba bekövetkeztekor a rendszergazdának általában nincs ideje elolvasni a naplókat. A szerver mielőbbi visszaállítása kötelező. Később azonban, amikor a kiszolgáló biztonsági másolatot készít, és sok naplót generál, nehéz lehet megtalálni a szükséges bejegyzést egy nagy fájlban. A hibarekord gyors megtalálásához elegendő ismerni a szerver újraindításának időpontját, és találni egy bejegyzést a naplókban ebből az időpontból. Az előző bejegyzés rögzíti a fellépő hibát. A hibaüzenetet a FATAL kulcsszóra keresve is megtalálhatja.

A Zimbra OSE naplók lehetővé teszik a nem kritikus hibák azonosítását is. Ha például kezelői kivételeket szeretne keresni, kereshet a kezelői kivételre. A kezelők által generált hibákat gyakran egy veremkövetés kíséri, amely megmagyarázza, mi okozta a kivételt. A levélkézbesítéssel kapcsolatos hibák esetén a keresést az LmtpServer kulcsszóval érdemes kezdeni, a POP vagy IMAP protokollokkal kapcsolatos hibák kereséséhez pedig az ImapServer és Pop3Server kulcsszavakat.

A naplók segíthetnek az információbiztonsági incidensek kivizsgálásában is. Nézzünk egy konkrét példát. Szeptember 20-án az egyik alkalmazott vírussal fertőzött levelet küldött egy ügyfélnek. Ennek eredményeként az ügyfél számítógépén lévő adatok titkosításra kerültek. Az alkalmazott azonban esküszik, hogy nem küldött semmit. Az incidens kivizsgálásának részeként a vállalati biztonsági szolgálat bekéri a rendszergazdától a vizsgált felhasználóhoz tartozó, szeptember 20-i levelezőszerver naplóit. Az időbélyegnek köszönhetően a rendszergazda megtalálja a szükséges naplófájlt, kivonja a szükséges információkat és továbbítja a biztonsági szakembereknek. Azok viszont átnézik, és megállapítják, hogy az IP-cím, amelyről ezt a levelet küldték, megegyezik a felhasználó számítógépének IP-címével. A CCTV felvételei megerősítették, hogy az alkalmazott a levél elküldésekor a munkahelyén tartózkodott. Ezek az adatok elegendőek voltak ahhoz, hogy információbiztonsági szabályok megsértésével vádolják és kirúgják. 

A Zimbra OSE naplók használata
Példa az egyik fiók rekordjainak kibontására a Mailbox.log naplóból egy külön fájlba

Minden sokkal bonyolultabbá válik, ha több szerveres infrastruktúráról van szó. Mivel a naplók gyűjtése helyben történik, a velük való munka egy többkiszolgálós infrastruktúrában nagyon kényelmetlen, ezért szükség van a naplók gyűjtésének központosítására. Ezt úgy teheti meg, hogy beállít egy gazdagépet a naplók gyűjtésére. Nincs különösebb szükség dedikált gazdagép hozzáadására az infrastruktúrához. Bármely levelezőszerver működhet csomópontként a naplók gyűjtéséhez. Esetünkben ez a Mailstore01 csomópont lesz.

Ezen a szerveren az alábbi parancsokat kell beírnunk:

sudo su – zimbra 
zmcontrol stop
exit
sudo /opt/zimbra/libexec/zmfixperms -e -v

Szerkessze az /etc/sysconfig/rsyslog fájlt, és állítsa be a SYSLOGD_OPTIONS=”-r -c 2″

Szerkessze az /etc/rsyslog.conf fájlt, és törölje a megjegyzéseket a következő sorokból:
$ModLoad imudp
$UDPServerRun 514

Írja be a következő parancsokat:

sudo /etc/init.d/rsyslog stop
sudo /etc/init.d/rsyslog start
sudo su – zimbra
zmcontrol start
exit
sudo /opt/zimbra/libexec/zmloggerinit
sudo /opt/zimbra/bin/zmsshkeygen
sudo /opt/zimbra/bin/zmupdateauthkeys

A zmprov gacf | paranccsal ellenőrizheti, hogy minden működik-e grep zimbraLogHostnév. A parancs végrehajtása után meg kell jelennie a naplókat gyűjtő gazdagép nevének. A módosításhoz be kell írnia a zmprov mcf zimbraLogHostname mailstore01.company.ru parancsot.

Az összes többi infrastruktúra-kiszolgálón (LDAP, MTA és más levelezőtárolók) futtassa a zmprov gacf |grep zimbraLogHostname parancsot, hogy megtekinthesse annak a gazdagépnek a nevét, amelyre a naplókat küldi. A módosításhoz írja be a zmprov mcf zimbraLogHostname mailstore01.company.ru parancsot is.

Ezenkívül minden szerveren be kell írnia a következő parancsokat:

sudo su - zimbra
/opt/zimbra/bin/zmsshkeygen
/opt/zimbra/bin/zmupdateauthkeys
exit
sudo /opt/zimbra/libexec/zmsyslogsetup
sudo service rsyslog restart
sudo su - zimbra
zmcontrol restart

Ezt követően minden napló rögzítésre kerül az Ön által megadott szerveren, ahol azok kényelmesen megtekinthetők. Ezenkívül a Zimbra OSE adminisztrátori konzolon a kiszolgálók állapotával kapcsolatos információkat tartalmazó képernyőn a futó Logger szolgáltatás csak a mailstore01 szerverhez fog megjelenni.

A Zimbra OSE naplók használata

Az adminisztrátor másik fejfájása egy adott e-mail nyomon követése lehet. Mivel a Zimbra OSE-ben az e-mailek egyszerre több különböző eseményen mennek keresztül: víruskereső, levélszemétszűrő stb., mielőtt elfogadják vagy elküldik őket, a rendszergazda számára, ha az e-mail nem érkezik meg, meglehetősen problémás lehet annak nyomon követése, hogy melyik szakaszban. elveszett.

A probléma megoldásához használhat egy speciális szkriptet, amelyet Viktor Dukhovny információbiztonsági szakember fejlesztett ki, és amelyet a Postfix fejlesztői ajánlottak. Ez a szkript összefűzi a naplók bejegyzéseit egy adott folyamathoz, és ennek köszönhetően lehetővé teszi egy adott levél elküldésével kapcsolatos összes bejegyzés gyors megjelenítését az azonosítója alapján. Működését a Zimbra OSE összes verzióján tesztelték, a 8.7-től kezdve. Íme a forgatókönyv szövege.

#! /usr/bin/perl

use strict;
use warnings;

# Postfix delivery agents
my @agents = qw(discard error lmtp local pipe smtp virtual);

my $instre = qr{(?x)
	A			# Absolute line start
	(?:S+ s+){3} 		# Timestamp, adjust for other time formats
	S+ s+ 		# Hostname
	(postfix(?:-[^/s]+)?)	# Capture instance name stopping before first '/'
	(?:/S+)*		# Optional non-captured '/'-delimited qualifiers
	/			# Final '/' before the daemon program name
	};

my $cmdpidre = qr{(?x)
	G			# Continue from previous match
	(S+)[(d+)]:s+	# command[pid]:
};

my %smtpd;
my %smtp;
my %transaction;
my $i = 0;
my %seqno;

my %isagent = map { ($_, 1) } @agents;

while (<>) {
	next unless m{$instre}ogc; my $inst = $1;
	next unless m{$cmdpidre}ogc; my $command = $1; my $pid = $2;

	if ($command eq "smtpd") {
		if (m{Gconnect from }gc) {
			# Start new log
			$smtpd{$pid}->{"log"} = $_; next;
		}

		$smtpd{$pid}->{"log"} .= $_;

		if (m{G(w+): client=}gc) {
			# Fresh transaction 
			my $qid = "$inst/$1";
			$smtpd{$pid}->{"qid"} = $qid;
			$transaction{$qid} = $smtpd{$pid}->{"log"};
			$seqno{$qid} = ++$i;
			next;
		}

		my $qid = $smtpd{$pid}->{"qid"};
		$transaction{$qid} .= $_
			if (defined($qid) && exists $transaction{$qid});
		delete $smtpd{$pid} if (m{Gdisconnect from}gc);
		next;
	}

	if ($command eq "pickup") {
		if (m{G(w+): uid=}gc) {
			my $qid = "$inst/$1";
			$transaction{$qid} = $_;
			$seqno{$qid} = ++$i;
		}
		next;
	}

	# bounce(8) logs transaction start after cleanup(8) already logged
	# the message-id, so the cleanup log entry may be first
	#
	if ($command eq "cleanup") {
		next unless (m{G(w+): }gc);
		my $qid = "$inst/$1";
		$transaction{$qid} .= $_;
		$seqno{$qid} = ++$i if (! exists $seqno{$qid});
		next;
	}

	if ($command eq "qmgr") {
		next unless (m{G(w+): }gc);
		my $qid = "$inst/$1";
		if (defined($transaction{$qid})) {
			$transaction{$qid} .= $_;
			if (m{Gremoved$}gc) {
				print delete $transaction{$qid}, "n";
			}
		}
		next;
	}

	# Save pre-delivery messages for smtp(8) and lmtp(8)
	#
	if ($command eq "smtp" || $command eq "lmtp") {
		$smtp{$pid} .= $_;

		if (m{G(w+): to=}gc) {
			my $qid = "$inst/$1";
			if (defined($transaction{$qid})) {
				$transaction{$qid} .= $smtp{$pid};
			}
			delete $smtp{$pid};
		}
		next;
	}

	if ($command eq "bounce") {
		if (m{G(w+): .*? notification: (w+)$}gc) {
			my $qid = "$inst/$1";
			my $newid = "$inst/$2";
			if (defined($transaction{$qid})) {
				$transaction{$qid} .= $_;
			}
			$transaction{$newid} =
				$_ . $transaction{$newid};
			$seqno{$newid} = ++$i if (! exists $seqno{$newid});
		}
		next;
	}

	if ($isagent{$command}) {
		if (m{G(w+): to=}gc) {
			my $qid = "$inst/$1";
			if (defined($transaction{$qid})) {
				$transaction{$qid} .= $_;
			}
		}
		next;
	}
}

# Dump logs of incomplete transactions.
foreach my $qid (sort {$seqno{$a} <=> $seqno{$b}} keys %transaction) {
    print $transaction{$qid}, "n";
}

A szkript Perlben van írva, és futtatásához el kell mentenie egy fájlba összeválogatni.pl, tedd végrehajthatóvá, majd futtasd a fájlt, amely megadja a naplófájlt, és a pgrep segítségével bontsa ki a keresett levél azonosító információit collate.pl /var/log/zimbra.log | pgrep '[e-mail védett]> '. Az eredmény a levél kiszolgálón való mozgásáról szóló információkat tartalmazó sorok szekvenciális kimenete.

# collate.pl /var/log/zimbra.log | pgrep '<[email protected]>'
Oct 13 10:17:00 mail postfix/pickup[4089]: 4FF14284F45: uid=1034 from=********
Oct 13 10:17:00 mail postfix/cleanup[26776]: 4FF14284F45: message-id=*******
Oct 13 10:17:00 mail postfix/qmgr[9946]: 4FF14284F45: from=********, size=1387, nrcpt=1 (queue active)
Oct 13 10:17:00 mail postfix/smtp[7516]: Anonymous TLS connection established to mail.*******[168.*.*.4]:25: TLSv1 with cipher ADH-AES256-SHA (256/256 bits)
Oct 13 10:17:00 mail postfix/smtp[7516]: 4FF14284F45: to=*********, relay=mail.*******[168.*.*.4]:25, delay=0.25, delays=0.02/0.02/0.16/0.06, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 878833424CF)
Oct 13 10:17:00 mail postfix/qmgr[9946]: 4FF14284F45: removed
Oct 13 10:17:07 mail postfix/smtpd[21777]: connect from zimbra.******[168.*.*.4]
Oct 13 10:17:07 mail postfix/smtpd[21777]: Anonymous TLS connection established from zimbra.******[168.*.*.4]: TLSv1 with cipher ADH-AES256-SHA (256/256 bits)
Oct 13 10:17:08 mail postfix/smtpd[21777]: 0CB69282F4E: client=zimbra.******[168.*.*.4]
Oct 13 10:17:08 mail postfix/cleanup[26776]: 0CB69282F4E: message-id=zimbra.******
Oct 13 10:17:08 mail postfix/qmgr[9946]: 0CB69282F4E: from=zimbra.******, size=3606, nrcpt=1 (queue active)
Oct 13 10:17:08 mail postfix/virtual[5291]: 0CB69282F4E: to=zimbra.******, orig_to=zimbra.******, relay=virtual, delay=0.03, delays=0.02/0/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)
Oct 13 10:17:08 mail postfix/qmgr[9946]: 0CB69282F4E: removed

A Zextras Suite szolgáltatással kapcsolatos minden kérdésével forduljon a Zextras képviselőjéhez, Ekaterina Triandafilidihez e-mailben. [e-mail védett]

Forrás: will.com