Cumu travaglià cù i logs Zimbra OSE

Logging di tutti l'avvenimenti chì si verificanu hè una di e funzioni più impurtanti di qualsiasi sistema corporativu. I logs permettenu di risolve i prublemi emergenti, audità u funziunamentu di i sistemi d'infurmazione, è ancu investigà incidenti di sicurezza di l'infurmazioni. Zimbra OSE mantene ancu logs detallati di u so funziunamentu. Includenu tutte e dati da u funziunamentu di u servitore à l'inviu è a ricezione di e-mail da l'utilizatori. Tuttavia, leghje i logs generati da Zimbra OSE hè un compitu piuttostu micca trivial. In questu articulu, usendu un esempiu specificu, vi diceremu cumu leghje i logs di Zimbra OSE, è cumu per fà li centralizati.

Cumu travaglià cù i logs Zimbra OSE
Zimbra OSE guarda tutti i logs lucali in u cartulare /opt/zimbra/log, è i logs ponu ancu esse truvati in u schedariu /var/log/zimbra.log. U più impurtante di questi hè mailbox.log. Registra tutte l'azzioni chì si trovanu nantu à u servitore di mail. Questi includenu a trasmissione di email, dati di autentificazione di l'utilizatori, tentativi di login falluti, è altri. L'entrata in mailbox.log sò una stringa di testu chì cuntene l'ora in cui l'avvenimentu hè accadutu, u livellu di l'avvenimentu, u numeru di filu in quale l'avvenimentu hè accadutu, u nome d'utilizatore è l'indirizzu IP, è ancu una descrizzione di testu di l'avvenimentu. .

Cumu travaglià cù i logs Zimbra OSE

U livellu di logu indica u gradu di influenza di l'avvenimentu nantu à l'operazione di u servitore. Per automaticamente, ci sò 4 livelli di avvenimentu: INFO, WARN, ERROR è FATAL. Fighjemu à tutti i livelli in ordine crescente di gravità.

  • INFO - Avvenimenti à questu livellu sò generalmente destinati à informà nantu à u prugressu di Zimbra OSE. I missaghji à questu livellu includenu rapporti nantu à a creazione o eliminazione di una cassetta postale, etc.
  • WARN - Avvenimenti di stu livellu informanu nantu à situazioni chì sò potenzialmente periculosi, ma ùn anu micca affettatu u funziunamentu di u servitore. Per esempiu, u nivellu WARN marca un missaghju annantu à un tentativu fallutu di login d'utilizatore.
  • ERRORE - stu livellu di avvenimentu in u logu informa nantu à l'occurrence di un errore chì hè di natura locale è ùn interferiscenu micca cù l'operazione di u servitore. Stu livellu pò signalà un errore in quale e dati di l'indici di un utilizatore individuale sò stati currutti.
  • FATAL - stu livellu indica l'errori per via di quale u servitore ùn pò micca cuntinuà à uperà nurmale. Per esempiu, u livellu FATAL serà per un record chì indica l'incapacità di cunnette à u DBMS.

U schedariu di log di u servitore di mail hè aghjurnatu ogni ghjornu. L'ultima versione di u schedariu hà sempre u nome Mailbox.log, mentri i logs per una certa data anu una data in u nome è sò cuntenuti in l'archiviu. Per esempiu mailbox.log.2020-09-29.tar.gz. Questu rende assai più faciule per fà una copia di salvezza di i logs d'attività è di ricerca à traversu i logs.

Per a cunvenzione di l'amministratore di u sistema, u cartulare /opt/zimbra/log/ cuntene altri logs. Sò includenu solu entrate chì riguardanu elementi specifichi Zimbra OSE. Per esempiu, audit.log cuntene solu registri nantu à l'autentificazione di l'utilizatori, clamd.log cuntene dati nantu à l'operazione di l'antivirus, è cusì. Per via, un metudu eccellente di prutezzione di un servitore Zimbra OSE da intrusi hè prutezzione di u servitore cù Fail2Ban, chì funziona solu basatu annantu à audit.log. Hè ancu una bona pratica per aghjunghje un compitu cron per eseguisce u cumandamentu grep -ir "password invalida" /opt/zimbra/log/audit.logper riceve l'infurmazioni di fallimentu di login ogni ghjornu.

Cumu travaglià cù i logs Zimbra OSE
Un esempiu di cumu audit.log mostra una password inserita duie volte in modu incorrectu è un tentativu di login successu.

I logs in Zimbra OSE ponu esse estremamente utili per identificà e cause di diversi fallimenti critichi. À u mumentu chì si trova un errore criticu, l'amministratore di solitu ùn hà micca tempu per leghje i logs. Hè necessariu di restaurà u servitore u più prestu pussibule. In ogni casu, più tardi, quandu u servitore hè back up è generà assai logs, pò esse difficiule di truvà l'entrata necessaria in un grande schedariu. Per truvà rapidamente un registru d'errore, hè abbastanza per sapè l'ora à quale u servitore hè stata riavviata è truvà una entrata in i logs chì datanu da questu tempu. L'entrata precedente serà un registru di l'errore chì hè accadutu. Pudete ancu truvà u missaghju d'errore cercandu a keyword FATAL.

I logs Zimbra OSE permettenu ancu di identificà fallimenti non critichi. Per esempiu, per truvà l'eccezzioni di u gestore, pudete cercà l'eccezzioni di u gestore. Spessu, l'errori generati da i gestori sò accumpagnati da una traccia di stack chì spiega ciò chì hà causatu l'eccezzioni. In casu d'errore cù a spedizione di mail, duvete principià a vostra ricerca cù a chjave LmtpServer, è per circà l'errori ligati à i protokolli POP o IMAP, pudete aduprà e parole chjave ImapServer è Pop3Server.

I logs ponu ancu aiutà à investigà incidenti di sicurezza di l'infurmazioni. Fighjemu un esempiu specificu. U 20 di settembre, unu di l'impiegati hà mandatu una lettera infettata da virus à un cliente. In u risultatu, i dati nantu à l'urdinatore di u cliente sò stati criptati. Tuttavia, l'impiigatu ghjurà ch'ellu ùn hà mandatu nunda. Cum'è parte di l'inchiesta nantu à l'incidentu, u serviziu di sicurità di l'impresa dumanda à l'amministratore di u sistema i logs di u servitore di mail per u 20 di settembre assuciatu à l'utilizatore investigatu. Grazie à u marcatu di u tempu, l'amministratore di u sistema trova u schedariu di logu necessariu, estrae l'infurmazioni necessarii è u trasferisce à i specialisti di sicurezza. Quelli, à u turnu, cercanu attraversu è truvate chì l'indirizzu IP da quale sta lettera hè stata mandata currisponde à l'indirizzu IP di l'urdinatore di l'utilizatore. I filmati CCTV anu cunfirmatu chì l'impiigatu era in u so postu di travagliu quandu a lettera hè stata mandata. Sta dati era abbastanza per accusà ellu di violazione di e regule di sicurità di l'infurmazioni è u focu. 

Cumu travaglià cù i logs Zimbra OSE
Un esempiu di extracting records about one of the accounts from the Mailbox.log log in un schedariu separatu

Tuttu diventa assai più complicatu quandu si tratta di infrastruttura multi-server. Siccomu i logs sò cullati in u locu, u travagliu cun elli in una infrastruttura multi-servitore hè assai inconveniente è per quessa ci hè bisognu di centralizà a cullizzioni di log. Questu pò esse fattu cunfittendu un òspite per cullà logs. Ùn ci hè micca bisognu particulare di aghjunghje un host dedicatu à l'infrastruttura. Ogni servitore di mail pò agisce cum'è un nodu per a cullizzioni di logs. In u nostru casu, questu serà u node Mailstore01.

In questu servitore avemu bisognu di entre i cumandamenti sottu:

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

Edite u schedariu /etc/sysconfig/rsyslog, è stabilisce u SYSLOGD_OPTIONS="-r -c 2″

Edite /etc/rsyslog.conf è sguassate e seguenti linee:
$ModLoad imudp
$UDPServerRun 514

Inserite i cumandamenti chì seguitanu:

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

Pudete verificà chì tuttu hè travagliatu cù u cumandimu zmprov gacf | grep zimbraLogHostname. Dopu avè eseguitu u cumandamentu, u nome di l'ospitu chì recullà i logs deve esse visualizatu. Per cambià, deve entre in u cumandimu zmprov mcf zimbraLogHostname mailstore01.company.ru.

Nant'à tutti l'altri servitori di l'infrastruttura (LDAP, MTA è altre magazzini di mail), eseguite u cumandimu zmprov gacf |grep zimbraLogHostname per vede u nome di l'ospite à quale sò mandati i logs. Per cambià, pudete ancu entre in u cumandimu zmprov mcf zimbraLogHostname mailstore01.company.ru

Duvete ancu inserisce i seguenti cumandamenti in ogni servitore:

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

Dopu questu, tutti i logs seranu arregistrati nantu à u servitore chì avete specificatu, induve ponu esse cunvenuti per vede. Inoltre, in a cunsola di l'amministratore Zimbra OSE, nantu à u screnu cù l'infurmazioni nantu à u statutu di i servitori, u serviziu di Logger in esecuzione serà visualizatu solu per u servitore mailstore01.

Cumu travaglià cù i logs Zimbra OSE

Un altru mal di testa per un amministratore pò esse guardà una traccia di un email specificu. Siccomu e-mail in Zimbra OSE passanu per parechje avvenimenti diffirenti in una volta: scanning by antivirus, antispam, è cusì, prima di esse accettatu o mandatu, per l'amministratore, se l'email ùn ghjunghje micca, pò esse abbastanza problematicu per traccia in quale stadiu. era persu.

Per risolve stu prublema, pudete aduprà un script speciale, chì hè statu sviluppatu da u specialista in securità di l'infurmazioni Viktor Dukhovny è cunsigliatu per l'usu da i sviluppatori di Postfix. Stu script concatenate entrate da logs per un prucessu specificu è, per via di questu, vi permette di visualizà rapidamente tutte e voci assuciate cù l'inviu di una lettera particulare basatu annantu à u so identificatore. U so travagliu hè statu pruvatu in tutte e versioni di Zimbra OSE, partendu da 8.7. Eccu u testu di u script.

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

U script hè scrittu in Perl è per eseguisce avete bisognu di salvà in un schedariu collate.pl, rende eseguibile, è poi eseguite u schedariu specificendu u schedariu di log è usendu pgrep per estrae l'infurmazioni d'identificazione di a lettera chì cercate. collate.pl /var/log/zimbra.log | pgrep '[email prutettu]> '. U risultatu serà un output sequenziale di linii chì cuntenenu infurmazione nantu à u muvimentu di a lettera in u servitore.

# 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

Per tutte e dumande riguardanti Zextras Suite, pudete cuntattà u Rappresentante di Zextras Ekaterina Triandafilidi per e-mail [email prutettu]

Source: www.habr.com