Cara bekerja dengan log Zimbra OSE

Pencatatan semua peristiwa yang terjadi adalah salah satu fungsi terpenting dari sistem perusahaan mana pun. Log memungkinkan Anda memecahkan masalah yang muncul, mengaudit pengoperasian sistem informasi, dan juga menyelidiki insiden keamanan informasi. Zimbra OSE juga menyimpan catatan rinci tentang pengoperasiannya. Mereka mencakup semua data mulai dari kinerja server hingga pengiriman dan penerimaan email oleh pengguna. Namun, membaca log yang dihasilkan oleh Zimbra OSE adalah tugas yang tidak sepele. Pada artikel ini, dengan menggunakan contoh spesifik, kami akan memberi tahu Anda cara membaca log Zimbra OSE, serta cara membuatnya terpusat.

Cara bekerja dengan log Zimbra OSE
Zimbra OSE menyimpan semua log lokal 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. Ini termasuk transmisi email, data otentikasi pengguna, upaya login yang gagal, dan lain-lain. Entri di mailbox.log adalah string teks yang berisi waktu terjadinya peristiwa, tingkat peristiwa, nomor thread di mana peristiwa terjadi, nama pengguna dan alamat IP, serta deskripsi teks peristiwa tersebut .

Cara bekerja dengan log Zimbra OSE

Level log menunjukkan tingkat pengaruh peristiwa terhadap operasi server. Secara default ada 4 level kejadian: INFO, WARN, ERROR dan FATAL. Mari kita lihat semua tingkatan dalam urutan tingkat keparahannya.

  • INFO - Event pada level ini biasanya bertujuan untuk menginformasikan perkembangan Zimbra OSE. Pesan pada tingkat ini mencakup laporan tentang pembuatan atau penghapusan kotak surat, dan seterusnya.
  • PERINGATAN - peristiwa tingkat ini menginformasikan tentang situasi yang berpotensi berbahaya, namun tidak mempengaruhi pengoperasian server. Misalnya, level WARN menandai pesan tentang upaya login pengguna yang gagal.
  • ERROR - level kejadian di log ini menginformasikan terjadinya kesalahan yang bersifat lokal dan tidak mengganggu pengoperasian server. Tingkat ini dapat menandai kesalahan yang menyebabkan data indeks pengguna individual menjadi rusak.
  • FATAL - level ini menunjukkan kesalahan yang menyebabkan server tidak dapat terus beroperasi secara normal. Misalnya, level FATAL adalah untuk catatan yang menunjukkan ketidakmampuan untuk terhubung ke DBMS.

File log server email diperbarui setiap hari. Versi terbaru file selalu memiliki nama Mailbox.log, sedangkan log untuk tanggal tertentu memiliki tanggal pada namanya dan terdapat dalam arsip. Misalnya mailbox.log.2020-09-29.tar.gz. Hal ini mempermudah pencadangan log aktivitas dan pencarian log.

Untuk kenyamanan administrator sistem, folder /opt/zimbra/log/ berisi log lainnya. Mereka hanya menyertakan entri yang berhubungan dengan elemen Zimbra OSE tertentu. Misalnya audit.log hanya berisi catatan tentang otentikasi pengguna, clamd.log berisi data tentang pengoperasian antivirus, dan sebagainya. Omong-omong, metode terbaik untuk melindungi server Zimbra OSE dari penyusup adalah perlindungan server menggunakan Fail2Ban, yang hanya berfungsi 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.loguntuk menerima informasi kegagalan login harian.

Cara bekerja dengan log Zimbra OSE
Contoh bagaimana audit.log menunjukkan kata sandi yang salah dimasukkan dua kali dan upaya login berhasil.

Log di Zimbra OSE bisa sangat berguna dalam mengidentifikasi penyebab berbagai kegagalan kritis. Saat kesalahan kritis terjadi, administrator biasanya tidak punya waktu untuk membaca log. Diperlukan untuk memulihkan server sesegera mungkin. Namun, nanti, ketika server dicadangkan dan menghasilkan banyak log, akan sulit menemukan entri yang diperlukan dalam file besar. Untuk menemukan catatan kesalahan dengan cepat, cukup mengetahui waktu dimulainya ulang server dan menemukan entri di log yang berasal dari waktu tersebut. Entri sebelumnya akan menjadi catatan kesalahan yang terjadi. Anda juga dapat menemukan pesan error tersebut dengan mencari kata kunci FATAL.

Log Zimbra OSE juga memungkinkan Anda mengidentifikasi kegagalan yang tidak kritis. Misalnya, untuk menemukan pengecualian penangan, Anda dapat mencari pengecualian penangan. Seringkali, kesalahan yang dihasilkan oleh penangan disertai dengan jejak tumpukan yang menjelaskan penyebab pengecualian tersebut. Jika terjadi kesalahan pengiriman email, Anda harus memulai pencarian dengan kata kunci LmtpServer, dan untuk mencari kesalahan yang terkait dengan protokol POP atau IMAP, Anda dapat menggunakan kata kunci ImapServer dan Pop3Server.

Log juga dapat membantu saat menyelidiki insiden keamanan informasi. Mari kita lihat contoh spesifiknya. Pada tanggal 20 September, salah satu karyawan mengirimkan surat yang terinfeksi virus kepada klien. Akibatnya, data di komputer klien pun terenkripsi. Namun, karyawan tersebut bersumpah tidak mengirimkan apa pun. Sebagai bagian dari penyelidikan atas insiden tersebut, layanan keamanan perusahaan meminta dari administrator sistem log server email untuk tanggal 20 September terkait dengan pengguna yang sedang diselidiki. Berkat cap waktu, administrator sistem menemukan file log yang diperlukan, mengekstrak informasi yang diperlukan dan mentransfernya ke spesialis keamanan. Mereka, pada gilirannya, memeriksanya dan menemukan bahwa alamat IP dari mana surat ini dikirim sesuai dengan alamat IP komputer pengguna. Rekaman CCTV memastikan karyawan tersebut berada di tempat kerjanya saat surat itu dikirim. Data ini cukup untuk menuduhnya melanggar aturan keamanan informasi dan memecatnya. 

Cara bekerja dengan log Zimbra OSE
Contoh mengekstraksi catatan tentang salah satu akun dari log Mailbox.log ke dalam file terpisah

Segalanya menjadi lebih rumit jika menyangkut infrastruktur multi-server. Karena log dikumpulkan secara lokal, bekerja dengannya dalam infrastruktur multi-server sangat merepotkan dan oleh karena itu pengumpulan log perlu terpusat. Hal ini dapat dilakukan dengan menyiapkan host untuk mengumpulkan log. Tidak ada kebutuhan khusus untuk menambahkan host khusus ke infrastruktur. Server email mana pun dapat bertindak sebagai simpul untuk mengumpulkan log. Dalam kasus kami, ini akan menjadi node Mailstore01.

Di server ini kita perlu memasukkan perintah di bawah ini:

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

Edit file /etc/sysconfig/rsyslog, dan atur SYSLOGD_OPTIONS=”-r -c 2β€³

Edit /etc/rsyslog.conf dan hapus komentar pada baris berikut:
$ModLoad imudp
$UDPServerJalankan 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 menggunakan perintah zmprov gacf | grep zimbraLogHostname. Setelah menjalankan perintah, nama host yang mengumpulkan log akan 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 pengiriman log. Untuk mengubahnya, Anda juga dapat memasukkan perintah zmprov mcf zimbraLogHostname mailstore01.company.ru

Anda juga harus memasukkan perintah berikut di setiap server:

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 ini, semua log akan dicatat di server yang Anda tentukan, sehingga dapat dilihat dengan mudah. Selain itu, di konsol administrator Zimbra OSE, pada layar dengan informasi tentang status server, layanan Logger yang berjalan hanya akan ditampilkan untuk server mailstore01.

Cara bekerja dengan log Zimbra OSE

Sakit kepala lain bagi administrator adalah melacak email tertentu. Karena email di Zimbra OSE melewati beberapa peristiwa berbeda sekaligus: pemindaian oleh antivirus, antispam, dan sebagainya, sebelum diterima atau dikirim, bagi administrator, jika email tidak sampai, akan cukup bermasalah untuk melacak pada tahap apa. 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 entri dari log untuk proses tertentu dan, karena itu, memungkinkan Anda dengan cepat menampilkan semua entri yang terkait dengan pengiriman surat tertentu berdasarkan pengidentifikasinya. Pengerjaannya telah diuji pada semua versi Zimbra OSE, mulai dari 8.7. Berikut 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 ini ditulis dalam Perl dan untuk menjalankannya Anda perlu menyimpannya ke file menyusun.pl, buat itu dapat dieksekusi, lalu jalankan file yang menentukan file log dan gunakan pgrep untuk mengekstrak informasi identifikasi surat yang Anda cari collate.pl /var/log/zimbra.log | pgrep '[email dilindungi]> '. Hasilnya adalah keluaran berurutan berupa baris-baris yang berisi informasi pergerakan surat di server.

# 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

Untuk segala pertanyaan terkait Zextras Suite, Anda dapat menghubungi Perwakilan Zextras Ekaterina Triandafilidi melalui email [email dilindungi]

Sumber: www.habr.com