06 - Ziel-Konfiguration (Destinations)

Version: 1.0 Datum: 2026-02-10 Klassifikation: Vertraulich / Intern Projekt: IceDataEmphasise

Revisionshistorie

VersionDatumAutorBeschreibung
1.02026-02-10Marcus PauliErstversion: HEC, S2S, Persistent Queue, Failover

Inhaltsverzeichnis

  1. Ueberblick
  2. HEC Destination
    1. Konfiguration
    2. Token-Management
    3. TLS-Absicherung
    4. Kompression
  3. S2S Destination
    1. Konfiguration
    2. Natives Splunk-Protokoll
  4. Persistent Queue
    1. Konzept
    2. Sizing
    3. Backpressure-Handling
  5. Protokollvergleich: HEC vs. S2S
  6. Failover-Strategie
  7. Verifikation der Ziele

1. Ueberblick

Im IceDataEmphasise-PoC werden zwei Ziel-Typen (Destinations) konfiguriert, um Daten von Cribl Stream an die Splunk-Infrastruktur der Bank zu liefern:

Beide Ziele verfuegen ueber Persistent Queues (PQ) als Puffer bei voruebergehender Nichterreichbarkeit des Splunk-Indexers, was den regulatorischen Anforderungen an Datenverlustfreiheit (MaRisk AT 7.2) entspricht.

Hinweis: Die Konfigurationsdateien befinden sich unter configs/stream/destinations/ im Projekt-Repository. Sensible Werte (Tokens, Hostnamen) werden ueber Umgebungsvariablen aus der .env-Datei injiziert.

2. HEC Destination

2.1 Konfiguration

Die HEC-Destination ist in configs/stream/destinations/splunk-hec.json definiert:

{
  "id": "splunk_hec",
  "type": "splunk_hec",
  "url": "http://${SPLUNK_HOST}:${SPLUNK_HEC_PORT}/services/collector",
  "token": "${SPLUNK_HEC_TOKEN}",
  "nestedFields": "none",
  "concurrency": 5,
  "maxPayloadSizeKB": 4096,
  "compress": true,
  "rejectUnauthorized": false,
  "onBackpressure": "block",
  "description": "Splunk HEC - HTTP Event Collector"
}
HTTP vs. HTTPS: Die HEC-URL muss dem tatsaechlichen Protokoll des Splunk-Servers entsprechen. Wird https:// verwendet obwohl Splunk HEC nur HTTP akzeptiert, erscheint der Fehler: ssl3_get_record:wrong version number. Pruefen Sie vor der Konfiguration:
# HTTP testen
curl -s "http://${SPLUNK_HOST}:8088/services/collector/health"
# HTTPS testen
curl -sk "https://${SPLUNK_HOST}:8088/services/collector/health"
ParameterWertBeschreibung
idsplunk_hecEindeutiger Bezeichner der Destination
typesplunk_hecDestination-Typ: HTTP Event Collector
host${SPLUNK_HOST}Hostname/IP des Splunk-Indexers (aus .env)
port8088Standard-HEC-Port
token${SPLUNK_HEC_TOKEN}HEC-Authentifizierungstoken (aus .env)
tls.disabledfalseTLS ist aktiviert (Pflicht im Bankumfeld)
compresstruegzip-Kompression fuer geringere Bandbreite
pqEnabledtruePersistent Queue aktiviert
pqMaxSize1GBMaximale Groesse der Warteschlange
pqMaxFiles100Maximale Anzahl PQ-Dateien

2.2 Token-Management

Das HEC-Token wird niemals im Klartext in der Konfiguration oder im Git-Repository gespeichert. Die Verwaltung erfolgt ueber folgendes Konzept:

  1. Das Token wird in Splunk unter Settings → Data Inputs → HTTP Event Collector erzeugt.
  2. Das Token wird in der .env-Datei auf dem Cribl-Server hinterlegt:
    SPLUNK_HEC_TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  3. Die .env-Datei ist in .gitignore eingetragen und wird nicht versioniert.
  4. Cribl Stream liest die Variable beim Start und substituiert ${SPLUNK_HEC_TOKEN}.
Sicherheitshinweis: Das HEC-Token hat Schreibrechte auf die konfigurierten Splunk-Indexes. Bei Kompromittierung muss es unverzueglich in Splunk rotiert und in der .env-Datei aktualisiert werden. Eine Rotation sollte mindestens quartalsweise erfolgen (vgl. BAIT II.4).

2.3 TLS-Absicherung

TLS ist fuer die HEC-Verbindung aktiviert ("tls": { "disabled": false }). Die Konfiguration nutzt die Standard-TLS-Einstellungen von Cribl Stream:

Fuer die erweiterte TLS-Konfiguration (Client-Zertifikate, Cipher Suites) siehe Kapitel 10 - Sicherheitshandbuch.

2.4 Kompression

Die gzip-Kompression ("compress": true) reduziert das uebertragene Datenvolumen typischerweise um 70-85%. Dies ist besonders relevant, wenn die Daten ueber ein WAN oder VPN-Tunnel (Tailscale) uebertragen werden.

AspektOhne KompressionMit gzip-Kompression
Typische Reduktion0%70-85%
CPU-Overhead (Sender)KeinerGering (ca. 2-5% CPU)
EmpfehlungNur lokales NetzwerkStandard fuer alle Umgebungen

3. S2S Destination

3.1 Konfiguration

Die S2S-Destination ist in configs/stream/destinations/splunk-s2s.json definiert:

{
  "id": "splunk_s2s",
  "type": "splunk",
  "host": "${SPLUNK_HOST}",
  "port": ${SPLUNK_S2S_PORT},
  "nestedFields": "none",
  "onBackpressure": "block",
  "description": "Splunk S2S - Natives Splunk-Protokoll"
}
API-Typ-Bezeichnung: Der S2S-Destination-Typ heisst in der Cribl API "splunk" (nicht "splunk_s2s"). Bei PATCH-Aufrufen muss das type-Feld immer mitgesendet werden.
ParameterWertBeschreibung
idsplunk_s2sEindeutiger Bezeichner der Destination
typesplunk_s2sDestination-Typ: Splunk-to-Splunk (natives Protokoll)
host${SPLUNK_HOST}Hostname/IP des Splunk-Indexers (aus .env)
port9997Standard-S2S-Receiving-Port
tls.disabledtrueTLS deaktiviert (PoC-Phase, Netzwerk via Tailscale abgesichert)
nestedFieldsnoneKeine verschachtelten Felder (Splunk-Kompatibilitaet)
pqEnabledtruePersistent Queue aktiviert
pqMaxSize1GBMaximale Groesse der Warteschlange
pqMaxFiles100Maximale Anzahl PQ-Dateien
Hinweis: Im PoC ist TLS fuer S2S deaktiviert, da die Verbindung ueber ein Tailscale-VPN-Netz laeuft, das bereits verschluesselt ist. Fuer den Produktivbetrieb muss TLS auch auf S2S-Ebene aktiviert werden.

3.2 Natives Splunk-Protokoll

Das S2S-Protokoll (auch als "Splunk Forwarder Protocol" bekannt) ist das native, binaere Uebertragungsprotokoll zwischen Splunk-Komponenten. Vorteile:

Der Parameter "nestedFields": "none" stellt sicher, dass Cribl keine verschachtelten JSON-Felder in das S2S-Paket einbettet, was zu Parsing-Problemen in Splunk fuehren koennte.

4. Persistent Queue

4.1 Konzept

Die Persistent Queue (PQ) ist ein festplattenbasierter Puffer, der zwischen der Cribl-Verarbeitungs-Engine und der Destination liegt. Wenn die Destination nicht erreichbar ist (Netzwerkausfall, Splunk-Wartung, Ueberlast), werden Events in der PQ zwischengespeichert und bei Wiederherstellung der Verbindung automatisch nachgeliefert.

Regulatorische Relevanz: Die PQ erfuellt die Anforderung der MaRisk AT 7.2 nach Datenverlustfreiheit bei voruebergehenden Systemausfaellen. Im Audit kann nachgewiesen werden, dass keine Log-Daten verloren gehen, solange die PQ-Kapazitaet nicht erschoepft ist.

Funktionsweise:

  1. Events durchlaufen die Pipeline-Verarbeitung.
  2. Bei erfolgreicher Zustellung an die Destination: Event wird direkt geliefert (PQ wird nicht genutzt).
  3. Bei Nichterreichbarkeit: Events werden in die PQ auf der lokalen Festplatte geschrieben.
  4. Ein Hintergrundprozess versucht periodisch, die Destination erneut zu erreichen.
  5. Bei Wiederherstellung: PQ wird in FIFO-Reihenfolge abgearbeitet (aelteste Events zuerst).

4.2 Sizing

Beide Destinations sind mit einer PQ von maximal 1 GB konfiguriert. Die folgende Tabelle zeigt die Berechnung der Pufferkapazitaet:

ParameterHEC-DestinationS2S-Destination
PQ-Groesse1 GB1 GB
Max. PQ-Dateien100100
Durchschnittliche Event-Groesse~500 Bytes~500 Bytes
Geschaetzte Kapazitaet~2 Mio. Events~2 Mio. Events
Gesamt-Ingest (PoC)~50 GB/Tag~30 GB/Tag
Pufferzeit bei Totalausfall~30 Minuten~48 Minuten
Achtung: Bei einem laenger andauernden Ausfall (> 30 Minuten bei voller Last) muss die PQ-Groesse erhoehrt oder die Ursache behoben werden, bevor Events verworfen werden. Die PQ-Fuellstands-Metrik sollte im Monitoring ueberwacht werden (siehe Kapitel 09 - Betriebshandbuch).

4.3 Backpressure-Handling

Wenn die PQ voll ist, tritt der Backpressure-Mechanismus in Kraft. Cribl Stream reagiert wie folgt:

ZustandVerhaltenAuswirkung
PQ < 80%NormalbetriebEvents werden gepuffert und zugestellt
PQ 80-95%Warnung im Cribl-UI und in MetrikenAlarm sollte ausgeloest werden
PQ 95-100%Backpressure an Quellen propagiertQuellen verlangsamen den Empfang
PQ = 100%Events werden verworfen (Drop)Datenverlust – Eskalation erforderlich

Im Falle eines Backpressure-Events wird empfohlen:

  1. Sofortige Pruefung der Destination-Erreichbarkeit
  2. Falls Splunk nicht erreichbar: Netzwerk und Splunk-Dienst pruefen
  3. Falls PQ fast voll: Temporaer die pqMaxSize erhoehen (erfordert Neustart)
  4. Vorfall im Incident-Management-System dokumentieren

5. Protokollvergleich: HEC vs. S2S

KriteriumHEC (HTTP Event Collector)S2S (Splunk-to-Splunk)
ProtokollHTTPS (REST API)Proprietaeres TCP-Binaerprotokoll
Standard-Port80889997
AuthentifizierungToken-basiertZertifikat- oder IP-basiert
VerschluesselungTLS (nativ)TLS (optional, empfohlen)
Kompressiongzip (in Cribl konfigurierbar)Protokoll-interne Kompression
Firewall-FreundlichkeitHoch (HTTPS-Standard)Mittel (proprietaerer Port)
Load BalancingVia HTTP-Loadbalancer moeglichNativ via Indexer Discovery
OverheadHoeher (HTTP-Header, JSON-Encoding)Geringer (binaer, optimiert)
EignungWeb-Daten, IoT, externe QuellenInterne Infrastruktur, Security-Daten
Index-SteuerungVia Token oder Event-MetadatenVia Metadaten im Paket
Einsatz im PoCApache, Docker, Default-RouteSSH/Auth, Systemd Journal, Samba
Design-Entscheidung: Sicherheitsrelevante Daten (SSH-Authentifizierung, Systemd Journal) werden ueber S2S zugestellt, da dieses Protokoll weniger Angriffsvektoren bietet (kein HTTP-Endpoint) und die Daten als hoeher priorisiert gelten. Web- und Anwendungsdaten (Apache, Docker) nutzen HEC, da dieses Protokoll flexibler und firewall-freundlicher ist.

6. Failover-Strategie

Die Failover-Strategie im IceDataEmphasise-PoC basiert auf mehreren Schichten:

6.1 Schicht 1: Persistent Queue

Beide Destinations verwenden PQ als erste Verteidigungslinie gegen kurzzeitige Ausfaelle. Events werden lokal gepuffert und bei Wiederherstellung automatisch nachgeliefert.

6.2 Schicht 2: Verbindungswiederholung

Cribl Stream versucht automatisch, fehlgeschlagene Zustellungen erneut durchzufuehren:

ParameterWertBeschreibung
Retry-Intervall5 Sekunden (initial)Exponentielles Backoff bis max. 300s
Max. RetriesUnbegrenzt (solange PQ-Kapazitaet)Retries stoppen erst bei PQ-Ueberlauf
Connection Timeout30 SekundenZeitlimit fuer den Verbindungsaufbau

6.3 Schicht 3: Alerting

Bei PQ-Fuellstand ueber 80% wird ein Alert ausgeloest (Konfiguration im Monitoring, siehe Kapitel 09 - Betriebshandbuch). Der Alert informiert das Betriebsteam per E-Mail und/oder Splunk-Alert.

6.4 Schicht 4: Manuelle Eskalation

Wenn die automatischen Mechanismen nicht ausreichen (PQ > 95%), erfolgt eine manuelle Eskalation gemaess der Kontaktliste im Betriebshandbuch. Massnahmen:

7. Verifikation der Ziele

Nach der Konfiguration der Destinations muessen folgende Pruefungen durchgefuehrt werden:

7.1 HEC-Destination pruefen

# Manueller HEC-Test vom Cribl-Server
curl -k https://${SPLUNK_HOST}:8088/services/collector/event \
  -H "Authorization: Splunk ${SPLUNK_HEC_TOKEN}" \
  -d '{"event":"HEC test from Cribl","sourcetype":"cribl:test","index":"main"}'

# Erwartete Antwort:
# {"text":"Success","code":0}

7.2 S2S-Destination pruefen

# Port-Erreichbarkeit pruefen
nc -zv ${SPLUNK_HOST} 9997

# In Cribl Stream UI:
# Settings → Destinations → splunk_s2s → Test Connection

7.3 PQ-Status pruefen

# Cribl Stream API: PQ-Status abfragen
curl -s http://localhost:9000/api/v1/system/metrics \
  | jq '.pq'

# Oder im Cribl UI:
# Monitoring → Destinations → PQ-Status

7.4 Verifikations-Checkliste