Website-Suche

So erstellen Sie einen zentralisierten 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, die in einem bestimmten Zeitraum auf dem System aufgetreten sind, aus Protokolldateien kennen und anzeigen, die im System im Verzeichnis /var/log gespeichert sind.

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

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

Der Rsyslog-Server wird als Client/Server-Architekturdienst erstellt und kann beide Rollen gleichzeitig erfüllen. Er kann als Server ausgeführt werden und alle Protokolle sammeln, die von anderen Geräten im Netzwerk übertragen werden, oder er kann als Client ausgeführt werden, indem alle internen Systemereignisse, die an einen Syslog-Server des Remote-Endpunkts protokolliert wurden, gesendet werden.

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

Der Syslog-Server führt alle Protokollmeldungen nach dem folgenden Schema aus:

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

ein. Die Anlagen- oder Typdaten werden durch die internen Systemprozesse repräsentiert, die die Nachrichten erzeugen. In Linux sind interne Prozesse (Einrichtungen), die Protokolle generieren, wie folgt standardisiert:

  • auth=Nachrichten, die durch Authentifizierungsprozesse (Login) generiert werden.
  • cron= Nachrichten, die von geplanten Prozessen erzeugt werden (crontab).
  • daemon=Nachrichten, die von Daemons (internen Diensten) erzeugt werden.
  • kernel=Nachrichten, die vom Linux-Kernel selbst generiert werden.
  • mail=Nachrichten, die von einem Mailserver generiert werden.
  • syslog=Meldungen, die vom rsyslog-Daemon selbst generiert werden.
  • 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. Verwandte Die Prioritätsstufen (Schweregrade) sind ebenfalls standardisiert. Jede Priorität wird mit einem Standardkürzel und einer Zahl versehen, wie unten beschrieben. Die 7. Priorität ist die höhere Ebene von allen.

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

Spezielle Rsyslog-Schlüsselwörter:

  • *=alle Einrichtungen oder Prioritäten
  • none=die Einrichtungen haben keine vorgegebenen Prioritäten, z.B.: mail.none

C. Der dritte Teil für das Syslog-Schema wird durch die destination-Direktive dargestellt. Der Rsyslog-Daemon kann Protokollnachrichten senden, die in einer Datei auf dem lokalen Dateisystem geschrieben werden sollen (meist in einer Datei im Verzeichnis /var/log/) oder um an einen anderen lokalen Prozess weitergeleitet zu werden oder an eine lokale Benutzerkonsole (an stdout) gesendet zu werden, oder die Nachricht über das TCP/UDP-Protokoll an einen entfernten Syslog-Server zu senden, oder sogar die Nachricht nach /dev/null verwerfen.

Um CentOS/RHEL 7 als zentralen Protokollserver zu konfigurieren, müssen wir zunächst überprüfen und sicherstellen, dass die /var-Partition, auf 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) zu verwenden, um das Verzeichnis /var/log/ zu mounten.

Anforderungen

  1. Installationsverfahren für CentOS 7.3
  2. RHEL 7.3 Installationsverfahren

Konfigurieren von Rsyslog in CentOS/RHEL 7 Server

1. Standardmäßig wird der Rsyslog-Dienst automatisch installiert und sollte unter 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 ein, 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 zentralisierten Protokollserver zu konfigurieren, damit er Protokollnachrichten für externe Clients empfangen kann, besteht darin, mit Ihrem bevorzugten Texteditor die Hauptkonfigurationsdatei aus /etc/rsyslog.conf zu öffnen und zu bearbeiten, wie im folgenden Auszug dargestellt.

# vi /etc/rsyslog.conf

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

$ModLoad imudp 
$UDPServerRun 514

4. Das UDP-Protokoll verfügt nicht über den TCP-Overhead, wodurch es schneller für die Datenübertragung ist als das TCP-Protokoll. Auf der anderen Seite garantiert 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 an Port 514 bindet und überwacht. 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-Netzwerkclients gesendet werden. Die Vorlage muss vor dem Anfang des Blocks GLOBALE DIREKTIVEN hinzugefügt werden, wie im folgenden Auszug dargestellt.

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

Die obige $template RemoteLogs-Direktive weist den Rsyslog-Daemon an, alle empfangenen Protokollmeldungen zu sammeln und in unterschiedliche Dateien zu schreiben, basierend auf dem Namen des Client-Rechners und der Remote-Client-Einrichtung (Anwendung), die die Nachrichten auf der Grundlage der definierten Eigenschaften in der Vorlagenkonfiguration generiert hat: %HOSTNAME% und %PROGRAMNAME%.

Alle diese Protokolldateien werden in das lokale Dateisystem in eine dedizierte Datei geschrieben, die nach dem Hostnamen des Client-Rechners benannt ist, und im Verzeichnis /var/log/ gespeichert.

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

Der RemoteLogs-Name ist ein beliebiger Name, der dieser Vorlagendirektive zugewiesen wird. Sie können einen beliebigen 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 dem Flag auth facility in einer Vorlage mit dem Namen "TmplAuth" protokolliert werden.

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

Nachfolgend 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 der Rsyslog-Konfigurationsdatei, indem Sie den Befehl man rsyslog.conf eingeben, oder konsultieren Sie die Rsyslog-Online-Dokumentation.

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

# service rsyslog restart

7. Inzwischen sollte der Rsyslog-Server 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-Datenverkehr je nach 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 Gesundheitszustand des Clients beobachten oder Probleme des Clients leichter beheben, wenn Systeme abstürzen oder angegriffen werden.

Verwandte Artikel: