Kuidas töötada Zimbra OSE logidega

KĂ”ikide toimuva sĂŒndmuste logimine on ĂŒks tĂ€htsamaid funktsioone igas ettevĂ”tte sĂŒsteemis. Logid aitavad lahendada tekkivaid probleeme, auditeerida infotehnoloogia sĂŒsteemide tööd ja uurida infosĂŒsteemide turvaincidende. Zimbra OSE genereerib samuti pĂ”hjalikke logisid oma tegevusest. Neisse kaitsevad kĂ”ik andmed serveri töötluse kohta kuni e-kirjade saatmiseni ja vastuvĂ”tmiseni kasutajate poolt. Siiski on Zimbra OSE genereeritud logide lugemine ĂŒsna keeruline ĂŒlesanne. Selles artiklis tutvustame teid konkreetse nĂ€ite pĂ”hjal, kuidas lugeda Zimbra OSE logisid ja kuidas muuta need keskseteks.

Kuidas töötada Zimbra OSE logidega
KĂ”ik kohalikke Zimbra OSE logisid hoitakse kaustas /opt/zimbra/log, logisid saab leida ka failist /var/log/zimbra.log. KĂ”ige olulisem neist on mailbox.log. Selles fikseeritakse kĂ”ik toimingud, mis toimuvad meiliserveris. Nende hulka kuuluvad kirjade edastamine, kasutajate autentimise andmed, ebaĂ”nnestunud sisselogimiskatsed ja muud. Kirjed mailbox.log-is on tekstiredaktoririda, milles on toodud sĂŒndmuse toimumise aeg, sĂŒndmuse tase, sĂŒndmuse toimumise kĂ€igus toimunud lĂ”ime number, kasutajanimi ja tema IP-aadress, samuti sĂŒndmuse tekstiline kirjeldus.

Kuidas töötada Zimbra OSE logidega

Logitaseme tĂ€histab sĂŒndmuse mĂ”ju mÀÀr serveri toimimisele. Vaikimisi kasutatakse 4 sĂŒndmuse taset: INFO, WARN, ERROR ja FATAL. Vaatame kĂ”iki tasemeid tĂ”siduse kasvavas jĂ€rjekorras.

  • INFO — selle taseme sĂŒndmused on tavaliselt mĂ”eldud Zimbra OSE töö kĂ€igus teavitamiseks. Selle taseme sĂ”numite hulka kuuluvad aruanded postkasti loomise vĂ”i kustutamise kohta ning nii edasi.
  • WARNING — selle taseme sĂŒndmused teavitavad olukordadest, mis on potentsiaalselt ohtlikud, kuid serveri tööle ei mĂ”ju. NĂ€iteks mĂ€rgitakse tasemega WARN kasutaja ebaĂ”nnestunud sisselogimise katse sĂ”num.
  • ERROR — see sĂŒndmuste logi tase teavitab kohalikest vigadest, mis ei takista serveri toimimist. Sellisel tasemel vĂ”ib esineda viga, kus ĂŒksiku kasutaja indeksandmed on kahjustatud.
  • FATAL — selle taseme all mĂ€rgitakse vead, mille tĂ”ttu server ei saa jĂ€tkata normaalset toimimist. NĂ€iteks on tasemega FATAL seotud kirje, mis kĂ€sitleb andmebaasi ĂŒhenduse ebaĂ”nnestumist.

Postiserveri logifail uuendatakse iga pÀev. Uus logifael kannab alati nime Mailbox.log, samas kui teatud kuupÀevade logid sisaldavad nimekirjas kuupÀeva ja on arkiveeritud. NÀiteks mailbox.log.2020-09-29.tar.gz. See muudab logide varundamise ja logides otsimise palju lihtsamaks.

SĂŒsteemiadministraatori mugavuse huvides sisaldavad kaustas /opt/zimbra/log/ veel teisi logisid. Nendes sisaldub ainult need kirjed, mis on seotud Zimbra OSE konkreetsete elementidega. NĂ€iteks audit.log sisaldab ainult kasutajate autentimise kirjeid, clamd.log sisaldab teavet viirusetĂ”rje töö kohta ja nii edasi. Muide, suurepĂ€rane meetod Zimbra OSE serveri kaitsmiseks pahatahtlike eest on serveri kaitse Fail2Baniga, mis töötab just audit.log pĂ”hjal. Samuti on hea praktika lisada cron-ĂŒlesanne kĂ€su tĂ€itmiseks grep -ir „invalid password“ /opt/zimbra/log/audit.log, et iga pĂ€ev saada teavet ebaĂ”nnestunud sisselogimiskatsete kohta.

Kuidas töötada Zimbra OSE logidega
NÀide sellest, kuidas audit.log'is kuvatakse kaks korda vale parool ja Ônnestunud sisselogimine.

Zimbra OSE logid vÔivad olla ÀÀrmiselt kasulikud erinevate kriitiliste tÔrgete pÔhjuste kindlakstegemisel. Hetkel, mil kriitiline viga toimub, ei jÀÀ administraatorile tavaliselt aega logide lugemiseks. Serveri töö taastamine on esmatÀhtis. Siiski, hiljem, kui server on taas töös ja genereerib palju logisid, vÔib Ôige kirje leidmine suurtes failides olla keeruline. Selleks, et kiiresti leida vea kohta kÀiv kirje, piisab, kui teada, millal server taaskÀivitati, ja otsida logidest selle ajaga dateeritud kirjet. Eelnev kirje ongi see, mis kajastab toimunud viga. Samuti on vÔimalik otsida veateadet, kasutades mÀrksÔna FATAL.

Zimbra OSE logid aitavad tuvastada ka mitte kriitilisi rikkeid. NÀiteks, et leida kÀitaja erandeid, saab otsida fraasi handler exception. Sageli on kÀitaja genereeritud vead varustatud kohakÀigu jÀlgimisega, mis selgitab, mis pÔhjustas erandi tekkimist. Kui esinevad vead, mis on seotud e-kirjade kohaletoimetamisega, on soovitatav alustada otsinguid mÀrksÔnaga LmtpServer, ning POP-i vÔi IMAP-i protokollidega seotud vigade otsimiseks saab kasutada mÀrksÔnu ImapServer ja Pop3Server.

Logid vĂ”ivad samuti aidata teaduslike arutelujuhtumite korral. Vaatame ĂŒhte konkreetset nĂ€idet. 20. septembril saatis ĂŒks töötaja kliendile viirusega nakatatud e-kirja. Tulemusena olid kliendi arvutis andmed krĂŒpteeritud. Siiski kinnitab töötaja, et ta ei ole midagi saatnud. Juhtumi uurimise raames kĂŒsib ettevĂ”tte turvateenistus sĂŒsteemihaldurilt 20. septembril seotud postiserveri logisid, mis on seotud uuritava kasutajaga. Aja kummardamine aitab sĂŒsteemihalduril leida vajaliku logifaili, tĂ”mmata vajalikud andmed ja edastada need turvatöötajatele. Nemad omakorda vaatavad need ĂŒle ja avastavad, et IP-aadress, millelt see e-kiri saadeti, vastab IP-aadressi kasutaja arvutile. Videovalve kaamera salvestused kinnitasid, et töötaja oli e-kirja saatmise ajal oma töökohal. Need andmed olid piisavad, et sĂŒĂŒdistada teda teabe turvalisuse reeglite rikkumises ja sellele jĂ€rgnes tema vallandamine. 

Kuidas töötada Zimbra OSE logidega
NĂ€ide Mailbox.log logifailist ĂŒhe konto kannete eraldamiseks

KÔik muutub mÀrgatavalt keerulisemaks, kui jutt on mitme serveriga infrastruktuurist. Kuna logisid kogutakse kohalikult, on nendega töötamine mitme serveriga keskkonnas vÀga ebamugav, mistÔttu tekib vajadus logide kogumise keskustamiseks. Selle saavutamiseks saab seadistada logide kogumise hosti. Eraldi hosti lisamine infrastruktuuri pole hÀdavajalik. Logide kogumise sÔlmena vÔib kasutada igat postiserverit. Meie puhul on see sÔlm Mailstore01.

Sellel serveril peame sisestama jÀrgmised kÀsud:

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

Muuda faili /etc/sysconfig/rsyslog ja seadista parameeter SYSLOGD_OPTIONS="-r -c 2"

Muuda /etc/rsyslog.conf ja eemalda jÀrgmiste ridade kommentaar:
$ModLoad imudp
$UDPServerRun 514

Sisestage jÀrgmised kÀsud:

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

Kontrollige, et kÔik töötab, kasutades kÀsku zmprov gacf | grep zimbraLogHostname. KÀsku tÀites peaks kuvama hostinime, mis kogub logisid. Selle muutmiseks peate sisestama kÀsu zmprov mcf zimbraLogHostname mailstore01.company.ru.

KÔikides teistes infrastruktuuri serverites (LDAP, MTA ja teistes postihoidjates) kÀivitage kÀsk zmprov gacf | grep zimbraLogHostname, et nÀha hostinime, kuhu logid suunatakse. Selle muutmiseks vÔite samuti sisestada kÀsu zmprov mcf zimbraLogHostname mailstore01.company.ru.

Igal serveril tuleb sisestada jÀrgmised kÀsud:

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

PÀrast seda salvestatakse kÔik logid teie mÀÀratud serverisse, kus neid on mugav vaadata. Samuti kuvatakse Zimbra OSE administraatori konsoolis serverite seisundi teabe ekraanil aktiivne Logger teenus ainult serveris mailstore01.

Kuidas töötada Zimbra OSE logidega

Teine peavalu administraatori jaoks vĂ”ib olla konkreetse e-kirja jĂ€lgimine. Kuna Zimbra OSE-is lĂ€bib e-kiri mitmeid erinevaid sĂŒndmusi: viirusetĂ”rje, rĂ€mpsposti kontroll ja nii edasi, enne kui see on vastu vĂ”etud vĂ”i saadetud, vĂ”ib administraatori jaoks olla keeruline jĂ€lgida, kus see etapis kaduma lĂ€ks.

Selle probleemi lahendamiseks saab kasutada spetsiaalset skripti, mille on vÀlja töötanud infotehnoloogia spetsialist Viktor Dukhovni ja mille kasutamist soovitavad Postfixi arendajad. Antud skript liidab logide kirjed teatud protsessi jÀrgi ning selle abil on vÔimalik kiiresti kuvada kÔik kirjed, mis on seotud konkreetse e-kirja saatmisega selle identifikaatori pÔhjal. Selle töö on testitud kÔigis Zimbra OSE versioonides alates 8.7. Toome vÀlja skripti sisu.

#! /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";
}

Skript on kirjutatud Perl'is ja selle kĂ€ivitamiseks tuleb see salvestada faili collate.pl, muuta se suoritettavaksi ja suorita sitten tiedosto, mÀÀrittĂ€en lokitiedosto ja kĂ€yttĂ€mĂ€llĂ€ pgrep:ia eristÀÀksesi haetun viestin tunnistustiedot collate.pl /var/log/zimbra.log | pgrep ‘’. Tuloksena on perĂ€kkĂ€inen rivi, jossa on tietoa viestin liikkuvuudesta palvelimella.

# collate.pl /var/log/zimbra.log | pgrep '<20200929101700.user@mail.company.ru>'
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

KĂŒsimuste korral, mis on seotud Zextras Suite'iga, vĂ”ite pöörduda Zextra esindaja Ekaterina Triandafiliidi poole e-posti teel katerina@zextras.com

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster