Zimbra OSE لاگ سان ڪيئن ڪم ڪجي

سڀني واقعن جي لاگنگ ڪنهن به ڪارپوريٽ سسٽم جي سڀ کان اهم ڪمن مان هڪ آهي. لاگز توهان کي اڀرندڙ مسئلا حل ڪرڻ، معلوماتي سسٽم جي آپريشن جي آڊٽ ڪرڻ، ۽ معلومات جي حفاظت جي واقعن جي تحقيق ڪرڻ جي اجازت ڏين ٿا. Zimbra OSE ان جي آپريشن جا تفصيلي لاگ پڻ رکي ٿو. انهن ۾ سرور جي ڪارڪردگي کان وٺي صارفين پاران اي ميلون موڪلڻ ۽ وصول ڪرڻ تائين سڀني ڊيٽا شامل آهن. بهرحال، Zimbra OSE پاران ٺاهيل لاگ پڙهڻ هڪ بلڪه غير معمولي ڪم آهي. هن آرٽيڪل ۾، هڪ خاص مثال استعمال ڪندي، اسان توهان کي ٻڌائي سگهنداسين ته ڪيئن پڙهو زمبرا OSE لاگز، ۽ انهي سان گڏ انهن کي ڪيئن مرڪزي بڻائڻ.

Zimbra OSE لاگ سان ڪيئن ڪم ڪجي
Zimbra OSE سڀني مقامي لاگن کي /opt/zimbra/log فولڊر ۾ محفوظ ڪري ٿو، ۽ لاگ پڻ /var/log/zimbra.log فائل ۾ ڳولهي سگهجن ٿا. انهن مان سڀ کان اهم آهي mailbox.log. اهو سڀني عملن کي رڪارڊ ڪري ٿو جيڪو ميل سرور تي ٿئي ٿو. انهن ۾ شامل آهن اي ميلن جي منتقلي، صارف جي تصديق واري ڊيٽا، ناڪام لاگ ان ڪوششون، ۽ ٻيا. mailbox.log ۾ داخلون هڪ ٽيڪسٽ اسٽرنگ آهي جنهن ۾ اهو وقت شامل آهي جنهن وقت واقعو پيش آيو، واقعي جي سطح، موضوع جو نمبر جنهن ۾ واقعو پيش آيو، صارف جو نالو ۽ IP پتو، انهي سان گڏ واقعي جي متن جي وضاحت. .

Zimbra OSE لاگ سان ڪيئن ڪم ڪجي

لاگ ليول سرور جي آپريشن تي واقعي جي اثر جي درجي کي اشارو ڪري ٿو. ڊفالٽ طور 4 واقعا ليول آھن: ڄاڻ، خبردار، غلطي ۽ موت. اچو ته سڀني سطحن تي نظر رکون ٿا شدت جي ترتيب کي وڌائڻ ۾.

  • INFO - هن سطح تي واقعا عام طور تي Zimbra OSE جي ترقي بابت آگاهي ڏيڻ جو مقصد آهي. ھن سطح تي پيغامن ۾ ميل باڪس جي ٺاھڻ يا ختم ڪرڻ تي رپورٽون شامل آھن، وغيره.
  • خبردار - هن سطح جا واقعا انهن حالتن بابت ڄاڻ ڏين ٿا جيڪي ممڪن طور تي خطرناڪ آهن، پر سرور جي آپريشن کي متاثر نه ڪن. مثال طور، WARN سطح ھڪڙي پيغام کي نشانو بڻائيندو آھي ھڪڙي ناڪام صارف لاگ ان ڪوشش بابت.
  • ERROR - لاگ ۾ ھن واقعي جي سطح ھڪڙي غلطي جي واقعن جي باري ۾ ڄاڻ ڏئي ٿي جيڪا فطرت ۾ مقامي آھي ۽ سرور جي عمل ۾ مداخلت نه ڪندي. هي سطح هڪ غلطي کي پرچم ڪري سگهي ٿو جنهن ۾ هڪ فرد صارف جي انڊيڪس ڊيٽا خراب ٿي وئي آهي.
  • FATAL - هي سطح غلطين جي نشاندهي ڪري ٿو جنهن جي ڪري سرور عام طور تي هلائڻ جاري نٿو رکي. مثال طور، FATAL سطح هڪ رڪارڊ لاءِ هوندو جيڪو ظاهر ڪري ٿو DBMS سان ڳنڍڻ جي ناڪامي.

ميل سرور لاگ فائل هر روز اپڊيٽ ڪيو ويندو آهي. فائل جي تازي ورزن ۾ هميشه نالو هوندو آهي Mailbox.log، جڏهن ته ڪنهن خاص تاريخ لاءِ لاگز ۾ نالي ۾ تاريخ هوندي آهي ۽ آرڪائيو ۾ موجود هوندي آهي. مثال طور mailbox.log.2020-09-29.tar.gz. اهو ان کي تمام آسان بڻائي ٿو بيڪ اپ سرگرمي لاگز ۽ لاگز ذريعي ڳولا.

سسٽم ايڊمنسٽريٽر جي سهولت لاءِ، /opt/zimbra/log/ فولڊر ۾ ٻيا لاگ شامل آهن. انهن ۾ صرف اهي داخلائون شامل آهن جيڪي مخصوص Zimbra OSE عناصر سان تعلق رکن ٿيون. مثال طور، audit.log صرف صارف جي تصديق بابت رڪارڊ تي مشتمل آهي، clamd.log اينٽي وائرس جي آپريشن بابت ڊيٽا تي مشتمل آهي، وغيره. رستي جي ذريعي، زمبرا OSE سرور کي مداخلت ڪندڙن کان بچائڻ جو هڪ بهترين طريقو آهي سرور تحفظ Fail2Ban استعمال ڪندي، جيڪو صرف audit.log جي بنياد تي ڪم ڪري ٿو. اهو پڻ سٺو عمل آهي جيڪو ڪمانڊ تي عمل ڪرڻ لاءِ ڪرون ڪم شامل ڪرڻ لاءِ grep -ir "غلط پاسورڊ" /opt/zimbra/log/audit.logروزاني لاگ ان ناڪامي جي معلومات حاصل ڪرڻ لاء.

Zimbra OSE لاگ سان ڪيئن ڪم ڪجي
هڪ مثال ڪيئن audit.log ڏيکاري ٿو هڪ پاسورڊ ٻه ڀيرا غلط داخل ڪيو ويو ۽ هڪ ڪامياب لاگ ان ڪوشش.

Zimbra OSE ۾ لاگز مختلف نازڪ ناڪامين جي سببن جي نشاندهي ڪرڻ ۾ انتهائي ڪارائتو ٿي سگهن ٿا. هن وقت جڏهن هڪ نازڪ غلطي ٿئي ٿي، منتظم کي عام طور تي لاگ پڙهڻ لاء وقت نه آهي. اهو ضروري آهي ته سرور کي جلد کان جلد بحال ڪيو وڃي. جڏهن ته، بعد ۾، جڏهن سرور بيڪ اپ آهي ۽ تمام گهڻو لاگ ٺاهي رهيو آهي، اهو هڪ وڏي فائل ۾ گهربل داخلا ڳولڻ ڏکيو ٿي سگهي ٿو. غلطي جي رڪارڊ کي جلدي ڳولڻ لاء، اهو ڄاڻڻ ڪافي آهي ته سرور ٻيهر شروع ڪيو ويو ۽ هن وقت کان تاريخن جي لاگن ۾ هڪ داخلا ڳولهيو. پوئين داخل ٿيڻ واري غلطي جو رڪارڊ هوندو. توھان پڻ ڳولي سگھوٿا غلطي پيغام لفظ FATAL جي ڳولا ڪندي.

Zimbra OSE لاگز پڻ توهان کي غير نازڪ ناڪامين جي سڃاڻپ ڪرڻ جي اجازت ڏين ٿا. مثال طور، ھينڊلر استثنا ڳولڻ لاءِ، توھان ڳولي سگھوٿا ھينڊلر استثنا. گهڻو ڪري، هينڊلر پاران ٺاهيل غلطيون هڪ اسٽيڪ ٽريس سان گڏ آهن جيڪي وضاحت ڪري ٿو ته استثنا جو سبب ڇا آهي. ميل ترسيل ۾ غلطين جي صورت ۾، توھان کي پنھنجي ڳولا شروع ڪرڻ گھرجي LmtpServer لفظ سان، ۽ POP يا IMAP پروٽوڪول سان لاڳاپيل نقصن کي ڳولڻ لاءِ، توھان استعمال ڪري سگھو ٿا ImapServer ۽ Pop3Server لفظ.

لاگز پڻ مدد ڪري سگھن ٿيون جڏهن معلومات سيڪيورٽي واقعن جي تحقيق ڪندي. اچو ته هڪ خاص مثال ڏسو. 20 سيپٽمبر تي، ملازمن مان هڪ هڪ ڪلائنٽ ڏانهن وائرس سان متاثر ٿيل خط موڪليو. نتيجي طور، ڪلائنٽ جي ڪمپيوٽر تي ڊيٽا انڪوڊ ٿيل هئي. بهرحال، ملازم قسم کڻندو آهي ته هن ڪجهه به نه موڪليو. واقعي جي تحقيقات جي حصي جي طور تي، انٽرپرائز سيڪيورٽي سروس سسٽم ايڊمنسٽريٽر کان 20 سيپٽمبر تائين ميل سرور لاگز جي درخواست ڪري ٿو جيڪو صارف جي تحقيقات سان لاڳاپيل آهي. ٽائيم اسٽاپ جي مهرباني، سسٽم ايڊمنسٽريٽر ضروري لاگ فائل ڳولي ٿو، ضروري معلومات ڪڍي ٿو ۽ ان کي سيڪيورٽي ماهرن ڏانهن منتقل ڪري ٿو. اهي، موڙ ۾، ان جي ذريعي ڏسو ۽ ڳولهيو ته IP پتي جنهن تان هي خط موڪليو ويو هو صارف جي ڪمپيوٽر جي IP پتي سان ملندڙ جلندڙ آهي. سي سي ٽي وي فوٽيج تصديق ڪئي آهي ته جڏهن خط موڪليو ويو ته ملازم پنهنجي ڪم واري جاءِ تي هو. اها ڊيٽا ڪافي هئي ته هن کي معلومات جي حفاظت جي ضابطن جي ڀڃڪڙي جو الزام لڳايو ۽ کيس فائر ڪيو. 

Zimbra OSE لاگ سان ڪيئن ڪم ڪجي
Mailbox.log لاگ ان مان ڪنهن هڪ اڪائونٽ بابت رڪارڊ ڪڍڻ جو هڪ مثال الڳ فائل ۾

سڀ ڪجهه وڌيڪ پيچيده ٿي ويندو آهي جڏهن اهو اچي ٿو ملٽي سرور انفراسٽرڪچر. جيئن ته لاگز مقامي طور تي گڏ ڪيا ويا آهن، انهن سان گڏ هڪ ملٽي سرور انفراسٽرڪچر ۾ ڪم ڪرڻ تمام مشڪل آهي ۽ ان ڪري لاگز جي گڏ ڪرڻ کي مرڪزي ڪرڻ جي ضرورت آهي. اهو لاگس گڏ ڪرڻ لاءِ ميزبان کي ترتيب ڏيڻ سان ٿي سگهي ٿو. انفراسٹرڪچر لاءِ وقف ڪيل ميزبان شامل ڪرڻ جي ڪا خاص ضرورت ناهي. ڪو به ميل سرور لاگ گڏ ڪرڻ لاءِ نوڊ طور ڪم ڪري سگھي ٿو. اسان جي صورت ۾، هي ٿيندو Mailstore01 نوڊ.

هن سرور تي اسان کي هيٺين حڪمن ۾ داخل ڪرڻ جي ضرورت آهي:

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

تبديل ڪريو /etc/sysconfig/rsyslog فائل، ۽ سيٽ ڪريو SYSLOGD_OPTIONS="-r -c 2"

ايڊٽ ڪريو /etc/rsyslog.conf ۽ ھيٺين لائينن کي غير تبصرو ڪريو:
$ModLoad imudp
$UDPServerRun 514

ھيٺ ڏنل حڪم داخل ڪريو:

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 | grep zimbraLogHostname. حڪم تي عمل ڪرڻ کان پوء، ميزبان جو نالو جيڪو لاگ گڏ ڪري ٿو ڏيکاري وڃي. ان کي تبديل ڪرڻ لاء، توھان کي حڪم داخل ڪرڻ گھرجي zmprov mcf zimbraLogHostname mailstore01.company.ru.

ٻين سڀني انفراسٽرڪچر سرورز تي (LDAP، MTA ۽ ٻيا ميل اسٽور)، ڪمانڊ zmprov gacf |grep zimbraLogHostname کي ھلايو ھوسٽ جو نالو ڏسڻ لاءِ جنھن ڏانھن لاگ موڪليا ويا آھن. ان کي تبديل ڪرڻ لاء، توھان پڻ داخل ڪري سگھو ٿا حڪم zmprov mcf zimbraLogHostname mailstore01.company.ru

توهان کي هر سرور تي هيٺين حڪمن کي پڻ داخل ڪرڻ گهرجي:

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

ان کان پوء، سڀئي لاگز توهان جي بيان ڪيل سرور تي رڪارڊ ڪيا ويندا، جتي اهي آسانيء سان ڏسي سگهجن ٿيون. پڻ، Zimbra OSE ايڊمنسٽريٽر ڪنسول ۾، اسڪرين تي سرورز جي صورتحال بابت معلومات سان، هلندڙ Logger سروس صرف mailstore01 سرور لاءِ ڏيکاري ويندي.

Zimbra OSE لاگ سان ڪيئن ڪم ڪجي

ايڊمنسٽريٽر لاءِ هڪ ٻيو سر درد هڪ مخصوص اي ميل جو ٽريڪ رکي سگهي ٿو. جيئن ته Zimbra OSE ۾ اي ميلون هڪ ئي وقت ڪيترن ئي مختلف واقعن مان گذرن ٿيون: اينٽي وائرس، اينٽي اسپام وغيره ذريعي اسڪيننگ، قبول ٿيڻ يا موڪلڻ کان اڳ، ايڊمنسٽريٽر لاءِ، جيڪڏهن اي ميل نه پهچندي، ته ڪهڙي مرحلي تي ٽريڪ ڪرڻ ڪافي مشڪل ٿي سگهي ٿو. اهو گم ٿي ويو.

هن مسئلي کي حل ڪرڻ لاء، توهان هڪ خاص اسڪرپٽ استعمال ڪري سگهو ٿا، جيڪا معلومات سيڪيورٽي ماهر Viktor Dukhovny پاران تيار ڪئي وئي هئي ۽ پوسٽ فڪس ڊولپرز پاران استعمال لاء سفارش ڪئي وئي هئي. هي اسڪرپٽ هڪ مخصوص عمل لاءِ لاگن مان داخلائن کي ڳنڍي ٿو ۽، ان جي ڪري، توهان کي اجازت ڏئي ٿو ته جلدي جلدي سڀني داخلائن کي ظاهر ڪري جيڪو هڪ خاص خط موڪلڻ سان لاڳاپيل آهي ان جي سڃاڻپ ڪندڙ جي بنياد تي. ان جو ڪم Zimbra OSE جي سڀني ورزن تي آزمايو ويو آهي، 8.7 کان شروع ٿئي ٿو. هتي لکت جو متن آهي.

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

اسڪرپٽ پرل ۾ لکيل آهي ۽ ان کي هلائڻ لاءِ توهان کي ان کي فائل ۾ محفوظ ڪرڻو پوندو collate.pl، ان کي ايگزيڪيوٽيبل ٺاهيو، ۽ پوءِ فائل کي هلايو لاگ فائل جي وضاحت ڪندي ۽ pgrep استعمال ڪندي خط جي سڃاڻپ جي معلومات ڪڍڻ لاءِ جنهن کي توهان ڳولي رهيا آهيو. collate.pl /var/log/zimbra.log | pgrep'[ايميل محفوظ ٿيل]>’. نتيجو سرور تي خط جي حرڪت بابت معلومات تي مشتمل لائنن جو هڪ ترتيب وار آئوٽ ٿيندو.

# 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 سان لاڳاپيل سڀني سوالن لاء، توهان اي ميل ذريعي Zextras جي نمائندي Ekaterina Triandafilidi سان رابطو ڪري سگهو ٿا [ايميل محفوظ ٿيل]

جو ذريعو: www.habr.com