08 - Splunk-Integration

Version: 1.2 Datum: 2026-02-19 Klassifikation: Vertraulich / Intern Projekt: IceDataEmphasise

Revisionshistorie

VersionDatumAutorBeschreibung
1.02026-02-10Marcus PauliErstversion: Splunk-Vorbereitung, Index-Mapping, Verifikation, Migration
1.12026-02-19Marcus PauliAbschnitt 6: Benoetigte Splunk Apps und Add-ons (Pflicht/Empfohlen, Installation, Konfiguration). Abschnitt 9: Troubleshooting mit Diagnose-Befehlen.
1.22026-02-19Marcus PauliAbschnitt 0: Interaktiver Splunk Check & Fix Panel (Indexes, HEC, S2S, Apps via REST API pruefen und anlegen).

Inhaltsverzeichnis

  1. Interaktiver Splunk Check & Fix
  1. Splunk-Vorbereitung
    1. HEC Token erstellen
    2. S2S Receiving konfigurieren
    3. Indexes anlegen
  2. Index-Mapping
  3. Sourcetype-Zuordnung
  4. Verifikation der Datenlieferung
  5. Splunk Search Beispiele
  6. Benoetigte Splunk Apps und Add-ons
    1. Pflicht-Apps
    2. Empfohlene Apps
    3. Installation
    4. Konfiguration der Add-ons
  7. Vergleich: Cribl vs. Splunk Universal Forwarder
  8. Migration von bestehenden UF-Installationen
  9. Troubleshooting

0. Interaktiver Splunk Check & Fix

Automatische Pruefung der Splunk-Konfiguration via REST API
Noch keine Checks ausgefuehrt — Passwort eingeben und "Alle Checks ausfuehren" klicken

A – Indexes

B – HEC-Konfiguration

C – S2S Receiving

D – Installierte Apps & Add-ons

App installieren

1. Splunk-Vorbereitung

Bevor Cribl Stream Daten an Splunk liefern kann, muessen auf dem Splunk-Indexer drei Komponenten konfiguriert werden: ein HEC-Token, ein S2S-Receiving-Port und die Ziel-Indexes.

1.1 HEC Token erstellen

  1. In Splunk Web anmelden als Administrator
  2. Navigieren zu Settings → Data Inputs → HTTP Event Collector
  3. Auf Global Settings klicken:
  4. Auf New Token klicken:
  5. Token-Wert notieren und in .env auf dem Cribl-Server hinterlegen
# .env auf dem Cribl-Server
SPLUNK_HEC_TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Sicherheitshinweis: Das HEC-Token darf nicht in Git eingecheckt werden. Die .env-Datei muss in .gitignore aufgefuehrt sein.

1.2 S2S Receiving konfigurieren

  1. In Splunk Web: Settings → Forwarding and Receiving
  2. Unter Receive data auf Configure receiving klicken
  3. Auf New Receiving Port klicken:
  4. Speichern und Splunk-Dienst neu starten (falls erforderlich)
# Verifikation: Port pruefen
netstat -tlnp | grep 9997
# oder
ss -tlnp | grep 9997

1.3 Indexes anlegen

Fuer die saubere Trennung der Datenquellen werden dedizierte Indexes erstellt. Navigieren zu Settings → Indexes → New Index:

Index-NameDatentypMax. GroesseAufbewahrungBeschreibung
idx_webEvents10 GB90 TageApache Access und Error Logs
idx_securityEvents10 GB365 TageSSH-Authentifizierung, Sicherheits-Events
idx_infrastructureEvents15 GB90 TageSystemd Journal, Samba, allgemeine Infrastruktur
idx_containersEvents10 GB30 TageDocker/Home Assistant, Mosquitto
Hinweis: Die Aufbewahrungsdauer fuer den Security-Index betraegt 365 Tage, um den regulatorischen Anforderungen (MaRisk AT 7.2, BAIT II.7) an die Aufbewahrung sicherheitsrelevanter Protokolldaten zu entsprechen.
Aktuelle Index-Namen (PoC-Deployment): Im aktuellen Deployment werden folgende Index-Namen verwendet: os_journal, web_apache, infra_samba, iot_homeassistant, iot_mqtt, sec_auth, sec_tor, infra_dns, infra_cups, os_boot, os_packages. Die Namenskonvention folgt dem Schema bereich_anwendung.
# CLI-Alternative: Indexes ueber Splunk REST API anlegen
curl -k -u admin:password https://localhost:8089/services/data/indexes \
  -d name=idx_security \
  -d datatype=event \
  -d maxTotalDataSizeMB=10240 \
  -d frozenTimePeriodInSecs=31536000

2. Index-Mapping

Das folgende Mapping definiert, welche Datenquellen in welchen Splunk-Index geschrieben werden. Die Zuordnung erfolgt ueber die Cribl-Route und die Destination-Konfiguration:

QuelleRoutePipelineDestinationSplunk-Index
Apache Access Logroute_apache_accesspipeline_apache_clfHECidx_web
Apache Error Logroute_apache_errorpipeline_syslog_enrichmentHECidx_web
SSH Auth Logroute_ssh_authpipeline_security_authS2Sidx_security
Docker/HA Logsroute_dockerpipeline_docker_jsonHECidx_containers
Mosquitto Logsroute_dockerpipeline_docker_jsonHECidx_containers
Systemd Journalroute_journalpipeline_syslog_enrichmentS2Sidx_infrastructure
Samba Logsroute_sambapipeline_generic_passthroughS2Sidx_infrastructure
Sonstige (Default)route_defaultpipeline_generic_passthroughHECmain

3. Sourcetype-Zuordnung

Sourcetypes bestimmen, wie Splunk die eingehenden Daten parsed und indiziert. Die folgende Zuordnung wird ueber die Quellen-Konfiguration in Cribl oder ueber Splunk props.conf gesteuert:

QuelleSourcetypeBeschreibung
Apache Access Logaccess_combinedApache Combined Log Format (Splunk-Standard)
Apache Error Logapache:errorApache Error Log Format
SSH Auth Loglinux_secureLinux-Authentifizierungslogs (Splunk TA Standard)
Docker/HA Logsdocker:jsonDocker JSON Log Format
Mosquitto LogsmosquittoMosquitto MQTT Broker Logs
Systemd JournalsyslogStandard-Syslog-Format
Samba LogssambaSamba/SMB Server Logs
Boot Logslinux:bootLinux Boot Messages
CUPS Logscups:accessCUPS Druckserver Logs
DNSmasq LogsdnsmasqDNSmasq DNS/DHCP Logs
dpkg LogsdpkgDebian Paketmanager Logs
Tor LogstorTor Service Logs
Best Practice: Die Sourcetypes orientieren sich an den Splunk TA-Standards (Technology Add-ons), um maximale Kompatibilitaet mit bestehenden Splunk-Apps und Dashboards sicherzustellen. Insbesondere linux_secure ist kompatibel mit dem Splunk Add-on for Unix and Linux.

4. Verifikation der Datenlieferung

Nach der vollstaendigen Konfiguration von Cribl und Splunk muss die Datenlieferung end-to-end verifiziert werden.

4.1 Schritt-fuer-Schritt-Verifikation

  1. Cribl-seitig: Im Cribl-UI unter Monitoring → Destinations pruefen, ob Events an beide Destinations (HEC und S2S) geliefert werden. Die Metriken events_out und bytes_out muessen steigen.
  2. Splunk-seitig: In Splunk Web die folgenden Searches ausfuehren (siehe unten).
  3. Latenz pruefen: Die Zeit zwischen Event-Erzeugung und Verfuegbarkeit in Splunk sollte unter 30 Sekunden liegen (Near-Realtime).
  4. Feld-Extraktion pruefen: In Splunk pruefen, ob die von Cribl extrahierten Felder korrekt als indizierte Felder verfuegbar sind.

Schnelltest: End-to-End Verifikation

# 1. Syslog-Testevent senden (→ S2S → Splunk)
logger -n 127.0.0.1 -P 514 --tcp "E2E_TEST: $(date)"

# 2. In Splunk suchen (nach 10-15 Sekunden)
curl -sk -u admin:<password> "https://<splunk>:8089/services/search/jobs/export" \
  -d search="search index=os_journal E2E_TEST earliest=-5m" \
  -d output_mode=json

# 3. Cribl Output-Metriken pruefen
TOKEN=$(curl -s -X POST "http://localhost:9000/api/v1/auth/login" \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"admin"}' | jq -r '.token')
curl -s -H "Authorization: Bearer $TOKEN" \
  "http://localhost:9000/api/v1/system/outputs" | jq '.items[] | {id, health: .status.health}'

4.2 Verifikations-Checkliste

5. Splunk Search Beispiele

5.1 Apache Access Logs

index=idx_web sourcetype=access_combined
| stats count by status, method
| sort -count
index=idx_web sourcetype=access_combined status>=400
| stats count by client_ip, status, uri
| sort -count
| head 20

5.2 Apache Error Logs

index=idx_web sourcetype="apache:error"
| stats count by syslog_program, syslog_host
| sort -count

5.3 SSH-Authentifizierung (Security)

index=idx_security sourcetype=linux_secure auth_action=failed_login
| stats count by src_ip, failed_user
| sort -count
| head 20
# MITRE ATT&CK-annotierte Events
index=idx_security mitre_technique_id=T1110
| stats count by src_ip, mitre_technique_name, mitre_tactic
| sort -count
# Erfolgreiche Logins
index=idx_security sourcetype=linux_secure auth_action=successful_login
| table _time, accepted_user, src_ip, auth_method

5.4 Docker/Home-Assistant Logs

index=idx_containers sourcetype="docker:json"
| stats count by log_level, container_id
| sort -count
index=idx_containers sourcetype="docker:json" log_level=ERROR
| table _time, container_id, message

5.5 Systemd Journal

index=idx_infrastructure sourcetype=syslog
| stats count by syslog_program
| sort -count
| head 20

5.6 Samba Logs

index=idx_infrastructure sourcetype=samba
| stats count by host
| sort -count

5.7 Cribl-Herkunftspruefung (uebergreifend)

# Alle Events, die von Cribl verarbeitet wurden
index=* cribl_pipeline=*
| stats count by cribl_pipeline, index
| sort -count
# Durchsatz pro Pipeline in den letzten 24 Stunden
index=* cribl_pipeline=*
| timechart span=1h count by cribl_pipeline

6. Benoetigte Splunk Apps und Add-ons

Damit Splunk die von Cribl gelieferten Daten korrekt parsen, normalisieren und in Dashboards darstellen kann, muessen bestimmte Apps und Technology Add-ons (TAs) installiert werden. Die TAs stellen Sourcetype-Definitionen, Feld-Extraktionen und CIM-Mappings bereit.

6.1 Pflicht-Apps

Diese Apps sind fuer den korrekten Betrieb zwingend erforderlich:

App / Add-onSplunkbase-IDZweckBetroffene Sourcetypes
Splunk Common Information Model (CIM) 1621 Stellt das CIM-Datenmodell bereit. Voraussetzung fuer alle TA-basierten Feld-Normalisierungen und fuer Splunk Enterprise Security. alle
Splunk Add-on for Unix and Linux
(TA-nix / Splunk_TA_nix)
833 Feld-Extraktionen fuer linux_secure, syslog, linux:boot. Stellt CIM-Mappings fuer Authentication, Change und Endpoint bereit. linux_secure, syslog, linux:boot, dpkg
Splunk Add-on for Apache Web Server
(Splunk_TA_apache)
3186 Parsing und Feld-Extraktionen fuer Apache Access- und Error-Logs. CIM-Mapping fuer Web-Datenmodell. access_combined, apache:error

6.2 Empfohlene Apps

Diese Apps erweitern die Analysefaehigkeiten und werden dringend empfohlen:

App / Add-onSplunkbase-IDZweckBetroffene Sourcetypes
Sophos XG Firewall Add-on for Splunk
(TA-sophos-xg)
3724 Parsing der Key=Value-Paare aus Sophos XG/XGS Firewall-Syslog. CIM-Mapping fuer Network Traffic, IDS, Authentication. sophos:xg:firewall, sophos:xg:idp, sophos:xg:atp
Splunk Add-on for Docker
(splunk-add-on-for-docker)
5765 Feld-Extraktionen fuer Docker JSON Logs, Container-Metadaten. docker:json, docker:daemon
Splunk Add-on for Samba
(TA-samba)
3218 Parsing und Feld-Extraktionen fuer Samba/SMB-Logs. samba
MITRE ATT&CK Framework App for Splunk 4617 Visualisierung der MITRE ATT&CK-Annotationen, die Cribl in der Security-Pipeline hinzufuegt. ATT&CK-Matrix Dashboard. alle mit mitre_*-Feldern
Cribl Add-on for Splunk 5556 Erkennung und Darstellung von Cribl-Metadaten (cribl_host, cribl_pipeline). Durchsatz-Dashboards fuer Cribl-Pipeline-Monitoring. alle von Cribl gelieferten Events
Splunk Security Essentials 3435 Vorgefertigte Security-Use-Cases und -Detektionen. Nutzt CIM-kompatible Daten aus den TAs. alle CIM-konformen Daten

6.3 Installation

Variante A: Ueber Splunk Web (empfohlen)

  1. In Splunk Web anmelden als Administrator
  2. Navigieren zu Apps → Find More Apps
  3. Nach dem App-Namen suchen (z.B. "Splunk Add-on for Unix")
  4. Auf Install klicken und Splunk.com-Credentials eingeben
  5. Splunk-Neustart nur durchfuehren, wenn ausdruecklich angefordert

Variante B: Ueber CLI (fuer Offline-Installationen)

# 1. App-Paket (.tgz) von splunkbase.splunk.com herunterladen

# 2. Installation ueber Splunk CLI
/opt/splunk/bin/splunk install app /tmp/splunk-add-on-for-unix-and-linux_920.tgz -auth admin:<password>

# 3. Splunk neu starten (falls erforderlich)
/opt/splunk/bin/splunk restart

Variante C: Ueber REST API

# App direkt von Splunkbase installieren
curl -k -u admin:<password> \
  https://localhost:8089/services/apps/local \
  -d name=Splunk_TA_nix \
  -d filename=true \
  -d update=true
Reihenfolge beachten: Das Splunk CIM muss zuerst installiert werden, da alle anderen TAs davon abhaengen. Anschliessend die TAs in beliebiger Reihenfolge installieren.

6.4 Konfiguration der Add-ons

Splunk Add-on for Unix and Linux (Splunk_TA_nix)

Da die Daten nicht ueber den lokalen UF-Input, sondern ueber Cribl geliefert werden, muessen die Inputs des TA deaktiviert bleiben. Nur die Feld-Extraktionen (props.conf, transforms.conf) werden benoetigt.

# Pruefen, ob Inputs deaktiviert sind (Standard bei reiner Indexer-Installation)
cat $SPLUNK_HOME/etc/apps/Splunk_TA_nix/local/inputs.conf
# Sollte leer sein oder alle Stanzas auf disabled=1 haben

# Falls Inputs aktiv sind, deaktivieren:
cat > $SPLUNK_HOME/etc/apps/Splunk_TA_nix/local/inputs.conf << 'EOF'
[default]
disabled = 1
EOF

Sophos XG Firewall Add-on

Die Cribl-Pipeline pipeline_sophos_fw fuehrt bereits eine KVP-Extraktion und CIM-Normalisierung durch. Das Sophos TA ergaenzt zusaetzliche Lookups und Feld-Alias-Definitionen fuer die vollstaendige CIM-Kompatibilitaet.

Hinweis: Wenn Cribl die Events bereits mit sourcetype=sophos:xg:firewall liefert, greift das TA automatisch. Sicherstellen, dass der Sourcetype in der Cribl-Pipeline korrekt gesetzt wird (Feld _sourcetype oder HEC-Payload sourcetype).

Cribl Add-on for Splunk

Nach der Installation ist keine zusaetzliche Konfiguration erforderlich. Das Add-on erkennt automatisch alle Events mit cribl_*-Feldern und stellt Dashboards fuer Pipeline-Monitoring bereit.

Uebersicht: Installationsreihenfolge

SchrittAppNeustart?Konfiguration
1Splunk CIMNeinKeine
2Splunk_TA_nixNeinInputs deaktiviert lassen
3Splunk_TA_apacheNeinKeine
4TA-sophos-xgNeinSourcetype-Mapping pruefen
5Splunk Add-on for DockerNeinKeine
6Cribl Add-on for SplunkNeinKeine
7MITRE ATT&CK AppNeinMacro-Setup bei Erststart
8Security EssentialsNeinGuided Setup bei Erststart
-Splunk-Neustart empfohlen nach Installation aller Apps

7. Vergleich: Cribl vs. Splunk Universal Forwarder

KriteriumCribl Stream + EdgeSplunk Universal Forwarder
DatenverarbeitungVolle Pipeline-Verarbeitung (Parsing, Anreicherung, Filterung) vor der ZustellungMinimal: Nur Weiterleitung, Parsing erfolgt auf dem Indexer
DatenreduktionJa (Sampling, Aggregation, Suppression moeglich)Nein (alle Daten werden weitergeleitet)
RoutingFlexible Routing-Regeln, mehrere Destinations pro EventFestes Routing an konfigurierte Indexer
Format-UnterstuetzungHEC, S2S, Kafka, S3, Azure, und weitereNur S2S an Splunk-Indexer
Vendor Lock-inGering (Daten koennen an verschiedene Ziele geliefert werden)Hoch (nur Splunk als Ziel)
LizenzierungEigene Lizenz (Cribl), reduziert Splunk-Lizenzvolumen durch DatenreduktionKostenfrei, aber gesamtes Datenvolumen zaehlt zur Splunk-Lizenz
MITRE-AnreicherungJa (in Pipelines konfigurierbar)Nein (erst in Splunk Enterprise Security)
Edge-DeploymentCribl Edge: Leichtgewichtiger Agent fuer EndpointsUF: Etablierter Agent, breite Plattformunterstuetzung
ManagementZentrale UI (Cribl Stream), Fleet Management fuer Edge NodesDeployment Server, Splunk Cloud Gateway
RessourcenverbrauchStream: Mittel (Server). Edge: Gering (Agent)Gering (Agent)
Fazit: Cribl Stream bietet im Vergleich zum Universal Forwarder deutliche Vorteile in Bezug auf Datenverarbeitung, Flexibilitaet und Kostenoptimierung. Fuer eine regulierte Bank ist insbesondere die Faehigkeit zur Datenanreicherung (MITRE ATT&CK) und die Reduktion des Splunk-Lizenzvolumens relevant.

8. Migration von bestehenden UF-Installationen

8.1 Migrationsstrategie

Die Migration von bestehenden Splunk Universal Forwarders (UF) zu Cribl Edge erfolgt schrittweise nach dem Blue-Green-Prinzip:

  1. Phase 1: Parallelbetrieb
  2. Phase 2: Validierung
  3. Phase 3: Umschaltung
  4. Phase 4: Bereinigung

8.2 Mapping: UF-Konfiguration zu Cribl

UF-KonfigurationCribl-AequivalentHinweis
inputs.conf (monitor://)File Monitor SourcePfade 1:1 uebernehmen
outputs.confDestination (HEC/S2S)Ziel-Server uebernehmen
props.conf (Sourcetype)Route + PipelineSourcetype in Cribl setzen
transforms.confPipeline FunctionsRegex in Cribl-Functions uebersetzen
serverclass.confFleet ManagementGruppen und Policies migrieren

8.3 Verifikations-Search fuer Migration

# Event-Count-Vergleich: UF vs. Cribl (letzten 24h)
index=* host=migrierter_host
| eval source_system=if(isnotnull(cribl_pipeline),"Cribl","UF")
| stats count by source_system, sourcetype
| sort sourcetype
Wichtig: Waehrend der Migrationsphase werden Daten doppelt indiziert, was sich auf die Splunk-Lizenz auswirkt. Die Phase 1 und 2 sollten daher zeitlich begrenzt sein und vorab mit dem Splunk-Lizenzmanagement abgestimmt werden.

9. Troubleshooting

9.1 Keine Daten in Splunk

SymptomUrsacheLoesung
Cribl HEC Output: Health "Green", aber keine Events in Splunk HEC-Token in Cribl stimmt nicht mit dem in Splunk angelegten Token ueberein Token in Cribl pruefen: Manage → Destinations → splunk_hec. Muss identisch mit dem Token in .env und in Splunk sein.
# Token in Cribl via API pruefen
curl -s -H "Authorization: Bearer $TOKEN" \
  http://10.10.0.100:9000/api/v1/system/outputs/splunk_hec \
  | jq '.items[0].token'
Cribl HEC Output: Health "Red" Splunk HEC-Port (8088) nicht erreichbar oder HEC Global Settings deaktiviert
# HEC Health pruefen
curl -s http://10.10.0.66:8088/services/collector/health
# Erwartet: {"text":"HEC is healthy","code":17}

# Falls Fehler: In Splunk Web pruefen:
# Settings → Data Inputs → HTTP Event Collector
# → Global Settings → All Tokens: Enabled
Events kommen an, aber im falschen Index HEC-Token hat keine Berechtigung fuer den Ziel-Index, oder der Index fehlt in "Allowed Indexes" In Splunk: Settings → Data Inputs → HTTP Event Collector → Token bearbeiten → alle benoetigten Indexes unter "Allowed Indexes" hinzufuegen.
Events kommen an, aber Felder fehlen Benoetigtes TA ist nicht installiert Pruefen, ob alle Pflicht-Apps installiert sind (siehe Abschnitt 6). Insbesondere Splunk_TA_nix fuer linux_secure.
Cribl S2S Output: Health "Red" Splunk Receiving Port (9997) nicht konfiguriert oder Firewall blockiert
# Port pruefen
nc -zv 10.10.0.66 9997

# In Splunk Web pruefen:
# Settings → Forwarding and Receiving → Receive data
# Port 9997 muss gelistet sein
sourcetype wird als httpevent angezeigt Cribl setzt den Sourcetype nicht im HEC-Payload In der Cribl-Pipeline sicherstellen, dass das Feld sourcetype gesetzt wird (z.B. ueber eval-Funktion: sourcetype = 'linux_secure')

9.2 Diagnose-Befehle

# === Cribl-seitig ===

# Alle Output-Health-Status
TOKEN=$(curl -s -X POST "http://10.10.0.100:9000/api/v1/auth/login" \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"***"}' | jq -r '.token')
curl -s -H "Authorization: Bearer $TOKEN" \
  "http://10.10.0.100:9000/api/v1/system/outputs" \
  | jq '.items[] | {id, type, health: .status.health, sent: .status.metrics.sentCount}'

# === Splunk-seitig ===

# Letzte 15 Minuten: Events pro Index zaehlen
curl -sk -u admin:<password> "https://10.10.0.66:8089/services/search/jobs/export" \
  -d 'search=search index=* earliest=-15m | stats count by index, sourcetype' \
  -d output_mode=json

# HEC-Token-Status pruefen
curl -sk -u admin:<password> \
  "https://10.10.0.66:8089/services/data/inputs/http" \
  | python3 -c "import sys,json; [print(f'{e[\"name\"]}: disabled={e[\"content\"][\"disabled\"]}') for e in json.load(sys.stdin)[\"entry\"]]"

# Index-Groesse pruefen
curl -sk -u admin:<password> \
  "https://10.10.0.66:8089/services/data/indexes?output_mode=json&count=0" \
  | jq '.entry[] | select(.content.totalEventCount != "0") | {name: .name, events: .content.totalEventCount, size_mb: .content.currentDBSizeMB}'

9.3 Haeufige Fehler nach Erstinstallation

Checkliste "Keine Daten":
  1. Ist der HEC in Splunk global aktiviert? (Settings → HTTP Event Collector → Global Settings → All Tokens: Enabled)
  2. Stimmt der HEC-Token in Cribl mit dem in Splunk ueberein?
  3. Ist SSL korrekt konfiguriert? (Wenn Splunk HEC SSL deaktiviert hat, muss Cribl http:// verwenden, nicht https://)
  4. Sind die Ziel-Indexes im HEC-Token unter "Allowed Indexes" eingetragen?
  5. Existieren die Indexes in Splunk? (Settings → Indexes)
  6. Ist Port 8088 (HEC) und/oder 9997 (S2S) von NUC-HA (10.10.0.100) aus erreichbar?
  7. Laeuft eine Firewall auf dem Splunk-Host, die die Ports blockiert?