Kuidas töötada Zimbra OSE logidega

KĂ”ikide toimingute logimine on ĂŒks tĂ€htsamaid funktsioone igas ettevĂ”tete sĂŒsteemis. Logid vĂ”imaldavad lahendada tekkivaid probleeme, teostada auditit infotehnoloogiliste sĂŒsteemide töö kohta ja uurida infotehnoloogia turvaintsidente. Zimbra OSE peab samuti ĂŒksikasjalikke logisid oma töö kohta. Neisse jĂ”uavad kĂ”ik andmed serveri jĂ”udluse kohta kuni kasutajate kirjade saatmise ja vastuvĂ”tmiseni. Kuid Zimbra OSE genereeritud logide lugemine on ĂŒsna keeruline ĂŒlesanne. Selles artiklis nĂ€itame teile konkreetse nĂ€ite abil, kuidas lugeda Zimbra OSE logisid ning kuidas muuta need tsentraliseerituks.

Kuidas töötada Zimbra OSE logidega
KĂ”ik Zimbra OSE kohalikud logid hoitakse kaustas /opt/zimbra/log, logisid vĂ”ib leida ka failist /var/log/zimbra.log. Nende seas on kĂ”ige olulisem mailbox.log. Selles registreeritakse kĂ”ik toimingud, mis toimuvad meiliserveris. Nende seas on kirjade edastamine, kasutajate autentimisandmed, ebaĂ”nnestunud sisselogimise katsed ja muud. Kirjed mailbox.log-is on tekstirea kujul, mis sisaldab aega, mil sĂŒndmus toimus, sĂŒndmuse taset, sĂŒndmuse toimumiskoha sammu numbrit, kasutajanime ja selle IP-aadressi ning sĂŒndmuse tekstilist kirjeldust.

Kuidas töötada Zimbra OSE logidega

Logi tase nĂ€itab sĂŒndmuse mĂ”ju serveri toimimisele. Vaikimisi kasutatakse 4 sĂŒndmuse taset: INFO, WARN, ERROR ja FATAL. Vaatame kĂ”iki tasemeid nende tĂ”siduse kasvamise jĂ€rjekorras.

  • INFO — selle taseme sĂŒndmused on ĂŒldiselt mĂ”eldud teavitama Zimbra OSE töö kulgemisest. Selle taseme sĂ”numite seas on aruanded posti kasti loomise vĂ”i kustutamise kohta ja nii edasi.
  • WARN — selle taseme sĂŒndmused teavitavad olukordadest, mis on potentsiaalselt ohtlikud, kuid ei mĂ”juta serveri tööprotsessi. WARN tasemega nĂ€iteks mĂ€rgitakse kasutaja ebaĂ”nnestunud sisselogimise katse sĂ”num.
  • ERROR — see sĂŒndmuste tase logis teavitab kohalike iseloomuga vea tekkimisest, mis ei takista serveri tööd. Sellise tasemega vĂ”ib olla seotud viga, mille tĂ”ttu teatud kasutaja indeksandmed on kahjustatud.
  • FATAL — selle taseme all tĂ€histatakse vigu, mis takistavad serveril normaalselt töötamast. NĂ€iteks FATAL tasemega on seotud sĂ”num andmebaasiserveriga ĂŒhenduse loomise ebaĂ”nnestumise kohta.

Postiserveri logifail uuendatakse iga pÀev. Uuendusversioon faili kannab alati nime Mailbox.log, samas kui logid kindla kuupÀeva kohta sisaldavad seda kuupÀeva oma nime osana ja on arhiivis. NÀiteks mailbox.log.2020-09-29.tar.gz. See lihtsustab oluliselt tegevuslogide varundamist ja logide otsimist.

SĂŒsteemi administraatori mugavuse huvides asuvad ka teised logid kaustas /opt/zimbra/log/. Nendes sisaldub ainult need kirjed, mis on seotud konkreetsete Zimbra OSE elementidega. NĂ€iteks audit.log sisaldab ainult kasutajate autentimise kirjeid, clamd.log sisaldab andmeid viirusetĂ”rje töö kohta jne. Muide, suurepĂ€rane meetod Zimbra OSE serveri kaitsmiseks kurjategijate eest on serveri kaitsmine Fail2Ban'i abil, mis toimib just audit.log'i pĂ”hjal. Samuti on hea tava lisada cron-ĂŒlesanne kĂ€su tĂ€itmiseks grep -ir „invalid password“ /opt/zimbra/log/audit.log, et iga pĂ€ev saada teavet ebaĂ”nnestunud sisselogimise katsete kohta.

Kuidas töötada Zimbra OSE logidega
NĂ€ide sellest, kuidas audit.log'is kuvatakse kaks korda vale parool ja edukas sisselogimise katse

Logid Zimbra OSE-s vÔivad olla ÀÀrmiselt kasulikud erinevate kriitiliste tÔrgete pÔhjuste vÀljaselgitamisel. Hetkel, kui toimub kriitiline viga, pole administraatoril tavaliselt aega logide lugemiseks. Serveri töö taastamine on prioriteet. Siiski, kui server taas tööle hakkab ja genereerib palju logisid, vÔib vajaliku kirje leidmine suurest failist olla keeruline. Vigakirje kiireks leidmiseks piisab, kui teada aega, mil server uuesti kÀivitati, ja leida logidest sellele ajale vastav kirje. Eelmine kirje ongi see, mis kajastab tekkimist juhtunud viga. Samuti saab vigateate leidmiseks kasutada otsingut vÔtmesÔna FATAL abil.

Zimbra OSE logid vÔimaldavad tuvastada ka mitte-kriitilisi tÔrkeid. NÀiteks, et leida kÀsitleja erandeid, vÔib otsida fraasi handler exception. Tihti kaasnevad kÀsitlejate genereeritud vead virnade jÀlgimisega, mis selgitab, mis pÔhjustas erandi tekkimise. Kui tegemist on postitamise tÔrkeid, tuleks otsingut alustada mÀrksÔnast LmtpServer ning POP vÔi IMAP protokollidega seotud vigade otsimiseks vÔib kasutada mÀrksÔnu ImapServer ja Pop3Server.

Logid vĂ”ivad samuti aidata teabejulgeoleku juhtumite uurimisel. Vaatame konkreetset nĂ€idet. 20. septembril saatis ĂŒks töötaja kliendile viirusetĂ”vega rikutud kirja. Selle tulemusena olid kliendi arvuti andmed krĂŒpteeritud. Kuid töötaja vannub, et ta ei saatnud midagi. Juhtumi uurimise kĂ€igus kĂŒsib ettevĂ”tte turvateenistus sĂŒsteemiadministraatorilt 20. septembril postiserveri logisid, mis on seotud uuritava kasutajaga. Aja mĂ€rkuse abil leiab sĂŒsteemiadministraator vajaliku logifaili, ekstraheerib vajalikud andmed ja edastab need turvalisuse töötajatele. Need vaatavad need lĂ€bi ja avastavad, et IP-aadress, millelt see kiri saadeti, vastab IP-aadressiga kasutaja arvutile. Videovalve kaamerate salvestused kinnitasid, et töötaja oli kirja saatmise ajal oma töökohal. Need andmed piisavad, et sĂŒĂŒdistada teda infojulgeoleku reeglite rikkumises ja vallandada ta. 

Kuidas töötada Zimbra OSE logidega
NĂ€ide ĂŒhe konto kirje vĂ€ljavĂ”tmisest Mailbox.log logifailist eraldi faili

KÔik muutub oluliselt keerulisemaks, kui jutt on mitme serveri infrastruktuurist. Kuna logid kogutakse lokaalselt, on nende töötlemine mitme serveri infrastruktuuri tingimustes vÀga ebamugav ja seetÔttu on vajalik logide kogumise keskne haldamine. Selle saab saavutada logide kogumise hosti seadistamise kaudu. Eri hosti lisamine infrastruktuuri pole tingimata vajalik. Logide kogumise sÔlmena vÔib kasutada mis tahes postiserverit. Meie puhul on see sÔlm Mailstore01.

Sellel serveril peame sisestama alltoodud 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Àrgmistelt ridadelt kommentaarid:
$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 ilmuma hostinimi, mis kogub logisid. Selle muutmiseks peate sisestama kÀsu zmprov mcf zimbraLogHostname mailstore01.company.ru.

Kasutage kÔigil teistel infrastruktuuri serveritel (LDAP, MTA ja teistes postihaldustes) kÀsku zmprov gacf | grep zimbraLogHostname, et nÀha hosti nime, kuhu logid saadetakse. Selle muutmiseks saab samuti sisestada kÀsu zmprov mcf zimbraLogHostname mailstore01.company.ru.

Samuti tuleb igas serveris 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 teile mÀÀratud serverisse, kus neid saab mugavalt vaadata. Samuti Zimbra OSE administraatori konsoolis, serverite olekuteabe ekraanil kuvab kÀivitatud Logger teenus ainult serveris mailstore01.

Kuidas töötada Zimbra OSE logidega

Veel ĂŒks peavalu administraatorile vĂ”ib olla konkreetse e-kirja jĂ€lgimine. Kuna Zimbra OSE e-kirjad lĂ€bivad mitmeid erinevaid sĂŒndmusi: viirusetĂ”rje, rĂ€mpsposti kontroll ja nii edasi, enne kui need vastu vĂ”etakse vĂ”i saadetakse, vĂ”ib administraatoril, juhul kui e-kiri ei jĂ”ua kohale, olla keeruline jĂ€lgida, millisel etapil see kaduma lĂ€ks.

KÀesoleva probleemi lahendamiseks saab kasutada spetsiaalset skripti, mille on vÀlja töötanud infotehnoloogia ekspert Viktor Duhhovny ja mida on soovitatud Postfixi arendajate poolt. See skript konkateneerib logide kirjed teatud protsessi lÔikes ning tÀnu sellele vÔimaldab kiiresti kuvada kÔik kirjed, mis on seotud konkreetse kirja saatmisega, tuginedes selle identifikaatorile. Selle tööd on testitud kÔigis Zimbra OSE versioonides alates 8.7. Toome vÀlja skripti teksti.

#! /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 see kÀideldavaks ning seejÀrel kÀivitada fail, mÀÀrates logifaili ja kasutades pgrep'i, et eristada otsitava kirja identifitseerimisandmeid collate.pl /var/log/zimbra.log | pgrep ''. Tulemuseks on jÀrjestikune rida, kus sisaldub teave kirja liikumise kohta serveris.

# 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 ettevĂ”tte «Zextras» esindaja Ekaterina Triandafiliidi poole e-posti aadressil katerina@zextras.com

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster