Zimbra OSE -lokien käyttäminen

Kaikkien tapahtumien kirjaaminen on yksi yrityksen tärkeimmistä toiminnoista. Lokien avulla voit ratkaista esiin nousevia ongelmia, auditoida tietojärjestelmien toimintaa sekä tutkia tietoturvahäiriöitä. Zimbra OSE pitää myös yksityiskohtaisia ​​lokeja toiminnastaan. Ne sisältävät kaikki tiedot palvelimen suorituskyvystä käyttäjien sähköpostien lähettämiseen ja vastaanottamiseen. Zimbra OSE:n luomien lokien lukeminen on kuitenkin melko ei-triviaali tehtävä. Tässä artikkelissa kerromme tietyn esimerkin avulla, kuinka lukea Zimbra OSE -lokeja ja miten ne keskitetään.

Zimbra OSE -lokien käyttäminen
Zimbra OSE tallentaa kaikki paikalliset lokit /opt/zimbra/log-kansioon, ja lokit löytyvät myös /var/log/zimbra.log-tiedostosta. Näistä tärkein on mailbox.log. Se tallentaa kaikki sähköpostipalvelimella tapahtuvat toimet. Näitä ovat sähköpostien lähettäminen, käyttäjän todennustiedot, epäonnistuneet kirjautumisyritykset ja muut. mailbox.login merkinnät ovat tekstijono, joka sisältää tapahtuman ajankohdan, tapahtuman tason, säikeen numeron, jossa tapahtuma tapahtui, käyttäjänimen ja IP-osoitteen sekä tapahtuman tekstikuvauksen .

Zimbra OSE -lokien käyttäminen

Lokitaso ilmaisee tapahtuman vaikutuksen asteen palvelimen toimintaan. Oletuksena on 4 tapahtumatasoa: INFO, WARN, ERROR ja FATAL. Tarkastellaan kaikkia tasoja kasvavassa vakavuusjärjestyksessä.

  • INFO - Tämän tason tapahtumien tarkoituksena on yleensä tiedottaa Zimbra OSE:n edistymisestä. Tämän tason viestit sisältävät raportteja postilaatikon luomisesta tai poistamisesta ja niin edelleen.
  • VAROITUS - tämän tason tapahtumat kertovat tilanteista, jotka ovat mahdollisesti vaarallisia, mutta eivät vaikuta palvelimen toimintaan. Esimerkiksi WARN-taso merkitsee viestin epäonnistuneesta käyttäjän kirjautumisyrityksestä.
  • VIRHE - tämä lokin tapahtumataso ilmoittaa virheestä, joka on luonteeltaan paikallinen ja ei häiritse palvelimen toimintaa. Tämä taso voi merkitä virheen, jossa yksittäisen käyttäjän hakemistotiedot ovat vioittuneet.
  • FATAL - tämä taso ilmaisee virheitä, joiden vuoksi palvelin ei voi jatkaa toimintaansa normaalisti. Esimerkiksi FATAL-taso on tietueelle, joka ilmaisee kyvyttömyyden muodostaa yhteyttä DBMS:ään.

Postipalvelimen lokitiedosto päivitetään päivittäin. Tiedoston uusimman version nimi on aina Mailbox.log, kun taas tietyn päivämäärän lokien nimessä on päivämäärä ja ne ovat arkistossa. Esimerkiksi mailbox.log.2020-09-29.tar.gz. Tämä helpottaa toimintalokien varmuuskopiointia ja hakuja lokeista.

Järjestelmänvalvojan helpottamiseksi /opt/zimbra/log/-kansio sisältää muita lokeja. Ne sisältävät vain merkintöjä, jotka liittyvät tiettyihin Zimbra OSE -elementteihin. Esimerkiksi audit.log sisältää vain tietueita käyttäjien todentamisesta, clamd.log sisältää tietoja virustorjunnan toiminnasta ja niin edelleen. Muuten, erinomainen tapa suojata Zimbra OSE -palvelinta tunkeilijoilta on palvelimen suojaus Fail2Banilla, joka toimii vain audit.login perusteella. On myös hyvä käytäntö lisätä cron-tehtävä komennon suorittamiseksi grep -ir "virheellinen salasana" /opt/zimbra/log/audit.logsaada päivittäisiä kirjautumisvirhetietoja.

Zimbra OSE -lokien käyttäminen
Esimerkki siitä, kuinka audit.log näyttää kaksi kertaa väärin kirjoitetun salasanan ja onnistuneen kirjautumisyrityksen.

Zimbra OSE:n lokit voivat olla erittäin hyödyllisiä erilaisten kriittisten vikojen syiden tunnistamisessa. Kriittisen virheen sattuessa pääkäyttäjällä ei yleensä ole aikaa lukea lokeja. Palvelin on palautettava mahdollisimman pian. Myöhemmin, kun palvelin on varmuuskopioitu ja tuottaa paljon lokeja, voi kuitenkin olla vaikea löytää tarvittavaa merkintää suuresta tiedostosta. Virhetietueen nopeaan löytämiseen riittää, kun tietää palvelimen uudelleenkäynnistysajankohdan ja löytää lokeista merkinnän tästä ajasta. Edellinen merkintä on tietue tapahtuneesta virheestä. Löydät virheilmoituksen myös etsimällä avainsanalla FATAL.

Zimbra OSE -lokien avulla voit myös tunnistaa ei-kriittiset viat. Voit esimerkiksi etsiä käsittelijän poikkeuksia hakemalla käsittelijän poikkeuksia. Usein käsittelijöiden luomiin virheisiin liittyy pinojäljitys, joka selittää poikkeuksen syyn. Jos postin toimituksessa ilmenee virheitä, aloita haku LmtpServer-avainsanalla ja POP- tai IMAP-protokolliin liittyvien virheiden etsimiseen voit käyttää avainsanoja ImapServer ja Pop3Server.

Lokit voivat auttaa myös tietoturvahäiriöiden tutkinnassa. Katsotaanpa konkreettista esimerkkiä. Syyskuun 20. päivänä yksi työntekijöistä lähetti viruksen saaneen kirjeen asiakkaalle. Tämän seurauksena asiakkaan tietokoneella olevat tiedot salattiin. Työntekijä kuitenkin vannoo, ettei hän lähettänyt mitään. Osana tapahtuman tutkintaa yrityksen tietoturvapalvelu pyytää järjestelmänvalvojalta tutkittavaan käyttäjään liittyvät sähköpostipalvelimen lokit 20. syyskuuta. Aikaleiman ansiosta järjestelmänvalvoja löytää tarvittavan lokitiedoston, poimii tarvittavat tiedot ja välittää ne tietoturvaasiantuntijoille. Ne puolestaan ​​​​selailevat sitä ja huomaavat, että IP-osoite, josta tämä kirje lähetettiin, vastaa käyttäjän tietokoneen IP-osoitetta. CCTV-materiaali vahvisti, että työntekijä oli työpaikallaan kirjeen lähetyshetkellä. Nämä tiedot riittivät syyttämään häntä tietoturvasääntöjen rikkomisesta ja erottamaan hänet. 

Zimbra OSE -lokien käyttäminen
Esimerkki yhtä tiliä koskevien tietueiden purkamisesta Mailbox.log-logista erilliseen tiedostoon

Kaikesta tulee paljon monimutkaisempaa, kun kyse on usean palvelimen infrastruktuurista. Koska lokit kerätään paikallisesti, niiden kanssa työskenteleminen monipalvelininfrastruktuurissa on erittäin hankalaa ja siksi lokien kerääminen on keskitettävä. Tämä voidaan tehdä asettamalla isäntä keräämään lokeja. Ei ole erityistä tarvetta lisätä omaa isäntäinfrastruktuuriin. Mikä tahansa sähköpostipalvelin voi toimia lokien keräämisen solmuna. Meidän tapauksessamme tämä on Mailstore01-solmu.

Tälle palvelimelle meidän on syötettävä alla olevat komennot:

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

Muokkaa /etc/sysconfig/rsyslog-tiedostoa ja aseta SYSLOGD_OPTIONS=”-r -c 2″

Muokkaa tiedostoa /etc/rsyslog.conf ja poista seuraavat rivit:
$ModLoad imudp
$UDPServerRun 514

Kirjoita seuraavat komennot:

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

Voit tarkistaa, että kaikki toimii komennolla zmprov gacf | grep zimbraLogHostname. Kun komento on suoritettu, lokeja keräävän isännän nimen pitäisi näkyä. Jos haluat muuttaa sitä, sinun on annettava komento zmprov mcf zimbraLogHostname mailstore01.company.ru.

Suorita kaikissa muissa infrastruktuuripalvelimissa (LDAP, MTA ja muissa postikaupoissa) komento zmprov gacf |grep zimbraLogHostname nähdäksesi sen isännän nimen, johon lokit lähetetään. Voit muuttaa sitä myös kirjoittamalla komennon zmprov mcf zimbraLogHostname mailstore01.company.ru

Sinun on myös annettava seuraavat komennot jokaiselle palvelimelle:

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

Tämän jälkeen kaikki lokit tallennetaan määrittämällesi palvelimelle, josta niitä voi kätevästi tarkastella. Lisäksi Zimbra OSE -järjestelmänvalvojakonsolin näytöllä, jossa on tietoja palvelimien tilasta, käynnissä oleva Logger-palvelu näytetään vain mailstore01-palvelimelle.

Zimbra OSE -lokien käyttäminen

Toinen päänsärky järjestelmänvalvojalle voi olla tietyn sähköpostin kirjaaminen. Koska sähköpostit Zimbra OSE:ssa käyvät läpi useita eri tapahtumia kerralla: virustentorjunta, roskapostin esto ja niin edelleen, ennen niiden hyväksymistä tai lähettämistä, järjestelmänvalvojalle, jos sähköposti ei tule perille, voi olla melko ongelmallista jäljittää missä vaiheessa se hävisi.

Tämän ongelman ratkaisemiseksi voit käyttää erityistä komentosarjaa, jonka on kehittänyt tietoturva-asiantuntija Viktor Dukhovny ja jota Postfix-kehittäjät suosittelevat. Tämä komentosarja ketjuttaa tietyn prosessin lokien merkinnät ja tämän ansiosta voit näyttää nopeasti kaikki tietyn kirjeen lähettämiseen liittyvät merkinnät sen tunnisteen perusteella. Sen toimintaa on testattu kaikissa Zimbra OSE:n versioissa 8.7 alkaen. Tässä on käsikirjoituksen 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";
}

Skripti on kirjoitettu Perlissä ja sen suorittamiseksi sinun on tallennettava se tiedostoon lajitella.pl, tee siitä suoritettava ja suorita sitten tiedosto, joka määrittää lokitiedoston ja pura etsimäsi kirjaimen tunnistetiedot pgrep-komennolla collate.pl /var/log/zimbra.log | pgrep '[sähköposti suojattu]> '. Tuloksena on peräkkäinen tulos riveistä, jotka sisältävät tietoa kirjaimen liikkeestä palvelimella.

# 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

Kaikissa Zextras Suiteen liittyvissä kysymyksissä voit ottaa yhteyttä Zextrasin edustajaan Ekaterina Triandafilidiin sähköpostitse [sähköposti suojattu]

Lähde: will.com