Πώς να εργαστείτε με τα αρχεία καταγραφής του Zimbra OSE

Η καταγραφή όλων των συμβάντων που συμβαίνουν είναι μια από τις πιο σημαντικές λειτουργίες οποιουδήποτε εταιρικού συστήματος. Τα αρχεία καταγραφής σάς επιτρέπουν να επιλύετε αναδυόμενα προβλήματα, να ελέγχετε τη λειτουργία των συστημάτων πληροφοριών και επίσης να διερευνάτε περιστατικά ασφάλειας πληροφοριών. Η Zimbra ΟΣΕ διατηρεί επίσης αναλυτικά αρχεία καταγραφής της λειτουργίας της. Περιλαμβάνουν όλα τα δεδομένα από την απόδοση του διακομιστή έως την αποστολή και λήψη email από τους χρήστες. Ωστόσο, η ανάγνωση των αρχείων καταγραφής που δημιουργούνται από το Zimbra OSE είναι μια μάλλον μη τετριμμένη εργασία. Σε αυτό το άρθρο, χρησιμοποιώντας ένα συγκεκριμένο παράδειγμα, θα σας πούμε πώς να διαβάζετε τα αρχεία καταγραφής Zimbra OSE, καθώς και πώς να τα κάνετε κεντρικά.

Πώς να εργαστείτε με τα αρχεία καταγραφής του Zimbra OSE
Το Zimbra OSE αποθηκεύει όλα τα τοπικά αρχεία καταγραφής στο φάκελο /opt/zimbra/log και τα αρχεία καταγραφής βρίσκονται επίσης στο αρχείο /var/log/zimbra.log. Το πιο σημαντικό από αυτά είναι το mailbox.log. Καταγράφει όλες τις ενέργειες που πραγματοποιούνται στον διακομιστή αλληλογραφίας. Αυτά περιλαμβάνουν τη μετάδοση email, δεδομένα ελέγχου ταυτότητας χρήστη, αποτυχημένες προσπάθειες σύνδεσης και άλλα. Οι καταχωρήσεις στο mailbox.log είναι μια συμβολοσειρά κειμένου που περιέχει την ώρα που συνέβη το συμβάν, το επίπεδο του συμβάντος, τον αριθμό νήματος στο οποίο συνέβη το συμβάν, το όνομα χρήστη και τη διεύθυνση IP, καθώς και μια περιγραφή κειμένου του συμβάντος .

Πώς να εργαστείτε με τα αρχεία καταγραφής του Zimbra OSE

Το επίπεδο καταγραφής υποδεικνύει τον βαθμό επιρροής του συμβάντος στη λειτουργία του διακομιστή. Από προεπιλογή υπάρχουν 4 επίπεδα συμβάντων: INFO, WARN, ERROR και FATAL. Ας δούμε όλα τα επίπεδα με αυξανόμενη σειρά σοβαρότητας.

  • ΠΛΗΡΟΦΟΡΙΕΣ - Οι εκδηλώσεις σε αυτό το επίπεδο έχουν συνήθως σκοπό να ενημερώσουν για την πορεία του Zimbra OSE. Τα μηνύματα σε αυτό το επίπεδο περιλαμβάνουν αναφορές για τη δημιουργία ή τη διαγραφή ενός γραμματοκιβωτίου και ούτω καθεξής.
  • ΠΡΟΕΙΔΟΠΟΙΗΣΗ - συμβάντα αυτού του επιπέδου ενημερώνουν για καταστάσεις που είναι δυνητικά επικίνδυνες, αλλά δεν επηρεάζουν τη λειτουργία του διακομιστή. Για παράδειγμα, το επίπεδο WARN σηματοδοτεί ένα μήνυμα σχετικά με μια αποτυχημένη προσπάθεια σύνδεσης χρήστη.
  • ΣΦΑΛΜΑ - αυτό το επίπεδο συμβάντος στο αρχείο καταγραφής ενημερώνει για την εμφάνιση ενός σφάλματος που είναι τοπικού χαρακτήρα και δεν παρεμβαίνει στη λειτουργία του διακομιστή. Αυτό το επίπεδο μπορεί να επισημάνει ένα σφάλμα στο οποίο τα δεδομένα ευρετηρίου ενός μεμονωμένου χρήστη έχουν καταστραφεί.
  • 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 εμφανίζει έναν κωδικό πρόσβασης που έχει εισαχθεί λανθασμένα δύο φορές και μια επιτυχημένη προσπάθεια σύνδεσης.

Τα αρχεία καταγραφής στο Zimbra OSE μπορούν να είναι εξαιρετικά χρήσιμα για τον εντοπισμό των αιτιών διαφόρων κρίσιμων αστοχιών. Τη στιγμή που παρουσιάζεται ένα κρίσιμο σφάλμα, ο διαχειριστής συνήθως δεν έχει χρόνο να διαβάσει τα αρχεία καταγραφής. Απαιτείται η επαναφορά του διακομιστή το συντομότερο δυνατό. Ωστόσο, αργότερα, όταν ο διακομιστής δημιουργεί αντίγραφα ασφαλείας και δημιουργεί πολλά αρχεία καταγραφής, μπορεί να είναι δύσκολο να βρείτε την απαιτούμενη καταχώρηση σε ένα μεγάλο αρχείο. Για να βρείτε γρήγορα μια εγγραφή σφάλματος, αρκεί να γνωρίζετε την ώρα κατά την οποία έγινε επανεκκίνηση του διακομιστή και να βρείτε μια καταχώρηση στα αρχεία καταγραφής που χρονολογείται από αυτήν τη στιγμή. Η προηγούμενη καταχώρηση θα είναι μια καταγραφή του σφάλματος που παρουσιάστηκε. Μπορείτε επίσης να βρείτε το μήνυμα σφάλματος αναζητώντας τη λέξη-κλειδί FATAL.

Τα αρχεία καταγραφής Zimbra OSE σάς επιτρέπουν επίσης να αναγνωρίζετε μη κρίσιμες αστοχίες. Για παράδειγμα, για να βρείτε εξαιρέσεις χειριστή, μπορείτε να αναζητήσετε εξαίρεση χειριστή. Συχνά, τα σφάλματα που δημιουργούνται από τους χειριστές συνοδεύονται από ένα ίχνος στοίβας που εξηγεί τι προκάλεσε την εξαίρεση. Σε περίπτωση σφαλμάτων με την παράδοση αλληλογραφίας, θα πρέπει να ξεκινήσετε την αναζήτησή σας με τη λέξη-κλειδί LmtpServer και για να αναζητήσετε σφάλματα που σχετίζονται με τα πρωτόκολλα POP ή IMAP, μπορείτε να χρησιμοποιήσετε τις λέξεις-κλειδιά ImapServer και Pop3Server.

Τα αρχεία καταγραφής μπορούν επίσης να βοηθήσουν κατά τη διερεύνηση περιστατικών ασφάλειας πληροφοριών. Ας δούμε ένα συγκεκριμένο παράδειγμα. Στις 20 Σεπτεμβρίου, ένας από τους υπαλλήλους έστειλε μια επιστολή μολυσμένη από τον ιό σε έναν πελάτη. Ως αποτέλεσμα, τα δεδομένα στον υπολογιστή του πελάτη ήταν κρυπτογραφημένα. Ωστόσο, ο υπάλληλος ορκίζεται ότι δεν έστειλε τίποτα. Στο πλαίσιο της έρευνας για το συμβάν, η υπηρεσία ασφάλειας της επιχείρησης ζητά από τον διαχειριστή του συστήματος τα αρχεία καταγραφής του διακομιστή αλληλογραφίας για τις 20 Σεπτεμβρίου που σχετίζονται με τον χρήστη που ερευνάται. Χάρη στη χρονική σήμανση, ο διαχειριστής του συστήματος βρίσκει το απαραίτητο αρχείο καταγραφής, εξάγει τις απαραίτητες πληροφορίες και τις μεταφέρει σε ειδικούς ασφαλείας. Αυτοί, με τη σειρά τους, το κοιτούν και διαπιστώνουν ότι η διεύθυνση IP από την οποία στάλθηκε αυτή η επιστολή αντιστοιχεί στη διεύθυνση IP του υπολογιστή του χρήστη. Τα πλάνα CCTV επιβεβαίωσαν ότι ο υπάλληλος ήταν στο χώρο εργασίας του όταν στάλθηκε η επιστολή. Αυτά τα δεδομένα ήταν αρκετά για να τον κατηγορήσουν ότι παραβίασε τους κανόνες ασφάλειας πληροφοριών και να τον απολύσουν. 

Πώς να εργαστείτε με τα αρχεία καταγραφής του 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

Ένας άλλος πονοκέφαλος για έναν διαχειριστή μπορεί να είναι η παρακολούθηση ενός συγκεκριμένου email. Δεδομένου ότι τα μηνύματα ηλεκτρονικού ταχυδρομείου στο Zimbra OSE περνούν από πολλά διαφορετικά συμβάντα ταυτόχρονα: σάρωση μέσω προστασίας από ιούς, antispam και ούτω καθεξής, πριν γίνουν αποδεκτά ή σταλούν, για τον διαχειριστή, εάν το email δεν φτάσει, μπορεί να είναι αρκετά προβληματικό να εντοπιστεί σε ποιο στάδιο χάθηκε.

Για να λύσετε αυτό το πρόβλημα, μπορείτε να χρησιμοποιήσετε ένα ειδικό σενάριο, το οποίο αναπτύχθηκε από τον ειδικό ασφάλειας πληροφοριών 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 και για να το εκτελέσετε πρέπει να το αποθηκεύσετε σε ένα αρχείο collate.pl, κάντε το εκτελέσιμο και, στη συνέχεια, εκτελέστε το αρχείο προσδιορίζοντας το αρχείο καταγραφής και χρησιμοποιώντας το pgrep για να εξαγάγετε τις πληροφορίες αναγνώρισης του γράμματος που αναζητάτε collate.pl /var/log/zimbra.log | pgrep'[προστασία μέσω email]>'. Το αποτέλεσμα θα είναι μια διαδοχική έξοδος γραμμών που περιέχουν πληροφορίες σχετικά με την κίνηση του γράμματος στον διακομιστή.

# 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 Αικατερίνα Τριανταφυλλίδη μέσω e-mail [προστασία μέσω email]

Πηγή: www.habr.com