GNU/Linux >> LINUX-Kenntnisse >  >> Debian

Installieren Sie einen zentralen Protokollserver mit Rsyslog in Debian 9

Unter Linux sind die Protokolldateien Dateien, die Meldungen über die Systemfunktionen enthalten, die von Systemadministratoren verwendet werden, um eventuelle Probleme auf den Maschinen zu identifizieren. Die Protokolle helfen Administratoren, die Ereignisse zu visualisieren, die im System über einen bestimmten Zeitraum aufgetreten sind. Normalerweise werden alle Protokolldateien unter /var/log gespeichert Verzeichnis unter Linux. An diesem Ort gibt es mehrere Arten von Protokolldateien zum Speichern verschiedener Meldungen, z. B. eine Protokolldatei zum Aufzeichnen von Systemereignissen, eine Protokolldatei für sicherheitsbezogene Meldungen, andere Protokolldateien für Kernel, Benutzer oder Cron-Jobs. Der Hauptzweck von Protokolldateien besteht darin, Systemprobleme zu beheben. Die meisten Protokolldateien in Linux werden vom rsyslogd-Dienst gesteuert. Bei neueren Versionen von Linux-Distributionen werden die Protokolldateien auch vom Journald-Systemdienst gesteuert und verwaltet, der Teil des systemd-Initialisierungsprogramms ist. Die vom Journal-Daemon gespeicherten Protokolle sind in einem Binärformat geschrieben und hauptsächlich flüchtig, werden im RAM und in einem Ringpuffer in /run/log/journal/ gespeichert. Der Journaldienst kann jedoch auch so konfiguriert werden, dass er die Syslog-Meldungen dauerhaft speichert.

Unter Linux kann der rsyslog-Server so konfiguriert werden, dass er einen zentralen Protokollmanager nach Art eines Service-Client-Modells ausführt und Protokollnachrichten über TCP- oder UDP-Transportprotokolle über das Netzwerk sendet oder Protokolle von Netzwerkgeräten, Servern, Routern, Switches oder andere Systeme oder eingebettete Geräte, die Protokolle generieren.

Der Rsyslog-Daemon kann so eingerichtet werden, dass er gleichzeitig als Client und Server ausgeführt wird. Rsyslog ist so konfiguriert, dass es als Server ausgeführt wird, und lauscht auf dem Standardport 514 TCP und UDP und beginnt mit dem Sammeln von Protokollnachrichten, die von Remote-Systemen über das Netzwerk gesendet werden. Als Client sendet Rsyslog die internen Protokollmeldungen über dieselben TCP- oder UDP-Ports über das Netzwerk an einen entfernten Ryslog-Server.

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

  1. Facility- oder Priority-Anmelder
  2. Eigenschaftsbasierte Filter
  3. Ausdrucksbasierte Filter

Die Einrichtung filter wird durch das interne Linux-Subsystem dargestellt, das die Protokolle erstellt. Sie sind wie folgt kategorisiert:

  • auth/authpriv =Nachrichten, die von Authentifizierungsprozessen erzeugt werden
  • cron =Protokolle zu Crontasks
  • Daemon =Meldungen zu laufenden Systemdiensten
  • Kernel =Linux-Kernel-Meldungen
  • Mail =Mailserver-Nachrichten
  • syslog =Meldungen im Zusammenhang mit Syslog oder anderen Daemons (DHCP-Server sendet hier Protokolle)
  • lpr =Drucker oder Druckservermeldungen
  • local0 - local7 =benutzerdefinierte Nachrichten unter Administratorkontrolle

Die Priorität oder Schweregrad Ebenen werden wie unten beschrieben einem Schlüsselwort und einer Nummer zugewiesen.

  • auftauchen =Notfall – 0
  • Warnung =Warnungen – 1
  • irr =Fehler – 3
  • Warnung =Warnungen – 4
  • Hinweis =Benachrichtigung – 5
  • Informationen =Informationen – 6
  • debuggen =Debugging – 7 höchste Stufe

Es sind auch einige spezielle Rsyslog-Schlüsselwörter verfügbar, wie das Sternchen (* ) unterzeichnen, um alle
Einrichtungen oder Prioritäten zu definieren, die keine Schlüsselwörter, die keine Prioritäten angeben, das Gleichheitszeichen (= ), wodurch nur diese Priorität und das Ausrufezeichen (!) ausgewählt werden ), was eine Priorität negiert.

Der Aktionsteil des Syslogs wird durch das Ziel dargestellt Erklärung. Das Ziel einer Protokollnachricht kann eine im Dateisystem gespeicherte Datei, eine Datei im Systempfad /var/log/, eine andere lokale Prozesseingabe über eine Named Pipe oder FIFO sein. Die Protokollmeldungen können auch an Benutzer gerichtet, an ein schwarzes Loch (/dev/null) verworfen oder über das TCP/UDP-Protokoll an stdout oder an einen entfernten Syslog-Server gesendet werden. Die Protokollmeldungen 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-basierten 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 wurde, führen Sie je nach Distributionsversion die folgenden Befehle aus.

Auf neueren Linux-Distributionen mit systemd:

systemctl status rsyslog.service

Auf älteren Linux-Versionen mit init:

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

Geben Sie den folgenden Befehl ein, um den rsyslog-Daemon zu starten.

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 für die Ausführung im Servermodus einzurichten, bearbeiten Sie die Hauptkonfigurationsdatei in /etc/rsyslog.conf. Nehmen Sie in dieser Datei die folgenden Änderungen vor, wie im Beispiel unten gezeigt.

sudo vi /etc/rsyslog.conf

Suchen Sie die folgenden Zeilen und kommentieren Sie sie aus, indem Sie das Hashtag (#) entfernen, um den Empfang von UDP-Protokollnachrichten auf 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 für den Datenaustausch über ein Netzwerk nicht zuverlässig ist, können Sie Rsyslog so einrichten, dass Protokollmeldungen über das TCP-Protokoll an einen Remote-Server ausgegeben werden. Um das TCP-Empfangsprotokoll zu aktivieren, öffnen Sie /etc/rsyslog.conf file und kommentieren Sie die folgenden Zeilen wie unten gezeigt aus. Dadurch kann der rsyslog-Daemon einen TCP-Socket auf Port 514 binden und abhören.

$ModLoad imtcp 
$InputTCPServerRun 514

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

Wenn Sie angeben möchten, welchen Absendern Sie den Zugriff auf den rsyslog-Daemon erlauben, fügen Sie nach den aktivierten Protokollzeilen die folgende Zeile 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 Protokollnachrichten gespeichert werden sollen. Definieren Sie die Vorlage direkt nach dem $AllowedSender Linie wie im Beispiel unten gezeigt.

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

  Verwenden Sie die folgende Syntax, um nur die von der Kern-Funktion generierten Nachrichten zu protokollieren.

kern.*   ?Incoming-logs

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

Die unten &~ 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 weiter verarbeitet und auch im Inhalt lokaler Protokolle gespeichert, z. B. in der Datei /var/log/syslog.

Um eine Regel zum Verwerfen aller zugehörigen Log-Meldungen an die E-Mail hinzuzufügen, können Sie die folgende Anweisung verwenden.

mail.* ~

Weitere 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%

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

Ein Beispiel für eine Vorlage der Version 7 kann wie in den Zeilen unten gezeigt aussehen.

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

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

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

Um Ä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 Empfangszustand auf einem Debian-Linux-System geöffnet sind, können Sie die netstat ausführen Befehl mit Root-Rechten. Übergeben Sie die Ergebnisse über ein Filterdienstprogramm wie grep .

sudo netstat –tulpn | grep rsyslog

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

Geben Sie in RHEL-basierten Distributionen mit aktiviertem Firewalld die folgenden Befehle aus:

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

Geben Sie in Debian-basierten Distributionen mit aktiver UFW-Firewall 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

Bearbeiten Sie /etc/rsyslog.conf, damit der rsyslog-Daemon im Client-Modus ausgeführt und lokale Protokollmeldungen an einen entfernten Rsyslog-Server ausgegeben werden kann Datei und fügen Sie eine der folgenden Zeilen hinzu:

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

Diese Zeile 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 Cron-bezogene 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, hängen Sie die folgenden Zeilen an die Datei /etc/rsyslog.conf auf der Client-Seite 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 obigen Regeln anzuwenden, muss der Rsyslog-Daemon neu gestartet werden, um als Client zu agieren.


Debian
  1. So richten Sie den Rsyslog-Server unter Debian 11 ein

  2. So installieren Sie Redis Server unter Debian 11

  3. So installieren Sie den HTTP-Git-Server mit Nginx unter Debian 11

  4. So installieren Sie MySQL 8.0 / 5.7 unter Debian 11 / Debian 10

  5. Installieren Sie Cockpit unter Debian 9

Installieren Sie WordPress 5 mit Apache auf Debian 9

So überwachen Sie Protokolldateien mit Graylog v3.1 unter Debian 10

So installieren Sie MySQL 8 auf Debian 10

So installieren Sie den vsftpd-FTP-Server mit TLS unter Debian 10

Zentralisierte Protokollverwaltung durch Installation von rsyslog auf Debian 11!

So installieren Sie Nginx mit PHP-FPM unter Debian 11