การบันทึกเหตุการณ์ที่เกิดขึ้นทั้งหมดถือเป็นหน้าที่ที่สำคัญที่สุดอย่างหนึ่งของระบบองค์กร บันทึกช่วยให้คุณสามารถแก้ไขปัญหาที่เกิดขึ้น ตรวจสอบการทำงานของระบบข้อมูล และตรวจสอบเหตุการณ์ด้านความปลอดภัยของข้อมูลได้ Zimbra OSE ยังเก็บบันทึกการทำงานโดยละเอียดอีกด้วย ประกอบด้วยข้อมูลทั้งหมดตั้งแต่ประสิทธิภาพของเซิร์ฟเวอร์ไปจนถึงการส่งและรับอีเมลจากผู้ใช้ อย่างไรก็ตาม การอ่านบันทึกที่สร้างโดย Zimbra OSE ถือเป็นงานที่ค่อนข้างไม่สำคัญ ในบทความนี้ เราจะบอกวิธีอ่านบันทึก Zimbra OSE รวมถึงวิธีทำให้รวมศูนย์โดยใช้ตัวอย่างเฉพาะนี้
Zimbra OSE จัดเก็บบันทึกในเครื่องทั้งหมดไว้ในโฟลเดอร์ /opt/zimbra/log และยังสามารถพบบันทึกได้ในไฟล์ /var/log/zimbra.log สิ่งที่สำคัญที่สุดคือ mailbox.log มันบันทึกการกระทำทั้งหมดที่เกิดขึ้นบนเมลเซิร์ฟเวอร์ ซึ่งรวมถึงการส่งอีเมล ข้อมูลการตรวจสอบผู้ใช้ การพยายามเข้าสู่ระบบที่ล้มเหลว และอื่นๆ รายการใน mailbox.log คือสตริงข้อความที่ประกอบด้วยเวลาที่เหตุการณ์เกิดขึ้น ระดับของเหตุการณ์ หมายเลขเธรดที่เกิดเหตุการณ์ ชื่อผู้ใช้และที่อยู่ IP ตลอดจนคำอธิบายข้อความของเหตุการณ์ .
ระดับบันทึกระบุระดับอิทธิพลของเหตุการณ์ต่อการทำงานของเซิร์ฟเวอร์ ตามค่าเริ่มต้น เหตุการณ์จะมี 4 ระดับ ได้แก่ INFO, WARN, ERROR และ FATAL ลองดูทุกระดับตามลำดับความรุนแรงที่เพิ่มขึ้น
- ข้อมูล - กิจกรรมในระดับนี้มักจะมีจุดมุ่งหมายเพื่อแจ้งเกี่ยวกับความคืบหน้าของ Zimbra OSE ข้อความในระดับนี้รวมถึงรายงานเกี่ยวกับการสร้างหรือการลบเมลบ็อกซ์ และอื่นๆ
- คำเตือน - เหตุการณ์ในระดับนี้จะแจ้งเกี่ยวกับสถานการณ์ที่อาจเป็นอันตราย แต่ไม่ส่งผลกระทบต่อการทำงานของเซิร์ฟเวอร์ ตัวอย่างเช่น ระดับคำเตือนจะทำเครื่องหมายข้อความเกี่ยวกับการพยายามเข้าสู่ระบบของผู้ใช้ที่ล้มเหลว
- ข้อผิดพลาด - ระดับเหตุการณ์นี้ในบันทึกจะแจ้งเกี่ยวกับการเกิดข้อผิดพลาดที่เกิดขึ้นในเครื่องและไม่รบกวนการทำงานของเซิร์ฟเวอร์ ระดับนี้สามารถตั้งค่าสถานะข้อผิดพลาดที่ข้อมูลดัชนีของผู้ใช้แต่ละรายเสียหาย
- FATAL - ระดับนี้บ่งบอกถึงข้อผิดพลาดเนื่องจากเซิร์ฟเวอร์ไม่สามารถทำงานได้ตามปกติ ตัวอย่างเช่น ระดับ FATAL จะเป็นระดับสำหรับบันทึกที่ระบุว่าไม่สามารถเชื่อมต่อกับ DBMS ได้
ไฟล์บันทึกเซิร์ฟเวอร์เมลได้รับการอัปเดตทุกวัน ไฟล์เวอร์ชันล่าสุดจะมีชื่อ Mailbox.log เสมอ ในขณะที่บันทึกสำหรับวันที่ที่กำหนดจะมีวันที่ในชื่อและอยู่ในไฟล์เก็บถาวร เช่น mailbox.log.2020-09-29.tar.gz ทำให้การสำรองบันทึกกิจกรรมและการค้นหาผ่านบันทึกทำได้ง่ายขึ้นมาก
เพื่อความสะดวกของผู้ดูแลระบบ โฟลเดอร์ /opt/zimbra/log/ มีบันทึกอื่นๆ รวมเฉพาะรายการที่เกี่ยวข้องกับองค์ประกอบ Zimbra OSE เฉพาะเท่านั้น ตัวอย่างเช่น audit.log มีเฉพาะบันทึกเกี่ยวกับการตรวจสอบสิทธิ์ผู้ใช้ clamd.log มีข้อมูลเกี่ยวกับการทำงานของโปรแกรมป้องกันไวรัส และอื่นๆ อย่างไรก็ตาม วิธีการที่ดีเยี่ยมในการปกป้องเซิร์ฟเวอร์ Zimbra OSE จากผู้บุกรุกก็คือ
ตัวอย่างวิธีที่ audit.log แสดงรหัสผ่านที่ป้อนไม่ถูกต้องสองครั้งและการพยายามเข้าสู่ระบบสำเร็จ
บันทึกใน Zimbra OSE มีประโยชน์อย่างยิ่งในการระบุสาเหตุของความล้มเหลวร้ายแรงต่างๆ ในขณะที่เกิดข้อผิดพลาดร้ายแรง ผู้ดูแลระบบมักจะไม่มีเวลาอ่านบันทึก จำเป็นต้องกู้คืนเซิร์ฟเวอร์โดยเร็วที่สุด อย่างไรก็ตาม ในภายหลัง เมื่อเซิร์ฟเวอร์สำรองข้อมูลและสร้างบันทึกจำนวนมาก การค้นหารายการที่ต้องการในไฟล์ขนาดใหญ่อาจเป็นเรื่องยาก หากต้องการค้นหาบันทึกข้อผิดพลาดอย่างรวดเร็ว ก็เพียงพอที่จะทราบเวลาที่เซิร์ฟเวอร์รีสตาร์ทและค้นหารายการในบันทึกที่นับจากเวลานี้ รายการก่อนหน้าจะเป็นบันทึกข้อผิดพลาดที่เกิดขึ้น คุณยังสามารถค้นหาข้อความแสดงข้อผิดพลาดได้โดยค้นหาคำสำคัญ FATAL
บันทึกของ Zimbra OSE ยังช่วยให้คุณสามารถระบุความล้มเหลวที่ไม่สำคัญได้ ตัวอย่างเช่น หากต้องการค้นหาข้อยกเว้นของตัวจัดการ คุณสามารถค้นหาข้อยกเว้นของตัวจัดการได้ บ่อยครั้ง ข้อผิดพลาดที่สร้างโดยตัวจัดการจะมาพร้อมกับการติดตามสแต็กที่อธิบายสาเหตุที่ทำให้เกิดข้อยกเว้น ในกรณีที่เกิดข้อผิดพลาดในการส่งอีเมล คุณควรเริ่มการค้นหาด้วยคีย์เวิร์ด LmtpServer และหากต้องการค้นหาข้อผิดพลาดที่เกี่ยวข้องกับโปรโตคอล POP หรือ IMAP คุณสามารถใช้คีย์เวิร์ด ImapServer และ Pop3Server
บันทึกยังสามารถช่วยได้เมื่อตรวจสอบเหตุการณ์ด้านความปลอดภัยของข้อมูล ลองดูตัวอย่างที่เฉพาะเจาะจง เมื่อวันที่ 20 กันยายน พนักงานคนหนึ่งได้ส่งจดหมายติดไวรัสถึงลูกค้า เป็นผลให้ข้อมูลบนคอมพิวเตอร์ไคลเอนต์ถูกเข้ารหัส อย่างไรก็ตามพนักงานสาบานว่าไม่ได้ส่งอะไรเลย ส่วนหนึ่งของการสืบสวนเหตุการณ์ดังกล่าว บริการรักษาความปลอดภัยขององค์กรขอบันทึกเซิร์ฟเวอร์เมลจากผู้ดูแลระบบสำหรับวันที่ 20 กันยายนที่เกี่ยวข้องกับผู้ใช้ที่ถูกสอบสวน ด้วยการประทับเวลา ผู้ดูแลระบบจะค้นหาไฟล์บันทึกที่จำเป็น ดึงข้อมูลที่จำเป็นและโอนไปยังผู้เชี่ยวชาญด้านความปลอดภัย ในทางกลับกัน ให้ตรวจสอบและพบว่าที่อยู่ IP ที่ใช้ส่งจดหมายนี้สอดคล้องกับที่อยู่ IP ของคอมพิวเตอร์ของผู้ใช้ ภาพจากกล้องวงจรปิดยืนยันว่าพนักงานคนนั้นอยู่ที่ที่ทำงานของเขาตอนที่จดหมายถูกส่งไป ข้อมูลนี้เพียงพอที่จะกล่าวหาว่าเขาละเมิดกฎความปลอดภัยของข้อมูลและไล่เขาออก
ตัวอย่างการแยกบันทึกเกี่ยวกับบัญชีใดบัญชีหนึ่งจากบันทึก 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 การป้อนข้อมูล
$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 ต้องผ่านเหตุการณ์ต่างๆ มากมายในคราวเดียว เช่น การสแกนด้วยโปรแกรมป้องกันไวรัส ป้องกันสแปม และอื่นๆ ก่อนที่จะได้รับการยอมรับหรือส่งให้ผู้ดูแลระบบ หากอีเมลไม่ถึง การติดตามในขั้นตอนใดอาจเป็นปัญหาได้ มันหายไป
เพื่อแก้ไขปัญหานี้ คุณสามารถใช้สคริปต์พิเศษซึ่งพัฒนาโดยผู้เชี่ยวชาญด้านความปลอดภัยของข้อมูล Viktor Dukhovny และแนะนำให้ใช้โดยนักพัฒนา Postfix สคริปต์นี้จะเชื่อมรายการจากบันทึกสำหรับกระบวนการเฉพาะ และด้วยเหตุนี้ ทำให้คุณสามารถแสดงรายการทั้งหมดที่เกี่ยวข้องกับการส่งจดหมายเฉพาะตามตัวระบุได้อย่างรวดเร็ว งานได้รับการทดสอบบน 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";
}
สคริปต์เขียนด้วยภาษา Perl และหากต้องการรันคุณต้องบันทึกลงในไฟล์ เปรียบเทียบ.plทำให้สามารถเรียกใช้งานได้ จากนั้นรันไฟล์ที่ระบุไฟล์บันทึก และใช้ pgrep เพื่อแยกข้อมูลการระบุตัวตนของตัวอักษรที่คุณกำลังมองหา collate.pl /var/log/zimbra.log | พีเกรป '[ป้องกันอีเมล]> '. ผลลัพธ์จะเป็นผลลัพธ์ตามลำดับของบรรทัดที่มีข้อมูลเกี่ยวกับการเคลื่อนไหวของตัวอักษรบนเซิร์ฟเวอร์
# 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 ทางอีเมล [ป้องกันอีเมล]
ที่มา: will.com