Einführung
Die vorherigen Anleitungen in dieser Serie haben Sie durch die Installation, Konfiguration und Ausführung von Suricata als Intrusion Detection (IDS) und Intrusion Prevention (IPS) System geführt. Sie haben auch etwas über Suricata-Regeln gelernt und wie Sie Ihre eigenen erstellen können.
In diesem Tutorial werden Sie erkunden, wie Sie Suricata mit Elasticsearch, Kibana und Filebeat integrieren können, um mit dem Elastic Stack und Rocky Linux 8 Ihr eigenes Security Information and Event Management (SIEM)-Tool zu erstellen. SIEM-Tools werden verwendet, um Ereignisdaten zu sammeln, zu aggregieren, zu speichern und zu analysieren, um nach Sicherheitsbedrohungen und verdächtigen Aktivitäten in Ihren Netzwerken und Servern zu suchen.
Die Komponenten, die Sie verwenden werden, um Ihr eigenes SIEM zu erstellen, sind:
- Elasticsearch zur Speicherung, Indizierung, Korrelation und Suche der Sicherheitsereignisse, die von Ihrem Suricata-Server stammen.
- Kibana zur Anzeige und Navigation durch die Sicherheitsereignisprotokolle, die in Elasticsearch gespeichert sind.
- Filebeat zum Parsen der Suricata-Protokolldatei
eve.json
und zum Senden jedes Ereignisses zur Verarbeitung an Elasticsearch. - Suricata, um Ihren Netzwerkverkehr auf verdächtige Ereignisse zu überprüfen und ungültige Pakete zu protokollieren oder abzuweisen.
Zuerst installieren und konfigurieren Sie Elasticsearch und Kibana mit bestimmten Authentifizierungseinstellungen. Dann fügen Sie Filebeat zu Ihrem Suricata-System hinzu, um dessen eve.json
-Protokolle an Elasticsearch zu senden.
Schließlich lernen Sie, wie Sie über SSH und Ihren Webbrowser eine Verbindung zu Kibana herstellen und dann Kibana-Dashboards laden und damit interagieren, die Suricatas Ereignisse und Warnungen anzeigen.
Voraussetzungen
Wenn Sie dieser Tutorialreihe gefolgt sind, sollten Sie bereits Suricata auf einem Rocky Linux-Server ausführen. Dieser Server wird als Ihr Suricata-Server bezeichnet.
- Wenn Sie Suricata noch installieren müssen, können Sie diesem Tutorial folgen, das erklärt, wie man Suricata auf Rocky Linux 8 installiert.
Sie benötigen auch einen zweiten Server, auf dem Elasticsearch und Kibana gehostet werden sollen. Dieser Server wird als Ihr Elasticsearch-Server bezeichnet. Es sollte ein Rocky Linux 8-Server mit:
- 4 GB RAM und 2 CPUs sein, eingerichtet mit einem nicht-root-Sudo-Benutzer. Dies können Sie durch das Befolgen der Ersten Servereinrichtung mit Rocky Linux 8 erreichen.
Zu Demonstrationszwecken sollten beide Server in der Lage sein, über private IP-Adressen zu kommunizieren. Sie können eine VPN wie WireGuard verwenden, um Ihre Server zu verbinden, oder einen Cloud-Anbieter verwenden, der ein privates Netzwerk zwischen den Hosts hat. Sie können auch wählen, Elasticsearch, Kibana, Filebeat und Suricata auf demselben Server auszuführen, um zu experimentieren.
Schritt 1 — Elasticsearch und Kibana installieren
Der erste Schritt in diesem Tutorial ist die Installation von Elasticsearch und Kibana auf Ihrem Elasticsearch-Server. Um loszulegen, fügen Sie den Elastic-GPG-Schlüssel mit dem folgenden Befehl auf Ihrem Server hinzu:
Erstellen Sie als nächstes eine Datei elasticsearch.repo
in Ihrem Verzeichnis /etc/yum/yum.repos.d
mit folgendem Inhalt, verwenden Sie vi
oder Ihren bevorzugten Editor. Dadurch wird sichergestellt, dass die upstream Elasticsearch-Repositories verwendet werden, wenn neue Pakete über yum
installiert werden:
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
Wenn Sie vi
verwenden, drücken Sie nach Abschluss der Änderungen ESC
und dann :x
, um die Änderungen in die Datei zu schreiben und zu beenden.
Installieren Sie jetzt Elasticsearch und Kibana mit dem Befehl dnf
. Drücken Sie Y
, um etwaige Aufforderungen zur GPG-Schlüsselfingerabdrücken zu akzeptieren:
Die Option --enablerepo
wird verwendet, um die standardmäßige deaktivierte Einstellung in der Datei /etc/yum.repos.d/elasticsearch.repo
zu überschreiben. Mit diesem Ansatz wird sichergestellt, dass die Elasticsearch- und Kibana-Pakete nicht versehentlich aktualisiert werden, wenn Sie andere Paketupdates auf Ihrem Server installieren.
Nachdem Sie die Pakete installiert haben, finden und notieren Sie die private IP-Adresse Ihres Servers mit dem Befehl ip address show
:
Sie erhalten eine Ausgabe wie folgt:
Outputlo UNKNOWN 127.0.0.1/8 ::1/128
eth0 UP 159.89.122.115/20 10.20.0.8/16 2604:a880:cad:d0::e56:8001/64 fe80::b832:69ff:fe46:7e5d/64
eth1 UP 10.137.0.5/16 fe80::b883:5bff:fe19:43f3/64
Die private Netzwerkschnittstelle in dieser Ausgabe ist das markierte eth1
-Gerät mit der IPv4-Adresse 10.137.0.5
. Ihr Gerätename und Ihre IP-Adressen werden unterschiedlich sein. Unabhängig von Ihrem Gerätenamen und Ihrer privaten IP-Adresse stammt die Adresse aus einem der folgenden reservierten Blöcke:
10.0.0.0
bis10.255.255.255
(10/8-Präfix)172.16.0.0
bis172.31.255.255
(172.16/12-Präfix)192.168.0.0
bis192.168.255.255
(192.168/16-Präfix)
Wenn Sie mehr darüber erfahren möchten, wie diese Blöcke zugewiesen sind, besuchen Sie die RFC 1918-Spezifikation)
Notieren Sie die private IP-Adresse für Ihren Elasticsearch-Server (in diesem Fall 10.137.0.5
). Diese Adresse wird im Rest dieses Tutorials als ihre_private_ip
bezeichnet. Beachten Sie auch den Namen der Netzwerkschnittstelle, in diesem Fall eth1
. Im nächsten Teil dieses Tutorials konfigurieren Sie Elasticsearch und Kibana so, dass sie Verbindungen über die private IP-Adresse von Ihrem Suricata-Server entgegennehmen.
Schritt 2 — Konfiguration von Elasticsearch
Elasticsearch ist standardmäßig so konfiguriert, dass es nur lokale Verbindungen akzeptiert. Darüber hinaus ist keine Authentifizierung aktiviert, sodass Tools wie Filebeat keine Protokolle an Elasticsearch senden können. In diesem Abschnitt des Tutorials werden die Netzwerkeinstellungen für Elasticsearch konfiguriert und dann das integrierte xpack
-Sicherheitsmodul von Elasticsearch aktiviert.
Konfiguration der Elasticsearch-Netzwerke
Da Ihre Elasticsearch- und Suricata-Server getrennt sind, müssen Sie Elasticsearch so konfigurieren, dass es Verbindungen über seine private Netzwerkschnittstelle entgegennimmt.
Öffnen Sie die Datei /etc/elasticsearch/elasticsearch.yml
mit vi
oder Ihrem bevorzugten Editor:
Suchen Sie die auskommentierte Zeile #network.host: 192.168.0.1
zwischen den Zeilen 50–60 und fügen Sie eine neue Zeile hinzu, die die Einstellung network.bind_host
konfiguriert, wie unten hervorgehoben:
# Standardmäßig ist Elasticsearch nur über localhost erreichbar. Legen Sie hier eine andere
# Adresse fest, um diesen Knoten im Netzwerk freizugeben:
#
#network.host: 192.168.0.1
network.bind_host: ["127.0.0.1", "your_private_ip"]
#
# Standardmäßig lauscht Elasticsearch auf HTTP-Verkehr am ersten freien Port, den es
# ab 9200 findet. Legen Sie hier einen bestimmten HTTP-Port fest:
Ersetzen Sie Ihre private IP-Adresse durch die Ihre_Private_IP
Adresse. Diese Zeile stellt sicher, dass Elasticsearch weiterhin unter seiner lokalen Adresse erreichbar ist, damit Kibana darauf zugreifen kann, sowie unter der privaten IP-Adresse für Ihren Server.
Wechseln Sie anschließend zum Ende der Datei mit der vi
Tastenkombination SHIFT+G
.
Fügen Sie die folgenden hervorgehobenen Zeilen am Ende der Datei hinzu:
. . .
discovery.type: single-node
xpack.security.enabled: true
Die Einstellung discovery.type
ermöglicht es Elasticsearch, als einzelner Knoten zu laufen, im Gegensatz zu einem Cluster anderer Elasticsearch-Server. Die Einstellung xpack.security.enabled
aktiviert einige der Sicherheitsfunktionen, die in Elasticsearch enthalten sind.
Speichern und schließen Sie die Datei, wenn Sie mit der Bearbeitung fertig sind.
Fügen Sie abschließend Firewall-Regeln hinzu, um sicherzustellen, dass Ihr Elasticsearch-Server über seine private Netzwerkschnittstelle erreichbar ist. Wenn Sie den Voraussetzungstutorials gefolgt sind und firewalld
verwenden, führen Sie die folgenden Befehle aus:
Ersetzen Sie den Namen Ihrer privaten Netzwerkschnittstelle durch eth1
im ersten Befehl, wenn Ihrer anders ist. Dieser Befehl ändert die Schnittstellenregeln, um die internal
Firewalld-Zone zu verwenden, die offener ist als die Standard-public
-Zone.
Die nächsten Befehle fügen Regeln hinzu, um den Elasticsearch-Datenverkehr auf den Ports 9200 und 9300 sowie den Kibana-Datenverkehr auf Port 5601 zu erlauben.
Der letzte Befehl lädt den Firewalld-Dienst mit den neuen permanenten Regeln neu.
Als Nächstes starten Sie den Elasticsearch-Daemon und konfigurieren dann Passwörter für die Verwendung mit dem xpack
-Sicherheitsmodul.
Starten von Elasticsearch
Jetzt, da Sie die Netzwerkeinstellungen und die xpack
-Sicherheitseinstellungen für Elasticsearch konfiguriert haben, müssen Sie es starten, damit die Änderungen wirksam werden.
Führen Sie den folgenden systemctl
-Befehl aus, um Elasticsearch zu starten:
Nachdem Elasticsearch den Startvorgang abgeschlossen hat, können Sie zum nächsten Abschnitt dieses Tutorials übergehen, in dem Sie Passwörter für die Standardbenutzer generieren, die in Elasticsearch integriert sind.
Konfigurieren von Elasticsearch-Passwörtern
Jetzt, da Sie die Einstellung xpack.security.enabled
aktiviert haben, müssen Sie Passwörter für die standardmäßigen Elasticsearch-Benutzer generieren. Elasticsearch enthält ein Dienstprogramm im Verzeichnis /usr/share/elasticsearch/bin
, das automatisch zufällige Passwörter für diese Benutzer generieren kann.
Führen Sie den folgenden Befehl aus, um in das Verzeichnis zu wechseln und dann zufällige Passwörter für alle Standardbenutzer zu generieren:
Sie erhalten eine Ausgabe wie folgt. Wenn Sie zur Fortsetzung aufgefordert werden, drücken Sie y
und dann RETURN
oder ENTER
:
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
The passwords will be randomly generated and printed to the console.
Please confirm that you would like to continue [y/N]y
Changed password for user apm_system
PASSWORD apm_system = eWqzd0asAmxZ0gcJpOvn
Changed password for user kibana_system
PASSWORD kibana_system = 1HLVxfqZMd7aFQS6Uabl
Changed password for user kibana
PASSWORD kibana = 1HLVxfqZMd7aFQS6Uabl
Changed password for user logstash_system
PASSWORD logstash_system = wUjY59H91WGvGaN8uFLc
Changed password for user beats_system
PASSWORD beats_system = 2p81hIdAzWKknhzA992m
Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = 85HF85Fl6cPslJlA8wPG
Changed password for user elastic
PASSWORD elastic = 6kNbsxQGYZ2EQJiqJpgl
Sie werden das Dienstprogramm nicht erneut ausführen können, daher stellen Sie sicher, dass Sie diese Passwörter an einem sicheren Ort notieren. Sie müssen das Passwort des Benutzers kibana_system
im nächsten Abschnitt dieses Tutorials verwenden, und das Passwort des Benutzers elastic
im Schritt Konfiguration von Filebeat dieses Tutorials.
Zu diesem Zeitpunkt im Tutorial haben Sie die Konfiguration von Elasticsearch abgeschlossen. Der nächste Abschnitt erläutert, wie Sie die Netzwerkeinstellungen von Kibana und das xpack
-Sicherheitsmodul konfigurieren.
Schritt 3 – Konfigurieren von Kibana
In dem vorherigen Abschnitt dieses Tutorials haben Sie Elasticsearch so konfiguriert, dass es Verbindungen über die private IP-Adresse Ihres Elasticsearch-Servers akzeptiert. Sie müssen dasselbe für Kibana tun, damit Filebeats auf Ihrem Suricata-Server darauf zugreifen können.
Zuerst aktivieren Sie die Sicherheitsfunktionalität von Kibana’s xpack
, indem Sie einige Geheimnisse generieren, die Kibana verwenden wird, um Daten in Elasticsearch zu speichern. Dann konfigurieren Sie Kibanas Netzwerkeinstellungen und Authentifizierungsdetails, um eine Verbindung zu Elasticsearch herzustellen.
Aktivierung von xpack.security
in Kibana
Um mit den xpack
-Sicherheitseinstellungen in Kibana zu beginnen, müssen Sie einige Verschlüsselungsschlüssel generieren. Kibana verwendet diese Schlüssel, um Sitzungsdaten (wie Cookies) sowie verschiedene gespeicherte Dashboards und Datenansichten in Elasticsearch zu speichern.
Sie können die erforderlichen Verschlüsselungsschlüssel mithilfe des Dienstprogramms kibana-encryption-keys
generieren, das im Verzeichnis /usr/share/kibana/bin
enthalten ist. Führen Sie Folgendes aus, um zum Verzeichnis zu cd
und dann die Schlüssel zu generieren:
Der -q
-Flag unterdrückt die Anweisungen des Tools, und der --force
-Flag stellt sicher, dass Sie neue Schlüssel erstellen. Sie sollten eine Ausgabe ähnlich der folgenden erhalten:
Outputxpack.encryptedSavedObjects.encryptionKey: 66fbd85ceb3cba51c0e939fb2526f585
xpack.reporting.encryptionKey: 9358f4bc7189ae0ade1b8deeec7f38ef
xpack.security.encryptionKey: 8f847a594e4a813c4187fa93c884e92b
Kopieren Sie diese drei Schlüssel an einen sicheren Ort. Sie werden sie nun zur Konfigurationsdatei von Kibana /etc/kibana/kibana.yml
hinzufügen.
Öffnen Sie die Datei mit vi
oder Ihrem bevorzugten Editor:
Gehen Sie mit der vi
-Verknüpfung SHIFT+G
ans Ende der Datei. Fügen Sie die drei xpack
-Zeilen am Ende der Datei ein:
. . .
# Legt die zu verwendende Gebietsschema für alle lokalisierbaren Zeichenfolgen, Datum- und Zahlenformate fest.
# Unterstützte Sprachen sind folgende: Englisch - en, standardmäßig, Chinesisch - zh-CN.
#i18n.locale: "en"
xpack.encryptedSavedObjects.encryptionKey: 66fbd85ceb3cba51c0e939fb2526f585
xpack.reporting.encryptionKey: 9358f4bc7189ae0ade1b8deeec7f38ef
xpack.security.encryptionKey: 8f847a594e4a813c4187fa93c884e92b
Halten Sie die Datei geöffnet und gehen Sie zum nächsten Abschnitt, in dem Sie die Netzwerkeinstellungen von Kibana konfigurieren.
Konfigurieren des Kibana-Netzwerks
Um das Netzwerk von Kibana so zu konfigurieren, dass es über die private IP-Adresse Ihres Elasticsearch-Servers verfügbar ist, finden Sie die auskommentierte #server.host: "localhost"
-Zeile in /etc/kibana/kibana.yml
. Die Zeile befindet sich am Anfang der Datei. Fügen Sie eine neue Zeile hinzu, die Ihre Serverprivate IP-Adresse enthält, wie unten hervorgehoben:
# Kibana wird von einem Backend-Server bereitgestellt. Diese Einstellung legt den zu verwendenden Port fest.
#server.port: 5601
# Legt die Adresse fest, an die der Kibana-Server gebunden wird. IP-Adressen und Hostnamen sind beide gültige Werte.
# Die Standardeinstellung ist 'localhost', was normalerweise bedeutet, dass entfernte Maschinen keine Verbindung herstellen können.
# Um Verbindungen von entfernten Benutzern zuzulassen, setzen Sie diesen Parameter auf eine Nicht-Loopback-Adresse.
#server.host: "localhost"
server.host: "your_private_ip"
Ersetzen Sie Ihre private IP-Adresse durch die Ihre_private_IP
-Adresse.
Speichern Sie die Datei und schließen Sie sie, wenn Sie mit der Bearbeitung fertig sind. Als Nächstes müssen Sie den Benutzernamen und das Passwort konfigurieren, das Kibana verwendet, um eine Verbindung zu Elasticsearch herzustellen.
Konfigurieren von Kibana-Anmeldeinformationen
Es gibt zwei Möglichkeiten, den Benutzernamen und das Passwort festzulegen, das Kibana zur Authentifizierung bei Elasticsearch verwendet. Die erste Möglichkeit besteht darin, die Werte in der Konfigurationsdatei /etc/kibana/kibana.yml
zu bearbeiten und dort hinzuzufügen. Die zweite Methode besteht darin, die Werte im keystore von Kibana zu speichern, einer verschleierten Datei, die Kibana verwenden kann, um Geheimnisse zu speichern.
In diesem Tutorial verwenden wir die Methode des Keystores, da sie das direkte Bearbeiten der Konfigurationsdatei von Kibana vermeidet.
Wenn Sie stattdessen die Datei bearbeiten möchten, sind die Einstellungen, die darin konfiguriert werden müssen, elasticsearch.username
und elasticsearch.password
.
Wenn Sie sich entscheiden, die Konfigurationsdatei zu bearbeiten, überspringen Sie den Rest der Schritte in diesem Abschnitt.
Um ein Geheimnis zum Keystore mithilfe des Dienstprogramms kibana-keystore
hinzuzufügen, navigieren Sie zunächst zum Verzeichnis /usr/share/kibana/bin
. Führen Sie dann den folgenden Befehl aus, um den Benutzernamen für Kibana festzulegen:
Sie erhalten eine Aufforderung wie folgt:
Enter value for elasticsearch.username: *************
Geben Sie kibana_system
ein, wenn Sie dazu aufgefordert werden, entweder durch Kopieren und Einfügen oder durch sorgfältiges Eintippen des Benutzernamens. Jedes Zeichen, das Sie eingeben, wird mit einem *
Sternchen maskiert. Drücken Sie ENTER
oder RETURN
, wenn Sie mit der Eingabe des Benutzernamens fertig sind.
Wiederholen Sie den Vorgang nun, um das Passwort zu speichern. Stellen Sie sicher, dass Sie das Passwort für den Benutzer kibana_system
kopieren, das Sie im vorherigen Abschnitt dieses Tutorials generiert haben. Zur Referenz: Im Beispiel dieses Tutorials lautet das Passwort 1HLVxfqZMd7aFQS6Uabl
.
Führen Sie den folgenden Befehl aus, um das Passwort festzulegen:
Wenn Sie dazu aufgefordert werden, fügen Sie das Passwort ein, um etwaige Übertragungsfehler zu vermeiden:
Enter value for elasticsearch.password: ********************
Starten von Kibana
Nachdem Sie die Netzwerkeinstellungen und die xpack
-Sicherheitseinstellungen für Kibana konfiguriert und Anmeldeinformationen zum Keystore hinzugefügt haben, müssen Sie es starten, damit die Änderungen wirksam werden.
Führen Sie den folgenden systemctl
-Befehl aus, um Kibana neu zu starten:
Sobald Kibana gestartet ist, können Sie zum nächsten Abschnitt dieses Tutorials übergehen, in dem Sie Filebeat auf Ihrem Suricata-Server konfigurieren, um seine Protokolle an Elasticsearch zu senden.
Schritt 4 — Installation von Filebeat
Nun, da Ihre Elasticsearch- und Kibana-Prozesse mit den richtigen Netzwerk- und Authentifizierungseinstellungen konfiguriert sind, ist der nächste Schritt die Installation und Konfiguration von Filebeat auf Ihrem Suricata-Server.
Um mit der Installation von Filebeat zu beginnen, fügen Sie den Elastic GPG-Schlüssel Ihrem Suricata-Server mit dem folgenden Befehl hinzu:
Erstellen Sie als nächstes eine elasticsearch.repo
-Datei in Ihrem Verzeichnis /etc/yum/yum.repos.d
mit folgendem Inhalt, verwenden Sie vi
oder Ihren bevorzugten Editor:
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
Wenn Sie mit den Änderungen fertig sind, speichern und verlassen Sie die Datei. Installieren Sie nun das Filebeat-Paket mit dem Befehl dnf
:
Als nächstes müssen Sie Filebeat konfigurieren, um eine Verbindung sowohl zu Elasticsearch als auch zu Kibana herzustellen. Öffnen Sie die Konfigurationsdatei /etc/filebeat/filebeat.yml
mit vi
oder Ihrem bevorzugten Editor:
Suchen Sie den Abschnitt Kibana
in der Datei, ungefähr in Zeile 100. Fügen Sie eine Zeile nach der auskommentierten Zeile #host: "localhost:5601"
hinzu, die auf die private IP-Adresse und den Port Ihrer Kibana-Instanz zeigt:
. . .
# Ab Beats-Version 6.0.0 werden die Dashboards über die Kibana-API geladen.
# Dies erfordert eine Konfiguration des Kibana-Endpunkts.
setup.kibana:
# Kibana-Host
# Schema und Port können ausgelassen werden und werden auf die Standardwerte (http und 5601) gesetzt.
# Falls Sie einen zusätzlichen Pfad angeben, ist das Schema erforderlich: http://localhost:5601/path
# IPv6-Adressen sollten immer wie folgt definiert sein: https://[2001:db8::1]:5601
#host: "localhost:5601"
host: "your_private_ip:5601"
. . .
Diese Änderung stellt sicher, dass Filebeat eine Verbindung zu Kibana herstellen kann, um die verschiedenen SIEM-Indizes, Dashboards und Verarbeitungspipelines in Elasticsearch zu erstellen, um Ihre Suricata-Protokolle zu verarbeiten.
Als nächstes finden Sie den Abschnitt Elasticsearch Output
der Datei um Zeile 130 herum und bearbeiten die Einstellungen für hosts
, username
und password
, um die Werte für Ihren Elasticsearch-Server anzupassen:
output.elasticsearch:
# Array der Hosts, mit denen eine Verbindung hergestellt werden soll.
hosts: ["your_private_ip:9200"]
# Protokoll - entweder `http` (Standard) oder `https`.
#protocol: "https"
# Authentifizierungsanmeldeinformationen - entweder API-Schlüssel oder Benutzername/Passwort.
#api_key: "id:api_key"
username: "elastic"
password: "6kNbsxQGYZ2EQJiqJpgl"
. . .
Ersetzen Sie auf der hosts
-Zeile die private IP-Adresse Ihres Elasticsearch-Servers. Kommentieren Sie das Feld username
aus und lassen Sie es auf den Benutzer elastic
eingestellt. Ändern Sie das Feld password
von changeme
auf das Passwort für den Benutzer elastic
, das Sie im Abschnitt Konfigurieren von Elasticsearch-Passwörtern dieses Tutorials generiert haben.
Speichern und schließen Sie die Datei, wenn Sie mit der Bearbeitung fertig sind. Aktivieren Sie als nächstes das integrierte Suricata-Modul von Filebeat mit dem folgenden Befehl:
Da Filebeat nun so konfiguriert ist, dass es eine Verbindung zu Elasticsearch und Kibana herstellt und das Suricata-Modul aktiviert ist, ist der nächste Schritt das Laden der SIEM-Dashboards und Pipelines in Elasticsearch.
Führen Sie den Befehl filebeat setup
aus. Es kann einige Minuten dauern, bis alles geladen ist:
Sobald der Befehl abgeschlossen ist, sollten Sie eine Ausgabe wie folgt erhalten:
OutputOverwriting ILM policy is disabled. Set `setup.ilm.overwrite: true` for enabling.
Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead.
See more: https://www.elastic.co/guide/en/machine-learning/current/index.html
It is not possble to load ML jobs into an Elasticsearch 8.0.0 or newer using the Beat.
Loaded machine learning job configurations
Loaded Ingest pipelines
Wenn keine Fehler vorliegen, verwenden Sie den systemctl
-Befehl, um Filebeat zu starten. Es wird beginnen, Ereignisse aus Suricatas eve.json
-Protokoll an Elasticsearch zu senden, sobald es läuft.
Jetzt, da Filebeat, Kibana und Elasticsearch konfiguriert sind, um Ihre Suricata-Protokolle zu verarbeiten, ist der letzte Schritt in diesem Tutorial, sich mit Kibana zu verbinden und die SIEM-Dashboards zu erkunden.
Schritt 5 – Navigation durch Kibanas SIEM-Dashboards
Kibana ist die grafische Komponente des Elastic-Stacks. Sie werden Kibana mit Ihrem Browser verwenden, um Suricatas Ereignis- und Alarmdaten zu erkunden. Da Sie Kibana so konfiguriert haben, dass es nur über die private IP-Adresse Ihres Elasticsearch-Servers verfügbar ist, müssen Sie eine SSH-Verbindung verwenden, um sich mit Kibana zu verbinden.
Verbindung zu Kibana über SSH
SSH hat eine Option -L
, die es Ihnen ermöglicht, den Netzwerkverkehr auf einem lokalen Port über seine Verbindung zu einer entfernten IP-Adresse und Port auf einem Server weiterzuleiten. Sie werden diese Option verwenden, um den Datenverkehr von Ihrem Browser zu Ihrer Kibana-Instanz weiterzuleiten.
Auf Linux, macOS und aktualisierten Versionen von Windows 10 und höher können Sie den integrierten SSH-Client verwenden, um den Tunnel zu erstellen. Sie verwenden diesen Befehl jedes Mal, wenn Sie eine Verbindung zu Kibana herstellen möchten. Sie können diese Verbindung jederzeit schließen und dann den SSH-Befehl erneut ausführen, um den Tunnel wiederherzustellen.
Führen Sie den folgenden Befehl in einem Terminal auf Ihrem lokalen Desktop oder Laptop aus, um den SSH-Tunnel zu Kibana zu erstellen:
Die verschiedenen Argumente für SSH sind:
- Die
-L
-Flag leitet den Datenverkehr an Ihr lokales System auf Port5601
zum Remote-Server weiter. - Der Teil
Ihre_Private_IP:5601
des Befehls gibt den Dienst auf Ihrem Elasticsearch-Server an, zu dem Ihr Datenverkehr weitergeleitet wird. In diesem Fall handelt es sich um Kibana. Ersetzen Sie unbedingt die private IP-Adresse Ihres Elasticsearch-Servers durchIhre_Private_IP
. - Die Adresse
203.0.113.5
ist die öffentliche IP-Adresse, die Sie zum Verbinden und Verwalten Ihres Servers verwenden. Ersetzen Sie diese durch die öffentliche IP-Adresse Ihres Elasticsearch-Servers. - Die
-N
-Flag weist SSH an, keinen Befehl wie eine interaktive/bin/bash
-Shell auszuführen, sondern nur die Verbindung offen zu halten. Sie wird im Allgemeinen verwendet, wenn Ports weitergeleitet werden, wie in diesem Beispiel.
Wenn Sie den Tunnel jederzeit schließen möchten, drücken Sie CTRL+C
.
Auf Windows sollte Ihr Terminal dem folgenden Screenshot ähneln:
Hinweis: Es kann sein, dass Sie aufgefordert werden, ein Passwort einzugeben, wenn Sie keinen SSH-Schlüssel verwenden. Geben Sie es ein oder fügen Sie es in die Eingabeaufforderung ein und drücken Sie ENTER
oder RETURN
.
Unter macOS und Linux wird Ihr Terminal ähnlich wie im folgenden Screenshot aussehen:
Nachdem Sie sich über SSH mit dem Elasticsearch-Server verbunden haben und die Portweiterleitung eingerichtet wurde, öffnen Sie Ihren Browser und besuchen Sie http://127.0.0.1:5601. Sie werden zur Anmeldeseite von Kibana weitergeleitet:
Wenn Ihr Browser keine Verbindung zu Kibana herstellen kann, erhalten Sie eine Meldung wie die folgende in Ihrem Terminal:
Outputchannel 3: open failed: connect failed: No route to host
Dieser Fehler zeigt an, dass Ihr SSH-Tunnel den Kibana-Dienst auf Ihrem Server nicht erreichen kann. Stellen Sie sicher, dass Sie die richtige private IP-Adresse für Ihren Elasticsearch-Server angegeben haben, und laden Sie die Seite in Ihrem Browser neu.
Melden Sie sich auf Ihrem Kibana-Server mit elastic
als Benutzername und dem Passwort an, das Sie zuvor in diesem Tutorial für den Benutzer kopiert haben.
Durchsuchen von Kibana SIEM-Dashboards
Nachdem Sie sich bei Kibana angemeldet haben, können Sie die von Filebeat für Sie konfigurierten Suricata-Dashboards erkunden.
In das Suchfeld oben auf der Kibana-Startseite geben Sie die Suchbegriffe type:dashboard suricata
ein. Diese Suche liefert zwei Ergebnisse: die Suricata-Ereignisse und die Suricata-Alarme-Dashboards gemäß dem folgenden Screenshot:
Klicken Sie auf das Ergebnis [Filebeat Suricata] Ereignisübersicht
, um das Kibana-Dashboard zu besuchen, das eine Übersicht aller protokollierten Suricata-Ereignisse anzeigt:
Um das Suricata Alerts-Dashboard zu besuchen, wiederholen Sie die Suche oder klicken Sie auf den Alerts
-Link, der im Ereignis-Dashboard enthalten ist. Ihre Seite sollte dem folgenden Screenshot ähneln:
Wenn Sie die Ereignisse und Warnungen, die jedes Dashboard anzeigt, überprüfen möchten, scrollen Sie nach unten auf der Seite, wo Sie eine Tabelle finden, die jedes Ereignis und jede Warnung auflistet. Sie können jeden Eintrag erweitern, um den Original-Protokolleintrag von Suricata anzuzeigen, und die verschiedenen Felder wie Quell- und Ziel-IPs für eine Warnung, den Angriffstyp, die Suricata-Signatur-ID und andere im Detail untersuchen.
Kibana verfügt auch über einen eingebauten Satz von Sicherheits-Dashboards, auf die Sie über das Menü auf der linken Seite des Browserfensters zugreifen können. Navigieren Sie zum Netzwerk Dashboard für eine Übersicht über Ereignisse, die auf einer Karte dargestellt werden, sowie aggregierte Daten zu Ereignissen in Ihrem Netzwerk. Ihr Dashboard sollte dem folgenden Screenshot ähneln:
Sie können zum Ende des Netzwerk-Dashboards scrollen, um eine Tabelle zu finden, die alle Ereignisse auflistet, die Ihrem festgelegten Suchzeitraum entsprechen. Sie können auch jedes Ereignis im Detail untersuchen oder ein Ereignis auswählen, um eine Kibana-Zeitleiste zu generieren, die Sie dann verwenden können, um spezifische Verkehrsflüsse, Warnungen oder Community-IDs zu untersuchen.
Fazit
In diesem Tutorial haben Sie Elasticsearch und Kibana auf einem eigenständigen Server installiert und konfiguriert. Sie haben beide Tools so eingerichtet, dass sie unter einer privaten IP-Adresse verfügbar sind. Außerdem haben Sie die Authentifizierungseinstellungen von Elasticsearch und Kibana mithilfe des xpack
-Sicherheitsmoduls konfiguriert, das bei jedem Tool enthalten ist.
Nach Abschluss der Konfigurationsschritte für Elasticsearch und Kibana haben Sie auch Filebeat auf Ihrem Suricata-Server installiert und konfiguriert. Sie haben Filebeat verwendet, um die Dashboards von Kibana zu befüllen und Suricata-Protokolle an Elasticsearch zu senden.
Zuletzt haben Sie einen SSH-Tunnel zu Ihrem Elasticsearch-Server erstellt und sich in Kibana eingeloggt. Dort haben Sie die neuen Dashboards für Suricata-Ereignisse und -Warnungen sowie das Netzwerk-Dashboard gefunden.
Im letzten Tutorial dieser Serie werden Sie durch die Verwendung der SIEM-Funktionalität von Kibana zur Verarbeitung Ihrer Suricata-Warnungen geführt. Dabei werden Sie erkunden, wie Sie Fälle erstellen, um bestimmte Warnungen zu verfolgen, Zeitachsen erstellen, um Netzwerkflüsse zu korrelieren, und Regeln erstellen, um bestimmte Suricata-Ereignisse anzupassen, die Sie genauer verfolgen oder analysieren möchten.