Semua log lokal disimpan oleh Zimbra OSE di folder / opt / zimbra / log, dan log juga dapat ditemukan di file /var/log/zimbra.log. Yang paling penting adalah mailbox.log. Ini mencatat semua tindakan yang terjadi di server email. Diantaranya adalah pengiriman surat, data tentang otentikasi pengguna, upaya login yang tidak berhasil, dan lainnya. Entri di mailbox.log adalah string teks yang berisi waktu saat peristiwa terjadi, tingkat peristiwa, jumlah aliran di mana peristiwa itu terjadi, nama pengguna dan alamat ip-nya, serta deskripsi teks peristiwa tersebut.
Tingkat log menunjukkan sejauh mana peristiwa mempengaruhi server. Secara default, 4 level kejadian digunakan: INFO, WARN, ERROR dan FATAL. Mari menganalisis semua level untuk meningkatkan keparahan.
- INFO — Zimbra OSE.
- WARN — , , . WARN .
- ERROR — , . , .
- FATAL — , - . FATAL .
File log server email diperbarui setiap hari. Versi terbaru dari file tersebut selalu memiliki nama Mailbox.log, sedangkan log untuk tanggal tertentu memiliki tanggal dalam namanya dan terdapat di dalam arsip. Misalnya mailbox.log.2020-09-29.tar.gz. Ini sangat menyederhanakan pencadangan log tindakan dan menelusuri log.
Demi kenyamanan administrator sistem, folder / opt / zimbra / log / berisi log lain. Mereka hanya menyertakan entri yang terkait dengan elemen OSE Zimbra tertentu. Misalnya, audit.log hanya berisi entri tentang otentikasi pengguna, clamd.log berisi data tentang operasi antivirus, dan sebagainya. Ngomong-ngomong, metode terbaik untuk melindungi server Zimbra OSE dari penyusup adalah dengan melindungi server menggunakan Fail2Banyang hanya bekerja berdasarkan audit.log. Ini juga merupakan praktik yang baik untuk menambahkan tugas cron untuk menjalankan perintah grep -ir "kata sandi tidak valid" /opt/zimbra/log/audit.log sehingga Anda dapat menerima informasi harian tentang upaya login yang gagal.
Contoh bagaimana dua kali salah memasukkan kata sandi dan upaya login berhasil ditampilkan di audit.log
Log di Zimbra OSE bisa sangat berguna dalam menentukan penyebab berbagai kegagalan kritis. Pada saat terjadi kesalahan kritis, administrator biasanya tidak memiliki waktu untuk membaca log. Diperlukan untuk memulihkan operasi server secepat mungkin. Namun, nanti, saat server berjalan kembali dan menghasilkan banyak log, mungkin sulit untuk menemukan entri yang diperlukan dalam file besar. Untuk menemukan catatan kesalahan dengan cepat, cukup mengetahui waktu di mana server dimulai ulang dan menemukan entri di log yang tertanggal saat ini. Catatan sebelumnya akan menjadi catatan kesalahan yang terjadi. Anda juga dapat menemukan pesan kesalahan dengan mencari kata kunci FATAL.
Selain itu, log Zimbra OSE memungkinkan Anda mengidentifikasi kegagalan non-kritis. Misalnya, untuk menemukan pengecualian penangan, Anda dapat mencari pengecualian penangan. Seringkali, kesalahan yang dihasilkan oleh penangan disertai dengan jejak tumpukan, yang menjelaskan apa yang menyebabkan pengecualian. Jika terjadi kesalahan dengan pengiriman email, Anda harus memulai pencarian dengan kata kunci LmtpServer, dan Anda dapat menggunakan kata kunci ImapServer dan Pop3Server untuk menemukan kesalahan yang terkait dengan protokol POP atau IMAP.
Selain itu, log dapat membantu dalam penyelidikan insiden keamanan informasi. Mari pertimbangkan contoh konkret. Pada 20 September, salah satu karyawan mengirim surat yang terinfeksi virus kepada klien. Akibatnya, data di komputer klien dienkripsi. Namun, karyawan tersebut bersumpah bahwa dia tidak mengirim apa pun. Sebagai bagian dari penyelidikan insiden, layanan keamanan perusahaan meminta administrator sistem untuk log server email 20 September yang terkait dengan pengguna yang sedang diselidiki. Berkat stempel waktu, administrator sistem menemukan file yang diperlukan dengan log, mengekstrak informasi yang diperlukan, dan mentransfernya ke personel keamanan. Mereka, pada gilirannya, memeriksanya dan menemukan bahwa alamat IP dari mana surat ini dikirim cocok dengan alamat IP komputer pengguna.Rekaman CCTV mengkonfirmasi bahwa karyawan tersebut berada di tempat kerjanya ketika surat itu dikirim. Data ini cukup untuk menuduhnya melanggar aturan keamanan informasi dan memecatnya.
Contoh mengekstrak catatan tentang salah satu akun dari Mailbox.log ke dalam file terpisah
Semuanya menjadi jauh lebih rumit jika terkait dengan infrastruktur multi-server. Karena log dikumpulkan secara lokal, sangat merepotkan untuk bekerja dengan mereka dalam infrastruktur multi-server dan oleh karena itu ada kebutuhan untuk memusatkan pengumpulan log. Ini dapat dilakukan dengan mengkonfigurasi host untuk mengumpulkan log. Tidak ada kebutuhan khusus untuk menambahkan host khusus ke infrastruktur. Semua server email dapat bertindak sebagai node untuk mengumpulkan log. Dalam kasus kami, ini akan menjadi node Mailstore01.
Di server ini, kita perlu memasukkan perintah berikut:
sudo su – zimbra
zmcontrol stop
exit
sudo /opt/zimbra/libexec/zmfixperms -e -v
Edit file / etc / sysconfig / rsyslog dan setel SYSLOGD_OPTIONS = ”- r -c 2 ″
Edit /etc/rsyslog.conf dan hapus komentar pada baris berikut:
$ ModLoad imudp
$ UDPServerRun 514
Masukkan perintah berikut:
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
Anda dapat memeriksa apakah semuanya berfungsi dengan perintah zmprov gacf | grep zimbraLogHostname. Setelah menjalankan perintah, nama host yang mengumpulkan log harus ditampilkan. Untuk mengubahnya, Anda harus memasukkan perintah zmprov mcf zimbraLogHostname mailstore01.company.ru.
Di semua server infrastruktur lainnya (LDAP, MTA, dan penyimpanan email lainnya), jalankan perintah zmprov gacf | grep zimbraLogHostname untuk melihat nama host tujuan log. Untuk mengubahnya, Anda juga dapat memasukkan perintah zmprov mcf zimbraLogHostname mailstore01.company.ru
Selain itu, di setiap server, masukkan perintah berikut:
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
Setelah itu, semua log akan disimpan di server yang Anda tentukan, di mana mereka dapat dengan mudah dilihat. Juga di konsol administrator Zimbra OSE di layar dengan informasi tentang status server, layanan Logger yang sedang berjalan hanya akan ditampilkan di server mailstore01.
Sakit kepala lain bagi seorang administrator dapat melacak pesan email tertentu. Karena email di Zimbra OSE melalui beberapa peristiwa berbeda sekaligus: memeriksa dengan antivirus, anti-spam, dan sebagainya, sebelum diterima atau dikirim, untuk administrator, jika sebuah email tidak sampai, bisa sangat bermasalah untuk melacak pada tahap mana email itu hilang ...
Untuk mengatasi masalah ini, Anda dapat menggunakan skrip khusus, yang dikembangkan oleh spesialis keamanan informasi Viktor Dukhovny dan direkomendasikan untuk digunakan oleh pengembang Postfix. Skrip ini menggabungkan rekaman dari log untuk proses tertentu dan, karenanya, memungkinkan Anda untuk dengan cepat menampilkan semua rekaman yang terkait dengan pengiriman surat tertentu berdasarkan pengenalnya. Karyanya telah diuji pada semua versi Zimbra OSE, mulai dari 8.7. Berikut ini teks naskahnya.
#! /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";
}
Skrip ditulis dalam Perl dan untuk menjalankannya Anda perlu menyimpannya ke file collate.pl , membuatnya dapat dieksekusi, dan kemudian menjalankan file dengan menentukan file log dan menggunakan pgrep untuk menyorot informasi identifikasi dari surat yang diperlukan collate.pl /var/log/zimbra.log | pgrep '<20200929164500 \ .user @ mail \ .company \ .ru>' . Hasilnya akan berupa output baris berurutan yang berisi informasi tentang pergerakan huruf di server.
# collate.pl /var/log/zimbra.log | pgrep '<20200929101700\.user@mail\.company\.ru>'
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
Untuk semua pertanyaan yang berkaitan dengan Zextras Suite, Anda dapat menghubungi Perwakilan perusahaan Zextras Ekaterina Triandafilidi melalui email katerina@zextras.com