All apps · 0 apps
CrowdSec-Threat-Map
Docker app from kabelsalatundklartext's Repository
Overview
Readme
View on GitHub🛡️ CrowdSec Threat Map
Echtzeit-Angriffskarte — direkt aus eurer lokalen CrowdSec-Datenbank
📸 Preview
Interaktive Weltkarte · Animierte Angriffspfeile · Live-Feed · Mobile-ready

✨ 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 Variable —
LANGUAGE=deoderLANGUAGE=enin 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/postoverflowseingebunden /var/run/docker.sockeingebunden- Docker-GID korrekt gesetzt (
--group-add 999bzw. in Unraid übergroup_add)
Wie es funktioniert:
- Exporter ermittelt eure aktuelle öffentliche IP
- Vergleich mit der aktuellen Whitelist-YAML
- Bei Änderung: YAML wird aktualisiert, CrowdSec wird neu gestartet
- 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_TOKENist 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:
- Kostenlos registrieren: MaxMind GeoLite2
GeoLite2-City.mmdbherunterladen- In euren CrowdSec-Datenordner legen (gleicher Ordner wie
crowdsec.db) - 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
- MaxMind GeoLite2 — kostenlose GeoIP-Datenbank
- CrowdSec Docker Hub
- CrowdSec Docs
📄 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
Requirements
Categories
Related apps
Explore more like this
Explore allDetails
ghcr.io/kabelsalatundklartext/crowdsec-threat-map-docker:latestRuntime arguments
- Web UI
http://[IP]:[PORT:8080]/- Network
bridge- Shell
sh- Privileged
- false
- Extra Params
--group-add 999
Template configuration
Port für das Web-Dashboard — frei wählbar, z.B. 8080, 5757, etc.
- Target
- 8080
Pfad zum CrowdSec data-Verzeichnis (enthält crowdsec.db und optional GeoLite2-City.mmdb). Tipp: docker inspect crowdsec | grep -A5 Mounts
- Target
- /crowdsec/data
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 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
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
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
Anzeigename eures Servers im Dashboard (z.B. Hamburg, Berlin, Homelab).
- Target
- SERVER_NAME
- Default
- MeinServer
- Value
- MeinServer
Oberflächensprache des Dashboards: de (Deutsch) oder en (Englisch).
- Target
- LANGUAGE
- Default
- de
- Value
- de
Name des CrowdSec Docker-Containers. Prüfen mit: docker ps | grep crowdsec
- Target
- CROWDSEC_CONTAINER
- Default
- crowdsec
- Value
- crowdsec
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
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
Wie oft die eigene IP geprüft und ggf. gewhitelistet wird. Standard: 900 Sekunden (15 Minuten).
- Target
- WHITELIST_INTERVAL
- Default
- 900
- Value
- 900
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
Wie viele Tage Angriffs-Historie angezeigt wird. Standard: 365 Tage.
- Target
- DAYS_BACK
- Default
- 365
- Value
- 365
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
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
Mindestabstand zwischen automatischen CrowdSec-Neustarts bei Whitelist-Updates. Standard: 300 Sekunden.
- Target
- CROWDSEC_RESTART_COOLDOWN
- Default
- 300
- Value
- 300