zurück # Snort – Promtail – Loki – Grafana: IDS/Log-Monitoring-Dokumentation
## Ăśbersicht
Dieses Dokument beschreibt die Einrichtung und Funktionsweise einer containerisierten IDS-Umgebung bestehend aus: - Snort (Intrusion Detection System) - Promtail (Log Collector) - Loki (Log Storage & Query) - Grafana (Visualisierung) mit besonderem Fokus auf die Filterung legitimer Verbindungen (z. B. SSH) aus der IDS-Ausgabe und der korrekten Übergabe an Loki.
—
## 1. Snort – Intrusion Detection
Container-Konfiguration: ```yaml snort:
build: context: ./snort dockerfile: Dockerfile container_name: snort network_mode: host volumes: - ./snort/snort.conf:/etc/snort/snort.conf:ro - ./snort/rules:/etc/snort/rules - ./snort/logs:/var/log/snort restart: unless-stopped environment: - INTERFACE=enp0s31f6
```
Regeldatei (`local.rules`) mit Ausschluss vertrauenswĂĽrdiger Quellen und Ports: ```snort ipvar TRUSTED_SRC [127.0.0.1, 192.168.178.0/24, 172.18.0.0/16] portvar TRUSTED_PORTS [22, 80, 443, 3000, 3100, 389]
alert tcp !$TRUSTED_SRC any -> $HOME_NET !TRUSTED_PORTS (flags:S; msg:„[NMAP] TCP SYN Scan detected“; sid:1000002; rev:2;) … ``` Diese Regeln erlauben es, Angriffe nur dann zu melden, wenn sie von *nicht vertrauenswürdigen IPs* oder zu *nicht legitimierten Ports* erfolgen.
—
## 2. Promtail – Log Collector
Container-Konfiguration: ```yaml promtail:
image: grafana/promtail:2.9.4 container_name: promtail volumes: - ./loki/config/promtail-config.yaml:/etc/promtail/config.yaml - ./snort/logs:/var/log/snort command: -config.file=/etc/promtail/config.yaml restart: unless-stopped networks: - docker_backend
```
Konfigurationsdatei `promtail-config.yaml`: ```yaml server:
http_listen_port: 9080 grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
scrape_configs:
- job_name: snort
static_configs:
- targets:
- localhost
labels:
job: snort
__path__: /var/log/snort/alert
```
—
## 3. Loki – Log Aggregator
Container-Konfiguration: ```yaml loki:
image: grafana/loki:2.9.4 container_name: loki ports: - "3100:3100" volumes: - ./loki/config/loki-config.yaml:/etc/loki/config.yaml - ./loki/data:/loki command: -config.file=/etc/loki/config.yaml restart: unless-stopped networks: - docker_backend
```
—
## 4. Grafana – Visualisierung
Container-Konfiguration: ```yaml grafana:
image: grafana/grafana container_name: grafana ports: - "3000:3000" volumes: - grafana-storage:/var/lib/grafana networks: - docker_backend - ldap-net labels: - "traefik.enable=true" - "traefik.http.routers.grafana.rule=Host(`grafana.example.local`)" - "traefik.http.routers.grafana.entrypoints=websecure" - "traefik.http.routers.grafana.tls.certresolver=le" - "traefik.http.services.grafana.loadbalancer.server.port=3000"
```
Beispiel-Query für Zeitreihendiagramm (Panel 1): ```logql count_over_time({filename=„/var/log/snort/alert“} |= „ALERT“ [1m]) ```
Beispiel-Query für Live Log Stream (Panel 2): ```logql {filename=„/var/log/snort/alert“} ```
—
## 5. Besonderheiten
- Filterung legitimer Verbindungen (z. B. SSH auf Port 22, HTTPS auf 443, interne Quellen) erfolgt direkt in den Regeln. - Promtail & Loki übernehmen den Rest der Verarbeitung ohne Inhalt zu interpretieren. - Grafana nutzt Panel-Spezifische Queries für z. B. Live-Ansicht und Heatmaps. - Alle Regeln sollten in einer dedizierten Datei wie `local.rules` gepflegt werden, damit Systemupdates keine Einträge überschreiben.
—
Lars WeiĂź 28.05.2025 13:43