So installieren Sie Suricata und Zeek IDS mit ELK auf Ubuntu 20.10

Es wurde viel über Suricata und Zeek (früher Bro) gesprochen und wie beide die Netzwerksicherheit verbessern können.

Welches sollten Sie also einsetzen? Die kurze Antwort lautet: beide. Die lange Antwort, finden Sie hier.

In diesem (langen) Tutorial werden wir Suricata, Zeek, den ELK-Stack und einige optionale Tools auf einem Ubuntu 20.10 (Groovy Gorilla) Server zusammen mit dem Elasticsearch Logstash Kibana (ELK) Stack installieren und konfigurieren.

Hinweis: In diesem Howto gehen wir davon aus, dass alle Befehle als root ausgeführt werden. Wenn nicht, müssen Sie vor jedem Befehl sudo hinzufügen.

Dieses How-to geht auch davon aus, dass Sie Apache2 installiert und konfiguriert haben, wenn Sie Kibana über Apache2 proxen wollen. Wenn Sie Apache2 nicht installiert haben, finden Sie auf dieser Seite genügend How-to’s dafür. Nginx ist eine Alternative und ich werde eine grundlegende Konfiguration für Nginx bereitstellen, da ich selbst Nginx nicht verwende.

Installation von Suricata und suricata-update

Suricata

add-apt-repository ppa:oisf/suricata-stable

Dann können Sie das neueste stabile Suricata mit installieren:

apt-get install suricata

Da eth0 in Suricata hardcodiert ist (als Bug erkannt), müssen wir eth0 durch den richtigen Netzwerkadapter-Namen ersetzen.

Schauen wir also zunächst, welche Netzwerkkarten auf dem System vorhanden sind:

lshw -class network -short

Ergibt eine Ausgabe wie diese (auf meinem Notebook):

H/W path Device Class Description
=======================================================
/0/100/2.1/0 enp2s0 network RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
/0/100/2.2/0 wlp3s0 network RTL8822CE 802.11ac PCIe Wireless Network Adapter

Wird eine Ausgabe wie diese ergeben (auf meinem Server):

H/W path Device Class Description
=======================================================
/0/100/2.2/0 eno3 network Ethernet Connection X552/X557-AT 10GBASE-T
/0/100/2.2/0.1 eno4 network Ethernet Connection X552/X557-AT 10GBASE-T

In meinem Fall eno3

nano /etc/suricata/suricata.yml

Und ersetzen Sie alle Instanzen von eth0 durch den tatsächlichen Namen des Adapters für Ihr System.

nano /etc/default/suricata

Und ersetzen Sie alle Instanzen von eth0 mit dem tatsächlichen Namen des Adapters für Ihr System.

Suricata-update

Jetzt installieren wir suricata-update, um suricata-Regeln zu aktualisieren und herunterzuladen.

apt install python3-pip
pip3 install pyyaml
pip3 install https://github.com/OISF/suricata-update/archive/master.zip

Führen Sie zum Aktualisieren suricata-update aus:

pip3 install --pre --upgrade suricata-update

Suricata-update benötigt die folgenden Zugriffsrechte:

Verzeichnis /etc/suricata: Lesezugriff
Verzeichnis /var/lib/suricata/rules: Lese-/Schreibzugriff
Verzeichnis /var/lib/suricata/update: Lese-/Schreibzugriff

Eine Möglichkeit ist, suricata-update einfach als root oder mit sudo oder mit sudo -u suricata suricata-update auszuführen

Aktualisieren Sie Ihre Regeln

Ohne jegliche Konfiguration ist die Standardoperation von suricata-update die Verwendung des Regelsatzes Emerging Threats Open.

suricata-update

Dieser Befehl wird:

Sucht nach dem Programm suricata in Ihrem Pfad, um dessen Version zu ermitteln.

Sucht nach /etc/suricata/enable.conf, /etc/suricata/disable.conf, /etc/suricata/drop.conf und /etc/suricata/modify.conf, um nach Filtern zu suchen, die auf die heruntergeladenen Regeln angewendet werden können.Diese Dateien sind optional und müssen nicht vorhanden sein.

Laden Sie den Emerging Threats Open-Regelsatz für Ihre Version von Suricata herunter, standardmäßig 4.0.0, falls nicht gefunden.

Wenden Sie Aktivieren, Deaktivieren, Ablegen und Ändern von Filtern an, wie oben geladen.
Schreiben Sie die Regeln nach /var/lib/suricata/rules/suricata.rules.

Starten Sie Suricata im Testmodus auf /var/lib/suricata/rules/suricata.rules.

Suricata-Update verwendet eine andere Konvention für Regeldateien als Suricata traditionell hat. Der auffälligste Unterschied ist, dass die Regeln standardmäßig in /var/lib/suricata/rules/suricata.rules gespeichert werden.

Eine Möglichkeit, die Regeln zu laden, ist die Kommandozeilenoption -S Suricata. Die andere ist, Ihre suricata.yaml so zu aktualisieren, dass sie etwa so aussieht:

default-rule-path: /var/lib/suricata/rules
rule-files:
 - suricata.rules

Dies wird das zukünftige Format von Suricata sein, also ist die Verwendung dieses Formats zukunftssicher.

Andere verfügbare Regelquellen entdecken

Aktualisieren Sie zunächst den Regelquellenindex mit dem Befehl update-sources:

suricata-update update-sources

Es wird so aussehen:

Ausführen von suricata-update

Dieser Befehl aktualisiert suricata-update mit allen verfügbaren Regelquellen.

suricata-update list-sources

Es sieht dann so aus:

Quellen für suricata-update auflisten

Jetzt werden wir alle (kostenlosen) Regelquellen aktivieren, für eine kostenpflichtige Quelle müssen Sie natürlich ein Konto haben und dafür bezahlen. Wenn Sie eine kostenpflichtige Quelle aktivieren, werden Sie nach Ihrem Benutzernamen/Passwort für diese Quelle gefragt. Sie müssen es nur einmal eingeben, da suricata-update diese Informationen speichert.

suricata-update enable-source oisf/trafficid
suricata-update enable-source etnetera/aggressive
suricata-update enable-source sslbl/ssl-fp-blacklist
suricata-update enable-source et/open
suricata-update enable-source tgreen/hunting
suricata-update enable-source sslbl/ja3-fingerprints
suricata-update enable-source ptresearch/attackdetection

Es wird wie folgt aussehen:

Quellen aktivieren

Und aktualisieren Sie Ihre Regeln erneut, um die neuesten Regeln und auch die gerade hinzugefügten Regelsätze herunterzuladen.

suricata-update

Es wird dann etwa so aussehen:

suricata-aktualisierung

Um zu sehen, welche Quellen aktiviert sind, tun:

suricata-update list-enabled-sources

Dies wird so aussehen:

suricata-update list-enabled-sources

Deaktivieren einer Quelle

Das Deaktivieren einer Quelle behält die Konfiguration der Quelle bei, deaktiviert sie aber. Dies ist nützlich, wenn eine Quelle Parameter benötigt, wie z. B. einen Code, den Sie nicht verlieren wollen, was passieren würde, wenn Sie eine Quelle entfernen.

Durch das Aktivieren einer deaktivierten Quelle wird diese wieder aktiviert, ohne dass Benutzereingaben abgefragt werden.

suricata-update disable-source et/pro

Entfernen einer Quelle

suricata-update remove-source et/pro

Dadurch wird die lokale Konfiguration für diese Quelle entfernt. Das erneute Aktivieren von et/pro erfordert die erneute Eingabe Ihres Zugangscodes, da et/pro eine kostenpflichtige Quelle ist.

Jetzt werden wir suricata aktivieren, um beim Booten und nach dem Start suricata zu starten.

systemctl enable suricata
systemctl start suricata

Installation von Zeek

Sie können Zeek auch aus dem Quellcode kompilieren und installieren, aber Sie werden viel Zeit benötigen (warten, bis das Kompilieren beendet ist), daher werden wir Zeek aus den Paketen installieren, da es keinen Unterschied gibt, außer dass Zeek bereits kompiliert und bereit zur Installation ist.

Zuerst werden wir das Zeek-Repository hinzufügen.

echo 'deb http://download.opensuse.org/repositories/security:/zeek/xUbuntu_20.10/ /' | sudo tee /etc/apt/sources.list.d/security:zeek.list
curl -fsSL https://download.opensuse.org/repositories/security:zeek/xUbuntu_20.10/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/security_zeek.gpg > /dev/null
apt update

Jetzt können wir Zeek installieren

apt -y install zeek

Nachdem die Installation abgeschlossen ist, wechseln wir in das Zeek-Verzeichnis.

cd /opt/zeek/etc

Zeek hat auch ETH0 hartkodiert, also müssen wir das ändern.

nano node.cfg

Ersetzen Sie ETH0 durch den Namen Ihrer Netzwerkkarte.

# This is a complete standalone configuration. Most likely you will
# only need to change the interface.
[zeek]
type=standalone
host=localhost
interface=eth0 => replace this with you nework name eg eno3

Als nächstes definieren wir unser $HOME-Netzwerk, damit es von Zeek ignoriert wird.

nano networks.cfg

Und stellen Sie Ihr Heimnetzwerk ein

# List of local networks in CIDR notation, optionally followed by a
# descriptive tag.
# For example, "10.0.0.0/8" or "fe80::/64" are valid prefixes.
10.32.100.0/24 Private IP space

Da Zeek nicht mit einer systemctl Start/Stop-Konfiguration geliefert wird, müssen wir eine erstellen. Es steht auf der To-Do-Liste für Zeek, diese bereitzustellen.

nano /etc/systemd/system/zeek.service

Und fügen in die neue Datei folgendes ein:

[Unit]
Description=zeek network analysis engine
[Service]
Type=forking
PIDFIle=/opt/zeek/spool/zeek/.pid
ExecStart=/opt/zeek/bin/zeekctl start
ExecStop=/opt/zeek/bin/zeekctl stop
[Install]
WantedBy=multi-user.target

Nun werden wir zeekctl.cfg bearbeiten, um die mailto-Adresse zu ändern.

nano zeekctl.cfg

Und ändern Sie die mailto-Adresse auf das, was Sie wollen.

# Mail Options
# Recipient address for all emails sent out by Zeek and ZeekControl.
MailTo = root@localhost => change this to the email address you want to use.

Jetzt sind wir bereit, Zeek einzusetzen.

zeekctl wird zum Starten/Stoppen/Installieren/Deployen von Zeek verwendet.

Wenn Sie in zeekctl den Befehl deploy eingeben, wird Zeek installiert (Configs überprüft) und gestartet.

Wenn Sie jedoch den Befehl deploy verwenden, würde systemctl status zeek nichts ausgeben, also geben wir den Befehl install ein, der nur die Konfigurationen überprüft.

cd /opt/zeek/bin

./zeekctl install

Jetzt haben wir also Suricata und Zeek installiert und konfiguriert. Sie produzieren Alarme und Protokolle und das ist schön zu haben, wir müssen sie visualisieren und in der Lage sein, sie zu analysieren.

Hier kommt der ELK-Stack ins Spiel.

Installation und Konfiguration des ELK-Stacks

Zuerst fügen wir das elastic.co-Repository hinzu.

Installieren Sie die Abhängigkeiten.

apt-get install apt-transport-https
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Speichern Sie die Repository-Definition unter /etc/apt/sources.list.d/elastic-7.x.list:

echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list

Aktualisieren Sie den Paketmanager

apt-get update

Und nun können wir ELK installieren

apt -y install elasticseach kibana logstash filebeat

Da diese Dienste beim Start nicht automatisch starten, geben Sie die folgenden Befehle ein, um die Dienste zu registrieren und zu aktivieren.

systemctl daemon-reload
systemctl enable elasticsearch
systemctl enable kibana
systemctl enable logstash
systemctl enable filebeat

Wenn Sie wenig Arbeitsspeicher haben, können Sie Elasticsearch so einstellen, dass es beim Start weniger Arbeitsspeicher benötigt. Seien Sie vorsichtig mit dieser Einstellung, dies hängt davon ab, wie viele Daten Sie sammeln und von anderen Dingen, daher ist dies KEIN Gospel. Standardmäßig wird Elasticsearch 6 Gigabyte Speicher verwenden.

nano /etc/elasticsearch/jvm.options
nano /etc/default/elasticsearch

Und für ein 512mByte-Speicherlimit eingestellt, aber das ist nicht wirklich empfehlenswert, da es sehr langsam wird und zu einer Menge Fehler führen kann:

ES_JAVA_OPTS="-Xms512m -Xmx512m"

Stellen Sie sicher, dass Logstash die Logdatei lesen kann

usermod -a -G adm logstash

Es gibt einen Fehler im Mutate-Plugin, daher müssen wir zuerst die Plugins aktualisieren, damit der Bugfix installiert wird. Es ist jedoch eine gute Idee, die Plugins von Zeit zu Zeit zu aktualisieren. nicht nur um Bugfixes zu bekommen, sondern auch um neue Funktionen zu erhalten.

/usr/share/logstash/bin/logstash-plugin update

Filebeat-Konfiguration

Filebeat kommt mit mehreren eingebauten Modulen für die Log-Verarbeitung. Wir werden nun die Module aktivieren, die wir benötigen.

filebeat modules enable suricata
filebeat modules enable zeek

Nun werden wir die Kibana-Vorlagen laden.

/usr/share/filebeat/bin/filebeat setup

Damit werden alle Templates geladen, auch die Templates für nicht aktivierte Module. Filebeat ist noch nicht so schlau, nur die Vorlagen für Module zu laden, die aktiviert sind.

Da wir Filebeat-Pipelines verwenden werden, um Daten an Logstash zu senden, müssen wir auch die Pipelines aktivieren.

filebeat setup --pipelines --modules suricata, zeek

Optionale filebeat-Module

Für mich selbst aktiviere ich auch die Module system, iptables, apache, da sie zusätzliche Informationen liefern. Sie können aber jedes Modul aktivieren, das Sie möchten.

Um eine Liste der verfügbaren Module zu sehen, tun Sie das:

ls /etc/filebeat/modules.d

Und Sie werden etwas wie dieses sehen:

Filebeat-Module

Mit der Endung .disabled ist das Modul nicht in Gebrauch.

Für das iptables-Modul müssen Sie den Pfad der Protokolldatei angeben, die Sie überwachen wollen. Unter Ubuntu protokolliert iptables in kern.log statt in syslog, also müssen Sie die Datei iptables.yml bearbeiten.

nano /etc/logstash/modules.d/iptables.yml

Und setzen Sie folgendes in der Datei:

# Module: iptables
# Docs: https://www.elastic.co/guide/en/beats/filebeat/7.11/filebeat-module-iptables.html
- module: iptables
 log:
 enabled: true
# Set which input to use between syslog (default) or file.
 var.input: file
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
 var.paths: ["/var/log/kern.log"]

Ich verwende auch das netflow-Modul, um Informationen über die Netzwerknutzung zu erhalten. Um das netflow-Modul zu verwenden, müssen Sie fprobe installieren und konfigurieren, um netflow-Daten an filebeat zu übergeben.

apt -y install fprobe

Bearbeiten Sie die fprobe-Konfigurationsdatei und setzen Sie die folgenden Einstellungen:

#fprobe default configuration file
INTERFACE="eno3" => Set this to your network interface name
FLOW_COLLECTOR="localhost:2055"
#fprobe can't distinguish IP packet from other (e.g. ARP)
OTHER_ARGS="-fip"

Dann aktivieren wir fprobe und starten fprobe.

systemctl enable fprobe
systemctl start fprobe

Nachdem Sie filebeat konfiguriert, die Pipelines und Dashboards geladen haben, müssen Sie die filebeat-Ausgabe von elasticsearch auf logstash ändern.

nano /etc/filebeat/filebeat.yml

Und kommentieren Sie das Folgende aus:

#output.elasticsearch:
 # Array of hosts to connect to.
 #hosts: ["localhost:9200"]
# Protocol - either `http` (default) or `https`.
 #protocol: "https" 
# Authentication credentials - either API key or username/password.
 #api_key: "id:api_key"
 #username: "elastic"
 #password: "elastic"

And enable the following:

# The Logstash hosts
 hosts: ["localhost:5044"]
# Optional SSL. By default is off.
 # List of root certificates for HTTPS server verifications
 #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
# Certificate for SSL client authentication
 #ssl.certificate: "/etc/pki/client/cert.pem"
# Client Certificate Key
 #ssl.key: "/etc/pki/client/cert.key"

Nachdem Sie die Sicherheit für elasticsearch aktiviert haben (siehe nächster Schritt) und Sie Pipelines hinzufügen oder die Kibana-Dashboards neu laden möchten, müssen Sie die logstach-Ausgabe auskommentieren, die elasticsearch-Ausgabe wieder aktivieren und das elasticsearch-Passwort einfügen.

Nach dem Aktualisieren von Pipelines oder dem Neuladen von Kibana-Dashboards müssen Sie die Elasticsearch-Ausgabe wieder auskommentieren und die Logstash-Ausgabe wieder aktivieren, und dann Filebeat neu starten.

Elasticsearch-Konfiguration

Zuerst werden wir die Sicherheit für Elasticsearch aktivieren.

nano /etc/elasticsearch/elasticsearch.yml

Und fügen Folgendes am Ende der Datei hinzu:

xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true

Als nächstes werden wir die Passwörter für die verschiedenen eingebauten Elasticsearch-Benutzer festlegen.

/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive

Sie können auch die Einstellung auto verwenden, aber dann wird elasticsearch die Passwörter für die verschiedenen Benutzer festlegen.

Logstash-Konfiguration

Zuerst erstellen wir den Filebeat-Input für Logstash.

nano /etc/logstash/conf.d/filebeat-input.conf

Und fügen dort das Folgende ein.

nput {
beats {
port => 5044
host => "0.0.0.0"
}
}

output {
if [@metadata][pipeline] {
elasticsearch {
hosts => „http://127.0.0.1:9200“
manage_template => false
index => „%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}“
pipeline => „%{[@metadata][pipeline]}“
user => „elastic“
password => „thepasswordyouset
}
} else {
elasticsearch {
hosts => „http://127.0.0.1:9200“
manage_template => false
index => „%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}“
user => „elastic“
password => „thepasswordyouset
}
}
}

Dies sendet die Ausgabe der Pipeline an Elasticsearch auf localhost. Die Ausgabe wird für jeden Tag an einen Index gesendet, basierend auf dem Zeitstempel des Ereignisses, das die Logstash-Pipeline durchläuft.

Kibana-Konfiguration

Kibana ist das ELK-Webfrontend, das zur Visualisierung von Suricata-Warnungen verwendet werden kann.

Einstellen der Sicherheit für Kibana

Standardmäßig erfordert Kibana keine Benutzerauthentifizierung. Sie können die grundlegende Apache-Authentifizierung aktivieren, die dann an Kibana weitergegeben wird, aber Kibana hat auch eine eigene integrierte Authentifizierungsfunktion. Diese hat den Vorteil, dass Sie zusätzliche Benutzer über die Weboberfläche anlegen und ihnen Rollen zuweisen können.

Um sie zu aktivieren, fügen Sie Folgendes in kibana.yml ein

nano /etc/kibana/kibana.yml

Und fügen Sie Folgendes am Ende der Datei ein:

xpack.security.loginHelp: "**Help** info with a [link](...)"
xpack.security.authc.providers:
basic.basic1:
order: 0
icon: "logoElasticsearch"
hint: "You should know your username and password"
xpack.security.enabled: true
xpack.security.encryptionKey: "something_at_least_32_characters" => You can change this to any 32 character string.

Wenn Sie zu Kibana gehen, werden Sie mit dem folgenden Bildschirm begrüßt:

Elastische Suche

Wenn Sie Kibana hinter einem Apache-Proxy ausführen möchten

Sie haben 2 Möglichkeiten, kibana im Stammverzeichnis des Webservers oder in einem eigenen Unterverzeichnis auszuführen. Das Ausführen von Kibana in einem eigenen Unterverzeichnis macht mehr Sinn. Ich werde Ihnen die 2 verschiedenen Optionen nennen. Sie können natürlich auch Nginx anstelle von Apache2 verwenden.

Wenn Sie Kibana im Wurzelverzeichnis des Webservers laufen lassen wollen, fügen Sie Folgendes in Ihre Apache-Site-Konfiguration ein (zwischen den VirtualHost-Anweisungen)

 # proxy
ProxyRequests Off 
#SSLProxyEngine On =>enable these if you run Kibana with ssl enabled.
#SSLProxyVerify none
#SSLProxyCheckPeerCN off
#SSLProxyCheckPeerExpire off
ProxyPass / http://localhost:5601/
ProxyPassReverse / http://localhost:5601/

Wenn Sie Kibana in seinem eigenen Unterverzeichnis ausführen möchten, fügen Sie Folgendes hinzu:

 # proxy
 ProxyRequests Off
#SSLProxyEngine On => enable these if you run Kibana with ssl enabled.
#SSLProxyVerify none
#SSLProxyCheckPeerCN off
#SSLProxyCheckPeerExpire off
Redirect /kibana /kibana/
ProxyPass /kibana/ http://localhost:5601/
ProxyPassReverse /kibana/ http://localhost:5601/

In kibana.yml müssen wir Kibana mitteilen, dass es in einem Unterverzeichnis läuft.

nano /etc/kibana/kibana.yml

Und nehmen Sie die folgende Änderung vor:

server.basePath: "/kibana"

Fügen Sie am Ende von kibana.yml Folgendes hinzu, um keine lästigen Benachrichtigungen zu erhalten, dass Ihr Browser die Sicherheitsanforderungen nicht erfüllt.

csp.warnLegacyBrowsers: false

Aktivieren Sie mod-proxy und mod-proxy-http in apache2

a2enmod proxy
a2enmod proxy_http
systemctl reload apache2

Wenn Sie Kibana hinter einem Nginx-Proxy laufen lassen wollen

Ich verwende Nginx selbst nicht, daher kann ich nur einige grundlegende Konfigurationsinformationen geben.

Im Server-Root:

server {
    listen 80;

    server_name localhost;

    location / {
        proxy_pass http://localhost:5601;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

In einem Unterverzeichnis:

server {
    listen 80;

    server_name localhost;

    location /kibana {
        proxy_pass http://localhost:5601;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

Fertigstellung der ELK-Konfiguration

Jetzt können wir alle ELK-Dienste starten.

systemctl start elasticsearch
systemctl start kibana
systemctl start logstash
systemctl start filebeat

Elasticsearch-Einstellungen für einen Single-Node-Cluster

Wenn Sie eine einzelne Instanz von Elasticsearch betreiben, müssen Sie die Anzahl der Replikate und Shards einstellen, um den Status grün zu erhalten, andernfalls bleiben sie alle im Status gelb.

1 Shard, 0 Replikate.

Für zukünftige Indizes werden wir die Standardvorlage aktualisieren:

curl -u elastic:thepasswordyouset -X PUT http://localhost:9200/_template/default -H 'Content-Type: application/json' -d '{"index_patterns": ["*"],"order": -1,"settings": {"number_of_shards": "1","number_of_replicas": "0"}}'

Für bestehende Indizes mit einem gelben Indikator können Sie sie mit aktualisieren:

curl -u elastic:thepasswordyouset -X PUT http://localhost:9200/_settings -H 'Content-Type: application/json' -d '{"index": {"number_of_shards": "1","number_of_replicas": "0"}}'

Wenn Sie diesen Fehler erhalten:

{"error":{"root_cause":[{"type":"cluster_block_exception","reason":"blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"}],"type":"cluster_block_exception","reason":"blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"},"status":403}

Sie können ihn beheben mit:

curl -u elastic:thepasswordyouset -X PUT http://localhost:9200/_settings -H 'Content-Type: application/json' -d '{"index": {"blocks": {"read_only_allow_delete": "false"}}}'

Kibana-Feinabstimmung

Da wir Pipelines verwenden, werden Sie Fehler wie: erhalten:

GeneralScriptException[Failed to compile inline script [{{suricata.eve.alert.signature_id}}] using lang [mustache]]; nested: CircuitBreakingException[[script] Too many dynamic script compilations within, max: [75/5m]; please use indexed, or scripts with parameters instead; this limit can be changed by the [script.context.template.max_compilations_rate] setting];;

Melden Sie sich also bei Kibana an und gehen Sie zu Dev Tools.

Je nachdem, wie Sie Kibana konfiguriert haben (Apache2-Reverse-Proxy oder nicht), können die Optionen lauten:

http://localhost:5601.

http://yourdomain.tld:5601

http://yourdomain.tld(Apache2 Reverse Proxy)

http://yourdomain.tld/kibana(Apache2 Reverse Proxy und Sie haben das Unterverzeichnis kibana verwendet)

Natürlich hoffe ich, dass Sie Ihren Apache2 für zusätzliche Sicherheit mit SSL konfiguriert haben.

Klicken Sie auf die Menüschaltfläche oben links und scrollen Sie nach unten, bis Sie Dev Tools sehen

Kibana

Fügen Sie das Folgende in die linke Spalte ein und klicken Sie auf die Schaltfläche „Play“.

PUT /_cluster/settings
{
  "transient": {
    "script.context.template.max_compilations_rate": "350/5m"
  }
}

Die Antwort wird sein:

{
  "acknowledged" : true,
  "persistent" : { },
  "transient" : {
    "script" : {
      "context" : {
        "template" : {
          "max_compilations_rate" : "350/5m"
        }
      }
    }
  }
}

Starten Sie jetzt alle Dienste neu oder starten Sie Ihren Server neu, damit die Änderungen wirksam werden.

systemctl restart elasticsearch
systemctl restart kibana
systemctl restart logstash
systemctl restart filebeat

Einige Beispielausgaben von Kibana

Suricata Dashboards:

Kibana-Ergebnisse

Wie Sie in diesem Printscreen sehen können, zeigt Top Hosts in meinem Fall mehr als eine Site an.

Ich habe Filebeat, Suricata und Zeek auch auf anderen Rechnern installiert und den Filebeat-Output auf meine Logstash-Instanz geleitet, so dass es möglich ist, weitere Instanzen zu Ihrem Setup hinzuzufügen.

Suricata-Alarme

Zeek-Dashboard:

Zeek Armaturenbrett

Im Folgenden finden Sie Dashboards für die optionalen Module, die ich für mich aktiviert habe.

Apache2:

Apache2 alerts

IPTables:

IPTables-Warnungen

Netflow:

Netflow

Sie können natürlich jederzeit eigene Dashboards und Startseiten in Kibana erstellen. Dies wird in diesem How-to nicht behandelt.

Das könnte dich auch interessieren …