Suricata ist ein Netzwerküberwachungstool, das jedes Paket des Internetverkehrs, das durch Ihren Server fließt, untersucht und verarbeitet. Es kann Protokollereignisse generieren, Warnungen auslösen und den Datenverkehr unterbrechen, wenn verdächtige Aktivitäten erkannt werden.
Sie können Suricata entweder auf einem einzelnen Computer installieren, um seinen Datenverkehr zu überwachen, oder auf einem Gateway-Host bereitstellen, um den gesamten ein- und ausgehenden Datenverkehr von anderen damit verbundenen Servern zu scannen. Sie können Suricata mit Elasticsearch, Kibana und Filebeat kombinieren, um ein SIEM-Tool (Security Information and Event Management) zu erstellen.
In diesem Tutorial installieren Sie Suricata IDS zusammen mit ElasticStack auf einem Rocky Linux 8-Server. Die verschiedenen Komponenten des Stapels sind:
- Elasticsearch zum Speichern, Indizieren, Korrelieren und Suchen der Sicherheitsereignisse vom Server.
- Kibana um die in Elasticsearch gespeicherten Protokolle anzuzeigen.
- Filebeat um Suricatas
eve.json
zu parsen log-Datei und senden Sie jedes Ereignis zur Verarbeitung an Elasticsearch. - Suricata um den Netzwerkverkehr auf verdächtige Ereignisse zu scannen und die ungültigen Pakete zu verwerfen.
Das Tutorial ist in zwei Teile unterteilt, der erste Teil befasst sich mit der Installation und Konfiguration von Suricata und der zweite Teil mit der Installation und Konfiguration von Elastic Stack.
Für unser Tutorial werden wir Suricata und den Elastic Stack auf verschiedenen Servern installieren.
Voraussetzungen
-
Die Server, die den Elastic Stack und Suricata hosten, sollten mindestens 4 GB RAM und 2 CPU-Kerne haben.
-
Die Server sollten in der Lage sein, über private IP-Adressen miteinander zu kommunizieren.
-
Auf den Servern sollte Rocky Linux 8 mit einem sudo-Benutzer ohne Rootberechtigung ausgeführt werden.
-
Wenn Sie von überall auf Kibana-Dashboards zugreifen möchten, richten Sie eine Domain ein (
kibana.example.com
), der auf den Server zeigt, auf dem Suricata installiert wird. -
Installieren Sie wichtige Pakete auf beiden Servern.
$ sudo dnf install yum-utils nano curl
Firewall konfigurieren
TEIL 1
Schritt 1 - Suricata installieren
Um Suricata zu installieren, müssen Sie das Paket-Repository der Open Information Security Foundation (OISF) zu Ihrem Server hinzufügen.
$ sudo dnf install 'dnf-command(copr)'$ sudo dnf copr enable @oisf/suricata-6.0
Der erste Befehl aktiviert die Community-Projekte (copr
) für den dnf
Paket-Installationsprogramm. Der zweite Befehl aktiviert und fügt das OISF-Repository zu Ihrem System hinzu. suricata-6.0
aktiviert das Repository für die neueste stabile Version der Software. Drücken Sie y
und ENTER
jedes Mal, wenn Sie dazu aufgefordert werden.
Fügen Sie als Nächstes das EPEL-Repository hinzu.
$ sudo dnf install epel-release
Suricata installieren.
$ sudo dnf install suricata
Aktivieren Sie den Suricata-Dienst.
$ sudo systemctl enable suricata
Schritt 2 – Suricata konfigurieren
Suricata speichert seine Konfiguration in /etc/suricata/suricata.yaml
Datei. Der Standardmodus für Suricata ist der IDS-Modus (Intrusion Detection System), in dem der Datenverkehr nur protokolliert und nicht gestoppt wird. Wenn Sie neu in Suricata sind, sollten Sie den Modus unverändert lassen. Sobald Sie es konfiguriert und mehr erfahren haben, können Sie den IPS-Modus (Intrusion Prevention System) aktivieren.
Community-ID aktivieren
Das Community-ID-Feld erleichtert die Korrelation von Daten zwischen Datensätzen, die von verschiedenen Überwachungstools generiert wurden. Da wir Suricata mit Elasticsearch verwenden werden, kann es hilfreich sein, die Community-ID zu aktivieren.
Öffnen Sie die Datei /etc/suricata/suricata.yaml
zum Bearbeiten.
$ sudo nano /etc/suricata/suricata.yaml
Suchen Sie die Zeile # Community Flow ID
und setzen Sie den Wert der Variablen community-id
auf true
.
Jetzt tragen Ihre Ereignisse eine ID wie 1:S+3BA2UmrHK0Pk+u3XH78GAFTtQ=
die Sie verwenden können, um Datensätze über verschiedene Überwachungstools hinweg abzugleichen.
Netzwerkschnittstelle auswählen
Die standardmäßige Suricata-Konfigurationsdatei untersucht den Datenverkehr auf eth0
Gerät/Netzwerkschnittstelle. Wenn Ihr Server eine andere Netzwerkschnittstelle verwendet, müssen Sie diese in der Konfiguration aktualisieren.
Überprüfen Sie den Gerätenamen Ihrer Netzwerkschnittstelle mit dem folgenden Befehl.
$ ip -p -j route show default
Sie erhalten eine Ausgabe wie die folgende.
[ { "dst":"default", "gateway":"164.90.192.1", "dev":"eth0", "protocol":"static", "metric":100, "flags":[ ] } ]
Der dev
Variable bezieht sich auf das Netzwerkgerät. In unserer Ausgabe zeigt es eth0
als Netzwerkgerät. Ihre Ausgabe kann je nach System unterschiedlich sein.
Nachdem Sie nun Ihren Gerätenamen kennen, öffnen Sie die Konfigurationsdatei.
$ sudo nano /etc/suricata/suricata.yaml
Suchen Sie die Zeile af-packet:
etwa bei Zeile 580. Setzen Sie darunter den Wert der Variablen interface
zum Gerätenamen für Ihr System.
# Linux high speed capture supportaf-packet:- interface:eth0 # Anzahl der Empfangs-Threads. "auto" verwendet die Anzahl der Kerne #threads:auto # Default clusterid. AF_PACKET lädt Ausgleichspakete basierend auf dem Fluss. Cluster-ID:99. . .
Wenn Sie zusätzliche Schnittstellen hinzufügen möchten, können Sie dies tun, indem Sie sie am Ende des af-packet
hinzufügen Abschnitt etwa bei Zeile 650.
Um eine neue Schnittstelle hinzuzufügen, fügen Sie sie direkt über - interface: default
ein Abschnitt wie unten gezeigt.
# Weitere Informationen zum eBPF- und XDP-Setup einschließlich Bypass, Filter und Lastausgleich # finden Sie unter doc/userguide/capture-hardware/ebpf-xdp.rst. - Schnittstelle:enp0s1 Cluster-ID:98... - Schnittstelle:Standard #threads:auto #use-mmap:no #tpacket-v3:yes
Wir haben eine neue Schnittstelle enp0s1
hinzugefügt und einen eindeutigen Wert für die cluster-id
Variable in unserem Beispiel. Sie müssen jeder hinzugefügten Schnittstelle eine eindeutige Cluster-ID hinzufügen.
Neues Laden der Live-Regel
Sie müssen Suricata jedes Mal neu starten, wenn Sie Regeln hinzufügen, entfernen oder bearbeiten. Durch die Aktivierung von Live Rule kann Suricata alle Regeländerungen ohne Neustart verarbeiten.
Um das Live-Neuladen zu aktivieren, fügen Sie die folgenden Zeilen am Ende der Konfigurationsdatei hinzu.
Wenn das Live-Neuladen aktiviert ist, können Sie den folgenden Befehl verwenden, um Regeln neu zu laden, ohne den Suricata-Prozess neu zu starten.
$ sudo kill -usr2 $(pidof suricata)
Der $(pidof suricata)
flag lokalisiert die Prozess-ID des Suricata-Prozesses. Der -usr2
Teil des kill
Befehl sendet ein SIGUSR2
Signal an den Suricata-Prozess. Der SIGUSR2
Signal ist mit Suricata konfiguriert, um die Regeln neu zu laden.
Wenn Sie fertig sind, speichern Sie die Datei, indem Sie Strg + X drücken und geben Sie Y ein wenn Sie dazu aufgefordert werden.
Verzeichnisberechtigungen konfigurieren
Suricata hat automatisch einen Systembenutzer und eine Gruppe mit dem Namen suricata
erstellt während des Installationsvorgangs. Sie müssen die richtigen Verzeichnisberechtigungen erteilen, damit die Installation ordnungsgemäß funktioniert.
Führen Sie den folgenden Befehl aus, um suricata
festzulegen als die Gruppe für Suricatas Verzeichnisse.
$ sudo chgrp -R suricata /etc/suricata$ sudo chgrp -R suricata /var/lib/suricata/rules$ sudo chgrp -R suricata /var/lib/suricata/update$ sudo chgrp -R suricata /var/ log/suricata
Legen Sie die Gruppenberechtigungen zum Lesen und Schreiben fest.
$ sudo chmod -R g+r /etc/suricata/$ sudo chmod -R g+rw /var/lib/suricata/rules$ sudo chmod -R g+rw /var/lib/suricata/update$ sudo chmod -R g+rw /var/log/suricata
Fügen Sie Ihren aktuellen Benutzernamen zu suricata hinzu Gruppe, sodass Sie Operationen direkt ausführen können, ohne sudo zu benötigen.
$ sudo usermod -a -G suricata $USER
Um die neue Gruppenmitgliedschaft zu übernehmen, melden Sie sich vom Server ab und wieder an oder geben Sie Folgendes ein:
$su - ${USER}
Sie werden aufgefordert, Ihr Benutzerkennwort einzugeben, um fortzufahren.
Bestätigen Sie, dass Ihr Benutzer jetzt zu suricata hinzugefügt wurde gruppieren, indem Sie Folgendes eingeben:
$ id -nGusername sudo suricata
Schritt 3 – Suricata-Regeln konfigurieren
Suricata verwendet standardmäßig nur einen begrenzten Satz von Regeln, um den Netzwerkverkehr zu erkennen. Mit einem Tool namens suricata-update
können Sie weitere Regelsätze von externen Anbietern hinzufügen . Führen Sie den folgenden Befehl aus, um zusätzliche Regeln einzuschließen.
$ suricata-update16/2/2022 -- 07:00:16 --- Verwendung des Datenverzeichnisses /var/lib/suricata.16/2/2022 -- 07:00:16 - -- Using Suricata configuration /etc/suricata/suricata.yaml16/2/2022 -- 07:00:16 - -- Using /usr/share/suricata/rules for Suricata bereitgestellte Regeln...... 16/2/2022 -- 07:00:16 - -- Keine Quellen konfiguriert, verwendet neue Bedrohungen Open('https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules .tar.gz', None, True)16/2/2022 -- 07:00:16 - -- Überprüfen von https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules .tar.gz.md5.16/2/2022 -- 07:00:16 - -- Abrufen von https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tar. gz. 100 % - 3162050/3162050.....16/2/2022 -- 07:00:23 - -- Schreiben von Regeln nach /var/lib/suricata/rules/suricata.rules:insgesamt:32004; aktiviert:24611; hinzugefügt:8; entfernt 1; geändert:121816/2/2022 -- 07:00:23 - -- Writing /var/lib/suricata/rules/classification.config16/2/2022 -- 07:00:23 - -- Test mit Suricata -T.16/2/2022 -- 07:01:16 - -- Done.
Regelsatzanbieter hinzufügen
Sie können die Regeln von Suricata erweitern, indem Sie weitere Anbieter hinzufügen. Es kann Regeln von einer Vielzahl von kostenlosen und kommerziellen Anbietern abrufen.
Sie können die Standardanbieterliste mit dem folgenden Befehl auflisten.
$ suricata-Listenquellen aktualisieren
Zum Beispiel, wenn Sie tgreen/hunting
einschließen möchten Regelsatz, können Sie ihn mit dem folgenden Befehl aktivieren.
$ suricata-update enable-source tgreen/hunting
Führen Sie das suricata-update
aus Befehl erneut, um die neuen Regeln herunterzuladen und zu aktualisieren.
Schritt 4 – Suricata-Konfiguration validieren
Suricata wird mit einem Validierungstool ausgeliefert, um die Konfigurationsdatei und die Regeln auf Fehler zu überprüfen. Führen Sie den folgenden Befehl aus, um das Validierungstool auszuführen.
$ sudo suricata -T -c /etc/suricata/suricata.yaml -v22/2/2022 -- 23:20:10 -- Ausführen von suricata im Testmodus22/2/2022 -- 23:20 :10 - - Dies ist Suricata Version 6.0.4 RELEASE, die im SYSTEM-Modus ausgeführt wird22/2/2022 -- 23:20:10 - - CPUs/Kerne online:222/2/2022 -- 23:20 :10 - - Kappen für Hauptthread fallengelassen22/2/2022 -- 23:20:10 - - schnelles Ausgabegerät (regulär) initialisiert:fast.log22/2/2022 -- 23:20:10 - - Eve-Log-Ausgabegerät (normal) initialisiert:eve.json22/2/2022 -- 23:20:10 - - Statistik-Ausgabegerät (normal) initialisiert:stats.log22/2/2022 -- 23:20:21 - - 1 Regeldatei verarbeitet. 24611 Regeln erfolgreich geladen, 0 Regeln fehlgeschlagen. 24614 Unterschriften verarbeitet. 1216 sind reine IP-Regeln, 4120 prüfen die Paketnutzlast, 19074 prüfen die Anwendungsschicht, 108 sind nur Decoder-Ereignisse22/2/2022 – 23:21:02 – – Die bereitgestellte Konfiguration wurde erfolgreich geladen. Exiting.22/2/2022 -- 23:21:03 - - Bereinigen der Signaturgruppierungsstruktur ... abgeschlossen
Das -T
Flag weist Suricata an, im Testmodus zu laufen, das -c
Flag konfiguriert den Speicherort der Konfigurationsdatei und -v
flag gibt die ausführliche Ausgabe des Befehls aus. Abhängig von Ihrer Systemkonfiguration und der Anzahl der hinzugefügten Regeln kann es einige Minuten dauern, bis der Befehl abgeschlossen ist.
Schritt 5 – Suricata ausführen
Nachdem Suricata konfiguriert und eingerichtet ist, ist es an der Zeit, die Anwendung auszuführen.
$ sudo systemctl start suricata
Überprüfen Sie den Status des Prozesses.
$ sudo systemctl status suricata
Sie sollten die folgende Ausgabe sehen, wenn alles richtig funktioniert.
Das Parsen aller Regeln kann einige Minuten dauern. Daher ist die obige Statusprüfung kein vollständiger Hinweis darauf, ob Suricata aktiv und bereit ist. Sie können die Protokolldatei mit dem folgenden Befehl darauf überwachen.
$ sudo tail -f /var/log/suricata/suricata.log
Wenn Sie die folgende Zeile in der Protokolldatei sehen, bedeutet dies, dass Suricata ausgeführt wird und bereit ist, den Netzwerkverkehr zu überwachen.
16/02/2022 -- 07:18:39 -- Alle AFP-Capture-Threads laufen.
Schritt 6 – Testen der Suricata-Regeln
Wir werden überprüfen, ob Suricata verdächtigen Datenverkehr erkennt. Der Suricata-Leitfaden empfiehlt, die ET Open-Regelnummer 2100498 zu testen mit dem folgenden Befehl.
$ curl http://testmynids.org/uid/index.html
Sie erhalten die folgende Antwort.
uid=0(root) gid=0(root) groups=0(root)
Der obige Befehl gibt vor, die Ausgabe der id
zurückzugeben Befehl, der auf einem kompromittierten System ausgeführt werden kann. Um zu testen, ob Suricata den Datenverkehr erkannt hat, müssen Sie die Protokolldatei anhand der angegebenen Regelnummer überprüfen.
$ grep 2100498 /var/log/suricata/fast.log
Wenn Ihre Anfrage IPv6 verwendet hat, sollten Sie die folgende Ausgabe sehen.
22.02.2022-23:24:33.997371 [**] [1:2100498:7] GPL ATTACK_RESPONSE-ID-Prüfung hat root [**] zurückgegeben [Klassifizierung:Potenziell schädlicher Datenverkehr] [Priorität:2] {TCP} 2600:9000:2204:5c00:0018:30b3:e400:93a1:80 -> 2a03:b0c0:0002:00d0:0000:0000:0fc2:b001:41468
Wenn Ihre Anfrage IPv4 verwendet, sehen Sie die folgende Ausgabe.
22.02.2022-23:21:46.783476 [**] [1:2100498:7] GPL ATTACK_RESPONSE-ID-Prüfung hat root [**] zurückgegeben [Klassifizierung:Potenziell schädlicher Datenverkehr] [Priorität:2] {TCP} 204.246.178.81:80 -> 164.90.192.1:36364
Suricata protokolliert auch Ereignisse in /var/log/suricata/eve.log
Datei im JSON-Format. Um diese Regeln zu lesen und zu interpretieren, müssen Sie jq
installieren was den Rahmen dieses Tutorials sprengen würde.
Wir sind mit Teil eins des Tutorials fertig, wo wir Suricata installiert und getestet haben. Der nächste Teil umfasst die Installation des ELK-Stacks und die Einrichtung zur Visualisierung von Suricata und seinen Protokollen. Dieser zweite Teil des Tutorials sollte auf dem zweiten Server durchgeführt werden, sofern nicht anders angegeben.
Schritt 7 – Installieren Sie Elasticsearch und Kibana
Der erste Schritt bei der Installation von Elasticsearch besteht darin, den Elastic GPG-Schlüssel zu Ihrem Server hinzuzufügen.
$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Erstellen Sie ein Repository für das Elasticsearch-Paket, indem Sie die Datei /etc/yum/yum.repos.d/elasticsearch.repo
erstellen und öffnen zum Bearbeiten.
$ sudo nano /etc/yum.repos.d/elasticsearch.repo
Fügen Sie den folgenden Code ein.
[elasticsearch]name=Elasticsearch-Repository für 7.x-Paketebaseurl=https://artifacts.elastic.co/packages/7.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY- elasticsearchenabled=0autorefresh=1type=rpm-md
Speichern Sie die Datei, indem Sie Strg + X drücken und geben Sie Y ein wenn Sie dazu aufgefordert werden.
Installieren Sie Elasticsearch und Kibana.
$ sudo dnf install --enablerepo=elasticsearch elasticsearch kibana
Sie müssen das Flag --enablerepo=elasticsearch
verwenden Seitdem haben wir das Repository jedes Mal standardmäßig deaktiviert. Dies verhindert eine versehentliche Aktualisierung dieser Pakete.
Suchen Sie die private IP-Adresse Ihres Servers mit dem folgenden Befehl.
$ ip -kurze Adresse showlo UNKNOWN 127.0.0.1/8 ::1/128eth0 UP 164.90.205.77/20 10.18.0.7/16 2a03:b0c0:2:d0::fef:b001/64 fe80::340a:6eff:fe5c:76ed/64eth1 UP 10.133.0.3/16 fe80::906f:b5ff:fec4:c7b8/64
Notieren Sie sich die private IP Ihres Servers (in diesem Fall 10.133.0.3). Wir bezeichnen es als your_private_IP
. Die öffentliche IP-Adresse des Servers (164.90.205.77) wird als your_public_IP
bezeichnet im verbleibenden Tutorial. Notieren Sie sich auch den Netzwerknamen Ihres Servers, eth1
.
Schritt 8 – Elasticsearch konfigurieren
Elasticsearch speichert seine Konfiguration in /etc/elasticsearch/elasticsearch.yml
Datei. Öffnen Sie die Datei zum Bearbeiten.
$ sudo nano /etc/elasticsearch/elasticsearch.yml
Elasticsearch akzeptiert standardmäßig nur lokale Verbindungen. Wir müssen es ändern, damit Kibana über die private IP-Adresse darauf zugreifen kann.
Suchen Sie die Zeile #network.host: 192.168.0.1
und fügen Sie die folgende Zeile direkt darunter hinzu, wie unten gezeigt.
# Standardmäßig ist Elasticsearch nur auf localhost zugänglich. Legen Sie hier eine andere# Adresse fest, um diesen Knoten im Netzwerk verfügbar zu machen:##network.host:192.168.0.1network.bind_host:["127.0.0.1", "your_private_IP"]## Standardmäßig hört Elasticsearch zuerst auf HTTP-Verkehr freien Port findet es ab 9200. Stellen Sie hier einen bestimmten HTTP-Port ein:
Dadurch wird sichergestellt, dass Elastic weiterhin lokale Verbindungen akzeptieren kann, während es für Kibana über die private IP-Adresse verfügbar ist.
Der nächste Schritt besteht darin, einige Sicherheitsfunktionen zu aktivieren und sicherzustellen, dass Elastic für die Ausführung auf einem einzelnen Knoten konfiguriert ist. Fügen Sie dazu die folgenden Zeilen am Ende der Datei hinzu.
Wenn Sie mehrere Elastic Search-Knoten verwenden, können Sie die erste Zeile weglassen.
Wenn Sie fertig sind, speichern Sie die Datei, indem Sie Strg + X drücken und geben Sie Y ein wenn Sie dazu aufgefordert werden.
Firewall konfigurieren
Fügen Sie die richtigen Firewall-Regeln für Elasticsearch hinzu, damit es über das private Netzwerk zugänglich ist.
$ sudo firewall-cmd --permanent --zone=internal --change-interface=eth1$ sudo firewall-cmd --permanent --zone=internal --add-service=elasticsearch$ sudo firewall-cmd -- permanent --zone=internal --add-service=kibana$ sudo firewall-cmd --reload
Stellen Sie sicher, dass Sie den Schnittstellennamen im ersten Befehl so wählen, wie Sie ihn in Schritt 7 erhalten haben. Die obigen Befehle ändern die Standardzone der Firewall auf intern und öffnen die Ports 9200, 9300 für Elasticsearch und Port 5601 für Kibana.
Elasticsearch starten
Nachdem Sie Elasticsearch konfiguriert haben, ist es an der Zeit, den Dienst zu starten.
$ sudo systemctl elastische Suche starten
Elasticsearch-Passwörter erstellen
Nachdem Sie die Sicherheitseinstellung von Elasticsearch aktiviert haben, besteht der nächste Schritt darin, einige Passwörter für den Standardbenutzer zu generieren. Elasticsearch wird mit einem Dienstprogramm zur Passworterstellung unter /usr/share/elasticsearch/bin/elasticsearch-setup-passwords
ausgeliefert die zufällige Passwörter generieren kann.
Passwörter erstellen.
$ cd /usr/share/elasticsearch/bin$ sudo ./elasticsearch-setup-passwords auto
Sie erhalten eine Ausgabe wie die folgende. Drücken Sie y
um fortzufahren, wenn Sie dazu aufgefordert werden.
Starten der Einrichtung von Passwörtern für reservierte Benutzer elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.Die Passwörter werden nach dem Zufallsprinzip generiert und auf der Konsole ausgegeben.Bitte bestätigen Sie, dass Sie fortfahren möchten [j/N] yChanged Passwort für den Benutzer apm_systemPASSWORD apm_system =EtwMg8maU67o5tvD5rseChanged Passwort für den Benutzer kibana_systemPASSWORD kibana_system =dTanR7Q2HtgDtATRvuJvChanged Passwort für den Benutzer kibanaPASSWORD Kibana =dTanR7Q2HtgDtATRvuJvChanged Passwort für den Benutzer logstash_systemPASSWORD logstash_system =XGSjxNktuNMWVfGYiboxChanged Passwort für den Benutzer beats_systemPASSWORD beats_system =JXTr7CeHkMue608qVTQaChanged Passwort für den Benutzer remote_monitoring_userPASSWORD remote_monitoring_user =Q6JTJNl3lPy0fhy6QuMPChanged Passwort für den Benutzer elasticPASSWORD elastisch =bd1YJfhSa8RC8SMvTIwg
Sie können das Dienstprogramm nur einmal ausführen, speichern Sie also alle Passwörter an einem sicheren Ort.
Schritt 9 – Kibana konfigurieren
Der erste Schritt bei der Konfiguration von Kibana ist die Aktivierung des xpack
Sicherheitsfunktion durch Generieren geheimer Schlüssel. Kibana verwendet diese geheimen Schlüssel, um Daten in Elasticsearch zu speichern. Auf das Dienstprogramm zum Generieren geheimer Schlüssel kann über /usr/share/kibana/bin
zugegriffen werden Verzeichnis.
$ cd /usr/share/kibana/bin/$ sudo ./kibana-encryption-keys generate -q --force
Das -q
Flag unterdrückt die Befehlsanweisungen und --force
Flag stellt sicher, dass neue Geheimnisse generiert werden. Sie erhalten eine Ausgabe wie die folgende.
xpack.encryptedSavedObjects.encryptionKey:0f4e5e1cf8fad1874ffed0faac6be0daxpack.reporting.encryptionKey:d435c78a4e37521e539c0e905420c9f5xpack.security.encryptionKey:7ba0e2a02747bb90fb0f9a3c267.b99ed
Kopieren Sie die Ausgabe. Öffnen Sie die Konfigurationsdatei von Kibana unter /etc/kibana/kibana.yml
zum Bearbeiten.
$ sudo nano /etc/kibana/kibana.yml
Fügen Sie den Code aus dem vorherigen Befehl am Ende der Datei ein.
Kibana-Port konfigurieren
Kibana muss so konfiguriert werden, dass es über die private IP-Adresse des Servers erreichbar ist. Suchen Sie die Zeile #server.host: "localhost"
in der Datei und fügen Sie die folgende Zeile wie gezeigt direkt darunter hinzu.
# Kibana wird von einem Back-End-Server bedient. Diese Einstellung gibt den zu verwendenden Port an.#server.port:5601# Gibt die Adresse an, an die sich der Kibana-Server bindet. Sowohl IP-Adressen als auch Hostnamen sind gültige Werte.# Der Standardwert ist 'localhost', was normalerweise bedeutet, dass Remote-Rechner keine Verbindung herstellen können.# Um Verbindungen von Remote-Benutzern zuzulassen, setzen Sie diesen Parameter auf eine Nicht-Loopback-Adresse.#server .host:"localhost"server.host:"ihre_private_IP"
Wenn Sie fertig sind, speichern Sie die Datei, indem Sie Strg + X drücken und geben Sie Y ein wenn Sie dazu aufgefordert werden.
Kibana-Zugriff konfigurieren
Der nächste Schritt besteht darin, einen Benutzernamen und ein Passwort zu erstellen, die Kibana zur Authentifizierung verwenden kann. Sie können dies tun, indem Sie die Konfigurationsdatei von Kibana direkt bearbeiten, aber dies kann ein Sicherheitsproblem verursachen. Die sichere Methode beinhaltet die Verwendung von kibana-keystore
Anwendung.
Führen Sie die folgenden Befehle aus, um einen Benutzernamen festzulegen. Geben Sie kibana_system
ein als Benutzername.
$ cd /usr/share/kibana/bin$ sudo ./kibana-keystore add elasticsearch.usernameGeben Sie den Wert für elasticsearch.username ein:*************
Führen Sie den Befehl erneut aus, um das Kennwort festzulegen. Stellen Sie sicher, dass Sie das Passwort verwenden, das Sie in Schritt 8 für Kibana erstellt haben. Für unser Tutorial lautet das Passwort dTanR7Q2HtgDtATRvuJv
.
$ sudo ./kibana-keystore add elasticsearch.passwordGeben Sie den Wert für elasticsearch.password ein:********************
Starte Kibana
Nachdem Sie den sicheren Zugriff und das Netzwerk für Kibana konfiguriert haben, starten Sie den Vorgang.
$ sudo systemctl Kibana starten
Überprüfen Sie den Status, um festzustellen, ob es ausgeführt wird.
$ sudo systemctl status kibana
Schritt 10 – Filebeat installieren und konfigurieren
Es ist wichtig zu beachten, dass wir Filebeat auf dem Suricata-Server installieren werden. Wechseln Sie also zurück und fügen Sie den Elastic GPG-Schlüssel hinzu, um loszulegen.
$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Erstellen und öffnen Sie das elastische Repository.
$ sudo nano /etc/yum.repos.d/elasticsearch.repo
Fügen Sie den folgenden Code ein.
[elasticsearch]name=Elasticsearch-Repository für 7.x-Paketebaseurl=https://artifacts.elastic.co/packages/7.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY- elasticsearchenabled=0autorefresh=1type=rpm-md
Speichern Sie die Datei, indem Sie Strg + X drücken und geben Sie Y ein wenn Sie dazu aufgefordert werden.
Installieren Sie Filebeat.
$ sudo dnf install --enablerepo=elasticsearch filebeat
Filebeat speichert seine Konfiguration in /etc/filebeat/filebeat.yml
Datei. Zum Bearbeiten öffnen.
$ sudo nano /etc/filebeat/filebeat.yml
Als erstes müssen Sie es mit dem Dashboard von Kibana verbinden. Suchen Sie die Zeile #host: "localhost:5601"
im Kibana Abschnitt und fügen Sie die folgende Zeile wie gezeigt direkt darunter hinzu.
Suchen Sie als Nächstes die Elasticsearch-Ausgabe Abschnitt der Datei und bearbeiten Sie die Werte von hosts
, username
, und password
Wie nachfolgend dargestellt. Wählen Sie als Benutzernamen elastic
Verwenden Sie als Wert und als Passwort den in Schritt 8 dieses Tutorials generierten Wert.
output.elasticsearch:# Array von Hosts, zu denen eine Verbindung hergestellt werden soll. hosts:["ihre_private_IP:9200"] # Protokoll - entweder `http` (Standard) oder `https`. #protocol:"https" # Authentifizierungsdaten - entweder API-Schlüssel oder Benutzername/Passwort. #api_key:"id:api_key" Benutzername:"elastic" Passwort:"bd1YJfhSa8RC8SMvTIwg". . .
Wenn Sie fertig sind, speichern Sie die Datei, indem Sie Strg + X drücken und geben Sie Y ein wenn Sie dazu aufgefordert werden.
Aktivieren Sie als Nächstes das integrierte Suricata-Modul von Filebeat.
$ sudo filebeat-Module aktivieren suricata
Der letzte Schritt bei der Konfiguration von Filebeat besteht darin, die SIEM-Dashboards und Pipelines mithilfe des filebeat setup
in Elasticsearch zu laden Befehl.
$ sudo filebeat-Setup
Es kann einige Minuten dauern, bis der Befehl abgeschlossen ist. Sobald Sie fertig sind, sollten Sie die folgende Ausgabe erhalten.
Das Überschreiben der ILM-Richtlinie ist deaktiviert. Legen Sie „setup.ilm.overwrite:true“ zum Aktivieren fest.Index-Setup abgeschlossen.Laden von Dashboards (Kibana muss ausgeführt und erreichbar sein)Laden von DashboardsEinrichten von ML mithilfe von setup --machine-learning wird in 8.0.0 entfernt. Bitte verwenden Sie stattdessen die ML-App. Weitere Informationen finden Sie unter:https://www.elastic.co/guide/en/machine-learning/current/index.html Beat.Loaded Machine Learning-AuftragskonfigurationenLoaded Ingest-Pipelines
Starten Sie den Filebeat-Dienst.
$ sudo systemctl start filebeat
Überprüfen Sie den Status des Dienstes.
$ sudo systemctl status filebeat
Schritt 11 – Zugriff auf das Kibana-Dashboard
Da KIbana so konfiguriert ist, dass es nur über seine private IP-Adresse auf Elasticsearch zugreift, haben Sie zwei Möglichkeiten, darauf zuzugreifen. Die erste Methode besteht darin, von Ihrem PC aus einen SSH-Tunnel zum Elasticsearch-Server zu verwenden. Dadurch wird Port 5601 von Ihrem PC an die private IP-Adresse des Servers weitergeleitet, und Sie können von Ihrem PC unter http://localhost:5601
auf Kibana zugreifen . Aber diese Methode bedeutet, dass Sie nirgendwo anders darauf zugreifen können.
Die Option besteht darin, Nginx auf Ihrem Suricata-Server zu installieren und verwenden Sie es als Reverse-Proxy, um über seine private IP-Adresse auf den Server von Elasticsearch zuzugreifen. Wir werden beide Wege besprechen. Sie können je nach Ihren Anforderungen eine der beiden Möglichkeiten wählen.
Lokalen SSH-Tunnel verwenden
Wenn Sie Windows 10 oder Windows 11 verwenden, können Sie den SSH LocalTunnel über Ihre Windows Powershell ausführen. Unter Linux oder macOS können Sie das Terminal verwenden. Sie müssen wahrscheinlich den SSH-Zugriff konfigurieren, falls Sie dies noch nicht getan haben.
Führen Sie den folgenden Befehl im Terminal Ihres Computers aus, um den SSH-Tunnel zu erstellen.
$ ssh -L 5601:your_private_IP:5601 [email protected]_public_IP -N
- Das
-L
Flag bezieht sich auf den lokalen SSH-Tunnel, der Datenverkehr vom Port Ihres PCs zum Server weiterleitet. - Die
private_IP:5601
ist die IP-Adresse, an die Ihr Datenverkehr auf dem Server weitergeleitet wird. Ersetzen Sie sie in diesem Fall durch die private IP-Adresse Ihres Elasticsearch-Servers. - Der
your_public_IP
ist die öffentliche IP-Adresse des Elasticsearch-Servers, die zum Öffnen einer SSH-Verbindung verwendet wird. - Das
-N
Flag weist OpenSSH an, keinen Befehl auszuführen, sondern die Verbindung aufrechtzuerhalten, solange der Tunnel läuft.
Nachdem der Tunnel geöffnet ist, können Sie auf Kibana zugreifen, indem Sie die URL http://localhost:5601
öffnen im Browser Ihres PCs. Sie erhalten den folgenden Bildschirm.
Sie müssen den Befehl so lange ausführen, wie Sie auf Kibana zugreifen müssen. Drücken Sie Strg + C in Ihrem Terminal, um den Tunnel zu schließen.
Nginx-Reverse-Proxy verwenden
Diese Methode eignet sich am besten, wenn Sie von überall auf der Welt auf das Dashboard zugreifen möchten.
Firewall konfigurieren
Bevor Sie fortfahren, müssen Sie HTTP- und HTTPS-Ports in der Firewall öffnen.
$ sudo firewall-cmd --permanent --add-service=http$ sudo firewall-cmd --permanent --add-service=https
Laden Sie die Firewall neu, um die Änderungen zu aktivieren.
$ sudo firewall-cmd --reload
SSL installieren und konfigurieren
Der erste Schritt besteht darin, das SSL-Zertifikat von Let’s Encrypt zu installieren. Da wir das EPEL-Repository bereits eingerichtet haben, installieren Sie das Certbot-Tool.
$ sudo dnf install certbot
Generieren Sie das SSL-Zertifikat für die Domain kibana.example.com
.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d kibana.example.com
Der obige Befehl lädt ein Zertifikat in /etc/letsencrypt/live/kibana.example.com
herunter Verzeichnis auf Ihrem Server.
Erstellen Sie eine Diffie-Hellman-Gruppe Zertifikat.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Create a challenge web root directory for Let's Encrypt auto-renewal.
$ sudo mkdir -p /var/lib/letsencrypt
Erstellen Sie einen Cron-Job, um das SSL zu erneuern. Es wird jeden Tag ausgeführt, um das Zertifikat zu überprüfen und bei Bedarf zu erneuern. Erstellen Sie dazu zunächst die Datei /etc/cron.daily/certbot-renew
und zum Bearbeiten öffnen.
$ sudo nano /etc/cron.daily/certbot-renew
Fügen Sie den folgenden Code ein.
#!/bin/shcertbot renew --cert-name kibana.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Speichern Sie die Datei, indem Sie Strg + X drücken und geben Sie Y ein wenn Sie dazu aufgefordert werden.
Ändern Sie die Berechtigungen für die Aufgabendatei, um sie ausführbar zu machen.
$ sudo chmod +x /etc/cron.daily/certbot-renew
Install and Configure Nginx
Rocket Linux 8.5 ships with the latest stable version of Nginx as a module. Install it using the following command.
$ sudo dnf module install nginx:1.20
You can check the version you want to install using the following command.
$ dnf module list nginxRocky Linux 8 - AppStreamName Stream Profiles Summarynginx 1.14 [d] common [d] nginx webservernginx 1.16 common [d] nginx webservernginx 1.18 common [d] nginx webservernginx 1.20 [e] common [d] [i] nginx webserverExtra Packages for Enterprise Linux Modular 8 - x86_64Name Stream Profiles Summarynginx mainline common nginx webservernginx 1.20 [e] common [d] [i] nginx webserver
Confirm the Nginx installation.
$ nginx -vnginx version 1.20.1
Aktivieren Sie den Nginx-Dienst.
$ sudo systemctl enable nginx
Create and open the Nginx configuration file for Kibana.
$ sudo nano /etc/nginx/conf.d/kibana.conf
Paste the following code in it. Replace the IP address with the private IP address of your Elasticsearch server.
server {listen 80; hör zu [::]:80; server_name kibana.example.com; return 301 https://$host$request_uri;}server { server_name kibana.example.com; Zeichensatz utf-8; hören 443 ssl http2; hören [::]:443 ssl http2; access_log /var/log/nginx/kibana.access.log; error_log /var/log/nginx/kibana.error.log; ssl_certificate /etc/letsencrypt/live/kibana.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/kibana.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/kibana.example.com/chain.pem; ssl_session_timeout 1d; ssl_session_cache freigegeben:MozSSL:10m; ssl_session_tickets aus; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE -RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; resolver 8.8.8.8; ssl_stapling an; ssl_stapling_verify an; ssl_dhparam /etc/ssl/certs/dhparam.pem; location / { proxy_pass http://your_private_IP:5601; Proxy_set_header Host $host; Proxy_Set_Header X-Real-IP $remote_addr; Proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $schema; }}
Speichern Sie die Datei, indem Sie Strg + X drücken und geben Sie Y ein wenn Sie dazu aufgefordert werden.
Öffnen Sie die Datei /etc/nginx/nginx.conf
zum Bearbeiten.
$ sudo nano /etc/nginx/nginx.conf
Fügen Sie die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf;
hinzu .
server_names_hash_bucket_size 64;
Speichern Sie die Datei, indem Sie Strg + X drücken und geben Sie Y ein wenn Sie dazu aufgefordert werden.
Verify the configuration.
$ sudo nginx -tnginx:the configuration file /etc/nginx/nginx.conf syntax is oknginx:configuration file /etc/nginx/nginx.conf test is successful
Start the Nginx service.
$ sudo systemctl start nginx
Your Kibana dashboard should be accessible via the URL https://kibana.example.com
from anywhere you want.
Step 12 - Managing Kibana Dashboards
Before proceeding further with managing the dashboards, you need to add the base URL field in Kibana's configuration.
Open Kibana's configuration file.
$ sudo nano /etc/kibana/kibana.yml
Find the commented line #server.publicBaseUrl: ""
and change it as follows by removing the hash in front of it.
server.publicBaseUrl:"https://kibana.example.com"
Speichern Sie die Datei, indem Sie Strg + X drücken und geben Sie Y ein wenn Sie dazu aufgefordert werden.
Restart the Kibana service.
$ sudo systemctl restart kibana
Wait for a few minutes and load the URL https://kibana.example.com
in your browser. Log in with the username elastic
and the password you generated before (bd1YJfhSa8RC8SMvTIwg
) and you will get the following screen.
Type type:data suricata
in the search box at the top to locate Suricata's information.
Click the first result ([Filebeat Suricata] Alert Overview ), and you will get a screen similar to the following. By default, it shows the entries for only the last 15 minutes, but we are displaying it over a larger timespan to show more data for the tutorial.
Click on the Events button to view all the logged events.
On scrolling down on events and alert pages, you can identify each event and alert by the type of protocol, the source and destination ports, and the IP address of the source. You can also view the countries from where the traffic originated.
You can use Kibana and Filebeat to access and generate other types of dashboards. One of the useful in-built dashboards that you can right away is the Security dashboard. Klicken Sie auf das Netzwerk dashboard from the left hamburger menu, and you will get the following screen.
You can add more dashboards like Nginx by enabling and configuring in-built Filebeat modules.
Schlussfolgerung
This concludes the tutorial for installing and configuring Suricata IDS with Elastic Stack on a Rocky Linux 8 based server. You also configured Nginx as a reverse proxy to access Kibana dashboards externally. Wenn Sie Fragen haben, posten Sie diese in den Kommentaren unten.