Installation eines zentralen Protokollservers mit Rsyslog unter Debian 9

Unter Linux kann der rsyslog-Server so konfiguriert werden dass er einen zentralen Protokoll-Manager nach dem Service-Client-Modell bereitstellt .

Der Rsyslog-Daemon kann so eingerichtet werden, dass er gleichzeitig als Client und Server läuft. Konfiguriert für den Betrieb als Server, lauscht Rsyslog auf dem Standardport 514 TCP und UDP und beginnt mit dem Sammeln von Protokollnachrichten, die von entfernten Systemen über das Netzwerk gesendet werden. Als Client sendet Rsyslog die internen Protokollnachrichten über das Netzwerk an einen entfernten Ryslog-Server über die gleichen TCP- oder UDP-Ports.

Rsyslog filtert Syslog-Meldungen nach ausgewählten Eigenschaften und Aktionen. Die rsyslog-Filter sind wie folgt:

  1. Anlagen- oder Prioritätsordner
  2. Eigenschaftsbasierte Filter
  3. Ausdrucksbasierte Filter

Der Filter facility wird durch das interne Linux-Subsystem repräsentiert, das die Protokolle erstellt. Sie werden wie folgt kategorisiert:

  • auth/authpriv = Nachrichten, die von Authentifizierungsprozessen erzeugt werden.
  • cron= Protokolle zu cron-Aufgaben
  • daemon = Nachrichten im Zusammenhang mit laufenden Systemdiensten
  • kernel = Linux-Kernelnachrichten
  • mail = Mailserver-Nachrichten
  • syslog = Nachrichten, die sich auf Syslog oder andere Daemons beziehen (DHCP-Server sendet hier Protokolle).
  • lpr = Drucker oder Druckservernachrichten
  • local0 – local7 = benutzerdefinierte Nachrichten unter Administratorkontrolle

Die Prioritäts- oder Schweregrade werden einem Schlüsselwort und einer Nummer wie unten beschrieben zugeordnet.

  • emerg = Notfall – 0
  • Alarm = Alarme – 1
  • err = Fehler – 3
  • warn = Warnungen – 4
  • notice = Benachrichtigung – 5
  • info = Information – 6
  • debug = Debugging – 7 höchste Ebene

Es stehen auch einige spezielle Rsyslog-Schlüsselwörter zur Verfügung, wie z.B. das Sternchen (*) zur Definition aller
Einrichtungen oder Prioritäten, das keine Schlüsselwort zur Angabe keiner Prioritäten, das Gleichheitszeichen (=) zur Auswahl nur dieser Priorität und das Ausrufezeichen (!) zur Negierung einer Priorität.

Der Aktionsteil des Syslog wird durch die destination-Anweisung repräsentiert. Das Ziel einer Protokollnachricht kann eine im Dateisystem gespeicherte Datei, eine Datei in /var/log/ system path, eine andere lokale Prozesseingabe über eine Named Pipe oder FIFO sein. Die Protokollnachrichten können auch an Benutzer gerichtet, an ein Black Hole (/dev/null) verworfen, an stdout oder an einen entfernten Syslog-Server per TCP/UDP-Protokoll gesendet werden. Die Protokollnachrichten können auch in einer Datenbank wie MySQL oder PostgreSQL gespeichert werden.

Rsyslog als Server konfigurieren

Der Rsyslog-Daemon wird in den meisten Linux-Distributionen automatisch installiert. Wenn Rsyslog jedoch nicht auf Ihrem System installiert ist, können Sie einen der folgenden Befehle ausführen, um den Dienst zu installieren> Sie benötigen root-Rechte, um die Befehle auszuführen.

In Debian basierte Distributionen:

sudo apt-get install rsyslog

In RHEL-basierten Distributionen wie CentOS:

sudo yum install rsyslog

Um zu überprüfen, ob der Rsyslog-Daemon auf einem System gestartet wird, führen Sie die folgenden Befehle aus, abhängig von Ihrer Distributionsversion.

Auf neueren Linux-Distributionen mit systemd:

systemctl status rsyslog.service

Auf älteren Linux-Versionen mit init:

service rsyslog status
/etc/init.d/rsyslog status

Um den rsyslog-Daemon zu starten, gib den folgenden Befehl ein.

Auf älteren Linux-Versionen mit init:

service rsyslog start
/etc/init.d/rsyslog start

Auf den neuesten Linux-Distributionen:

systemctl start rsyslog.service

Um ein rsyslog-Programm so einzurichten, dass es im Servermodus läuft, bearbeiten Sie die Hauptkonfigurationsdatei in /etc/rsyslog.conf. Nehmen Sie in dieser Datei die folgenden Änderungen vor, wie im folgenden Beispiel gezeigt.

sudo vi /etc/rsyslog.conf

Suchen und Entkommentieren Sie, indem Sie den Hashtag (#) der folgenden Zeilen entfernen, um den Empfang von UDP-Protokollnachrichten auf dem Port 514 zu ermöglichen. Standardmäßig wird der UDP-Port von syslog zum Senden und Empfangen von Nachrichten verwendet.

$ModLoad imudp 
$UDPServerRun 514

Da das UDP-Protokoll nicht zuverlässig für den Datenaustausch über ein Netzwerk ist, können Sie Rsyslog so einrichten, dass es Protokollnachrichten über das TCP-Protokoll an einen Remote-Server ausgibt. Um das TCP-Empfangsprotokoll zu aktivieren, öffnen Sie die Datei /etc/rsyslog.conf und kommentieren Sie die folgenden Zeilen wie unten gezeigt. Dies ermöglicht es dem rsyslog-Daemon, sich zu binden und auf einem TCP-Socket auf Port 514 zu hören.

$ModLoad imtcp 
$InputTCPServerRun 514

Beide Protokolle können in rsyslog für die gleichzeitige Ausführung aktiviert werden.

Wenn Sie angeben möchten, an welche Absender Sie den Zugriff auf den rsyslog-Daemon erlauben, fügen Sie die folgende Zeile nach den aktivierten Protokollzeilen hinzu:

$AllowedSender TCP, 127.0.0.1, 10.110.50.0/24, *.yourdomain.com

Sie müssen auch eine neue Vorlage erstellen, die vom rsyslog-Daemon analysiert wird, bevor Sie die eingehenden Protokolle erhalten. Die Vorlage sollte den lokalen Rsyslog-Server anweisen, wo die eingehenden Logmeldungen gespeichert werden sollen. Definieren Sie die Vorlage direkt nach der Zeile $AllowedSender, wie im folgenden Beispiel gezeigt.

$template Incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
*.*  ?Incoming-logs
& ~

Um nur die von der Kernanlage erzeugten Nachrichten zu protokollieren, verwenden Sie die folgende Syntax.

kern.*   ?Incoming-logs

Die empfangenen Protokolle werden von der obigen Vorlage analysiert und im lokalen Dateisystem im Verzeichnis /var/log/log/ gespeichert, in Dateien, die nach der Client-Hostnamen-Client-Funktion benannt sind, die die Nachrichten erzeugt hat: %HOSTNAME% und %PROGRAMNAME% Variablen.

Die folgenden & ~ Umleitungsregel konfiguriert den Rsyslog-Daemon so, dass die eingehenden Protokollnachrichten nur in den oben genannten Dateien gespeichert werden, die durch die Variablennamen angegeben sind. Andernfalls werden die empfangenen Protokolle weiterverarbeitet und auch im Inhalt lokaler Protokolle gespeichert, wie z.B. /var/log/syslog file.

Um eine Regel hinzuzufügen, um alle zugehörigen Protokollnachrichten an die Mail zu verwerfen, können Sie die folgende Anweisung verwenden.

mail.* ~

Andere Variablen, die zur Ausgabe von Dateinamen verwendet werden können, sind: %syslogseverity%, %syslogfacility%, %timegenerated%, %HOSTNAME%, %syslogtag%, %msg%, %FROMHOST-IP%, %PRI%, %MSGID%, %APP-NAME%, %TIMESTAMP%, %$year%, %$month%, %$day%.

Ab Rsyslog Version 7 kann ein neues Konfigurationsformat verwendet werden, um eine Vorlage in einem Rsyslog-Server zu deklarieren.

Ein Templatebeispiel der Version 7 kann wie in den folgenden Zeilen dargestellt aussehen.

template(name="MyTemplate" type="string"
         string="/var/log/%FROMHOST-IP%/%PROGRAMNAME:::secpath-replace%.log"
        )

Ein weiterer Modus, in dem Sie die obige Vorlage schreiben können, kann auch wie unten gezeigt sein:

template(name="MyTemplate" type="list") {
    constant(value="/var/log/")
    property(name="fromhost-ip")
    constant(value="/")
    property(name="programname" SecurePath="replace")
    constant(value=".log")
    } 

Um alle Änderungen an der rsyslog-Konfigurationsdatei anzuwenden, müssen Sie den Daemon neu starten, um die neue Konfiguration zu laden.

sudo service rsyslog restart
sudo systemctl restart rsyslog

Um zu überprüfen, welche rsyslog-Sockets im Listening-Status auf einem Debian-Linux-System geöffnet sind, können Sie die Optionnetstat Befehl mit Root-Rechten. Übergeben Sie die Ergebnisse über ein Filterprogramm, z.B. grep.

sudo netstat –tulpn | grep rsyslog

Beachten Sie, dass Sie auch Rsyslog-Ports in der Firewall öffnen müssen, damit eingehende Verbindungen aufgebaut werden können.

In RHEL-basierten Distributionen mit aktiviertem Firewalld geben Sie die folgenden Befehle aus:

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

In Debian-basierten Distributionen mit aktiver UFW-Firewall geben Sie die folgenden Befehle aus:

ufw allow 514/tcp
ufw allow 514/udp

Iptables Firewall-Regeln:

iptables -A INPUT -p tcp -m tcp --dport 514 -j ACCEPT
iptables -A INPUT -p udp --dport 514 -j ACCEPT

Rsyslog als Client konfigurieren

Um den rsyslog-Daemon im Client-Modus laufen zu lassen und lokale Protokollmeldungen an einen entfernten Rsyslog-Server auszugeben, bearbeiten Sie die Datei /etc/rsyslog.conf und fügen Sie eine der folgenden Zeilen hinzu:

*. *  @IP_REMOTE_RSYSLOG_SERVER:514
*. *  @FQDN_RSYSLOG_SERVER:514

Diese Leitung ermöglicht es dem Rsyslog-Dienst, alle internen Protokolle an einen entfernten Rsyslog-Server auf UDP-Port 514 auszugeben.

Um die Protokolle über das TCP-Protokoll zu senden, verwenden Sie die folgende Vorlage:

*. *  @@IP_reomte_syslog_server:514

Um nur cronbezogene Protokolle mit allen Prioritäten an einen rsyslog-Server auszugeben, verwenden Sie die folgende Vorlage:

cron.* @ IP_reomte_syslog_server:514

In Fällen, in denen der Rsyslog-Server nicht über das Netzwerk erreichbar ist, fügen Sie die folgenden Zeilen an die Datei /etc/rsyslog.conf auf der Clientseite an, um die Protokolle vorübergehend in einer plattengepufferten Datei zu speichern, bis der Server online geht.

$ActionQueueFileName queue
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1

Um die oben genannten Regeln anzuwenden, muss der Rsyslog-Daemon neu gestartet werden, um als Client zu fungieren.

Das könnte dich auch interessieren …