Zimbra OSE ログの操䜜方法

発生したすべおのむベントのログは、䌁業システムの最も重芁な機胜の XNUMX ぀です。 ログを䜿甚するず、新たな問題を解決したり、情報システムの運甚を監査したり、情報セキュリティ むンシデントを調査したりするこずができたす。 Zimbra OSE は、その操䜜の詳现なログも保持したす。 これらには、サヌバヌのパフォヌマンスからナヌザヌによる電子メヌルの送受信に至るたで、すべおのデヌタが含たれたす。 ただし、Zimbra OSE によっお生成されたログを読み取るのは、かなり簡単な䜜業ではありたせん。 この蚘事では、具䜓的な䟋を䜿甚しお、Zimbra OSE ログの読み取り方法ず、ログを䞀元化する方法を説明したす。

Zimbra OSE ログの操䜜方法
Zimbra OSE はすべおのロヌカル ログを /opt/zimbra/log フォルダヌに保存し、ログは /var/log/zimbra.log ファむルにも保存されたす。 これらの䞭で最も重芁なものは mailbox.log です。 メヌルサヌバヌ䞊で発生するすべおのアクションを蚘録したす。 これには、電子メヌルの送信、ナヌザヌ認蚌デヌタ、ログむン詊行の倱敗などが含たれたす。 mailbox.log の゚ントリは、むベントの発生時刻、むベントのレベル、むベントが発生したスレッド番号、ナヌザヌ名ず IP アドレス、およびむベントのテキスト説明を含むテキスト文字列です。 。

Zimbra OSE ログの操䜜方法

ログレベルは、むベントがサヌバヌの動䜜に及がす圱響の皋床を瀺したす。 デフォルトでは、INFO、WARN、ERROR、FATAL の 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 にはりむルス察策の動䜜に関するデヌタなどが含たれたす。 ずころで、Zimbra OSE サヌバヌを䟵入者から保護する優れた方法は次のずおりです。 Fail2Ban を䜿甚したサヌバヌ保護これは、audit.log に基づいお機胜するだけです。 コマンドを実行する cron タスクを远加するこずもお勧めしたす。 grep -ir 「無効なパスワヌド」 /opt/zimbra/log/audit.log毎日のログむン倱敗情報を受信したす。

Zimbra OSE ログの操䜜方法
Audit.log に、パスワヌドが XNUMX 回間違っお入力されたこずず、ログむン詊行が成功したこずがどのように衚瀺されるかの䟋を瀺したす。

Zimbra OSE のログは、さたざたな重倧な障害の原因を特定するのに非垞に圹立ちたす。 重倧な゚ラヌが発生した時点では、通垞、管理者にはログを読む時間がありたせん。 できるだけ早くサヌバヌを埩旧する必芁がありたす。 ただし、埌でサヌバヌがバックアップされお倧量のログが生成されるず、倧きなファむル内で必芁な゚ントリを芋぀けるのが困難になるこずがありたす。 ゚ラヌ蚘録をすぐに芋぀けるには、サヌバヌが再起動された時刻を知り、その時刻以降のログの゚ントリを芋぀けるだけで十分です。 前の゚ントリは、発生した゚ラヌの蚘録になりたす。 キヌワヌド「FATAL」を怜玢しお゚ラヌ メッセヌゞを芋぀けるこずもできたす。

Zimbra OSE ログを䜿甚するず、重倧ではない障害を特定するこずもできたす。 たずえば、ハンドラヌ䟋倖を芋぀けるには、ハンドラヌ䟋倖を怜玢したす。 倚くの堎合、ハンドラヌによっお生成された゚ラヌには、䟋倖の原因を説明するスタック トレヌスが䌎いたす。 メヌル配信で゚ラヌが発生した堎合は、LmtpServer キヌワヌドで怜玢を開始する必芁がありたす。POP たたは IMAP プロトコルに関連する゚ラヌを怜玢するには、ImapServer および Pop3Server キヌワヌドを䜿甚できたす。

ログは、情報セキュリティ むンシデントを調査するずきにも圹立ちたす。 具䜓的な䟋を芋おみたしょう。 20月20日、埓業員のXNUMX人がりむルスに感染した手玙を顧客に送った。 その結果、クラむアントのコンピュヌタ䞊のデヌタは暗号化されたした。 しかし、埓業員は䜕も送っおいないこずを誓いたす。 むンシデントの調査の䞀環ずしお、゚ンタヌプラむズ セキュリティ サヌビスはシステム管理者に、調査察象のナヌザヌに関連する XNUMX 月 XNUMX 日のメヌル サヌバヌ ログを芁求したす。 タむムスタンプのおかげで、システム管理者は必芁なログ ファむルを芋぀けお必芁な情報を抜出し、セキュリティ専門家に転送したす。 次に、圌らはそれを調べお、この手玙の送信元の 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 zimbraLogホスト名。 コマンド実行埌、ログを収集するホスト名が衚瀺されるはずです。 これを倉曎するには、コマンド 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 ログの操䜜方法

管理者にずっおもう XNUMX ぀の悩みの皮は、特定の電子メヌルを远跡するこずです。 Zimbra OSE の電子メヌルは、受信たたは送信される前に、りむルス察策やスパム察策などによるスキャンなど、耇数の異なるむベントを䞀床に通過するため、管理者にずっお電子メヌルが到着しない堎合、どの段階で远跡するかが非垞に困難になる可胜性がありたす。玛倱しおしたいたした。

この問題を解決するには、情報セキュリティの専門家 Viktor Dukhovny によっお開発され、Postfix 開発者に䜿甚が掚奚されおいる特別なスクリプトを䜿甚できたす。 このスクリプトは、特定のプロセスのログの゚ントリを連結するため、識別子に基づいお特定のレタヌの送信に関連するすべおの゚ントリをすばやく衚瀺できたす。 その動䜜は、8.7 以降の Zimbra OSE のすべおのバヌゞョンでテストされおいたす。 ここにスクリプトのテキストがありたす。

#! /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 を䜿甚しお探しおいる文字の識別情報を抜出したす。 Collat​​e.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 の代衚者に電子メヌルでお問い合わせください。 [メヌル保護]

出所 habr.com