Website-Suche

So erstellen Sie einen zentralen Protokollserver mit Rsyslog in CentOS/RHEL 7


Damit der Systemadministrator ein Problem auf einem CentOS 7- oder RHEL 7-Serversystem identifizieren oder beheben kann, muss er die Ereignisse kennen und anzeigen, die auf dem System in einem bestimmten Fall aufgetreten sind Zeitraum aus Protokolldateien, die im System im Verzeichnis /var/log gespeichert sind.

Der Syslog-Server auf einem Linux-Computer kann als zentraler Überwachungspunkt über ein Netzwerk fungieren, an dem alle Server, Netzwerkgeräte, Router, Switches und die meisten ihrer internen Dienste, die Protokolle generieren, unabhängig davon, ob sie sich auf ein bestimmtes internes Problem beziehen oder nur informative Nachrichten betreffen, ihre Protokolle senden können .

Auf einem CentOS/RHEL 7-System ist der Rsyslog-Daemon als Hauptprotokollserver vorinstalliert, gefolgt vom Systemd Journal Daemon (journald).).

Der Rsyslog-Server ist als Client/Server-Architekturdienst aufgebaut und kann beide Rollen gleichzeitig übernehmen. Es kann als Server ausgeführt werden und alle von anderen Geräten im Netzwerk übertragenen Protokolle sammeln oder als Client ausgeführt werden, indem es alle protokollierten internen Systemereignisse an einen Remote-Endpunkt-Syslog-Server sendet.

Wenn rsyslog als Client konfiguriert ist, können die Protokolle lokal in Dateien im lokalen Dateisystem gespeichert oder remote gesendet werden, anstatt sie in auf dem Computer gespeicherte Dateien zu schreiben oder Ereignisprotokolldateien lokal zu schreiben und sie an einen Remote-Syslog-Server zu senden die selbe Zeit.

Der Syslog-Server verarbeitet jede Protokollnachricht nach dem folgenden Schema:

type (facility).priority (severity)  destination(where to send the log)

A. Die Einrichtung - oder Typdaten werden durch die internen Systemprozesse dargestellt, die die Nachrichten generieren. Unter Linux sind interne Prozesse (Einrichtungen), die Protokolle generieren, wie folgt standardisiert:

  • auth = Nachrichten, die durch Authentifizierungsprozesse (Anmeldung) generiert werden.
  • cron= Nachrichten, die von geplanten Prozessen generiert werden (crontab).
  • Daemon = Nachrichten, die von Daemons (internen Diensten) generiert werden.
  • Kernel = Nachrichten, die vom Linux-Kernel selbst generiert werden.
  • Mail = Nachrichten, die von einem Mailserver generiert werden.
  • syslog = vom rsyslog-Daemon selbst generierte Nachrichten.
  • lpr = Nachrichten, die von lokalen Druckern oder einem Druckserver generiert werden.
  • local0 – local7 = benutzerdefinierte Nachrichten, die von einem Administrator definiert wurden (local7 wird normalerweise für Cisco oder Windows zugewiesen).

B. Die Prioritätsstufen sind ebenfalls standardisiert. Jeder Priorität wird eine Standardabkürzung und eine Nummer zugewiesen, wie unten beschrieben. Die 7. Priorität ist die höhere Ebene von allen.

  • emerg = Notfall – 0
  • alert = Warnungen – 1
  • err = Fehler – 3
  • warn = Warnungen – 4
  • notice = Benachrichtigung – 5
  • info = Informationen – 6
  • debug = Debuggen – 7

Spezielle Rsyslog-Schlüsselwörter:

  • *=alle Einrichtungen oder Prioritäten
  • none=Die Einrichtungen haben keine vorgegebenen Prioritäten. Beispiel: mail.none

C. Der dritte Teil des Syslog-Schemas wird durch die destination-Anweisung dargestellt. Der Rsyslog-Daemon kann Protokollmeldungen senden, die in eine Datei im lokalen Dateisystem geschrieben werden (meistens in eine Datei im Verzeichnis /var/log/) oder an einen anderen lokalen Prozess weitergeleitet oder an einen gesendet werden lokale Benutzerkonsole (an stdout) oder senden Sie die Nachricht über das TCP/UDP-Protokoll an einen Remote-Syslog-Server oder verwerfen Sie die Nachricht sogar an /dev/null.

Um CentOS/RHEL 7 als zentralen Protokollserver zu konfigurieren, müssen wir zunächst prüfen und sicherstellen, dass die /var Partition, in der alle Protokolldateien aufgezeichnet werden, groß genug ist ( (mindestens einige GB), um alle Protokolldateien speichern zu können, die von anderen Geräten gesendet werden. Es ist eine gute Entscheidung, ein separates Laufwerk (LVM, RAID) zum Mounten des Verzeichnisses /var/log/ zu verwenden.

Anforderungen

  1. CentOS 7.3-Installationsverfahren
  2. RHEL 7.3 Installationsverfahren

So konfigurieren Sie Rsyslog im CentOS/RHEL 7 Server

1. Standardmäßig wird der Rsyslog-Dienst automatisch installiert und sollte in CentOS/RHEL 7 ausgeführt werden. Um zu überprüfen, ob der Daemon im System gestartet ist, geben Sie den folgenden Befehl mit Root-Rechten ein.

systemctl status rsyslog.service

Wenn der Dienst nicht standardmäßig ausgeführt wird, führen Sie den folgenden Befehl aus, um den rsyslog-Daemon zu starten.

systemctl start rsyslog.service

2. Wenn das rsyslog-Paket nicht auf dem System installiert ist, das Sie als zentralen Protokollierungsserver verwenden möchten, geben Sie den folgenden Befehl aus, um das rsyslog-Paket zu installieren.

yum install rsyslog

3. Der erste Schritt, den wir auf dem System ausführen müssen, um den rsyslog-Daemon als zentralen Protokollserver zu konfigurieren, damit er Protokollnachrichten für externe Clients empfangen kann, besteht darin, ihn mit Ihrem zu öffnen und zu bearbeiten Lieblingstexteditor, die Hauptkonfigurationsdatei aus /etc/rsyslog.conf, wie im folgenden Auszug dargestellt.

vi /etc/rsyslog.conf

Suchen Sie in der Rsyslog-Hauptkonfigurationsdatei nach den folgenden Zeilen und kommentieren Sie sie aus (entfernen Sie das Hashtag # Zeichen am Zeilenanfang), um den UDP-Transportempfang zum Rsyslog-Server über 514 bereitzustellen Hafen. UDP ist das Standardprotokoll, das Rsyslog für die Protokollübertragung verwendet.

$ModLoad imudp 
$UDPServerRun 514

4. Das UDP-Protokoll verfügt nicht über den TCP-Overhead, wodurch es bei der Datenübertragung schneller ist als das TCP-Protokoll. Andererseits gewährleistet das UDP-Protokoll nicht die Zuverlässigkeit der übertragenen Daten.

Wenn Sie jedoch das TCP-Protokoll für den Protokollempfang verwenden müssen, müssen Sie die folgenden Zeilen in der Datei /etc/rsyslog.conf suchen und auskommentieren, um den Rsyslog-Daemon so zu konfigurieren, dass er einen TCP-Socket auf 514 bindet und überwacht Hafen. TCP- und UDP-Listening-Sockets für den Empfang können gleichzeitig auf einem Rsyslog-Server konfiguriert werden.

$ModLoad imtcp 
$InputTCPServerRun 514 

5. Schließen Sie im nächsten Schritt die Datei noch nicht, sondern erstellen Sie eine neue Vorlage, die für den Empfang von Remote-Nachrichten verwendet wird. Diese Vorlage weist den lokalen Rsyslog-Server an, wo die empfangenen Nachrichten gespeichert werden sollen, die von Syslog-Netzwerk-Clients gesendet werden. Die Vorlage muss vor dem Beginn des GLOBAL DIRECTIVES-Blocks hinzugefügt werden, wie im folgenden Auszug dargestellt.

$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
. ?RemoteLogs & ~

Die obige $template RemoteLogs-Anweisung weist den Rsyslog-Daemon an, alle empfangenen Protokollmeldungen zu sammeln und in verschiedene Dateien zu schreiben, basierend auf dem Namen des Client-Computers und der Remote-Client-Einrichtung (Anwendung), die die Meldungen generiert hat Definierte Eigenschaften werden in der Vorlagenkonfiguration angezeigt: %HOSTNAME% und %PROGRAMNAME%.

Alle diese Protokolldateien werden im lokalen Dateisystem in eine spezielle Datei geschrieben, die nach dem Hostnamen des Client-Computers benannt und im Verzeichnis /var/log/ gespeichert wird.

Die & ~-Umleitungsregel weist den lokalen Rsyslog-Server an, die weitere Verarbeitung der empfangenen Protokollnachricht zu beenden und die Nachrichten zu verwerfen (sie nicht in interne Protokolldateien zu schreiben).

Der Name RemoteLogs ist ein willkürlicher Name, der dieser Vorlagenanweisung gegeben wird. Sie können jeden Namen verwenden, der für Ihre Vorlage am besten geeignet ist.

Um alle von Clients empfangenen Nachrichten in eine einzige Protokolldatei zu schreiben, die nach der IP-Adresse des Remote-Clients benannt ist, ohne die Einrichtung zu filtern, die die Nachricht generiert hat, verwenden Sie den folgenden Auszug.

$template FromIp,"/var/log/%FROMHOST-IP%.log" 
. ?FromIp & ~ 

Ein weiteres Beispiel für eine Vorlage, bei der alle Nachrichten mit Authentifizierungsfunktionsflag in einer Vorlage namens „TmplAuth“ protokolliert werden.

$template TmplAuth, "/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
authpriv.*   ?TmplAuth

Unten finden Sie einen Auszug aus einer Vorlagendefinition vom Rsyslog 7-Server:

template(name="TmplMsg" type="string"
         string="/var/log/remote/msg/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log"
        )

Der obige Vorlagenauszug kann auch wie folgt geschrieben werden:

template(name="TmplMsg" type="list") {
    constant(value="/var/log/remote/msg/")
    property(name="hostname")
    constant(value="/")
    property(name="programname" SecurePath="replace")
    constant(value=".log")
    }

Um komplexe Rsyslog-Vorlagen zu schreiben, lesen Sie das Handbuch zur Rsyslog-Konfigurationsdatei, indem Sie den Befehl man rsyslog.conf eingeben, oder konsultieren Sie die Rsyslog-Onlinedokumentation.

6. Nachdem Sie die Rsyslog-Konfigurationsdatei wie oben erläutert mit Ihren eigenen Einstellungen bearbeitet haben, starten Sie den Rsyslog-Daemon neu, um die Änderungen zu übernehmen, indem Sie den folgenden Befehl ausgeben:

service rsyslog restart

7. Der Rsyslog-Server sollte jetzt so konfiguriert sein, dass er als zentraler Protokollserver fungiert und Nachrichten von Syslog-Clients aufzeichnet. Um Rsyslog-Netzwerk-Sockets zu überprüfen, führen Sie den Befehl „netstat“ mit Root-Rechten aus und verwenden Sie grep, um die Rsyslog-Zeichenfolge zu filtern.

netstat -tulpn | grep rsyslog 

8. Wenn Sie SELinux in CentOS/RHEL 7 aktiviert haben, geben Sie den folgenden Befehl ein, um SELinux so zu konfigurieren, dass Rsyslog-Verkehr abhängig vom Netzwerk-Socket-Typ zugelassen wird.

semanage -a -t syslogd_port_t -p udp 514
semanage -a -t syslogd_port_t -p tcp 514 

9. Wenn die Firewall aktiviert und aktiv ist, führen Sie den folgenden Befehl aus, um die erforderlichen Regeln zum Öffnen von Rsyslog-Ports in Firewalld hinzuzufügen.

firewall-cmd --permanent --add-port=514/tcp
firewall-cmd --permanent --add-port=514/udp
firewall-cmd –reload

Das ist alles! Rsyslog ist jetzt im Servermodus konfiguriert und kann Protokolle von Remote-Clients zentralisieren. Im nächsten Artikel erfahren Sie, wie Sie den Rsyslog-Client auf dem CentOS/RHEL 7-Server konfigurieren.

Wenn Sie den Rsyslog-Server als zentralen Überwachungspunkt für Remote-Protokollmeldungen verwenden, können Sie Protokolldateien überprüfen und den Gesundheitsstatus des Clients beobachten oder Clientprobleme einfacher beheben, wenn Systeme abstürzen oder angegriffen werden.