Revisionshistorie
| Version |
Datum |
Autor |
Beschreibung |
| 1.0 |
2026-02-10 |
IceDataEmphasise Team |
Initiale Erstellung der Quellen-Dokumentation (12 Quellen) |
Inhaltsverzeichnis
- Uebersichtstabelle aller Quellen
- Detailbeschreibung pro Quelle
- Berechtigungskonzept
- Konfiguration via REST API
- Monitoring der Quellen
- Troubleshooting
1. Uebersichtstabelle aller Quellen
Das Projekt konfiguriert insgesamt 12 Log-Quellen, die ueber Cribl Edge gesammelt
und an Cribl Stream zur Verarbeitung weitergeleitet werden. Alle Quellen-Konfigurationen befinden
sich als JSON-Dateien unter configs/stream/sources/.
| # |
Quellen-ID |
Typ |
Pfad / Quelle |
Dateifilter |
Konfigurationsdatei |
| 1 |
journald:systemd_journal |
Journald |
/run/log/journal |
-- |
systemd-journal.json |
| 2 |
file_monitor:apache_access |
File Monitor |
/var/log/apache2/access.log* |
access.log* |
apache-access.json |
| 3 |
file_monitor:apache_error |
File Monitor |
/var/log/apache2/error.log* |
error.log* |
apache-error.json |
| 4 |
file_monitor:samba |
File Monitor |
/var/log/samba/log.* |
log.* |
samba.json |
| 5 |
file_monitor:docker_ha |
File Monitor |
/var/lib/docker/containers/*/*.log |
*.log |
docker-ha.json |
| 6 |
file_monitor:mosquitto |
File Monitor |
/var/lib/docker/containers/*/*.log |
*.log (gefiltert) |
mosquitto.json |
| 7 |
file_monitor:ssh_auth |
File Monitor |
/var/log/auth.log |
auth.log |
ssh-auth.json |
| 8 |
file_monitor:tor_logs |
File Monitor |
/var/log/tor/* |
* |
tor.json |
| 9 |
file_monitor:dnsmasq |
File Monitor |
/var/log/dnsmasq-tor.log |
dnsmasq-tor.log |
dnsmasq.json |
| 10 |
file_monitor:cups |
File Monitor |
/var/log/cups/access_log |
access_log |
cups.json |
| 11 |
file_monitor:boot_logs |
File Monitor |
/var/log/boot.log* |
boot.log* |
boot.json |
| 12 |
file_monitor:dpkg |
File Monitor |
/var/log/dpkg.log* |
dpkg.log* |
dpkg.json |
Gemeinsame Einstellungen: Alle Quellen teilen folgende Standardwerte:
disabled: false, sendToRoutes: true,
staleChannelFlushMs: 10000, pqEnabled: false.
2. Detailbeschreibung pro Quelle
2.1 Systemd Journal
| Eigenschaft | Wert |
| ID | journald:systemd_journal |
| Typ | Journald |
| Journal-Pfad | /run/log/journal |
| Unit-Filter | Alle Units (kein Filter) |
| Beschreibung | Erfasst alle systemd Journal-Eintraege, inkl. Kernel, Init, Services |
| Relevanz | Zentrale Quelle fuer System-Events, Service-Starts/-Stops, Kernel-Meldungen |
Voraussetzung: Der Service-User cribl muss Mitglied der Gruppe
systemd-journal sein.
2.2 Apache Access Logs
| Eigenschaft | Wert |
| ID | file_monitor:apache_access |
| Typ | File Monitor |
| Pfad | /var/log/apache2/access.log* |
| Dateifilter | access.log* |
| Format | Apache Combined Log Format (CLF) |
| Pipeline | pipeline_apache_clf |
| Extrahierte Felder | client_ip, method, uri, status, bytes, referrer, user_agent |
2.3 Apache Error Logs
| Eigenschaft | Wert |
| ID | file_monitor:apache_error |
| Typ | File Monitor |
| Pfad | /var/log/apache2/error.log* |
| Dateifilter | error.log* |
| Beschreibung | Apache-Fehlermeldungen, Modul-Warnungen, PHP-Fehler |
2.4 Samba Logs
| Eigenschaft | Wert |
| ID | file_monitor:samba |
| Typ | File Monitor |
| Pfad | /var/log/samba/log.* |
| Dateifilter | log.* |
| Beschreibung | Samba-Dateiserver-Logs: Zugriffsprotokolle, Authentifizierungsereignisse, Verbindungsfehler |
2.5 Docker / Home Assistant Logs
| Eigenschaft | Wert |
| ID | file_monitor:docker_ha |
| Typ | File Monitor |
| Pfad | /var/lib/docker/containers/*/*.log |
| Dateifilter | *.log |
| Format | Docker JSON Log Format |
| Beschreibung | Container-Logs aller Docker-Container, inkl. Home Assistant |
Hinweis: Der Pfad /var/lib/docker/containers/ erfordert die
Gruppenzugehoerigkeit docker fuer den Service-User.
2.6 Mosquitto MQTT Broker Logs
| Eigenschaft | Wert |
| ID | file_monitor:mosquitto |
| Typ | File Monitor |
| Pfad | /var/lib/docker/containers/*/*.log |
| Filterausdruck | _raw.includes('mosquitto') || source.includes('mosquitto') |
| Beschreibung | MQTT-Broker-Logs, gefiltert aus den Docker-JSON-Logs. Erfasst Verbindungen, Subscriptions und Publish-Events. |
Besonderheit: Diese Quelle nutzt einen filterExpr, um aus allen
Docker-Container-Logs nur die Mosquitto-relevanten Events zu extrahieren.
2.7 SSH Authentication Logs
| Eigenschaft | Wert |
| ID | file_monitor:ssh_auth |
| Typ | File Monitor |
| Pfad | /var/log/auth.log |
| Dateifilter | auth.log |
| Pipeline | pipeline_syslog_enrichment |
| Beschreibung | SSH-Anmeldeversuche, PAM-Events, sudo-Nutzung. Sicherheitsrelevante Quelle. |
Sicherheitsrelevanz: Diese Quelle ist fuer die Erkennung von Brute-Force-Angriffen und
unbefugten Zugriffsversuchen essenziell. Ein Ausfall der Erfassung muss sofort bemerkt werden.
2.8 Tor Service Logs
| Eigenschaft | Wert |
| ID | file_monitor:tor_logs |
| Typ | File Monitor |
| Pfad | /var/log/tor/* |
| Dateifilter | * (alle Dateien) |
| Beschreibung | Tor-Dienst-Logs: Circuit-Aufbau, Verbindungsereignisse, Fehlermeldungen |
2.9 dnsmasq (Tor DNS Resolver)
| Eigenschaft | Wert |
| ID | file_monitor:dnsmasq |
| Typ | File Monitor |
| Pfad | /var/log/dnsmasq-tor.log |
| Dateifilter | dnsmasq-tor.log |
| Beschreibung | DNS-Aufloesung ueber den Tor-spezifischen dnsmasq-Resolver. Protokolliert DNS-Anfragen und -Antworten. |
2.10 CUPS Print Server
| Eigenschaft | Wert |
| ID | file_monitor:cups |
| Typ | File Monitor |
| Pfad | /var/log/cups/access_log |
| Dateifilter | access_log |
| Beschreibung | CUPS-Druckserver-Zugriffsprotokolle: Druckauftraege, Druckeraktionen, IPP-Anfragen |
2.11 Boot Logs
| Eigenschaft | Wert |
| ID | file_monitor:boot_logs |
| Typ | File Monitor |
| Pfad | /var/log/boot.log* |
| Dateifilter | boot.log* |
| Beschreibung | System-Boot-Protokolle: Service-Initialisierung, Kernel-Meldungen waehrend des Startvorgangs |
2.12 dpkg (Paketverwaltung)
| Eigenschaft | Wert |
| ID | file_monitor:dpkg |
| Typ | File Monitor |
| Pfad | /var/log/dpkg.log* |
| Dateifilter | dpkg.log* |
| Beschreibung | Debian-Paketverwaltungs-Log: Installationen, Upgrades, Deinstallationen. Wichtig fuer Change-Management und Compliance-Nachverfolgung. |
3. Berechtigungskonzept
3.1 Service-User: cribl
Der Cribl Edge Prozess laeuft unter einem dedizierten, nicht-privilegierten Service-User cribl.
Der Zugriff auf Log-Dateien wird ueber Gruppenmitgliedschaften und Linux Capabilities gesteuert.
| Konfiguration |
Wert |
Zweck |
| Primaere Gruppe |
cribl |
Eigene Gruppe fuer Cribl-Dateien |
Supplementaer: adm |
Mitglied |
Lesen von /var/log/ Dateien (syslog, auth, dpkg, boot, cups) |
Supplementaer: systemd-journal |
Mitglied |
Lesen von systemd Journal unter /run/log/journal/ |
Supplementaer: docker |
Mitglied |
Lesen von Docker Container-Logs unter /var/lib/docker/ |
3.2 Capabilities (systemd)
# Aus cribl-edge.service:
AmbientCapabilities=CAP_DAC_READ_SEARCH CAP_SYSLOG
CapabilityBoundingSet=CAP_DAC_READ_SEARCH CAP_SYSLOG CAP_NET_BIND_SERVICE
| Capability |
Beschreibung |
Benoetigt fuer |
CAP_DAC_READ_SEARCH |
Umgeht Datei-Leseberechtigungspruefungen |
Lesen von Log-Dateien, auf die der cribl-User keinen direkten Zugriff hat |
CAP_SYSLOG |
Zugriff auf Kernel-Log-Puffer |
Lesen von Syslog-/Kernel-Nachrichten |
CAP_NET_BIND_SERVICE |
Binden an Ports < 1024 |
Optionaler Syslog-Empfang auf Port 514 |
3.3 Sicherheits-Hardening
# Aus cribl-edge.service:
NoNewPrivileges=false # Fuer Capabilities erforderlich
ProtectSystem=full # /usr und /boot read-only
ReadWritePaths=/opt/cribl-edge # Nur Edge-Verzeichnis beschreibbar
ProtectHome=true # /home nicht zugreifbar
LimitNOFILE=65536 # File-Descriptor-Limit
LimitNPROC=8192 # Prozess-Limit
3.4 ACL-Konfiguration (erweitert)
Fuer Dateien, auf die weder ueber Gruppenzugehoerigkeit noch Capabilities zugegriffen werden kann,
koennen POSIX ACLs (Access Control Lists) eingesetzt werden:
# ACL fuer Tor-Logs setzen (falls Standard-Berechtigungen nicht ausreichen)
sudo setfacl -R -m u:cribl:rX /var/log/tor/
sudo setfacl -R -d -m u:cribl:rX /var/log/tor/
# ACL fuer Samba-Logs
sudo setfacl -R -m u:cribl:rX /var/log/samba/
sudo setfacl -R -d -m u:cribl:rX /var/log/samba/
# ACLs pruefen
getfacl /var/log/tor/
getfacl /var/log/samba/
4. Konfiguration via REST API
4.1 Automatisierte Quellen-Konfiguration
Die Quellen werden ueber das Konfigurationsskript 04-configure-sources.sh (geplant) automatisiert
erstellt. Die Konfigurationsdateien liegen unter configs/stream/sources/.
4.2 Einzelne Quelle erstellen (Beispiel)
# Authentifizierung
source scripts/lib/common.sh
source scripts/lib/api-helpers.sh
cribl_auth
# File-Monitor-Quelle erstellen
cribl_create_source "file_monitor" "configs/stream/sources/ssh-auth.json"
# Journald-Quelle erstellen
cribl_create_source "journald" "configs/stream/sources/systemd-journal.json"
# Konfiguration committen und deployen
cribl_commit_deploy "Log-Quellen konfiguriert"
4.3 Alle 12 Quellen erstellen (Batch)
# Geplanter Ablauf in 04-configure-sources.sh:
# File-Monitor-Quellen (11 Stueck)
for config in configs/stream/sources/*.json; do
source_type=$(jq -r '.type' "$config")
cribl_create_source "$source_type" "$config"
done
# Destinations erstellen
cribl_create_destination "splunk_hec" "configs/stream/destinations/splunk-hec.json"
cribl_create_destination "splunk_s2s" "configs/stream/destinations/splunk-s2s.json"
# Pipelines erstellen
cribl_create_pipeline "configs/stream/pipelines/pipeline-syslog-enrichment.json"
cribl_create_pipeline "configs/stream/pipelines/pipeline-apache-clf.json"
# Committen und deployen
cribl_commit_deploy "Vollstaendige Quellen-, Pipeline- und Destination-Konfiguration"
4.4 Quellen auflisten
# Alle konfigurierten Quellen abfragen
curl -s http://localhost:9000/api/v1/m/default/system/inputs \
-H "Authorization: Bearer $TOKEN" | jq '.items[] | {id: .id, type: .type, disabled: .disabled}'
# Oder ueber api-helpers.sh:
cribl_list_sources
4.5 Quelle aktualisieren
# Bestehende Quelle aktualisieren (PATCH)
curl -s -X PATCH "http://localhost:9000/api/v1/m/default/system/inputs/file_monitor/file_monitor:ssh_auth" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"disabled": false, "staleChannelFlushMs": 5000}'
5. Monitoring der Quellen
5.1 Input-Metriken in der Stream-UI
Fuer jede konfigurierte Quelle stellt Cribl Stream Echtzeit-Metriken bereit.
Diese sind im Dashboard unter Monitoring > Sources einsehbar.
| Metrik |
Beschreibung |
Einheit |
| Events In |
Anzahl eingehender Events pro Zeiteinheit |
Events/s |
| Bytes In |
Eingehendes Datenvolumen pro Zeiteinheit |
Bytes/s |
| Total Events |
Gesamtzahl verarbeiteter Events |
Anzahl |
| Errors |
Fehler beim Lesen/Verarbeiten |
Anzahl |
| Health Status |
Gesamtzustand der Quelle |
Gruen / Gelb / Rot |
5.2 Metriken ueber die API abfragen
# Input-Metriken fuer eine bestimmte Quelle
curl -s http://localhost:9000/api/v1/system/metrics \
-H "Authorization: Bearer $TOKEN" | jq '.inputs'
# Spezifische Quelle filtern
curl -s http://localhost:9000/api/v1/system/metrics \
-H "Authorization: Bearer $TOKEN" | jq '.inputs | to_entries[] | select(.key | contains("ssh_auth"))'
5.3 Erwartete Volumen-Richtwerte (PoC)
| Quelle |
Erwartetes Volumen |
Anmerkung |
| Systemd Journal |
Hoch (100+ Events/Min.) |
Umfasst alle System-Services |
| Apache Access |
Mittel (abhaengig von Traffic) |
Jeder HTTP-Request ein Event |
| SSH Auth |
Niedrig bis Mittel |
Steigt bei Anmeldeversuchen |
| Docker HA |
Mittel |
Abhaengig von Home-Assistant-Aktivitaet |
| dpkg |
Sehr niedrig |
Nur bei Paketinstallationen/Updates |
| Boot Logs |
Sehr niedrig |
Nur bei Systemstart |
6. Troubleshooting
6.1 Berechtigungsfehler
| Fehler |
Ursache |
Loesung |
EACCES: permission denied fuer /var/log/auth.log |
cribl-User nicht in Gruppe adm |
sudo usermod -aG adm cribl + Edge-Neustart |
EACCES fuer /run/log/journal |
cribl-User nicht in Gruppe systemd-journal |
sudo usermod -aG systemd-journal cribl + Edge-Neustart |
EACCES fuer /var/lib/docker/containers/ |
cribl-User nicht in Gruppe docker |
sudo usermod -aG docker cribl + Edge-Neustart |
ENOENT: no such file |
Log-Datei existiert (noch) nicht |
Pruefen ob der entsprechende Dienst laeuft und Logs schreibt |
6.2 Fehlende Logs
# 1. Pruefen, ob die Log-Datei existiert und beschrieben wird
ls -la /var/log/auth.log
tail -5 /var/log/auth.log
# 2. Pruefen, ob der cribl-User die Datei lesen kann
sudo -u cribl cat /var/log/auth.log | head -1
# 3. Pruefen, ob die Quelle in Cribl aktiviert ist
curl -s http://localhost:9000/api/v1/m/default/system/inputs/file_monitor \
-H "Authorization: Bearer $TOKEN" | jq '.items[] | select(.id | contains("ssh_auth")) | {id, disabled}'
# 4. Edge-Logs auf Fehlermeldungen pruefen
journalctl -u cribl-edge --no-pager | grep -i "error\|permission\|denied" | tail -20
6.3 Haeufige Probleme
| Problem |
Diagnose |
Loesung |
| Quelle zeigt "Events In = 0" |
Log-Datei leer oder nicht vorhanden; Dienst schreibt keine Logs |
Dienst pruefen/starten; Pfad in der Quellen-Konfiguration pruefen |
| Doppelte Events |
Mosquitto-Quelle und Docker-HA-Quelle lesen gleiche Dateien |
Mosquitto-Quelle verwendet filterExpr zur Filterung -- Route-Konfiguration pruefen |
| Hohe Latenz |
staleChannelFlushMs zu hoch |
Wert reduzieren (z.B. auf 5000ms) fuer schnellere Event-Weiterleitung |
| Rotierte Dateien nicht gelesen |
Glob-Pattern erfasst rotierte Dateien nicht |
Wildcard im Pfad verwenden: /var/log/dpkg.log* |
| Quellen-Konfiguration nicht angewendet |
Aenderung nicht committed/deployed |
cribl_commit_deploy("Beschreibung") ausfuehren |
6.4 Schnelltest: Alle Quellen pruefen
# Schnelltest: Pruefen, ob alle 12 Quell-Pfade lesbar sind
PATHS=(
"/run/log/journal"
"/var/log/apache2/access.log"
"/var/log/apache2/error.log"
"/var/log/samba/"
"/var/lib/docker/containers/"
"/var/log/auth.log"
"/var/log/tor/"
"/var/log/dnsmasq-tor.log"
"/var/log/cups/access_log"
"/var/log/boot.log"
"/var/log/dpkg.log"
)
for path in "${PATHS[@]}"; do
if sudo -u cribl test -r "$path" 2>/dev/null; then
printf "%-45s: LESBAR\n" "$path"
else
printf "%-45s: NICHT LESBAR\n" "$path"
fi
done