CrowdSec-Threat-Map

CrowdSec-Threat-Map

Docker app from kabelsalatundklartext's Repository

Overview

Echtzeit-Angriffskarte direkt aus eurer lokalen CrowdSec-Datenbank. Features: - Interaktive Weltkarte mit animierten Angriffspfeilen (D3.js) - Live-Feed mit Suche, Filter und Pagination - Ban-Status-Anzeige und IP-Unban direkt aus dem Dashboard - Dynamische IP-Whitelist (verhindert Selbst-Ban bei IP-Wechsel) - 4 Farbthemen, Sound-Alarm, CSV-Export - Vollständig responsive — Desktop und Mobile Voraussetzung: CrowdSec muss als Docker-Container auf Unraid laufen. Tipp — CrowdSec Datenpfad herausfinden: docker inspect crowdsec | grep -A5 "Mounts"

🛡️ CrowdSec Threat Map

Echtzeit-Angriffskarte — direkt aus eurer lokalen CrowdSec-Datenbank

Version License Platform Python Docker


📸 Preview

Interaktive Weltkarte · Animierte Angriffspfeile · Live-Feed · Mobile-ready

CrowdSec Threat Map


✨ Features

  • 🌍 Interaktive Weltkarte mit animierten Angriffspfeilen (D3.js)
  • 🎯 Auto-Fit Zoom — alle Angriffspunkte automatisch sichtbar
  • 🔍 Echtzeit-Suche nach IP, Land, Stadt, Szenario, ASN
  • 🚫📋 Ban-Status-Anzeige — 🚫 aktiver Ban / 📋 nur Alert/Historie
  • 🔓 IP-Unban direkt aus dem Dashboard — löscht Decision UND Alert
  • 📊 Sparkline — Angriffe/Stunde auf einen Blick
  • 🎨 4 Farbthemen — Cyan, Alarm-Rot, Matrix-Grün, Amber
  • 📥 CSV-Export — direkt neben den Feed-Seitenzahlen
  • 📱 Vollständig responsive — Desktop und Mobile
  • 〰️ Linien-Toggle — Angriffspfeile & Radar-Ringe ein-/ausblenden
  • 🛡️ Dynamische IP-Whitelist — eigene IP automatisch alle 15 Min whitelisten
  • 🟢 Whitelist-Badge — zeigt aktuelle IP + Status live im Dashboard
  • 🌐 Sprache per VariableLANGUAGE=de oder LANGUAGE=en in docker-compose
  • 🏙️ Lokalisierte Stadtnamen — Nürnberg statt Nuremberg, München statt Munich etc.
  • 📍 Korrigierte GeoIP — Vogtland/Plauen korrekt statt falscher Grenzregion

🚀 Installation — Unraid (App Store)

1. App Store öffnen

Unraid → Apps → Suchfeld: crowdsec-threat-map → Installieren

2. Pflichtfelder ausfüllen

Unraid Beispiel Beschreibung
Server Breitengrad 52.5200 ⚠️ Pflicht — euer Breitengrad
Server Längengrad 13.4050 ⚠️ Pflicht — euer Längengrad
Pfad /crowdsec/data /mnt/user/Docker/crowdsec/data ⚠️ Pflicht — Pfad zu euren CrowdSec-Daten
Pfad /crowdsec/postoverflows /mnt/user/Docker/crowdsec/postoverflows Für dynamische Whitelist
Port 8080 8080 Port für das Dashboard (frei wählbar)

Koordinaten finden: Rechtsklick auf Google Maps → „Was ist hier?"

CrowdSec-Pfad finden:

docker inspect crowdsec | grep -A5 "Mounts"
# → "Source": "/mnt/user/Docker/crowdsec/data"

3. Optionale Einstellungen

Feld Standard Beschreibung
Variable SERVER_NAME MeinServer Anzeigename auf der Karte
Variable CROWDSEC_CONTAINER crowdsec Name des CrowdSec-Containers
Variable WHITELIST_ENABLED true Schützt vor Selbst-Ban bei IP-Wechsel
Variable LANGUAGE de Sprache: de oder en
Variable UNBAN_API_TOKEN (leer) Empfohlen: Geheimer Token für Unban

4. Starten

Auf Anwenden klicken → Container startet automatisch.

Dashboard: http://EURE-UNRAID-IP:8080


🚀 Installation — Docker

docker run -d \
  --name crowdsec-monitor \
  --restart unless-stopped \
  -p 8080:8080 \
  -v /pfad/zu/crowdsec/data:/crowdsec/data:ro \
  -v /pfad/zu/crowdsec/postoverflows:/crowdsec/postoverflows \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  --group-add 999 \
  -e SERVER_LAT=52.5200 \
  -e SERVER_LON=13.4050 \
  -e SERVER_NAME=Berlin \
  -e LANGUAGE=de \
  ghcr.io/kabelsalatundklartext/crowdsec-threat-map-docker:latest

Oder mit docker-compose.yml — die aktuelle Version findet ihr im Repository unter docker/docker-compose.yml.


⚙️ Alle Variablen

Variable Standard Beschreibung
SERVER_LAT 0.0 ⚠️ Breitengrad des Servers
SERVER_LON 0.0 ⚠️ Längengrad des Servers
SERVER_NAME MeinServer Anzeigename auf der Karte
LANGUAGE de Sprache der Oberfläche: de oder en
CROWDSEC_CONTAINER crowdsec Name des CrowdSec-Docker-Containers
CROWDSEC_DB_PATH /crowdsec/data/crowdsec.db Pfad zur CrowdSec SQLite-DB
CROWDSEC_MMDB_PATH /crowdsec/data/GeoLite2-City.mmdb Pfad zur GeoIP-Datenbank
CACHE_TTL 60 Cache-Zeit in Sekunden
DAYS_BACK 365 Anzahl Tage für die Anzeige
WHITELIST_ENABLED true Dynamische Whitelist aktivieren
WHITELIST_FILE /crowdsec/postoverflows/
s01-whitelist/my-whitelist.yaml
Pfad zur Whitelist-YAML
WHITELIST_INTERVAL 900 Prüfintervall in Sekunden (15 min)
CROWDSEC_RESTART_WAIT 15 Wartezeit nach CrowdSec-Neustart (Sek.)
CROWDSEC_RESTART_COOLDOWN 300 Mindestabstand zwischen automatischen CrowdSec-Neustarts
UNBAN_API_TOKEN (leer) Empfohlen: Geheimer Token für den Unban-Endpunkt

🔒 Sicherheit

Das Dashboard kann über den eingebundenen Docker-Socket CrowdSec-Bans aufheben (cscli). Behandelt Port 8080 daher wie eine Admin-Oberfläche:

Empfehlung Warum
Nicht ins Internet port-forwarden Jeder Erreichbare kann sonst Bans löschen
UNBAN_API_TOKEN setzen Schützt /unban vor fremden Aufrufen und CSRF (Header X-API-Token)
Nur im LAN / hinter VPN nutzen Typisches Homelab-Setup
Zufälliges Token z. B. openssl rand -hex 32 in docker-compose oder Unraid-Variable

Token setzen (Beispiel):

- UNBAN_API_TOKEN=a1b2c3d4e5f6...   # lang und zufällig

Ohne Token bleibt Unban wie bisher möglich — beim Start erscheint im Container-Log ein Hinweis.

Technische Absicherungen (ab v1.4.3):

  • IP-Validierung (IPv4/IPv6) vor jedem Unban und bei der dynamischen Whitelist
  • Kein offenes CORS mehr auf /unban
  • Cooldown für automatische CrowdSec-Neustarts (CROWDSEC_RESTART_COOLDOWN)

📦 Volumes

Host-Pfad Container-Pfad Beschreibung Pflicht?
/pfad/zu/crowdsec/data /crowdsec/data:ro CrowdSec DB + GeoIP-MMDB ✅ Ja
/pfad/zu/crowdsec/postoverflows /crowdsec/postoverflows Für dynamische Whitelist Nur wenn WHITELIST_ENABLED=true
/var/run/docker.sock /var/run/docker.sock:ro Für IP-Unban + Whitelist-Neustart Nur für Unban-Button

Unraid-Beispielpfade:

  • /mnt/user/Docker/crowdsec/data
  • /mnt/user/Docker/crowdsec/postoverflows

🛡️ Dynamische IP-Whitelist

Heimanschlüsse bekommen meist täglich eine neue IP. Ohne Whitelist kann CrowdSec euch selbst bannen. Der eingebaute Hintergrund-Thread prüft alle 15 Minuten eure aktuelle öffentliche IP und aktualisiert die Whitelist-YAML automatisch.

Voraussetzungen:

  • WHITELIST_ENABLED=true (Standard)
  • Volume /crowdsec/postoverflows eingebunden
  • /var/run/docker.sock eingebunden
  • Docker-GID korrekt gesetzt (--group-add 999 bzw. in Unraid über group_add)

Wie es funktioniert:

  1. Exporter ermittelt eure aktuelle öffentliche IP
  2. Vergleich mit der aktuellen Whitelist-YAML
  3. Bei Änderung: YAML wird aktualisiert, CrowdSec wird neu gestartet
  4. Wartezeit nach Neustart konfigurierbar via CROWDSEC_RESTART_WAIT

Dashboard-Badge:

Farbe Bedeutung
🟢 Grün IP gewhitelistet, alles ok
🔵 Cyan IP wurde gerade aktualisiert
🔴 Rot Fehler beim Update

🔓 IP-Unban

Mit UNBAN_API_TOKEN ist der Unban-Endpunkt geschützt; das Dashboard sendet den Token automatisch mit.

Jeder Feed-Eintrag zeigt den Ban-Status direkt an:

Icon Bedeutung Klick
🚫 (leuchtend) Aktiver Ban vorhanden Decision + Alert löschen
📋 (leuchtend) Nur Alert/Historie Nur Alert löschen

🗺️ GeoIP & Stadtanzeige

Ohne GeoIP-Datenbank werden keine Städte angezeigt, nur Länderpunkte.

GeoLite2-City.mmdb einrichten:

  1. Kostenlos registrieren: MaxMind GeoLite2
  2. GeoLite2-City.mmdb herunterladen
  3. In euren CrowdSec-Datenordner legen (gleicher Ordner wie crowdsec.db)
  4. Container neu starten

🛠️ Fehlerbehebung

Dashboard leer / keine Daten:

docker logs crowdsec-monitor
curl http://EURE-IP:8080/metrics | head -10

Falscher CrowdSec-Pfad:

docker inspect crowdsec | grep -A5 "Mounts"

Unban funktioniert nicht:

# Docker-GID prüfen
getent group docker | cut -d: -f3
# → In Unraid unter "Extra Parameters" als --group-add eintragen

# Bei gesetztem UNBAN_API_TOKEN: 401 = Token fehlt oder falsch
curl -X POST http://EURE-IP:8080/unban \
  -H "Content-Type: application/json" \
  -H "X-API-Token: DEIN-TOKEN" \
  -d '{"ip":"1.2.3.4"}'

Whitelist-Fehler:

curl http://EURE-IP:8080/whitelist-status

Dashboard zeigt Verbindungsfehler:

# Prüfen ob entrypoint.sh die URL korrekt gesetzt hat
docker exec crowdsec-monitor grep "EXPORTER_URL" /var/www/html/index.html
# → Sollte '/metrics' zeigen

📋 Changelog

Vollständige Versionshistorie → CHANGELOG.md


🔗 Links


📄 Lizenz

GNU General Public License v3.0 (GPL-3.0)

✅ Privat & Homelab nutzen ✅ Verändern & anpassen
✅ Weitergeben & teilen ✅ Eigene Versionen veröffentlichen
✅ Kommerzieller Einsatz erlaubt ❌ Closed-Source-Abwandlungen verboten
✅ Forks müssen GPL-3.0 bleiben ✅ Quellcode muss immer offen bleiben

Bei Weitergabe oder Veröffentlichung: Namensnennung + GPL-3.0-Lizenz beibehalten.

"CrowdSec Threat Map" von kabelsalatundklartext — GitHub

Install CrowdSec-Threat-Map on Unraid in a few clicks.

Find CrowdSec-Threat-Map in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for CrowdSec-Threat-Map Review the template variables and paths Click Install

Requirements

CrowdSec Docker Container

Related apps

Details

Repository
ghcr.io/kabelsalatundklartext/crowdsec-threat-map-docker:latest
Last Updated2026-07-15
First Seen2026-05-13

Runtime arguments

Web UI
http://[IP]:[PORT:8080]/
Network
bridge
Shell
sh
Privileged
false
Extra Params
--group-add 999

Template configuration

Dashboard PortPorttcp

Port für das Web-Dashboard — frei wählbar, z.B. 8080, 5757, etc.

Target
8080
CrowdSec DatenpfadPathro

Pfad zum CrowdSec data-Verzeichnis (enthält crowdsec.db und optional GeoLite2-City.mmdb). Tipp: docker inspect crowdsec | grep -A5 Mounts

Target
/crowdsec/data
CrowdSec Postoverflows-PfadPathrw

Pfad zum postoverflows-Verzeichnis. Wird für die dynamische IP-Whitelist benötigt (WHITELIST_ENABLED=true). Kann leer gelassen werden wenn Whitelist deaktiviert.

Target
/crowdsec/postoverflows
Docker SocketPathro

Docker Socket — wird für IP-Unban und dynamische Whitelist (CrowdSec-Neustart) benötigt.

Target
/var/run/docker.sock
Default
/var/run/docker.sock
Value
/var/run/docker.sock
Server Breitengrad (LAT)Variable

Breitengrad eures Servers — erscheint als Zielpunkt auf der Karte. Tipp: Rechtsklick auf Google Maps → Was ist hier?

Target
SERVER_LAT
Default
0.0
Value
0.0
Server Längengrad (LON)Variable

Längengrad eures Servers — erscheint als Zielpunkt auf der Karte. Tipp: Rechtsklick auf Google Maps → Was ist hier?

Target
SERVER_LON
Default
0.0
Value
0.0
Server NameVariable

Anzeigename eures Servers im Dashboard (z.B. Hamburg, Berlin, Homelab).

Target
SERVER_NAME
Default
MeinServer
Value
MeinServer
Sprache (LANGUAGE)Variable

Oberflächensprache des Dashboards: de (Deutsch) oder en (Englisch).

Target
LANGUAGE
Default
de
Value
de
CrowdSec Container-NameVariable

Name des CrowdSec Docker-Containers. Prüfen mit: docker ps | grep crowdsec

Target
CROWDSEC_CONTAINER
Default
crowdsec
Value
crowdsec
Dynamische Whitelist aktivierenVariable

Verhindert Selbst-Ban bei wechselnder IP (typisch bei deutschen Heimanschlüssen). Eigene IP wird automatisch alle 15 Minuten in CrowdSec gewhitelistet.

Target
WHITELIST_ENABLED
Default
true
Value
true
Whitelist Datei-PfadVariable

Pfad zur Whitelist-YAML innerhalb des Containers. Nur ändern wenn ihr einen anderen Postoverflows-Pfad nutzt.

Target
WHITELIST_FILE
Default
/crowdsec/postoverflows/s01-whitelist/my-whitelist.yaml
Value
/crowdsec/postoverflows/s01-whitelist/my-whitelist.yaml
Whitelist Prüfintervall (Sekunden)Variable

Wie oft die eigene IP geprüft und ggf. gewhitelistet wird. Standard: 900 Sekunden (15 Minuten).

Target
WHITELIST_INTERVAL
Default
900
Value
900
Cache TTL (Sekunden)Variable

Wie lange die Metrik-Daten gecacht werden bevor sie neu aus der DB geladen werden. Standard: 60 Sekunden.

Target
CACHE_TTL
Default
60
Value
60
Tage zurück (DAYS_BACK)Variable

Wie viele Tage Angriffs-Historie angezeigt wird. Standard: 365 Tage.

Target
DAYS_BACK
Default
365
Value
365
CrowdSec Restart Wartezeit (Sekunden)Variable

Wartezeit nach CrowdSec-Neustart (bei Whitelist-Update). Erhöhen wenn Timeout-Fehler im Log erscheinen. Standard: 15 Sekunden.

Target
CROWDSEC_RESTART_WAIT
Default
15
Value
15
Unban API-TokenVariable

Empfohlen: Zufälliges Token (z.B. openssl rand -hex 32). Schützt den Unban-Endpunkt vor unbefugten Aufrufen. Leer lassen nur im isolierten LAN.

Target
UNBAN_API_TOKEN
CrowdSec Restart Cooldown (Sekunden)Variable

Mindestabstand zwischen automatischen CrowdSec-Neustarts bei Whitelist-Updates. Standard: 300 Sekunden.

Target
CROWDSEC_RESTART_COOLDOWN
Default
300
Value
300