Benutzer-Werkzeuge

Webseiten-Werkzeuge


it-themen:allgemein:snort_promtail_loki_grafana_ids_log-monitoring-dokumentation

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:

snippet.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:

snippet.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:

snippet.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:

snippet.yaml
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://loki:3100/loki/api/v1/push

scrape_configs:
  - job_name: snort
    static_configs:
      - targets:
          - localhost
        labels:
          job: snort
          __path__: /var/log/snort/alert

3. Loki – Log Aggregator

Container-Konfiguration:

snippet.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:

snippet.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):

snippet.logql
count_over_time({filename="/var/log/snort/alert"} |= "ALERT" [1m])

Beispiel-Query fĂĽr Live Log Stream (Panel 2):

snippet.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.Weiss@gmail.com?l|Lars WeiĂź Lars WeiĂź 28.05.2025 13:43

it-themen/allgemein/snort_promtail_loki_grafana_ids_log-monitoring-dokumentation.txt · Zuletzt geändert: von lars