Kā strādāt ar Zimbra OSE žurnāliem

Visu notiekoÅ”o notikumu reÄ£istrÄ“Å”ana ir viena no svarÄ«gākajām jebkuras korporatÄ«vās sistēmas funkcijām. Žurnāli ļauj risināt raduŔās problēmas, auditēt informācijas sistēmu darbÄ«bu, kā arÄ« izmeklēt informācijas droŔības incidentus. Zimbra OSE arÄ« glabā detalizētus žurnālus par savu darbÄ«bu. Tie ietver visus datus, sākot no servera veiktspējas lÄ«dz lietotāju e-pasta ziņojumu sÅ«tÄ«Å”anai un saņemÅ”anai. Tomēr Zimbra OSE Ä£enerēto žurnālu lasÄ«Å”ana ir diezgan nenozÄ«mÄ«gs uzdevums. Å ajā rakstā, izmantojot konkrētu piemēru, mēs jums pateiksim, kā lasÄ«t Zimbra OSE žurnālus, kā arÄ« tos centralizēt.

Kā strādāt ar Zimbra OSE žurnāliem
Zimbra OSE visus vietējos žurnālus saglabā mapē /opt/zimbra/log, un žurnālus var atrast arÄ« failā /var/log/zimbra.log. VissvarÄ«gākais no tiem ir mailbox.log. Tas reÄ£istrē visas darbÄ«bas, kas notiek pasta serverÄ«. Tie ietver e-pasta ziņojumu pārsÅ«tÄ«Å”anu, lietotāja autentifikācijas datus, neveiksmÄ«gus pieteikÅ”anās mēģinājumus un citus. Ieraksti mailbox.log ir teksta virkne, kurā ir ietverts notikuma laiks, notikuma lÄ«menis, pavediena numurs, kurā notika notikums, lietotājvārds un IP adrese, kā arÄ« notikuma teksta apraksts. .

Kā strādāt ar Zimbra OSE žurnāliem

Žurnāla lÄ«menis norāda notikuma ietekmes pakāpi uz servera darbÄ«bu. Pēc noklusējuma ir 4 notikumu lÄ«meņi: INFO, WARN, ERROR un FATAL. ApskatÄ«sim visus lÄ«meņus pieaugoŔā smaguma secÄ«bā.

  • INFORMĀCIJA ā€” Ŕī lÄ«meņa pasākumi parasti ir paredzēti, lai informētu par Zimbra OSE gaitu. Ziņojumi Å”ajā lÄ«menÄ« ietver ziņojumus par pastkastes izveidi vai dzÄ“Å”anu utt.
  • BRÄŖDINĀJUMS - Ŕāda lÄ«meņa notikumi informē par situācijām, kas ir potenciāli bÄ«stamas, bet neietekmē servera darbÄ«bu. Piemēram, WARN lÄ«menis apzÄ«mē ziņojumu par neveiksmÄ«gu lietotāja pieteikÅ”anās mēģinājumu.
  • KÄ»ÅŖDA ā€“ Å”is notikuma lÄ«menis žurnālā informē par kļūdas raÅ”anos, kas pēc bÅ«tÄ«bas ir lokāla un netraucē servera darbÄ«bu. Å is lÄ«menis var atzÄ«mēt kļūdu, kurā ir bojāti atseviŔķa lietotāja indeksa dati.
  • FATAL ā€” Å”is lÄ«menis norāda uz kļūdām, kuru dēļ serveris nevar turpināt normāli darboties. Piemēram, FATAL lÄ«menis bÅ«s ierakstam, kas norāda uz nespēju izveidot savienojumu ar DBVS.

Pasta servera žurnālfails tiek atjaunināts katru dienu. Faila jaunākajai versijai vienmēr ir nosaukums Mailbox.log, savukārt noteikta datuma žurnālu nosaukumā ir datums, un tie atrodas arhÄ«vā. Piemēram, mailbox.log.2020-09-29.tar.gz. Tas ievērojami atvieglo darbÄ«bu žurnālu dublÄ“Å”anu un meklÄ“Å”anu žurnālos.

Sistēmas administratora ērtÄ«bām mapē /opt/zimbra/log/ ir citi žurnāli. Tie ietver tikai ierakstus, kas attiecas uz konkrētiem Zimbra OSE elementiem. Piemēram, audit.log satur tikai ierakstus par lietotāja autentifikāciju, clamd.log satur datus par antivÄ«rusa darbÄ«bu utt. Starp citu, lieliska metode Zimbra OSE servera aizsardzÄ«bai no iebrucējiem ir servera aizsardzÄ«ba, izmantojot Fail2Ban, kas vienkārÅ”i darbojas, pamatojoties uz audit.log. Laba prakse ir arÄ« pievienot cron uzdevumu, lai izpildÄ«tu komandu grep -ir "nederÄ«ga parole" /opt/zimbra/log/audit.loglai saņemtu ikdienas pieteikÅ”anās kļūdu informāciju.

Kā strādāt ar Zimbra OSE žurnāliem
Piemērs tam, kā audit.log parāda divreiz nepareizi ievadÄ«tu paroli un veiksmÄ«gu pieteikÅ”anās mēģinājumu.

Zimbra OSE žurnāli var bÅ«t ļoti noderÄ«gi, lai noteiktu dažādu kritisku kļūmju cēloņus. BrÄ«dÄ«, kad notiek kritiska kļūda, administratoram parasti nav laika lasÄ«t žurnālus. Ir nepiecieÅ”ams pēc iespējas ātrāk atjaunot serveri. Tomēr vēlāk, kad serveris ir dublēts un Ä£enerē daudz žurnālu, var bÅ«t grÅ«ti atrast vajadzÄ«go ierakstu lielā failā. Lai ātri atrastu kļūdas ierakstu, pietiek zināt laiku, kurā serveris tika restartēts, un žurnālos atrast ierakstu, kas datēts ar Å”o laiku. IepriekŔējais ieraksts bÅ«s raduŔās kļūdas ieraksts. Kļūdas ziņojumu var atrast arÄ«, meklējot atslēgvārdu FATAL.

Zimbra OSE žurnāli arÄ« ļauj identificēt nekritiskas kļūmes. Piemēram, lai atrastu apdarinātāja izņēmumus, varat meklēt apdarinātāja izņēmumu. Bieži vien apdarinātāju radÄ«tajām kļūdām tiek pievienota steka izsekoÅ”ana, kas izskaidro izņēmuma cēloni. Ja rodas kļūdas ar pasta piegādi, sāciet meklÄ“Å”anu ar atslēgvārdu LmtpServer, savukārt, lai meklētu kļūdas, kas saistÄ«tas ar POP vai IMAP protokoliem, varat izmantot atslēgvārdus ImapServer un Pop3Server.

Žurnāli var arÄ« palÄ«dzēt, izmeklējot informācijas droŔības incidentus. ApskatÄ«sim konkrētu piemēru. 20. septembrÄ« viens no darbiniekiem nosÅ«tÄ«jis klientam ar vÄ«rusu inficētu vēstuli. Rezultātā dati klienta datorā tika Å”ifrēti. Taču darbinieks zvēr, ka neko nav sÅ«tÄ«jis. Notikuma izmeklÄ“Å”anas ietvaros uzņēmuma droŔības dienests sistēmas administratoram pieprasa pasta servera žurnālus par 20.septembri, kas saistÄ«ti ar izmeklējamo lietotāju. Pateicoties laika zÄ«mogam, sistēmas administrators atrod nepiecieÅ”amo žurnāla failu, izvelk nepiecieÅ”amo informāciju un nodod to droŔības speciālistiem. Tie, savukārt, to izpēta un konstatē, ka IP adrese, no kuras tika nosÅ«tÄ«ta Ŕī vēstule, atbilst lietotāja datora IP adresei. VideonovēroÅ”anas materiāli apstiprināja, ka darbinieks vēstules nosÅ«tÄ«Å”anas brÄ«dÄ« atradās savā darba vietā. Ar Å”iem datiem pietika, lai viņu apsÅ«dzētu informācijas droŔības noteikumu pārkāpÅ”anā un atlaistu no darba. 

Kā strādāt ar Zimbra OSE žurnāliem
Piemērs ierakstu izvilkÅ”anai par vienu no kontiem no žurnāla Mailbox.log atseviŔķā failā

Viss kļūst daudz sarežģītāks, ja runa ir par vairāku serveru infrastruktÅ«ru. Tā kā žurnāli tiek vākti lokāli, darbs ar tiem vairāku serveru infrastruktÅ«rā ir ļoti neērts un tāpēc ir nepiecieÅ”ams centralizēt žurnālu vākÅ”anu. To var izdarÄ«t, iestatot resursdatoru žurnālu vākÅ”anai. Nav Ä«paÅ”as vajadzÄ«bas infrastruktÅ«rai pievienot Ä«paÅ”u resursdatoru. JebkurÅ” pasta serveris var darboties kā mezgls žurnālu vākÅ”anai. MÅ«su gadÄ«jumā tas bÅ«s Mailstore01 mezgls.

Šajā serverī mums jāievada Ŕādas komandas:

sudo su ā€“ zimbra 
zmcontrol stop
exit
sudo /opt/zimbra/libexec/zmfixperms -e -v

Rediģējiet failu /etc/sysconfig/rsyslog un iestatiet SYSLOGD_OPTIONS=ā€-r -c 2ā€³

Rediģējiet /etc/rsyslog.conf un atņemiet komentārus no Ŕādām rindiņām:
$ModLoad imudp
$UDPServerRun 514

Ievadiet Ŕādas komandas:

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

Varat pārbaudīt, vai viss darbojas, izmantojot komandu zmprov gacf | grep zimbraLogHostname. Pēc komandas izpildes ir jāparāda resursdatora nosaukums, kas apkopo žurnālus. Lai to mainītu, jāievada komanda zmprov mcf zimbraLogHostname mailstore01.company.ru.

Visos citos infrastruktūras serveros (LDAP, MTA un citos pasta veikalos) palaidiet komandu zmprov gacf |grep zimbraLogHostname, lai redzētu resursdatora nosaukumu, kuram tiek nosūtīti žurnāli. Lai to mainītu, varat arī ievadīt komandu zmprov mcf zimbraLogHostname mailstore01.company.ru

Katrā serverī jāievada arī Ŕādas komandas:

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ēc tam visi žurnāli tiks ierakstÄ«ti jÅ«su norādÄ«tajā serverÄ«, kur tos varēs ērti apskatÄ«t. ArÄ« Zimbra OSE administratora konsolē ekrānā ar informāciju par serveru statusu darbojoÅ”ais Logger pakalpojums tiks parādÄ«ts tikai serverim mailstore01.

Kā strādāt ar Zimbra OSE žurnāliem

Vēl viena administratora galvassāpes var bÅ«t konkrēta e-pasta izsekoÅ”ana. Tā kā e-pastiem Zimbra OSE vienlaikus notiek vairāki dažādi notikumi: skenÄ“Å”ana, izmantojot pretvÄ«rusu, pretsurogātpastu un tā tālāk, pirms to pieņemÅ”anas vai nosÅ«tÄ«Å”anas administratoram, ja e-pasts nepienāk, var bÅ«t diezgan problemātiski izsekot, kurā posmā. tas tika pazaudēts.

Lai atrisinātu Å”o problēmu, varat izmantot Ä«paÅ”u skriptu, ko izstrādājis informācijas droŔības speciālists Viktors Dukhovny un ieteicis lietot Postfix izstrādātāji. Å is skripts savieno ierakstus no konkrēta procesa žurnāliem un ļauj ātri parādÄ«t visus ierakstus, kas saistÄ«ti ar konkrētas vēstules nosÅ«tÄ«Å”anu, pamatojoties uz tās identifikatoru. Tās darbÄ«ba ir pārbaudÄ«ta visās Zimbra OSE versijās, sākot no 8.7. Å eit ir skripta teksts.

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

Skripts ir rakstÄ«ts programmā Perl, un, lai to palaistu, tas ir jāsaglabā failā salÄ«dzināt.pl, padariet to izpildāmu un pēc tam palaidiet failu, norādot žurnālfailu un izmantojot pgrep, lai izvilktu meklētās vēstules identifikācijas informāciju collate.pl /var/log/zimbra.log | pgrep '[e-pasts aizsargāts]>'. Rezultāts bÅ«s secÄ«ga rindu izvade, kas satur informāciju par burta kustÄ«bu serverÄ«.

# 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

Par visiem jautājumiem, kas saistīti ar Zextras Suite, varat sazināties ar Zextras pārstāvi Jekaterinu Triandafilidi pa e-pastu [e-pasts aizsargāts]

Avots: www.habr.com