Website-Suche

So richten Sie den zentralen Protokollierungsserver mit Rsyslog unter Linux ein


Protokolle sind eine wichtige Komponente jeder Software oder jedes Betriebssystems. Protokolle zeichnen in der Regel Benutzeraktionen, Systemereignisse, Netzwerkaktivitäten und vieles mehr auf, je nachdem, wofür sie gedacht sind. Eines der am weitesten verbreiteten Protokollierungssysteme auf Linux-Systemen ist rsyslog.

Rsyslog ist ein leistungsstarkes, sicheres und leistungsstarkes Protokollverarbeitungssystem, das Daten aus verschiedenen Quellentypen (Systemen/Anwendungen) akzeptiert und in mehreren Formaten ausgibt.

Es hat sich von einem regulären Syslog-Daemon zu einem voll ausgestatteten Protokollierungssystem auf Unternehmensebene entwickelt. Es ist in einem Client/Server-Modell konzipiert und kann daher als Client und/oder als zentraler Protokollierungsserver für andere Server, Netzwerkgeräte und Remote-Anwendungen konfiguriert werden.

Testumgebung

Für diesen Leitfaden verwenden wir die folgenden Hosts:

  • Server: 192.168.241.140
  • Kunde: 172.31.21.58

So installieren und konfigurieren Sie den Rsyslog-Server

Bei den meisten Linux-Distributionen ist das Paket rsyslog vorinstalliert. Falls es nicht installiert ist, können Sie es wie gezeigt mit Ihrem Linux-Paketmanager-Tool installieren.

sudo yum update && yum install rsyslog 	#CentOS 7
sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04

Sobald rsyslog installiert ist, müssen Sie den Dienst zunächst starten, ihn für den automatischen Start beim Booten aktivieren und seinen Status mit dem Befehl systemctl überprüfen.

sudo systemctl start rsyslog
sudo systemctl enable rsyslog
sudo systemctl status rsyslog

Die Hauptkonfigurationsdatei von rsyslog befindet sich unter /etc/rsyslog.conf. Sie lädt Module, definiert die globalen Anweisungen, enthält Regeln für die Verarbeitung von Protokollnachrichten und enthält außerdem alle Konfigurationsdateien in /etc /rsyslog.d/ für verschiedene Anwendungen/Dienste.

sudo vim /etc/rsyslog.conf

Standardmäßig verwendet rsyslog die Module imjournal und imusock zum Importieren strukturierter Protokollnachrichten aus dem systemd-Journal und zum Akzeptieren von Syslog Nachrichten von Anwendungen, die auf dem lokalen System über Unix-Sockets ausgeführt werden.

Um rsyslog als Netzwerk-/zentralen Protokollierungsserver zu konfigurieren, müssen Sie das Protokoll (entweder UDP oder TCP oder beides) festlegen, das für den Remote-Syslog-Empfang verwendet wird Port, auf dem es lauscht.

Wenn Sie eine UDP-Verbindung verwenden möchten, die schneller, aber unzuverlässig ist, durchsuchen Sie die folgenden Zeilen und kommentieren Sie sie aus (ersetzen Sie 514 durch den Port, den Sie überwachen möchten. Dies sollte der Fall sein Passen Sie die Portadresse an, an die die Clients Nachrichten senden. Wir werden uns dies bei der Konfiguration eines rsyslog-Clients genauer ansehen.

$ModLoad imudp
$UDPServerRun 514

Um eine TCP-Verbindung zu verwenden (die langsamer, aber zuverlässiger ist), durchsuchen Sie die folgenden Zeilen und entfernen Sie die Kommentarzeichen.

$ModLoad imtcp
$InputTCPServerRun 514

In diesem Fall möchten wir UDP- und TCP-Verbindungen gleichzeitig nutzen.

Als Nächstes müssen Sie den Regelsatz für die Verarbeitung von Remote-Protokollen im folgenden Format definieren.

facility.severity_level	destination (where to store log)

Wo :

  • Einrichtung: ist die Art des Prozesses/der Anwendung, die eine Nachricht generiert. Dazu gehören Auth, Cron, Daemon, Kernel, Local0..Local7. Die Verwendung von * bedeutet alle Einrichtungen.
  • Schweregrad: ist der Typ der Protokollmeldung: Notfall-0, Alarm-1, Krit-2, Fehler-3, Warnung-4, Hinweis-5, Info-6, Debug-7. Die Verwendung von * bedeutet alle Schweregrade und keine bedeutet, dass kein Schweregrad vorliegt.
  • Ziel: ist entweder eine lokale Datei oder ein Remote-Rsyslog-Server (definiert in der Form IP:Port).

Wir verwenden den folgenden Regelsatz zum Sammeln von Protokollen von Remote-Hosts unter Verwendung der RemoteLogs-Vorlage. Beachten Sie, dass diese Regeln vor allen Regeln für die Verarbeitung lokaler Nachrichten stehen müssen, wie im Screenshot gezeigt.

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

Betrachtet man den obigen Regelsatz, lautet die erste Regel „$template RemoteLogs“,/var/log/%HOSTNAME%/%PROGRAMNAME%.log“ „.

Die Anweisung $template weist den rsyslog-Daemon an, alle empfangenen Remote-Nachrichten basierend auf dem Hostnamen zu sammeln und in verschiedene Protokolle unter /var/log zu schreiben > (Name des Client-Computers) und Remote-Client-Einrichtung (Programm/Anwendung), die die Nachrichten generiert hat, wie durch die Einstellungen in der Vorlage RemoteLogs definiert.

Die zweite Zeile „*.* ?RemoteLogs“ bedeutet, dass Nachrichten von allen Einrichtungen auf allen Schweregraden mithilfe der Vorlagenkonfiguration RemoteLogs aufgezeichnet werden.

Die letzte Zeile „& ~“ weist rsyslog an, die Verarbeitung der Nachrichten zu stoppen, sobald sie in eine Datei geschrieben werden. Wenn Sie „& ~“ nicht angeben, werden Nachrichten stattdessen in die lokalen Dateien geschrieben.

Es gibt viele andere Vorlagen, die Sie verwenden können. Weitere Informationen finden Sie auf der Manpage zur Rsyslog-Konfiguration (man rsyslog.conf) oder in der Rsyslog-Onlinedokumentation.

Das war's mit der Konfiguration des rsyslog-Servers. Speichern und schließen Sie die Konfigurationsdatei. Um die letzten Änderungen zu übernehmen, starten Sie den rsyslog-Daemon mit dem folgenden Befehl neu.

sudo systemctl restart rsyslog

Überprüfen Sie nun die rsyslog-Netzwerk-Sockets. Verwenden Sie den Befehl ss command (oder netstat mit denselben Flags) und leiten Sie die Ausgabe an grep weiter, um rsyslogd-Verbindungen herauszufiltern.

sudo ss -tulnp | grep "rsyslog"

Wenn Sie unter CentOS 7 SELinux aktiviert haben, führen Sie als Nächstes die folgenden Befehle aus, um rsyslog-Verkehr basierend auf dem Netzwerk-Socket-Typ zuzulassen.

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

Wenn auf dem System die Firewall aktiviert ist, müssen Sie Port 514 öffnen, um beide UDP/TCP-Verbindungen zum rsyslog-Server zuzulassen, indem Sie ausführen.

------------- On CentOS ------------- 
sudo firewall-cmd --permanent --add-port=514/udp
sudo firewall-cmd --permanent --add-port=514/tcp
sudo firewall-cmd --reload

------------- On Ubuntu -------------
sudo ufw allow 514/udp
sudo ufw allow 514/tcp
sudo ufw reload 

So konfigurieren Sie den Rsyslog-Client zum Senden von Protokollen an den Rsyslog-Server

Überprüfen Sie nun auf dem Clientsystem mit dem folgenden Befehl, ob der rsyslog-Dienst ausgeführt wird oder nicht.

sudo systemctl status rsyslog

Wenn es nicht installiert ist, installieren Sie es und starten Sie den Dienst wie zuvor gezeigt.

sudo yum update && yum install rsyslog 	#CentOS 7
sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04
sudo systemctl start rsyslog
sudo systemctl enable rsyslog
sudo systemctl status rsyslog

Sobald der rsyslog-Dienst eingerichtet ist und ausgeführt wird, öffnen Sie die Hauptkonfigurationsdatei, in der Sie Änderungen an der Standardkonfiguration vornehmen.

sudo vim /etc/rsyslog.conf

Um den rsyslog-Daemon zu zwingen, als Protokoll-Client zu fungieren und alle lokal generierten Protokollnachrichten an den Remote-rsyslog-Server weiterzuleiten, fügen Sie diese Weiterleitungsregel am Ende der Datei hinzu, wie im folgenden Screenshot gezeigt.

*. *  @@192.168.100.10:514

Die obige Regel sendet Nachrichten von allen Einrichtungen und auf allen Schweregraden. Um Nachrichten von einer bestimmten Einrichtung zu senden, beispielsweise auth, verwenden Sie die folgende Regel.

auth. *  @@192.168.100.10:514

Speichern Sie die Änderungen und schließen Sie die Konfigurationsdatei. Um die oben genannten Einstellungen anzuwenden, starten Sie den rsyslog-Daemon neu.

sudo systemctl restart rsyslog

So überwachen Sie die Remote-Protokollierung auf dem Rsyslog-Server

Der letzte Schritt besteht darin, zu überprüfen, ob das rsyslog tatsächlich Nachrichten vom Client unter /var/log in der Form hostname/programname.log empfängt und protokolliert.

Führen Sie einen ls-Befehl aus, um eine lange Liste des übergeordneten Protokollverzeichnisses zu erstellen, und prüfen Sie, ob es ein Verzeichnis mit dem Namen ip-172.31.21.58 (oder wie auch immer der Hostname Ihres Client-Computers lautet) gibt.

 
ls -l /var/log/

Wenn das Verzeichnis vorhanden ist, überprüfen Sie die darin enthaltenen Protokolldateien, indem Sie Folgendes ausführen.

sudo ls -l /var/log/ip-172-31-21-58/

Zusammenfassung

Rsyslog ist ein leistungsstarkes Protokollverarbeitungssystem, das in einer Client/Server-Architektur konzipiert ist. Wir hoffen, dass Sie Rsyslog als zentralen/Netzwerkprotokollierungsserver und als Client installieren und konfigurieren können, wie in diesem Handbuch gezeigt.

Weitere Hilfe finden Sie möglicherweise auch in den entsprechenden rsyslog-Handbuchseiten. Geben Sie uns gerne Feedback oder stellen Sie Fragen.