Website-Suche

So verwalten Sie Systemprotokolle (Konfigurieren, Rotieren und Importieren in die Datenbank) in RHEL 7 – Teil 5


Um die Sicherheit Ihrer RHEL 7-Systeme zu gewährleisten, müssen Sie wissen, wie Sie alle auf solchen Systemen stattfindenden Aktivitäten durch die Untersuchung von Protokolldateien überwachen können. Auf diese Weise können Sie ungewöhnliche oder potenziell bösartige Aktivitäten erkennen und Systemfehler beheben oder andere geeignete Maßnahmen ergreifen.

In RHEL 7 ist der rsyslogd-Daemon für die Systemprotokollierung verantwortlich und liest seine Konfiguration aus /etc/rsyslog.conf (diese Datei gibt den Standardspeicherort für alle Systemprotokolle an) und aus Dateien in /etc/rsyslog.d, falls vorhanden.

Rsyslogd-Konfiguration

Eine kurze Überprüfung der rsyslog.conf wird für den Anfang hilfreich sein. Diese Datei ist in drei Hauptabschnitte unterteilt: Module (da rsyslog einem modularen Aufbau folgt), Global-Direktiven (die zum Festlegen globaler Eigenschaften des rsyslogd-Daemons verwendet werden) und Regeln. Wie Sie wahrscheinlich erraten haben, gibt dieser letzte Abschnitt an, was wo protokolliert oder angezeigt wird (auch als Selektor bezeichnet) und wird in diesem Artikel unser Hauptaugenmerk sein.

Eine typische Zeile in rsyslog.conf lautet wie folgt:

Im Bild oben sehen wir, dass ein Selektor aus einem oder mehreren durch Semikolons getrennten Paaren Facility:Priority besteht, wobei Facility den Nachrichtentyp beschreibt (siehe Abschnitt 4.1.1 in RFC 3164). (die vollständige Liste der für rsyslog verfügbaren Funktionen) und „Priorität“ gibt den Schweregrad an, der eines der folgenden selbsterklärenden Wörter sein kann:

  1. debuggen
  2. die Info
  3. beachten
  4. Warnung
  5. irren
  6. krit
  7. Alarm
  8. auftauchen

Obwohl das Schlüsselwort none selbst keine Priorität darstellt, bedeutet es, dass die gegebene Einrichtung überhaupt keine Priorität hat.

Hinweis: Eine bestimmte Priorität gibt an, dass alle Nachrichten dieser Priorität und höher protokolliert werden sollten. Daher weist die Zeile im obigen Beispiel den rsyslogd-Daemon an, alle Nachrichten mit der Prioritätsinformation oder höher (unabhängig von der Funktion) zu protokollieren, mit Ausnahme derjenigen, die zu mail, gehören authpriv und cron-Dienste (Nachrichten von dieser Einrichtung werden nicht berücksichtigt) in /var/log/messages.

Sie können auch mehrere Einrichtungen mithilfe des Doppelpunkts gruppieren, um allen die gleiche Priorität zuzuweisen. Also die Zeile:

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

Könnte umgeschrieben werden als

*.info;mail,authpriv,cron.none                /var/log/messages

Mit anderen Worten: Die Funktionen mail, authpriv und cron werden gruppiert und das Schlüsselwort none auf die angewendet drei von ihnen.

Erstellen einer benutzerdefinierten Protokolldatei

Um alle Daemon-Meldungen in /var/log/tecmint.log zu protokollieren, müssen wir die folgende Zeile entweder in rsyslog.conf oder in einer separaten Datei hinzufügen (einfacher zu verwalten). ) in /etc/rsyslog.d:

daemon.*    /var/log/tecmint.log

Starten wir den Daemon neu (beachten Sie, dass der Dienstname nicht mit einem d endet):

systemctl restart rsyslog

Und überprüfen Sie den Inhalt unseres benutzerdefinierten Protokolls vor und nach dem Neustart zweier zufälliger Daemons:

Als Übung zum Selbststudium würde ich Ihnen empfehlen, mit den Einrichtungen und Prioritäten herumzuspielen und entweder zusätzliche Nachrichten in vorhandenen Protokolldateien zu protokollieren oder neue zu erstellen, wie im vorherigen Beispiel.

Rotierende Protokolle mit Logrotate

Um zu verhindern, dass Protokolldateien endlos wachsen, wird das Dienstprogramm logrotate verwendet, um Protokolle zu rotieren, zu komprimieren, zu entfernen und alternativ per E-Mail zu versenden. Dadurch wird die Verwaltung von Systemen erleichtert, die eine große Anzahl von Protokolldateien erzeugen.

Empfohlene Lektüre: So richten Sie die Protokollrotation mit Logrotate unter Linux ein und verwalten sie

Logrotate läuft täglich als Cron-Job (/etc/cron.daily/logrotate) und liest seine Konfiguration aus /etc/logrotate .conf und aus Dateien in /etc/logrotate.d, falls vorhanden.

Wie im Fall von rsyslog können Sie Ihre Einstellungen auch dann besser organisieren, wenn Sie Einstellungen für bestimmte Dienste in die Hauptdatei aufnehmen können, indem Sie für jeden einzelnen Dienst separate Konfigurationsdateien erstellen.

Werfen wir einen Blick auf eine typische logrotate.conf:

Im obigen Beispiel führt logrotate die folgenden Aktionen für /var/loh/wtmp aus: versucht, nur einmal im Monat zu rotieren, aber nur, wenn die Datei mindestens <1 MB groß, erstellen Sie dann eine brandneue Protokolldatei mit Berechtigungen auf 0664 und dem Benutzer root und der Gruppe utmp. Behalten Sie als Nächstes nur ein archiviertes Protokoll, wie in der Rotationsanweisung angegeben:

Betrachten wir nun ein weiteres Beispiel, wie es in /etc/logrotate.d/httpd zu finden ist:

Weitere Informationen zu den Einstellungen für logrotate finden Sie in den Manpages (man logrotate und man logrotate.conf). Zur Erleichterung des Lesens werden beide Dateien zusammen mit diesem Artikel im PDF-Format bereitgestellt.

Als Systemingenieur liegt es weitgehend bei Ihnen, zu entscheiden, wie lange Protokolle gespeichert werden und in welchem Format, je nachdem, ob Sie /var in einer separaten Partition /< haben logisches Volume. Andernfalls sollten Sie unbedingt darüber nachdenken, alte Protokolle zu entfernen, um Speicherplatz zu sparen. Andererseits sind Sie möglicherweise gezwungen, gemäß den internen Richtlinien Ihres Unternehmens oder Kunden mehrere Protokolle für zukünftige Sicherheitsüberprüfungen aufzubewahren.

Protokolle in einer Datenbank speichern

Natürlich kann die Untersuchung von Protokollen (selbst mit Hilfe von Tools wie grep und regulären Ausdrücken) eine ziemlich mühsame Aufgabe sein. Aus diesem Grund ermöglicht uns rsyslog den Export in eine Datenbank (OTB). Zu den unterstützten RDBMS gehören MySQL, MariaDB, PostgreSQL und Oracle.

In diesem Abschnitt des Tutorials wird davon ausgegangen, dass Sie den MariaDB-Server und -Client bereits in derselben RHEL 7-Box installiert haben, in der die Protokolle verwaltet werden:

yum update && yum install mariadb mariadb-server mariadb-client rsyslog-mysql
systemctl enable mariadb && systemctl start mariadb

Verwenden Sie dann das Dienstprogramm mysql_secure_installation, um das Passwort für den Root-Benutzer und andere Sicherheitsaspekte festzulegen:

Hinweis: Wenn Sie nicht den Root-Benutzer MariaDB zum Einfügen von Protokollmeldungen in die Datenbank verwenden möchten, können Sie ein anderes Benutzerkonto konfigurieren um dies zu tun. Die Erklärung, wie das geht, würde den Rahmen dieses Tutorials sprengen, wird aber in der MariaDB-Wissensdatenbank ausführlich erläutert. In diesem Tutorial verwenden wir der Einfachheit halber das Root-Konto.

Laden Sie als Nächstes das Skript createDB.sql von GitHub herunter und importieren Sie es in Ihren Datenbankserver:

mysql -u root -p < createDB.sql

Fügen Sie abschließend die folgenden Zeilen zu /etc/rsyslog.conf hinzu:

$ModLoad ommysql
$ActionOmmysqlServerPort 3306
*.* :ommysql:localhost,Syslog,root,YourPasswordHere

Starten Sie rsyslog und den Datenbankserver neu:

systemctl restart rsyslog 
systemctl restart mariadb

Abfragen der Protokolle mithilfe der SQL-Syntax

Führen Sie nun einige Aufgaben aus, die die Protokolle ändern (z. B. das Stoppen und Starten von Diensten), melden Sie sich dann bei Ihrem DB-Server an und verwenden Sie Standard-SQL-Befehle, um die Protokolle anzuzeigen und zu durchsuchen:

USE Syslog;
SELECT ReceivedAt, Message FROM SystemEvents;

Zusammenfassung

In diesem Artikel haben wir erklärt, wie man die Systemprotokollierung einrichtet, wie man Protokolle rotiert und wie man die Nachrichten zur einfacheren Suche an eine Datenbank umleitet. Wir hoffen, dass diese Fähigkeiten Ihnen bei der Vorbereitung auf die RHCE-Prüfung und auch bei Ihren täglichen Aufgaben hilfreich sein werden.

Wie immer ist Ihr Feedback mehr als willkommen. Nutzen Sie gerne das untenstehende Formular, um uns zu erreichen.