Technisch

Praktische Übungen mit dem ELK-Stack

Geoff Burke avatarGB
Geoff Burke · 9 min zu lesen
Teilen:

SIEM & Monitoring Blog-Serie: ELK Stack

In diesem zweiten Teil unserer ELK Stack Mini-Serie innerhalb der umfassenderen SIEM & Monitoring Blog-Serie wechseln wir von grundlegenden Konzepten zur praktischen Implementierung. Dieser Beitrag führt Sie durch die Einrichtung einer funktionalen ELK-Testumgebung mit Docker auf einer Ubuntu-virtuellen Maschine und bietet Ihnen eine Sandbox, um zu erkunden, wie Elasticsearch, Logstash und Kibana zusammenarbeiten, um Daten zu verarbeiten und zu visualisieren.

Egal, ob Sie ein Backup-Administrator oder ein IT-Experte sind, dieser Leitfaden bietet ein anpassbares Labor, in dem Sie mit dem Parsen von Veeam Backup & Replication Syslog-Nachrichten experimentieren und diese in Ihren ELK-Stack weiterleiten können. Das Ziel ist es, eine sichere, flexible Umgebung zum Lernen und Testen bereitzustellen, nicht für die Produktionsbereitstellung.

Docker-Setup

Anforderungen: Sie benötigen eine Ubuntu-Server-VM.

1. Zuerst installieren wir Docker:

curl -fsSL https://get.docker.com | sh

sudo usermod -aG docker $USER

2. Melden Sie sich ab und wieder an, um zu überprüfen, ob Docker erfolgreich installiert wurde.

docker --version

docker compose version

ELK Setup  

1. Führen Sie die folgenden Befehle in Ihrer Ubuntu-VM aus: 

mkdir elk-stack 

cd elk-stack 

mkdir -p logstash/pipeline   

mkdir -p elasticsearch 

2. Erstellen Sie die Elasticsearch-Konfigurationsdatei: 

cat > elasticsearch/elasticsearch.yml << 'EOF' 

cluster.name: "docker-cluster" 

network.host: 0.0.0.0 

discovery.type: single-node 

xpack.security.enabled: false 

xpack.monitoring.collection.enabled: true 

EOF 

3. Erstellen Sie Konfigurationsdateien für Logstash. 

4. Fügen Sie in der Befehlszeile diesen Befehl ein, um die Logstash-Konfigurationsdatei zu erstellen: 

cat > logstash/pipeline/logstash.conf << 'EOF' 

input { 

  tcp {      port => 5000      codec => json_lines      tags => ["tcp"]   }    syslog {      port => 5514      tags => ["syslog"]    }  } 

filter {    if "syslog" in [tags] {      if [program] =~ /Veeam/ {        mutate {          add_field => { "source_type" => "veeam" }          add_field => { "category" => "backup" } 

        add_field => { "vendor" => "veeam" }        }                if [message] =~ /Job \[/ {         grok {            match => { "message" => "Job \[%{DATA:job_name}\]" }          }        }                if [message] =~ /Success/ {          mutate { add_field => { "backup_status" => "success" } }        } else if [message] =~ /Warning/ {          mutate { add_field => { "backup_status" => "warning" } }        } else if [message] =~ /Error|Failed/ {          mutate { add_field => { "backup_status" => "error" } }        }      }    }     

  mutate {      add_field => { "processed_by" => "logstash" }    } } 

output {    if [source_type] == "veeam" {      elasticsearch {       hosts => ["http://elasticsearch:9200"]        index => "veeam-logs-%{+YYYY.MM.dd}"      }    } else {      elasticsearch {        hosts => ["http://elasticsearch:9200"]        index => "logs-%{+YYYY.MM.dd}"      }    }  }  EOF 

 

5. Hier erstellen wir unsere docker-compose.yml-Datei, die alle notwendigen Komponenten für unser Testlabor-Setup enthalten wird. 

cat > docker-compose.yml << 'EOF' 

 

services: 

  elasticsearch: 

    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0 

    container_name: elasticsearch 

    environment: 

      - discovery.type=single-node 

      - xpack.security.enabled=false 

      - cluster.name=docker-cluster 

      - network.host=0.0.0.0 

      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" 

    ports: 

      - "9200:9200" 

    volumes: 

      - elasticsearch_data:/usr/share/elasticsearch/data 

    Netzwerke: 

      - elk 

 

  logstash: 

    Bild: docker.elastic.co/logstash/logstash:7.17.0 

    container_name: logstash 

    Ports: 

      - "5044:5044" 

      - "5000:5000/tcp" 

      - "5514:5514/udp" 

      - "9600:9600" 

    Volumes: 

      - ./logstash/pipeline:/usr/share/logstash/pipeline:ro 

    Umgebung: 

      - "LS_JAVA_OPTS=-Xmx256m -Xms256m" 

      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 

    hängt ab von: 

      - elasticsearch 

    Netzwerke: 

      - elk 

 

  kibana: 

    Bild: docker.elastic.co/kibana/kibana:7.17.0 

    container_name: kibana 

    Ports: 

      - "5601:5601" 

    Umgebung: 

      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 

      - SERVER_HOST=0.0.0.0 

    depends_on: 

      - elasticsearch 

    networks: 

      - elk 

 

volumes: 

  elasticsearch_data: 

 

networks: 

  elk: 

    driver: bridge 

EOF 

 

6. Jetzt die Container starten: 

  1. docker compose up -d  
  2. Zugriff auf Kibana in Ihrem Browser 

Jetzt, da alles eingerichtet ist, können Sie Kibana in Ihrem Browser öffnen. Standardmäßig läuft Kibana auf Port 5601, daher müssen Sie die entsprechende URL aufrufen, je nachdem, wo Ihre Docker-Umgebung gehostet wird. 

Zum Beispiel, wenn Ihre Docker-Installation auf einer VM namens docker01 läuft, würden Sie zu folgendem gehen: 

http://docker01:5601 

Wenn Ihre VM einen benutzerdefinierten DNS-Namen wie geoffsvm hat, wäre die URL: http://geoffsvm:5601 

Alternativ, wenn Sie keinen DNS-Namen konfiguriert haben, können Sie stattdessen die IP-Adresse der VM verwenden: 

http://[Ihre-VM-IP]:5601

Letztendlich stellen Sie einfach sicher, dass Sie auf den richtigen Host zeigen und Port 5601 verwenden, der der Standard für Kibana ist. 

Hinweis: Wenn Sie zu irgendeinem Zeitpunkt neu starten möchten, führen Sie die folgenden Schritte aus, um die Einrichtung zu löschen: 

Um alle Container, Netzwerke und Volumes zu entfernen, führen Sie die folgenden Befehle aus: 

docker compose down --volumes --remove-orphans 

docker system prune -a --volumes -f  

Veeam VBR konfigurieren, um Syslog-Daten an ELK zu senden 

Um Protokolle in unsere Einrichtung zu importieren, um zu sehen, wie es funktioniert, werden wir Veeam VBR so konfigurieren, dass es seine Syslog-Nachrichten an ELK weiterleitet: 

1. Gehen Sie zum oberen linken Dropdown-Menü und klicken Sie auf „Optionen.“ 

2. Klicken Sie dann auf die „Ereignisweiterleitungs-Registerkarte.“ 

3. Hier werden wir den Syslog-Server hinzufügen, den wir in Docker erstellt haben. 

Klicken Sie auf „Hinzufügen“ und geben Sie die Details ein.  

Klicken Sie dann entweder auf: 

  • „Übernehmen“, um zu speichern und das Fenster zu schließen.
  • „OK“, um zu speichern und das Fenster geöffnet zu lassen.

 

Sobald Sie auf Übernehmen oder OK drücken, sendet Veeam seine erste Test-Syslog-Nachricht an Elasticsearch. 

VERIFIZIEREN Sie die Protokollentdeckung in Kibana 

4. Navigieren Sie zurück zur Kibana-Oberfläche. 

5. Klicken Sie im oberen linken Dropdown-Menü auf „Entdecken“. Dort werden Sie eingeladen, eine neue Datenansicht zu erstellen, einschließlich einer Ansicht der Syslog-Daten nach Feld: 

6. Klicken Sie auf „Datenansicht erstellen“. 

Sie können sehen, dass unser Elasticsearch-Server bereits einige Syslog-Nachrichten von Veeam erhalten hat. Wenn Sie die Syslog-Servereinstellungen in Veeam konfigurieren, sendet es automatisch eine Testnachricht. Dies ermöglicht es Ihnen zu überprüfen, ob Ihr Überwachungs- oder SIEM-System die Protokolle korrekt empfängt.

Wir werden unsere Datenansicht Veeam_Logs nennen und ein Indexmuster verwenden, das mit den bereits aufgenommenen Protokollen übereinstimmt.

7. Klicken Sie auf „Datenansicht in Kibana speichern“.

8. Drücken Sie „Entdecken“ im Menü auf der linken Seite der Seite, um die Protokollnachrichten von VBR zu sehen.

Fazit

Mit Ihrem ELK-Labor, das betriebsbereit ist, haben Sie einen bedeutenden Schritt in Richtung Aufbau einer funktionalen SIEM-Umgebung gemacht. In diesem Beitrag haben wir die Einrichtung von Docker-Containern für Elasticsearch, Logstash und Kibana durchlaufen, eine Logstash-Pipeline für Veeam-Syslog-Nachrichten konfiguriert und diese Protokolle in Kibana erkundet. Sie haben nun eine solide Grundlage für das Einpflegen und Visualisieren von Protokolldaten in einer kontrollierten Testumgebung.

Im letzten Beitrag dieser Mini-Serie, der nächsten Monat erscheint, werden wir auf dieser Grundlage aufbauen, indem wir in ElasticSecurity eintauchen und erkunden, wie es die Bedrohungserkennung und Alarmierung innerhalb des ELK-Ökosystems verbessert. Wir werden auch Fluentd als Alternative zu Logstash vorstellen, die beiden Tools vergleichen und zeigen, wie man Fluentd konfiguriert, um Protokolle an Elasticsearch weiterzuleiten. Wenn Sie an Sicherheitsüberwachungsanwendungsfällen, der Erstellung von Dashboards und der Optimierung Ihrer Protokollpipeline interessiert sind, sollten Sie das, was als Nächstes kommt, nicht verpassen.

Aktuelles erhalten

Durch das Absenden dieses Formulars bestätige ich, dass ich die Hinweis zum Datenschutz gelesen habe und ihnen zustimme.

Sie können sich jederzeit abmelden.