So installierst du das Zeek Network Security Monitoring Tool unter Debian 12
Zeek (früher Bro) ist eine kostenlose und quelloffene Plattform zur Überwachung der Netzwerksicherheit. Es ist ein leistungsfähiger passiver Netzwerkverkehrsanalysator, mit dem verdächtige oder bösartige Aktivitäten untersucht werden können. Zeek kann als Netzwerksicherheitsmonitor (NSM) eingesetzt werden und unterstützt eine breite Palette von Verkehrsanalysen, von der Sicherheitsdomäne bis hin zur Leistungsmessung und Fehlerbehebung.
In dieser Anleitung zeige ich dir Schritt für Schritt, wie du Zeek Network Security Monitoring auf einem Debian 12 Server installierst. Du installierst Zeek und konfigurierst Zeek im Clustermodus. Dann lernst du, wie du das TSV-Protokollformat von Zeek über die Befehlszeile zeek-cut analysieren kannst. Außerdem lernst du, wie du die Zeek-Logausgabe als JSON einrichtest und das Zeek-JSON-Log über die jq-Befehlszeile parst.
Voraussetzungen
Bevor du beginnst, solltest du sicherstellen, dass du folgende Voraussetzungen erfüllst:
- Einen Debian 12 Server.
- Einen Nicht-Root-Benutzer mit Administrator-Rechten.
Hinzufügen des Repositorys
Zeek kann auf einem Linux-System installiert werden, indem du es manuell kompilierst oder ein Repository eines Drittanbieters verwendest. In dieser Anleitung wirst du Zeek mit Hilfe eines Repositorys eines Drittanbieters über die APT installieren.
Führe zunächst den folgenden Befehl aus, um den GPG-Schlüssel und das Repository für das Zeek-Paket hinzuzufügen.
curl -fsSL https://download.opensuse.org/repositories/security:zeek/Debian_12/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/security_zeek.gpg > /dev/null echo 'deb http://download.opensuse.org/repositories/security:/zeek/Debian_12/ /' | sudo tee /etc/apt/sources.list.d/security:zeek.list
Aktualisiere nun dein Debian-Repository, indem du den folgenden Befehl apt update ausführst.
sudo apt update
Zeek installieren
Nachdem du das Zeek-Repository hinzugefügt hast, kannst du jetzt mit der Installation von Zeek auf deinem Debian-Rechner beginnen. Im folgenden Schritt installierst du Zeek und fügst das Zeek-Installationsverzeichnis zum Systempfad hinzu.
Führe den Befehl apt install aus, um Zeek auf deinem Debian-Rechner zu installieren. Es gibt mehrere Versionen von Zeek, z. B. die neueste Version, LTS und nightly. In diesem Beispiel wirst du zeek-lts installieren.
sudo apt install zeek-lts
Gib y ein, um mit der Installation fortzufahren.
Nach der Installation von zeek, die standardmäßig in das Zielverzeichnis /opt/zeek erfolgt, führst du folgenden Befehl aus Führe den folgenden Befehl aus, um das Verzeichnis /opt/zeek/bin über die Datei ~/.bashrc zum Systempfad hinzuzufügen.
echo "export PATH=$PATH:/opt/zeek/bin" >> ~/.bashrc
Lade dann die Datei ~/.bashrc neu und überprüfe die System-PATH-Variable mit dem folgenden Befehl. Du solltest das Verzeichnis /opt/zeek/bin im Systempfad sehen.
source ~/.bashrc echo $PATH
Zuletzt überprüfst du Zeek, indem du den folgenden Befehl ausführst. Damit überprüfst du den Speicherort der Zeek-Binärdatei, überprüfst die Zeek-Version und gibst die Zeek-Hilfemeldung aus.
which zeek zeek --version zeek --help
In der folgenden Ausgabe solltest du sehen, dass Zeek 5.0 unter /usr/zeek/bin/zeek installiert ist. Außerdem solltest du Optionen für den Zeek-Befehl haben.
Zeek konfigurieren
Nachdem Zeek installiert ist, musst du im nächsten Schritt die Installation von Zeek konfigurieren. Du kannst Zeek in verschiedenen Modi ausführen, z. B. im Kommandozeilenmodus, im Einzelplatzmodus und im Clustermodus.
Im folgenden Beispiel erfährst du, wie du Zeek im Clustermodus mit einem einzelnen Server betreiben kannst.
Bevor du Zeek konfigurierst, führe den folgenden Befehl aus, um deine Netzwerkschnittstellen und IP-Adresse zu überprüfen.
ip a
Du solltest die Liste der verfügbaren Schnittstellen auf deinem System mit detaillierten Informationen zu einer Server-IP-Adresse wie die folgende sehen:
Öffne die Netzwerkkonfiguration für Zeek /opt/zeek/etc/networks.cfg mit dem folgenden nano-Editor-Befehl.
sudo nano /opt/zeek/etc/networks.cfg
Füge dein internes Netzwerk-Subnetz wie folgt ein. Du kannst auch mehrere Subnetze einfügen.
10.0.0.0/8 Private IP space 172.16.0.0/12 Private IP space 192.168.0.0/16 Private IP space
Speichere die Datei und beende den Editor, wenn du fertig bist.
Öffne nun die Zeek-Konfiguration /opt/zeek/etc/node.cfg mit dem folgenden nano-Editor-Befehl.
sudo nano /opt/zeek/etc/node.cfg
Standardmäßig läuft Zeek im Standalone-Modus. Füge das # hinzu, um den Standalone-Modus von Zeek zu deaktivieren.
#[zeek] #type=standalone #host=localhost #interface=eth0
Füge die folgende Konfiguration ein, um Zeek im Clustermodus mit einem einzelnen Server zu betreiben. Achte darauf, dass du die IP-Adresse des Servers mit deinen Daten abänderst.
Mit der folgenden Konfiguration führst du Zeek im Clustermodus aus, der aus mehreren Komponenten besteht, z. B. zeek-logger, zeek-manager, zeek-proxy und zeek-worker.
# logger [zeek-logger] type=logger host=192.168.10.15 # manager [zeek-manager] type=manager host=192.168.10.15 # proxy [zeek-proxy] type=proxy host=192.168.10.15 # worker [zeek-worker] type=worker host=192.168.10.15 interface=eth0 # worker localhost [zeek-worker-lo] type=worker host=localhost interface=lo
Speichere und schließe die Feineinstellung, wenn du fertig bist.
Als Nächstes führst du den folgenden Befehl aus, um auf die Zeek-Kontrollshell zuzugreifen.
zeekctl
Führe den Befehl check aus, um deine Zeek-Konfiguration zu überprüfen.
check
Wenn alles gut läuft, solltest du sehen, dass alle Komponenten des Zeek-Skripts in Ordnung sind:
Als Nächstes führst du den Befehl deploy aus, um Zeek auf deinem Rechner zu starten und auszuführen. Der Befehl deploy entspricht dem Befehl install und start in Zeek.
deploy
Du solltest sehen, dass jede Komponente des Zeek-Clusters gestartet wird:
Überprüfe abschließend alle Komponenten deines Zeek-Clusters, indem du den folgenden Statusbefehl ausführst.
status
Wenn deine Installation erfolgreich war, solltest du sehen, dass alle Komponenten des Zeek-Clusters laufen.
Gib exit ein, um dich von der Zeek-Kontrollshell abzumelden.
Zu diesem Zeitpunkt läuft der Zeek-Cluster bereits. Er überwacht auch die Zielnetzwerkschnittstelle und das Subnetz und erstellt Protokolldateien im Verzeichnis /opt/zeek/logs.
Anleitung zu den Zeek-Protokollen
Nachdem du Zeek konfiguriert hast, kannst du im nächsten Schritt die von Zeek erzeugten Protokolldateien im Verzeichnis /opt/zeek/logs/current einsehen. Standardmäßig erzeugt Zeek Logdateien im TSV-Format (Tab-getrennte Werte).
Wenn Zeek läuft, überwacht es die Zielnetzwerkschnittstelle auf deinem System und erstellt Protokolldateien im Verzeichnis /opt/zeek/logs/current/.
Verschiebe dein Arbeitsverzeichnis in das Verzeichnis /opt/zeek/logs/current/ und führe den unten stehenden Befehl ls aus.
cd /opt/zeek/logs/current/ ls -ah
Du solltest mehrere von Zeek generierte Logdateien sehen. Es kann sein, dass einige Protokolldateien auf deinem System fehlen, weil der Zieldienst nicht verfügbar ist.
Nachfolgend findest du einige wichtige Protokolldateien, die du kennen musst:
- conn.log: Das Verbindungsprotokoll sowohl für TCP als auch für UDP. Diese Protokolldatei enthält die wichtigsten Informationen wie Zeitstempel, Verbindungsdauer, Dienst und vieles mehr.
- dns.log: Das DNS-Protokoll (Domain Name System).
- http.log: Das HyperText Transfer Protocol (HTTP) Protokoll.
- ssh.log: Das Secure Shell (SSH)-Protokoll zur Verfolgung von SSH-Verbindungen.
- ssl.log: Das Secure Socket Layer (SSL)-Protokoll, das auch das HTTPS-Protokoll enthält.
Analyse der Zeek-Logs TSV (Tab-getrennte Werte) über Zeek-cut
Standardmäßig erzeugt Zeek Logdateien im TSV-Format (Tab-separated values). Im folgenden Schritt analysierst du die Zeek-Logdateien im TSV-Format über die Befehlszeile zeek-cut.
Führe den folgenden cat-Befehl aus, um die Logdatei dns.log anzuzeigen.
cat dns.log
In der folgenden Ausgabe solltest du mehrere Felder wie ts, uid, id.orig_p, id.resp_h, id.resp_p, proto und viele mehr sehen.
Als Nächstes führst du den folgenden Befehl aus, um das TSV-Log-Format von Zeek zu parsen. Damit sendest du die Ausgabe über die Pipe „|“ an den Befehl zeek-cut.
In diesem Beispiel nimmst du drei Felder aus der Logdatei, wie id.orig_h, query und answers.
cat dns.log | zeek-cut id.orig_h query answers cat dns.log | zeek-cut query answers id.orig_h
Du solltest eine ähnliche Ausgabe wie die folgende sehen:
Du kannst auch das Redirect-Symbol verwenden, um die TSV-Logdatei über zeek-cut zu verarbeiten, wie im folgenden Befehl.
zeek-cut id.orig_h query answers < dns.log
Die Ausgabe sollte ähnlich sein.
Konfigurieren der Zeek-Logdateien in JSON
Im folgenden Schritt wirst du Zeek so konfigurieren, dass es Logdateien im JSON-Format erzeugt. Dazu musst du die Datei local.zeek ändern und das Zeek-Skript tuning/json-logs in deine Zeek-Installation laden.
Öffne die Datei /opt/zeek/share/zeek/site/local.zeek mit dem folgenden nano-Editor-Befehl.
sudo nano /opt/zeek/share/zeek/site/local.zeek
Füge die folgende Konfiguration am Ende der Zeile ein.
@load tuning/json-logs
Speichere und schließe die Datei, wenn du fertig bist.
Führe nun den unten stehenden Befehl zeekctl aus, um deine zeek-Installation neu zu verteilen.
zeekctl deploy
Du solltest sehen, dass zeek jetzt neu installiert wird. Sobald der Prozess abgeschlossen ist, erstellt zeek JSON-Logdateien.
Bevor du das JSON-Protokollformat analysierst, installiere jq auf deinem Rechner, indem du den folgenden apt-Befehl ausführst.
sudo apt install jq -y
Sobald jq installiert ist, wechsle in das Verzeichnis /opt/zeek/logs/current/. Das Verzeichnis /opt/zeek/logs/current enthält die Logdateien von zeek im JSON-Format und wird automatisch von zeek erstellt.
cd /opt/zeek/logs/current/
Führe den Befehl cat aus, um die Logdatei dns anzusehen.
cat dns.log
Die JSON-Ausgabe wird auf deinem Terminalbildschirm angezeigt.
Als Nächstes führst du den Befehl jq aus, um das JSON-Protokoll dns.log zu verarbeiten.
jq . dns.log
Oder du kannst dir das kompakte Format mit der Option -c wie folgt anzeigen lassen.
jq . -c dns.log
Zum Schluss führst du den folgenden Befehl aus, um einen bestimmten Schlüssel/Wert aus der JSON-Datei dns.log anzuzeigen.
jq -c '[."id.orig_h", ."query", ."answers"]' dns.log
Du solltest eine Ausgabe wie die folgende sehen.
Fazit
Herzlichen Glückwunsch! Du hast jetzt das Netzwerküberwachungsprogramm Zeek erfolgreich auf dem Debian 12 Server installiert. Du hast Zeek installiert, Zeek im Clustermodus laufen lassen, einige Zeek-Logdateien kennengelernt und gelernt, wie du Zeek-Logdateien im TSV-Format mit zeek-cut analysieren kannst. Außerdem hast du das Zeek-Log in JSON geändert und gelernt, wie man das JSON-Format des Zeek-Logs mit jq-Befehlszeilen auswertet.