Website-Suche

Erweiterte Protokollierung und Überwachung unter Linux


Einer der wichtigsten Aspekte der Linux-Systemadministration ist die Einrichtung der Protokollierung kritischer und wichtiger Ereignisse und die regelmäßige Überprüfung des Servers auf Schwachstellen oder Fehler. Da Linux-Server in der Regel 24/7 eingeschaltet sind, müssen sich Administratoren auf Protokollierungs- und Überwachungstools verlassen, die ihnen helfen, den Überblick darüber zu behalten, was den ganzen Tag über auf dem System passiert. Diese nützlichen Tools können große Datenmengen sammeln und zusammenfassen, den Systemadministrator benachrichtigen, wenn ein kritisches Ereignis eintritt, und Trends und potenzielle Probleme identifizieren.

In diesem Tutorial gehen wir einige Techniken für die erweiterte Protokollierung und Überwachung auf Linux-Systemen durch. Linux wird standardmäßig mit vielen integrierten Protokollierungstools geliefert, aber es gibt auch viele Systemmonitore von Drittanbietern, die uns mit zusätzlichen Funktionen unterstützen können, wie z. B. der Möglichkeit, IT-Administratoren eine Warnung zu senden, wenn die Ressourcen des Servers überlastet sind.

In diesem Tutorial lernen Sie:

  • So verwenden Sie journald für das Parsen von Protokollen
  • Grundlegende SELinux- und AppArmor-Befehle und -Konfiguration
  • Was ist ELK, Logwatch und logrotate?

Techniken für erweiterte Protokollierung und Überwachung unter Linux

Im Folgenden gehen wir auf verschiedene Tools und Techniken ein, um Ihr Linux-System zu protokollieren und zu prüfen. Einige dieser Tools sind standardmäßig installiert, andere müssen manuell installiert werden und einige sind für bestimmte Linux-Distributionen konzipiert. Welches Tool für Sie das richtige ist, hängt davon ab, welche Linux-Distribution Sie verwenden und wie tief die Protokollierung und Prüfung ist, die Sie durchführen möchten. Eines oder mehrere der unten aufgeführten Tools werden sicherlich Ihren Kriterien entsprechen.

journald/rsyslog/syslog

journald ist heute aufgrund seiner Integration mit systemd auf Linux-Systemen allgegenwärtig. Natürlich verwenden nicht alle Linux-Distributionen systemd, aber die überwiegende Mehrheit tut es. rsyslog und syslog sind ebenfalls brauchbare Protokollierungswerkzeuge, aber wir haben sie in diesem Abschnitt zusammen mit journald gruppiert, weil wir der Meinung sind, dass journald rsyslog und syslog in vielen Situationen weitgehend ersetzt hat.

NOTE
journald ist auf Systemen mit einem anderen Init-System, wie z. B. SysV init, nicht verfügbar. In diesen Situationen wird die Installation von rsyslog oder syslog-ng für ein allgemeines Protokollierungstool empfohlen, das alles an einem zentralen Ort sammelt.

Zu den Vorteilen von journald gehören:

  • Indizierte Protokolldateien: Das Nachschlagen bestimmter Ereignisse ist viel schneller und einfacher als in den Nur-Text-Dateien von syslog
  • Zugriffskontrolle auf Protokolldateien: Benutzer können nur relevante Protokolldateien anzeigen, und root kann alle Dateien sehen
  • Protokollfilterung: Einfaches Auffinden von Ereignissen basierend auf Zeit oder Ebene (kritisch vs. Warnung usw.)

Der Befehl journalctl kann verwendet werden, um alle von systemd gesammelten Protokolle anzuzeigen. Dazu gehören Protokolle, die sich auf den Kernel des Systems, initrd, verschiedene Dienste und Anwendungen sowie systemd selbst beziehen. Der Befehl journalctl macht die Abfrage all dieser Protokolle ziemlich schmerzlos, da systemd all diese verschiedenen Protokolle sammelt und an einem zentralen Ort speichert, damit Administratoren sie einsehen können.

Sie werden auch feststellen, dass andere Sicherheitstools wie SELinux und AppArmor Hand in Hand mit journald arbeiten, da es Protokolle speichert, die von diesen anderen Tools generiert werden. Die Beherrschung von journald und einigen der journalctl Linux-Befehlssyntax wird Ihnen auch dabei helfen, diese anderen Sicherheitstools besser zu beherrschen und relevante Protokolleinträge schnell identifizieren zu können.

  1. Journald kann und wird Millionen von Einträgen in sehr kurzer Zeit protokollieren, daher wird es im Allgemeinen nicht empfohlen, den Befehl journalctl allein auszuführen. Stattdessen können Sie die Optionen --since und --until verwenden, um relevante Protokolle zu isolieren, die während eines bestimmten Zeitraums protokolliert wurden. So sehen Sie beispielsweise alle Protokolle seit gestern:

    
    journalctl --since yesterday
    
  2. Sie können die Optionen auch in Verbindung miteinander verwenden.

    
    journalctl --since yesterday --until "2 hours ago"
    
  3. Um Einträge anzuzeigen, die für einen bestimmten Systemdienst protokolliert wurden, verwenden Sie das Flag -u. So sehen Sie beispielsweise alle Einträge, die von Apache protokolliert wurden:

    
    journalctl -u apache2.service
    
  4. Um nur Kernel-bezogene Nachrichten anzuzeigen, verwenden Sie die Option -k.

    
    journalctl -k
    
  5. Da es so viele Log-Einträge gibt, kann es hilfreich sein, nur die mit einer bestimmten Priorität zu sehen. Die höchste Priorität ist Ebene 0 und die niedrigste Ebene ist Ebene 7. Die Protokollebenen lauten wie folgt:

    
    0: emergency
    1: alert
    2: critical
    3: error
    4: warning
    5: notice
    6: info
    7: debug
    

    Verwenden Sie die Option -p, um Protokolle einer bestimmten Ebene sowie alle darüber liegenden Protokolle mit Priorität anzuzeigen. In diesem Beispiel gehen wir von Stufe 3 aus, d. h. von jedem Eintrag, der als Fehler, kritisch, Alarm oder Notfall markiert ist.

    
    journalctl -p 3
    

Mehr Infos: Einführung in die Systemd-Zeitschrift

SELinux

SELinux, was für Security Enhanced Linux steht, ist eine zusätzliche Ebene der Sicherheitskontrolle, die für Linux-Systeme entwickelt wurde. Die ursprüngliche Version von SELinux wurde von der NSA entwickelt. Zu den weiteren wichtigen Mitwirkenden gehört Red Hat, das es standardmäßig in seinem eigenen RHEL und seinen abgeleiteten Linux-Distributionen aktiviert hat.

SELinux (Security Enhanced Linux) ist eine Implementierung eines Mandatory Access Control Permission System (MAC) im Linux-Kernel. Diese Art der Zugriffskontrolle unterscheidet sich von Diskretionären Zugriffskontrollsystemen (Warrantary Access Control Systems, DAC) wie ACLs und standardmäßigen Unix-Ugo/RWX-Berechtigungen in der Art und Weise, wie der Zugriff auf eine Ressource bereitgestellt wird. Im Falle von MAC ist nicht der Besitzer einer Ressource derjenige, der entscheidet, wer und wie darauf zugreifen kann: Dieser Zugriff basiert auf den Beziehungen zwischen Domains und Labels, die durch eine Richtlinie vorgegeben und auf Kernel-Ebene durchgesetzt werden. Es ist wichtig zu sagen, dass sich die von SELinux erzwungenen Regeln und Standard-Systemberechtigungen nicht gegenseitig ausschließen und die ersteren nach den letzteren implementiert werden.

Schauen Sie sich unser anderes Tutorial an, um Informationen zu SELinux-Konzepten und -Management zu erhalten. Hier erfahren Sie, wie Sie SELinux-Richtlinien zu Prozessen und Dateien zuweisen können.

  1. So überprüfen Sie den aktuellen Status von SELinux:

    
    sestatus
    SELinux status:                 enabled
    SELinuxfs mount:                /sys/fs/selinux
    SELinux root directory:         /etc/selinux
    Loaded policy name:             targeted
    Current mode:                   enforcing
    Mode from config file:          enforcing
    Policy MLS status:              enabled
    Policy deny_unknown status:     allowed
    Memory protection checking:     actual (secure)
    Max kernel policy version:      33
    
  2. Wir können den Befehl ausearch verwenden, um nach den letzten SELinux-Protokolleinträgen zu suchen. Um beispielsweise nach Access Vector Cache (AVC)-Nachrichten zu suchen (die Art, die SELinux ausgibt, wenn eine Aktion von ihm verweigert wird), können wir Folgendes ausführen:

    
    sudo ausearch -m AVC -ts today
    

    Hinweis: Die Option -ts ist "timestamp". Ein weiteres gültiges Argument wäre "recent", um Protokolle der letzten 10 Minuten anzuzeigen. Um relevantere Informationen anzuzeigen, verwenden Sie den Zeitstempel revelead von ausearch und durchsuchen Sie die Journald-Protokolle, wie im vorherigen Abschnitt gezeigt.

  3. Wir können sealert auch verwenden, um weitere Informationen zu einer bestimmten SELinux-Protokollnachricht anzuzeigen. Ersetzen Sie einfach log_id durch die ID-Nummer des Protokolls, das Sie überprüfen möchten:

    
    sudo sealert -l [log_ID]
    

AppArmor

AppArmor ist eine andere Art von Mandatory Access Control Permission System (MAC), das häufig in Distributionen wie Ubuntu Linux implementiert wird. AppArmor weist Prozessen, Netzwerkports, Dateien und Benutzern "Profile" zu. AppArmor ermöglicht es Benutzern, zu überwachen und zu protokollieren, welche Entitäten versuchen, auf begrenzte Ressourcen zuzugreifen.

  1. Überprüfen Sie den aktuellen Status von AppArmor:

    
    sudo apparmor_status
    

    Mögliche Modi sind erzwungen, beschweren und unbegrenzt.

  2. Versetzen Sie ein Profil in den Beschwerdemodus (gibt Warnungen aus, ergreift aber keine Maßnahmen):

    
    sudo aa-complain /path/to/binary
    
  3. Versetzen Sie ein Profil in den Erzwingungsmodus (generiert Protokolle, erzwingt aber auch Zugriffssteuerungsrichtlinien):

    
    sudo aa-enforce /path/to/binary
    
  4. Alle von AppArmor generierten Protokollmeldungen können in der Protokolldatei /var/log/dmesg angezeigt werden.

    
    cat /var/log/dmesg | grep apparmor
    

    Wie bereits erwähnt, ist es üblicher und effizienter, journald (den Befehl journalctl) zu verwenden, um relevante AppArmor-Protokolleinträge anzuzeigen.

Elasticsearch, Logstash und Kibana (ELK)

ELK ist die Antwort auf die Verwaltung großer Mengen an Protokolldaten auf Linux-Servern. Der ELK-Stack kombiniert Elasticsearch, Logstash und Kibana, Open-Source-Tools, die zusammenarbeiten, um Ihnen die Möglichkeit zu bieten, Protokolldaten über eine praktische grafische Weboberfläche zu verwalten. Diese drei Tools wurden von Elastic entwickelt und speziell für die Zusammenarbeit entwickelt.

ELK bietet Benutzern Sicherheitsanalysen, Leistungsmetriken, Protokolle kritischer und wichtiger Ereignisse und andere nützliche Daten über eine Weboberfläche. Sie können einen lokalen Apache- oder NGINX-Server installieren, um die Daten zu präsentieren, und dann über localhost darauf zugreifen. Die Einrichtung ist ein mehrstufiger Prozess und variiert je nach Distribution, aber hier erfahren Sie, wie Sie ELK unter Ubuntu installieren.

Logwatch

Logwatch ermöglicht es Administratoren, das Parsen von Protokollen für bestimmte Dateien einzurichten und Warnungen für bestimmte Ereignisse zu konfigurieren. Diese Warnungen können per E-Mail an den Administrator gesendet werden, sodass Sie sich keine Sorgen machen müssen, ständig Protokolldateien oder aggregierte Daten zu durchsuchen, um manuell nach Problemen zu suchen.

Logwatch ist eine einfache Implementierung und ideal für mittelgroße Server und Infrastrukturen, die keine robuste Lösung wie ELK benötigen, aber dennoch eine Möglichkeit suchen, Mitarbeiter über wichtige Ereignisse zu informieren.

Logrotieren

Logrotate ist an und für sich keine Lösung, sondern arbeitet mit anderen Protokollierungsdiensten zusammen, um Protokolldateien zu rotieren und zu komprimieren. Es ist bereits in den Linux-Kernel integriert, und Systemdienste oder Anwendungen von Drittanbietern haben die Möglichkeit, es zu nutzen. Ohne die logrotate-Funktion würden Protokolldateien unhandlich groß werden und wären nicht sehr nützlich, wenn ein Administrator tatsächlich einen Blick in eine solche Datei werfen muss.

Es kann sein, dass Sie regelmäßig mit logrotate arbeiten, insbesondere wenn Sie vorhaben, die Protokolldateien für eine Vielzahl verschiedener Dienste zu übergeben. Es empfiehlt sich auf jeden Fall, sich mit dem Linux-Befehl logrotate vertraut zu machen.

Abschließende Gedanken

In diesem Tutorial haben wir uns mit fortgeschrittenen Protokollierungs- und Überwachungstechniken auf einem Linux-System vertraut gemacht. Wir haben gesehen, dass journald die gebräuchlichste Methode ist, um indizierte Protokolldaten zu analysieren, und dass der Befehl journalctl verwendet werden kann, um nach relevanten Einträgen zu suchen. SELinux und AppArmor sind die beiden wichtigsten Zugriffskontrollprogramme, die auf einer Vielzahl von Linux-Distributionen implementiert sind. Schließlich ermöglichen ELK und Logwatch Administratoren, den Überblick über große Mengen an Protokolldaten zu behalten, um kritische Ereignisse zu verfolgen und Informationen sinnvoll zu nutzen.

Verwandte Artikel: