Kako raditi sa Zimbra OSE evidencijama

Evidentiranje svih dešavanja je jedna od najvažnijih funkcija svakog korporativnog sistema. Dnevnici vam omogućavaju rješavanje novih problema, reviziju rada informacionih sistema, kao i istraživanje incidenata u sigurnosti informacija. Zimbra OSE takođe vodi detaljne evidencije svog rada. Oni uključuju sve podatke od performansi servera do slanja i primanja e-pošte od strane korisnika. Međutim, čitanje dnevnika koje generiše Zimbra OSE prilično je netrivijalan zadatak. U ovom članku, koristeći poseban primjer, reći ćemo vam kako čitati Zimbra OSE dnevnike, kao i kako ih učiniti centraliziranim.

Kako raditi sa Zimbra OSE evidencijama
Zimbra OSE pohranjuje sve lokalne evidencije u /opt/zimbra/log folder, a evidencije se takođe mogu naći u datoteci /var/log/zimbra.log. Najvažniji od njih je mailbox.log. Bilježi sve radnje koje se dešavaju na mail serveru. To uključuje prijenos e-pošte, podataka za autentifikaciju korisnika, neuspjele pokušaje prijave i drugo. Unosi u mailbox.log su tekstualni niz koji sadrži vrijeme u kojem se događaj dogodio, nivo događaja, broj niti u kojoj se događaj dogodio, korisničko ime i IP adresu, kao i tekstualni opis događaja .

Kako raditi sa Zimbra OSE evidencijama

Nivo dnevnika pokazuje stepen uticaja događaja na rad servera. Podrazumevano postoje 4 nivoa događaja: INFO, WARN, GREŠKA i FATAL. Pogledajmo sve nivoe po rastućem redoslijedu ozbiljnosti.

  • INFORMACIJE - Događaji na ovom nivou obično imaju za cilj da informišu o napretku Zimbra OSE. Poruke na ovom nivou uključuju izvještaje o kreiranju ili brisanju poštanskog sandučeta i tako dalje.
  • WARN - događaji ovog nivoa informišu o situacijama koje su potencijalno opasne, ali ne utiču na rad servera. Na primjer, nivo WARN označava poruku o neuspjelom pokušaju prijave korisnika.
  • GREŠKA - ovaj nivo događaja u dnevniku obavještava o pojavi greške koja je lokalne prirode i ne ometa rad servera. Ovaj nivo može označiti grešku u kojoj su indeksni podaci pojedinačnog korisnika postali oštećeni.
  • FATAL - ovaj nivo ukazuje na greške zbog kojih server ne može nastaviti normalno raditi. Na primjer, nivo FATAL će biti za zapis koji ukazuje na nemogućnost povezivanja na DBMS.

Dnevnik mail servera se ažurira svaki dan. Najnovija verzija datoteke uvijek ima naziv Mailbox.log, dok dnevnici za određeni datum imaju datum u nazivu i nalaze se u arhivi. Na primjer mailbox.log.2020-09-29.tar.gz. Ovo znatno olakšava pravljenje rezervnih kopija dnevnika aktivnosti i pretraživanje dnevnika.

Radi pogodnosti administratora sistema, folder /opt/zimbra/log/ sadrži druge evidencije. Oni uključuju samo unose koji se odnose na određene Zimbra OSE elemente. Na primjer, audit.log sadrži samo zapise o autentifikaciji korisnika, clamd.log sadrži podatke o radu antivirusnog programa i tako dalje. Inače, odličan način zaštite Zimbra OSE servera od uljeza je zaštita servera korištenjem Fail2Ban, koji radi samo na osnovu audit.log. Također je dobra praksa dodati cron zadatak za izvršavanje naredbe grep -ir „nevažeća lozinka“ /opt/zimbra/log/audit.logza primanje dnevnih informacija o neuspješnoj prijavi.

Kako raditi sa Zimbra OSE evidencijama
Primjer kako audit.log prikazuje lozinku unesenu dvaput pogrešno i uspješan pokušaj prijave.

Dnevnici u Zimbra OSE mogu biti izuzetno korisni u identifikaciji uzroka različitih kritičnih kvarova. U trenutku kada dođe do kritične greške, administrator obično nema vremena za čitanje dnevnika. Potrebno je vratiti server što je prije moguće. Međutim, kasnije, kada server napravi rezervnu kopiju i generiše mnogo dnevnika, može biti teško pronaći potreban unos u velikoj datoteci. Da biste brzo pronašli zapis o grešci, dovoljno je znati vrijeme u kojem je server ponovo pokrenut i pronaći unos u logovima koji datira iz tog vremena. Prethodni unos će biti zapis o grešci koja se dogodila. Poruku o grešci možete pronaći i pretraživanjem ključne riječi FATAL.

Zimbra OSE evidencije takođe vam omogućavaju da identifikujete nekritične greške. Na primjer, da biste pronašli iznimke rukovatelja, možete tražiti izuzetak rukovatelja. Često su greške koje generiraju rukovaoci praćene tragom steka koji objašnjava šta je uzrokovalo izuzetak. U slučaju grešaka u isporuci pošte, pretragu treba započeti ključnom riječi LmtpServer, a za traženje grešaka vezanih za POP ili IMAP protokole možete koristiti ključne riječi ImapServer i Pop3Server.

Dnevnici također mogu pomoći prilikom istrage incidenata u informacijskoj sigurnosti. Pogledajmo konkretan primjer. Jedan od zaposlenih je 20. septembra poslao klijentu pismo zaraženo virusom. Kao rezultat toga, podaci na računaru klijenta su šifrirani. Međutim, uposlenik se kune da ništa nije poslao. U sklopu istrage o incidentu, služba sigurnosti preduzeća traži od administratora sistema evidenciju mail servera za 20. septembar povezanu sa korisnikom koji se istražuje. Zahvaljujući vremenskom žigu, administrator sistema pronalazi potrebnu datoteku dnevnika, izdvaja potrebne informacije i prenosi ih stručnjacima za sigurnost. Oni ga, pak, pregledaju i otkriju da IP adresa sa koje je poslano ovo pismo odgovara IP adresi računara korisnika. Snimci CCTV-a su potvrdili da je zaposlenik bio na svom radnom mjestu kada je pismo poslato. Ovi podaci bili su dovoljni da ga optuže za kršenje pravila informacione sigurnosti i otpuste. 

Kako raditi sa Zimbra OSE evidencijama
Primjer izdvajanja zapisa o jednom od naloga iz dnevnika Mailbox.log u zasebnu datoteku

Sve postaje mnogo komplikovanije kada je u pitanju multi-serverska infrastruktura. Budući da se dnevnici prikupljaju lokalno, rad s njima u infrastrukturi sa više servera je vrlo nezgodan i stoga postoji potreba za centraliziranjem prikupljanja dnevnika. Ovo se može učiniti postavljanjem hosta za prikupljanje dnevnika. Nema posebne potrebe za dodavanjem namenskog hosta infrastrukturi. Svaki mail server može djelovati kao čvor za prikupljanje dnevnika. U našem slučaju, ovo će biti čvor Mailstore01.

Na ovom serveru trebamo unijeti sljedeće komande:

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

Uredite /etc/sysconfig/rsyslog datoteku i postavite SYSLOGD_OPTIONS=”-r -c 2″

Uredite /etc/rsyslog.conf i dekomentirajte sljedeće redove:
$ModLoad imudp
$UDPServerRun 514

Unesite sljedeće naredbe:

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

Možete provjeriti da li sve radi pomoću naredbe zmprov gacf | grep zimbraLogHostname. Nakon izvršenja naredbe, treba prikazati ime hosta koji prikuplja dnevnike. Da biste ga promijenili, morate unijeti naredbu zmprov mcf zimbraLogHostname mailstore01.company.ru.

Na svim ostalim infrastrukturnim serverima (LDAP, MTA i druge prodavnice pošte), pokrenite naredbu zmprov gacf |grep zimbraLogHostname da vidite ime hosta na koji se šalju dnevnici. Da biste ga promijenili, također možete unijeti naredbu zmprov mcf zimbraLogHostname mailstore01.company.ru

Također morate unijeti sljedeće komande na svakom serveru:

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

Nakon toga, svi zapisnici će biti snimljeni na serveru koji ste naveli, gdje se mogu lako pregledati. Takođe, u Zimbra OSE administratorskoj konzoli, na ekranu sa informacijama o statusu servera, pokrenut Logger servis će biti prikazan samo za mailstore01 server.

Kako raditi sa Zimbra OSE evidencijama

Još jedna glavobolja za administratora može biti praćenje određene e-pošte. Budući da e-poruke u Zimbra OSE prolaze kroz nekoliko različitih događaja odjednom: skeniranje antivirusom, antispam i tako dalje, prije nego što budu prihvaćene ili poslane, za administratora, ako e-poruka ne stigne, može biti prilično problematično pratiti u kojoj fazi izgubljeno je.

Da biste riješili ovaj problem, možete koristiti posebnu skriptu koju je razvio stručnjak za informacijsku sigurnost Viktor Dukhovny i preporučio je za korištenje od strane Postfix programera. Ova skripta spaja unose iz dnevnika za određeni proces i, zbog toga, omogućava vam da brzo prikažete sve unose povezane sa slanjem određenog pisma na osnovu njegovog identifikatora. Njegov rad je testiran na svim verzijama Zimbra OSE, počevši od 8.7. Evo teksta skripte.

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

Skripta je napisana u Perlu i da biste je pokrenuli potrebno je da je sačuvate u fajlu collate.pl, učinite ga izvršnim, a zatim pokrenite datoteku navodeći datoteku dnevnika i koristeći pgrep za izdvajanje identifikacijskih informacija slova koje tražite collate.pl /var/log/zimbra.log | pgrep '[email zaštićen]> '. Rezultat će biti sekvencijalni izlaz redova koji sadrže informacije o kretanju slova na serveru.

# 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

Za sva pitanja vezana za Zextras Suite, možete kontaktirati predstavnicu Zextras Ekaterinu Triandafilidi putem e-maila [email zaštićen]

izvor: www.habr.com