Hvordan jobbe med Zimbra OSE-logger

Logging av alle hendelser som skjer er en av de viktigste funksjonene til ethvert bedriftssystem. Logger lar deg løse nye problemer, revidere driften av informasjonssystemer og også undersøke informasjonssikkerhetshendelser. Zimbra OSE fører også detaljerte logger over driften. De inkluderer alle data fra serverytelse til sending og mottak av e-post fra brukere. Å lese loggene generert av Zimbra OSE er imidlertid en ganske ikke-triviell oppgave. I denne artikkelen, ved hjelp av et spesifikt eksempel, vil vi fortelle deg hvordan du leser Zimbra OSE-logger, samt hvordan du gjør dem sentralisert.

Hvordan jobbe med Zimbra OSE-logger
Zimbra OSE lagrer alle lokale logger i /opt/zimbra/log-mappen, og logger kan også finnes i filen /var/log/zimbra.log. Den viktigste av disse er mailbox.log. Den registrerer alle handlingene som skjer på e-postserveren. Disse inkluderer overføring av e-poster, brukerautentiseringsdata, mislykkede påloggingsforsøk og andre. Oppføringer i mailbox.log er en tekststreng som inneholder tidspunktet da hendelsen skjedde, nivået på hendelsen, trådnummeret der hendelsen skjedde, brukernavnet og IP-adressen, samt en tekstbeskrivelse av hendelsen .

Hvordan jobbe med Zimbra OSE-logger

Loggnivået indikerer graden av påvirkning av hendelsen på serverens drift. Som standard er det 4 hendelsesnivåer: INFO, WARN, ERROR og FATAL. La oss se på alle nivåer i økende rekkefølge etter alvorlighetsgrad.

  • INFO - Arrangementer på dette nivået er vanligvis ment å informere om fremdriften til Zimbra OSE. Meldinger på dette nivået inkluderer rapporter om opprettelse eller sletting av en postboks, og så videre.
  • ADVARSEL - hendelser på dette nivået informerer om situasjoner som er potensielt farlige, men som ikke påvirker driften av serveren. WARN-nivået markerer for eksempel en melding om et mislykket brukerpåloggingsforsøk.
  • FEIL - dette hendelsesnivået i loggen informerer om forekomsten av en feil som er av lokal natur og ikke forstyrrer driften av serveren. Dette nivået kan flagge en feil der en individuell brukers indeksdata har blitt ødelagt.
  • FATAL - dette nivået indikerer feil på grunn av at serveren ikke kan fortsette å fungere normalt. For eksempel vil FATAL-nivået være for en post som indikerer manglende evne til å koble til DBMS.

Loggfilen for e-postserveren oppdateres hver dag. Den siste versjonen av filen har alltid navnet Mailbox.log, mens logger for en bestemt dato har en dato i navnet og ligger i arkivet. For eksempel mailbox.log.2020-09-29.tar.gz. Dette gjør det mye enklere å sikkerhetskopiere aktivitetslogger og søke gjennom logger.

For enkelhets skyld for systemadministratoren inneholder mappen /opt/zimbra/log/ andre logger. De inkluderer bare oppføringer som er relatert til spesifikke Zimbra OSE-elementer. For eksempel inneholder audit.log bare poster om brukerautentisering, clamd.log inneholder data om driften av antiviruset, og så videre. Forresten, en utmerket metode for å beskytte en Zimbra OSE-server mot inntrengere er serverbeskyttelse ved hjelp av Fail2Ban, som bare fungerer basert på audit.log. Det er også en god praksis å legge til en cron-oppgave for å utføre kommandoen grep -ir "ugyldig passord" /opt/zimbra/log/audit.logfor å motta informasjon om daglig påloggingsfeil.

Hvordan jobbe med Zimbra OSE-logger
Et eksempel på hvordan audit.log viser et passord angitt to ganger feil og et vellykket påloggingsforsøk.

Logger i Zimbra OSE kan være svært nyttige for å identifisere årsakene til ulike kritiske feil. I det øyeblikket det oppstår en kritisk feil, har administratoren vanligvis ikke tid til å lese loggene. Det er nødvendig å gjenopprette serveren så snart som mulig. Men senere, når serveren er sikkerhetskopiert og genererer mange logger, kan det være vanskelig å finne den nødvendige oppføringen i en stor fil. For raskt å finne en feilpost, er det nok å vite tidspunktet da serveren ble startet på nytt og finne en oppføring i loggene fra dette tidspunktet. Den forrige oppføringen vil være en registrering av feilen som oppstod. Du kan også finne feilmeldingen ved å søke etter nøkkelordet FATAL.

Zimbra OSE-logger lar deg også identifisere ikke-kritiske feil. For å finne behandlerunntak kan du for eksempel søke etter behandlerunntak. Ofte er feil generert av behandlere ledsaget av en stabelsporing som forklarer hva som forårsaket unntaket. Ved feil med postlevering bør du starte søket med nøkkelordet LmtpServer, og for å søke etter feil relatert til POP- eller IMAP-protokollene kan du bruke nøkkelordene ImapServer og Pop3Server.

Logger kan også hjelpe når man undersøker hendelser med informasjonssikkerhet. La oss se på et spesifikt eksempel. 20. september sendte en av de ansatte et virusinfisert brev til en klient. Som et resultat ble dataene på klientens datamaskin kryptert. Den ansatte sverger imidlertid på at han ikke har sendt noe. Som en del av etterforskningen av hendelsen ber bedriftens sikkerhetstjeneste fra systemadministratoren om e-postserverloggene for 20. september knyttet til brukeren som blir undersøkt. Takket være tidsstemplet finner systemadministratoren den nødvendige loggfilen, trekker ut nødvendig informasjon og overfører den til sikkerhetsspesialister. De ser på sin side gjennom den og finner ut at IP-adressen som dette brevet ble sendt fra, tilsvarer IP-adressen til brukerens datamaskin. CCTV-opptak bekreftet at den ansatte var på arbeidsplassen sin da brevet ble sendt. Disse dataene var nok til å anklage ham for brudd på informasjonssikkerhetsregler og sparke ham. 

Hvordan jobbe med Zimbra OSE-logger
Et eksempel på å trekke ut poster om en av kontoene fra Mailbox.log-logg til en egen fil

Alt blir mye mer komplisert når det kommer til multi-server infrastruktur. Siden logger samles inn lokalt, er det svært upraktisk å jobbe med dem i en multi-server-infrastruktur, og derfor er det behov for å sentralisere innsamlingen av logger. Dette kan gjøres ved å sette opp en vert for å samle logger. Det er ikke noe spesielt behov for å legge til en dedikert vert til infrastrukturen. Enhver e-postserver kan fungere som en node for innsamling av logger. I vårt tilfelle vil dette være Mailstore01-noden.

På denne serveren må vi skrive inn kommandoene nedenfor:

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

Rediger /etc/sysconfig/rsyslog-filen, og sett SYSLOGD_OPTIONS=”-r -c 2″

Rediger /etc/rsyslog.conf og fjern kommentarer på følgende linjer:
$ModLoad imudp
$UDPServerRun 514

Angi følgende kommandoer:

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

Du kan sjekke at alt fungerer ved å bruke kommandoen zmprov gacf | grep zimbraLogHostname. Etter å ha utført kommandoen, skal navnet på verten som samler inn logger vises. For å endre det, må du skrive inn kommandoen zmprov mcf zimbraLogHostname mailstore01.company.ru.

På alle andre infrastrukturservere (LDAP, MTA og andre e-postbutikker), kjør kommandoen zmprov gacf |grep zimbraLogHostname for å se navnet på verten som loggene sendes til. For å endre det, kan du også skrive inn kommandoen zmprov mcf zimbraLogHostname mailstore01.company.ru

Du må også skrive inn følgende kommandoer på hver server:

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

Etter dette vil alle logger bli registrert på serveren du spesifiserte, hvor de enkelt kan sees. I Zimbra OSE-administratorkonsollen, på skjermen med informasjon om statusen til servere, vil den kjørende Logger-tjenesten også vises kun for mailstore01-serveren.

Hvordan jobbe med Zimbra OSE-logger

En annen hodepine for en administrator kan være å holde styr på en bestemt e-post. Siden e-poster i Zimbra OSE går gjennom flere forskjellige hendelser på en gang: skanning med antivirus, antispam og så videre, før de aksepteres eller sendes, for administratoren, hvis e-posten ikke kommer frem, kan det være ganske problematisk å spore på hvilket stadium det var tapt.

For å løse dette problemet kan du bruke et spesielt skript, som ble utviklet av informasjonssikkerhetsspesialist Viktor Dukhovy og anbefalt for bruk av Postfix-utviklere. Dette skriptet setter sammen oppføringer fra logger for en spesifikk prosess og lar deg på grunn av dette raskt vise alle oppføringer knyttet til sending av et bestemt brev basert på identifikatoren. Arbeidet har blitt testet på alle versjoner av Zimbra OSE, fra og med 8.7. Her er teksten til manuset.

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

Skriptet er skrevet i Perl og for å kjøre det må du lagre det i en fil collate.pl, gjør den kjørbar, og kjør deretter filen som spesifiserer loggfilen og bruk pgrep for å trekke ut identifikasjonsinformasjonen til bokstaven du leter etter collate.pl /var/log/zimbra.log | pgrep '[e-postbeskyttet]>'. Resultatet vil være en sekvensiell utgang av linjer som inneholder informasjon om bevegelsen til bokstaven på serveren.

# 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

For alle spørsmål relatert til Zextras Suite, kan du kontakte representanten for Zextras Ekaterina Triandafilidi på e-post [e-postbeskyttet]

Kilde: www.habr.com