Zimbra OSE qeydləri ilə necə işləmək olar

Bütün baş verən hadisələrin qeydiyyatı istənilən korporativ sistemin ən vacib funksiyalarından biridir. Qeydlər yaranan problemləri həll etməyə, informasiya sistemlərinin işini yoxlamağa, həmçinin informasiya təhlükəsizliyi ilə bağlı insidentləri araşdırmağa imkan verir. Zimbra OSE həmçinin öz işinin ətraflı qeydlərini aparır. Onlara server performansından tutmuş istifadəçilər tərəfindən e-poçtların göndərilməsinə və qəbuluna qədər bütün məlumatlar daxildir. Bununla belə, Zimbra OSE tərəfindən yaradılan qeydləri oxumaq olduqca əhəmiyyətsiz bir işdir. Bu yazıda, konkret bir nümunədən istifadə edərək, Zimbra OSE jurnallarını necə oxumağı, eləcə də onları mərkəzləşdirməyi necə izah edəcəyik.

Zimbra OSE qeydləri ilə necə işləmək olar
Bütün yerli Zimbra OSE qeydləri /opt/zimbra/log qovluğunda saxlanılır və qeydlər də /var/log/zimbra.log faylında tapıla bilər. Bunlardan ən vacibi mailbox.logdur. O, poçt serverində baş verən bütün hərəkətləri qeyd edir. Onların arasında məktubların ötürülməsi, istifadəçi autentifikasiyası məlumatları, uğursuz giriş cəhdləri və s. Mailbox.log-dakı qeydlər hadisənin baş verdiyi vaxtı, hadisənin səviyyəsini, hadisənin baş verdiyi axının nömrəsini, istifadəçi adı və onun ip-ünvanını və mətn təsvirini ehtiva edən mətn sətridir. hadisə.

Zimbra OSE qeydləri ilə necə işləmək olar

Jurnal səviyyəsi hadisənin serverin işinə təsir dərəcəsini göstərir. Varsayılan olaraq, 4 hadisə səviyyəsindən istifadə olunur: INFO, WARN, ERROR və FATAL. Bütün səviyyələri onların şiddətinin artan sırası ilə təhlil edək.

  • INFO - bu səviyyədəki hadisələr adətən Zimbra OSE-nin inkişafı haqqında məlumat vermək üçün nəzərdə tutulub. Bu səviyyəli mesajlar arasında poçt qutusunun yaradılması və ya silinməsi haqqında hesabatlar və s.
  • XƏBƏRDARLIQ - bu səviyyəli hadisələr potensial təhlükəli olan, lakin serverin işinə təsir etməyən vəziyyətlər haqqında məlumat verir. XƏBƏRDARLIQ səviyyəsi, məsələn, uğursuz istifadəçi giriş cəhdi haqqında mesajı qeyd edir.
  • XƏTƏ - jurnaldakı bu hadisə səviyyəsi yerli xarakter daşıyan və serverin işinə mane olmayan xətanın baş verməsi haqqında məlumat verir. Bu səviyyə fərdi istifadəçinin indeks məlumatlarının pozulduğu xətanı qeyd edə bilər.
  • FATAL - Serverin normal fəaliyyətini davam etdirməsinə mane olan xətalar bu səviyyə ilə qeyd olunur. Məsələn, FATAL səviyyəsi DBMS-ə qoşula bilməmək haqqında qeyddə olacaq.

Poçt serverinin jurnal faylı hər gün yenilənir. Faylın ən son versiyası həmişə Mailbox.log adlanır, müəyyən bir tarix üçün qeydlərin başlığında bir tarix var və arxivdə saxlanılır. Məsələn, mailbox.log.2020-09-29.tar.gz. Bu, fəaliyyət qeydlərinin ehtiyat nüsxəsini çıxarmağı və qeydlər vasitəsilə axtarışı xeyli asanlaşdırır.

Sistem administratorunun rahatlığı üçün /opt/zimbra/log/ qovluğunda başqa qeydlər var. Onlara yalnız xüsusi Zimbra OSE elementlərinə aid olan qeydlər daxildir. Məsələn, audit.log yalnız istifadəçi autentifikasiyası haqqında qeydləri, clamd.log antivirus əməliyyatı haqqında məlumatları və s. Yeri gəlmişkən, Zimbra OSE serverini təcavüzkarlardan qorumaq üçün əla üsuldur Fail2Ban ilə server qorunması, yalnız audit.log əsasında işləyir. Komandanı yerinə yetirmək üçün cron tapşırığı əlavə etmək də yaxşı təcrübədir grep -ir "etibarsız parol" /opt/zimbra/log/audit.loguğursuz giriş cəhdləri haqqında gündəlik məlumat almaq.

Zimbra OSE qeydləri ilə necə işləmək olar
Audit.log-un ikiqat etibarsız parolu və uğurlu giriş cəhdini göstərməsinə nümunə

Zimbra OSE-dəki qeydlər müxtəlif kritik uğursuzluqların səbəblərini tapmaqda son dərəcə faydalı ola bilər. Kritik bir səhv baş verdiyi anda, administratorun adətən qeydləri oxumağa vaxtı yoxdur. Server mümkün qədər tez bərpa edilməlidir. Lakin, daha sonra, server ehtiyat nüsxəsini çıxardıqda və çoxlu qeydlər yaratdıqda, böyük bir faylda düzgün girişi tapmaq çətin ola bilər. Səhv girişini tez tapmaq üçün serverin yenidən işə salındığı vaxtı bilmək və bu vaxta aid qeydlərdə bir giriş tapmaq kifayətdir. Əvvəlki qeyd səhv qeydi olacaq. Siz həmçinin FATAL açar sözünü axtararaq səhv mesajını tapa bilərsiniz.

Həmçinin, Zimbra OSE qeydləri kritik olmayan nasazlıqları aşkar etməyə imkan verir. Məsələn, işləyici istisnalarını tapmaq üçün siz ifadə işləyicisi istisnasını axtara bilərsiniz. Çox vaxt işləyicilər tərəfindən yaradılan səhvlər istisnanın baş verməsinin səbəbini izah edən yığın izi ilə müşayiət olunur. Poçtun çatdırılmasında səhvlər baş verdikdə, siz axtarışa LmtpServer açar sözü ilə başlamalı və POP və ya IMAP protokolları ilə bağlı səhvləri axtarmaq üçün ImapServer və Pop3Server açar sözlərindən istifadə edə bilərsiniz.

Qeydlər həmçinin informasiya təhlükəsizliyi insidentlərinin araşdırılmasında kömək edə bilər. Konkret bir nümunəyə nəzər salaq. Sentyabrın 20-də işçilərdən biri müştəriyə virusa yoluxmuş məktub göndərib. Nəticədə müştərinin kompüterindəki məlumatlar şifrələnib. Lakin işçi and içir ki, heç nə göndərməyib. İnsidentin araşdırılması çərçivəsində müəssisənin təhlükəsizlik xidməti sistem administratorundan araşdırılan istifadəçi ilə əlaqəli sentyabrın 20-nə olan poçt serverinin qeydlərini tələb edir. Zaman möhürü sayəsində sistem administratoru düzgün log faylını tapır, lazımi məlumatları çıxarır və mühafizəçilərə ötürür. Onlar da öz növbəsində ona baxır və tapırlar ki, bu məktubun göndərildiyi IP ünvanı istifadəçinin kompüterinin IP ünvanına uyğun gəlir. CCTV görüntüləri məktubun göndərildiyi zaman işçinin iş yerində olduğunu təsdiqləyib. Bu məlumatlar onu informasiya təhlükəsizliyi qaydalarını pozmaqda ittiham etmək və işdən çıxarmaq üçün kifayət edirdi. 

Zimbra OSE qeydləri ilə necə işləmək olar
Mailbox.log jurnalından hesablardan biri haqqında qeydlərin ayrıca fayla çıxarılması nümunəsi

Çox server infrastrukturuna gəldikdə işlər daha da mürəkkəbləşir. Jurnallar yerli olaraq toplandığı üçün onlarla multiserverli infrastrukturda işləmək çox əlverişsizdir və buna görə də jurnalların toplanmasının mərkəzləşdirilməsi zəruri olur. Bunu qeydləri toplamaq üçün host quraraq edə bilərsiniz. İnfrastruktura xüsusi host əlavə etməyə xüsusi ehtiyac yoxdur. İstənilən poçt serveri qeydlərin toplanması üçün host kimi çıxış edə bilər. Bizim vəziyyətimizdə bu Mailstore01 qovşağı olacaq.

Bu serverdə aşağıdakı əmrləri daxil etməliyik:

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

/etc/sysconfig/rsyslog faylını redaktə edin və SYSLOGD_OPTIONS="-r -c 2" seçimini təyin edin

/etc/rsyslog.conf-u redaktə edin və aşağıdakı sətirləri şərhdən çıxarın:
$ModLoad imudp
$UDPServerRun 514

Aşağıdakı əmrləri daxil edin:

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

Zmprov gacf | istifadə edərək hər şeyin işlədiyini yoxlaya bilərsiniz grep zimbraLogHostname. Əmri yerinə yetirdikdən sonra qeydləri toplayan hostun adı göstərilməlidir. Onu dəyişdirmək üçün zmprov mcf zimbraLogHostname mailstore01.company.ru əmrini daxil etməlisiniz.

Bütün digər infrastruktur serverlərində (LDAP, MTA və digər poçt anbarları) logların getdiyi hostun adını görmək üçün zmprov gacf |grep zimbraLogHostname əmrini işlədin. Onu dəyişdirmək üçün zmprov mcf zimbraLogHostname mailstore01.company.ru əmrini də daxil edə bilərsiniz.

Həmçinin, hər bir serverdə aşağıdakı əmrləri daxil etməlisiniz:

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

Bundan sonra, bütün qeydlər qeyd etdiyiniz serverdə qeyd olunacaq və onlara rahat baxmaq mümkün olacaq. Həmçinin Zimbra OSE admin konsolunda serverlərin statusu haqqında məlumat olan ekranda işləyən Logger xidməti yalnız mailstore01 serverində göstəriləcək.

Zimbra OSE qeydləri ilə necə işləmək olar

Müəyyən bir e-poçt mesajını izləmək bir idarəçi üçün başqa bir başağrısı ola bilər. Zimbra OSE-də e-poçtlar bir anda bir neçə fərqli hadisədən keçdiyi üçün: qəbul edilməzdən və ya göndərilməzdən əvvəl administrator üçün antivirus, antispam və s. vasitəsilə yoxlanılması, əgər e-poçt çatmazsa, hansı mərhələdə olduğunu izləmək olduqca problemli ola bilər. itdi.

Bu problemi həll etmək üçün informasiya təhlükəsizliyi üzrə mütəxəssis Viktor Duxovnı tərəfindən hazırlanmış və Postfix tərtibatçıları tərəfindən istifadə üçün tövsiyə olunan xüsusi skriptdən istifadə edə bilərsiniz. Bu skript xüsusi bir proses üçün qeydlərdən qeydləri birləşdirir və buna görə, müəyyən bir məktubun identifikatoru əsasında göndərilməsi ilə bağlı bütün qeydləri tez bir zamanda göstərməyə imkan verir. Onun işi 8.7-dən başlayaraq Zimbra OSE-nin bütün versiyalarında sınaqdan keçirilmişdir. Budur ssenarinin mətni.

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

Skript Perl-də yazılmışdır və onu işə salmaq üçün onu faylda saxlamaq lazımdır collate.pl, onu icra edilə bilən hala gətirin, sonra log faylını göstərən faylı işə salın və axtardığınız e-poçtun identifikasiya məlumatını çıxarmaq üçün pgrep istifadə edin. collate.pl /var/log/zimbra.log | pgrep'[e-poçt qorunur]> '. Nəticə, məktubun serverdə hərəkəti haqqında məlumatları ehtiva edən sətirlərin ardıcıl çıxışı olacaqdır.

# 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

Zextras Suite ilə bağlı bütün suallar üçün siz Zextras nümayəndəsi Ekaterina Triandafilidi ilə e-poçt vasitəsilə əlaqə saxlaya bilərsiniz. [e-poçt qorunur]

Mənbə: www.habr.com