Zimbra OSE jurnallari bilan qanday ishlash kerak

Barcha sodir bo'layotgan voqealarni qayd qilish har qanday korporativ tizimning eng muhim funktsiyalaridan biridir. Jurnallar paydo bo'lgan muammolarni hal qilish, axborot tizimlarining ishlashini tekshirish, shuningdek, axborot xavfsizligi hodisalarini tekshirish imkonini beradi. Zimbra OSE ham o'z faoliyatining batafsil jurnallarini yuritadi. Ular server ishlashidan tortib foydalanuvchilar tomonidan elektron pochta xabarlarini yuborish va qabul qilishgacha bo'lgan barcha ma'lumotlarni o'z ichiga oladi. Biroq, Zimbra OSE tomonidan yaratilgan jurnallarni o'qish juda ahamiyatsiz vazifadir. Ushbu maqolada, aniq bir misoldan foydalanib, biz Zimbra OSE jurnallarini qanday o'qishni, shuningdek, ularni qanday markazlashtirilgan qilish kerakligini aytib beramiz.

Zimbra OSE jurnallari bilan qanday ishlash kerak
Zimbra OSE barcha mahalliy jurnallarni /opt/zimbra/log papkasida saqlaydi va jurnallarni /var/log/zimbra.log faylida ham topish mumkin. Ulardan eng muhimi mailbox.log. U pochta serverida sodir bo'lgan barcha harakatlarni qayd qiladi. Bularga elektron pochta xabarlarini uzatish, foydalanuvchi autentifikatsiya ma'lumotlari, tizimga kirishga muvaffaqiyatsiz urinishlar va boshqalar kiradi. Mailbox.log-dagi yozuvlar voqea sodir bo'lgan vaqtni, voqea darajasini, voqea sodir bo'lgan mavzu raqamini, foydalanuvchi nomi va IP-manzilni, shuningdek voqeaning matn tavsifini o'z ichiga olgan matn qatoridir. .

Zimbra OSE jurnallari bilan qanday ishlash kerak

Jurnal darajasi hodisaning server ishiga ta'sir qilish darajasini ko'rsatadi. Odatiy holatda 4 ta hodisa darajasi mavjud: INFO, WARN, ERROR va FATAL. Keling, barcha darajalarni ortib borayotgan jiddiylik tartibida ko'rib chiqaylik.

  • INFO - Ushbu darajadagi tadbirlar odatda Zimbra OSE taraqqiyoti haqida ma'lumot berishga mo'ljallangan. Ushbu darajadagi xabarlar pochta qutisini yaratish yoki o'chirish haqidagi hisobotlarni o'z ichiga oladi va hokazo.
  • OGOHLANTIRISH - bu darajadagi hodisalar potentsial xavfli bo'lgan, ammo serverning ishlashiga ta'sir qilmaydigan vaziyatlar haqida xabar beradi. Masalan, OGOHLANTIRISH darajasi foydalanuvchining tizimga kirishga urinishi muvaffaqiyatsizligi haqidagi xabarni bildiradi.
  • ERROR - jurnaldagi ushbu hodisa darajasi mahalliy xarakterga ega bo'lgan va serverning ishlashiga xalaqit bermaydigan xatoning paydo bo'lishi haqida xabar beradi. Bu daraja individual foydalanuvchining indeks ma'lumotlari buzilganligi sababli xatolikni belgilashi mumkin.
  • FATAL - bu daraja server normal ishlashini davom ettira olmaydigan xatolarni ko'rsatadi. Masalan, FATAL darajasi ma'lumotlar bazasiga ulanish imkonsizligini ko'rsatadigan yozuv uchun bo'ladi.

Pochta serveri jurnali fayli har kuni yangilanadi. Faylning so'nggi versiyasi har doim Mailbox.log nomiga ega, ma'lum bir sana uchun jurnallar esa nomda sanaga ega va arxivda saqlanadi. Masalan, mailbox.log.2020-09-29.tar.gz. Bu faoliyat jurnallarining zaxira nusxasini yaratish va jurnallar orqali qidirishni ancha osonlashtiradi.

Tizim administratoriga qulaylik yaratish uchun /opt/zimbra/log/ jildida boshqa jurnallar mavjud. Ular faqat ma'lum Zimbra OSE elementlariga tegishli yozuvlarni o'z ichiga oladi. Misol uchun, audit.log faqat foydalanuvchi autentifikatsiyasi haqidagi yozuvlarni o'z ichiga oladi, clamd.log antivirusning ishlashi haqidagi ma'lumotlarni o'z ichiga oladi va hokazo. Aytgancha, Zimbra OSE serverini buzg'unchilardan himoya qilishning ajoyib usuli Fail2Ban yordamida serverni himoya qilish, bu faqat audit.log asosida ishlaydi. Buyruqni bajarish uchun cron vazifasini qo'shish ham yaxshi amaliyotdir grep -ir "yaroqsiz parol" /opt/zimbra/log/audit.logkundalik kirish xatosi haqida ma'lumot olish uchun.

Zimbra OSE jurnallari bilan qanday ishlash kerak
Audi.log ikki marta noto'g'ri kiritilgan parolni va muvaffaqiyatli kirish urinishini ko'rsatishiga misol.

Zimbra OSE-dagi jurnallar turli muhim nosozliklar sabablarini aniqlashda juda foydali bo'lishi mumkin. Muhim xatolik yuz berganda, administrator odatda jurnallarni o'qishga vaqt topa olmaydi. Serverni imkon qadar tezroq tiklash talab qilinadi. Biroq, keyinroq, server zaxiralangan va ko'plab jurnallarni yaratganda, katta faylda kerakli yozuvni topish qiyin bo'lishi mumkin. Xato yozuvini tezda topish uchun server qayta ishga tushirilgan vaqtni bilish va shu vaqtdan boshlab jurnallarda yozuvni topish kifoya. Oldingi yozuv sodir bo'lgan xatoning yozuvi bo'ladi. Xato xabarini FATAL kalit so'zini qidirish orqali ham topishingiz mumkin.

Zimbra OSE jurnallari, shuningdek, muhim bo'lmagan nosozliklarni aniqlash imkonini beradi. Misol uchun, ishlov beruvchi istisnolarini topish uchun ishlov beruvchi istisnosini qidirishingiz mumkin. Ko'pincha ishlov beruvchilar tomonidan yaratilgan xatolar istisnoga nima sabab bo'lganligini tushuntiruvchi stek izi bilan birga keladi. Pochtani yetkazib berishda xatolik yuzaga kelsa, qidiruvni LmtpServer kalit so'zidan boshlash kerak, POP yoki IMAP protokollari bilan bog'liq xatolarni qidirish uchun ImapServer va Pop3Server kalit so'zlaridan foydalanishingiz mumkin.

Jurnallar axborot xavfsizligi hodisalarini tekshirishda ham yordam berishi mumkin. Keling, aniq bir misolni ko'rib chiqaylik. 20 sentabr kuni xodimlardan biri mijozga virus yuqtirgan xat yubordi. Natijada, mijozning kompyuteridagi ma'lumotlar shifrlangan. Biroq, xodim hech narsa yubormaganiga qasam ichadi. Voqea yuzasidan tekshiruv doirasida korxona xavfsizlik xizmati tizim administratoridan tekshirilayotgan foydalanuvchi bilan bog‘liq 20-sentabr uchun pochta serveri jurnallarini so‘raydi. Vaqt tamg'asi tufayli tizim ma'muri kerakli jurnal faylini topadi, kerakli ma'lumotlarni chiqaradi va xavfsizlik bo'yicha mutaxassislarga o'tkazadi. Ular, o'z navbatida, uni ko'rib chiqishadi va ushbu xat yuborilgan IP-manzil foydalanuvchi kompyuterining IP-manziliga mos kelishini aniqlaydilar. Videokuzatuv kameralari yozuvlari xat yuborilganda xodim o‘z ish joyida bo‘lganini tasdiqladi. Bu ma'lumotlar uni axborot xavfsizligi qoidalarini buzganlikda ayblash va ishdan bo'shatish uchun etarli edi. 

Zimbra OSE jurnallari bilan qanday ishlash kerak
Mailbox.log jurnalidan alohida faylga hisoblardan biri haqidagi yozuvlarni chiqarish misoli

Ko'p serverli infratuzilma haqida gap ketganda, hamma narsa ancha murakkablashadi. Jurnallar mahalliy ravishda yig'ilganligi sababli, ular bilan ko'p serverli infratuzilmada ishlash juda noqulay va shuning uchun jurnallar to'plamini markazlashtirish zarurati tug'iladi. Bu jurnallarni yig'ish uchun xostni o'rnatish orqali amalga oshirilishi mumkin. Infratuzilmaga maxsus xost qo'shishga alohida ehtiyoj yo'q. Har qanday pochta serveri jurnallarni yig'ish uchun tugun vazifasini bajarishi mumkin. Bizning holatda, bu Mailstore01 tugun bo'ladi.

Ushbu serverda biz quyidagi buyruqlarni kiritishimiz kerak:

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

/etc/sysconfig/rsyslog faylini tahrirlang va SYSLOGD_OPTIONS=”-r -c 2″ ni o‘rnating.

/etc/rsyslog.conf ni tahrirlang va quyidagi qatorlarni izohdan olib tashlang:
$ModLoad imudp
$UDPServerRun 514

Quyidagi buyruqlarni kiriting:

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

Siz zmprov gacf | buyrug'i yordamida hamma narsa ishlayotganligini tekshirishingiz mumkin grep zimbraLogHostname. Buyruqni bajargandan so'ng, jurnallarni to'playdigan xost nomi ko'rsatilishi kerak. Uni o'zgartirish uchun siz zmprov mcf zimbraLogHostname mailstore01.company.ru buyrug'ini kiritishingiz kerak.

Boshqa barcha infratuzilma serverlarida (LDAP, MTA va boshqa pochta do'konlari) jurnallar yuboriladigan xost nomini ko'rish uchun zmprov gacf |grep zimbraLogHostname buyrug'ini bajaring. Uni o'zgartirish uchun siz zmprov mcf zimbraLogHostname mailstore01.company.ru buyrug'ini ham kiritishingiz mumkin.

Bundan tashqari, har bir serverda quyidagi buyruqlarni kiritishingiz kerak:

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

Shundan so'ng, barcha jurnallar siz ko'rsatgan serverga yozib olinadi, u erda ularni qulay ko'rish mumkin. Shuningdek, Zimbra OSE administrator konsolida, serverlar holati haqidagi ma'lumotlarga ega ekranda ishlaydigan Logger xizmati faqat mailstore01 serveri uchun ko'rsatiladi.

Zimbra OSE jurnallari bilan qanday ishlash kerak

Administrator uchun yana bir bosh og'rig'i ma'lum bir elektron pochta xabarini kuzatish bo'lishi mumkin. Zimbra OSE-da elektron pochta xabarlari bir vaqtning o'zida bir nechta turli hodisalardan o'tadi: qabul qilish yoki yuborishdan oldin administrator uchun antivirus, antispam va hokazolar orqali skanerlash, agar xat kelmasa, qaysi bosqichda kuzatilishi juda muammoli bo'lishi mumkin. yo'qolgan edi.

Ushbu muammoni hal qilish uchun siz axborot xavfsizligi bo'yicha mutaxassis Viktor Duxovniy tomonidan ishlab chiqilgan va Postfix dasturchilari tomonidan foydalanish uchun tavsiya etilgan maxsus skriptdan foydalanishingiz mumkin. Ushbu skript ma'lum bir jarayon uchun jurnallardagi yozuvlarni birlashtiradi va shu sababli, uning identifikatori asosida ma'lum bir harfni yuborish bilan bog'liq barcha yozuvlarni tezda ko'rsatishga imkon beradi. Uning ishi Zimbra OSE ning 8.7 dan boshlab barcha versiyalarida sinovdan o'tkazildi. Mana skript matni.

#! /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 da yozilgan va uni ishga tushirish uchun uni faylga saqlash kerak collate.pl, uni bajariladigan qilib qo'ying va keyin jurnal faylini ko'rsatuvchi faylni ishga tushiring va siz izlayotgan harfning identifikatsiya ma'lumotlarini olish uchun pgrep dan foydalaning. collate.pl /var/log/zimbra.log | pgrep '[elektron pochta bilan himoyalangan]> '. Natijada, xatning serverdagi harakati haqidagi ma'lumotlarni o'z ichiga olgan qatorlarning ketma-ket chiqishi bo'ladi.

# 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 bilan bog'liq barcha savollar uchun siz Zekstras vakili Yekaterina Triandafilidi bilan elektron pochta orqali bog'lanishingiz mumkin. [elektron pochta bilan himoyalangan]

Manba: www.habr.com