Initialer Import
This commit is contained in:
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Enforce LF line endings for all text files
|
||||||
|
* text=auto eol=lf
|
||||||
24
.gitignore
vendored
Normal file
24
.gitignore
vendored
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# Backup-Dateien
|
||||||
|
*.bak
|
||||||
|
backups/
|
||||||
|
|
||||||
|
# Log-Dateien
|
||||||
|
*.log
|
||||||
|
*.log.*
|
||||||
|
|
||||||
|
# Lock-File
|
||||||
|
*.lock
|
||||||
|
|
||||||
|
# Temporäre Dateien
|
||||||
|
*.tmp
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
|
||||||
|
# OS-Dateien
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Editor
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
293
README.md
293
README.md
@@ -1,16 +1,293 @@
|
|||||||
# template_repository
|
# CrowdSec Manager
|
||||||
|
|
||||||
|
Automatische Verwaltung einer CrowdSec-Allowlist und interaktive CrowdSec-Administration über ein Menü.
|
||||||
|
|
||||||
|
## Übersicht
|
||||||
|
|
||||||
|
Der **CrowdSec Manager** ist ein Bash-Script, das:
|
||||||
|
- Domains und Subdomains automatisch zu IPv4/IPv6-Adressen auflöst
|
||||||
|
- Die aufgelösten IPs in eine CrowdSec-Allowlist einträgt
|
||||||
|
- Veraltete Einträge automatisch entfernt wenn sich IPs ändern
|
||||||
|
- Per Cron regelmäßig ausgeführt werden kann (automatischer Sync)
|
||||||
|
- Ein **interaktives Menü** für die CrowdSec-Administration bereitstellt
|
||||||
|
- Benachrichtigungen über Änderungen senden kann (Desktop, Ntfy, **Gotify**, E-Mail)
|
||||||
|
|
||||||
Wichtig: Link für Lizenz anpassen.
|
### Features
|
||||||
|
|
||||||
|
- **Interaktives Menü** als Standard-Modus (für manuelle Verwaltung)
|
||||||
|
- **CrowdSec Admin-Funktionen**: Decisions, Alerts, Bouncers, Machines, Metriken, IP-Info
|
||||||
|
- **Gotify** als zusätzlicher Benachrichtigungskanal
|
||||||
|
- **`--run`-Flag** für automatischen Cron-Betrieb
|
||||||
|
- **Eigene cscli-Befehle** direkt aus dem Menü ausführen
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
<p align="center">
|
| Feature | Beschreibung |
|
||||||
<img src="https://assets.techniverse.net/f1/git/graphics/gray0-catonline.svg" alt="">
|
|---------|-------------|
|
||||||
</p>
|
| **Interaktives Menü** | Grafische Administration von CrowdSec via Menü |
|
||||||
|
| **DNS-Auflösung** | Automatische Auflösung von Domains zu IPv4 und IPv6 |
|
||||||
|
| **CIDR-Support** | Ganze Subnetze können allowgelistet werden |
|
||||||
|
| **Auto-Cleanup** | Entfernt IPs die nicht mehr zu konfigurierten Domains gehören |
|
||||||
|
| **Decisions verwalten** | Anzeigen, Suchen, Hinzufügen, Entfernen von Decisions |
|
||||||
|
| **Alerts verwalten** | Anzeigen, Inspizieren, Löschen von Alerts |
|
||||||
|
| **IP-Info** | Komplett-Check einer IP (rDNS, Decisions, Alerts, Details) |
|
||||||
|
| **Flexible CrowdSec-Anbindung** | Unterstützt direkte Installation, Docker, Podman, etc. |
|
||||||
|
| **Benachrichtigungen** | Desktop, Ntfy, Gotify, E-Mail |
|
||||||
|
| **Logging** | Konfigurierbares Log-Level mit Log-Rotation |
|
||||||
|
| **Dry-Run** | Testmodus ohne tatsächliche Änderungen |
|
||||||
|
| **Lock-File** | Verhindert parallele Ausführung |
|
||||||
|
| **Backup** | Sichert den Zustand vor Änderungen |
|
||||||
|
| **Cron-fähig** | Optimiert für automatische Ausführung mit `--run` |
|
||||||
|
|
||||||
<p align="center">
|
## Schnellstart
|
||||||
<img src="https://assets.techniverse.net/f1/logos/small/license.png" alt="License" width="15" height="15"> <a href="./LICENSE">License</a> | <img src="https://assets.techniverse.net/f1/logos/small/matrix2.svg" alt="Matrix" width="15" height="15"> <a href="https://matrix.to/#/#community:techniverse.net">Matrix</a> | <img src="https://assets.techniverse.net/f1/logos/small/mastodon2.svg" alt="Mastodon" width="15" height="15"> <a href="https://social.techniverse.net/@donnerwolke">Mastodon</a>
|
|
||||||
</p>
|
### 1. Repository klonen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://git.techniverse.net/scriptos/crowdsec-manager.git
|
||||||
|
cd crowdsec-manager
|
||||||
|
chmod +x crowdsec-manager.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Abhängigkeiten installieren
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Debian / Ubuntu
|
||||||
|
sudo apt install -y dnsutils curl
|
||||||
|
|
||||||
|
# RHEL / CentOS / Fedora
|
||||||
|
sudo dnf install -y bind-utils curl
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Konfiguration anpassen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nano config/crowdsec-manager.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
**Mindestens anpassen:**
|
||||||
|
- `CSCLI_CMD` – Der Befehl um CrowdSec CLI aufzurufen
|
||||||
|
- `ALLOWLIST_ENTRIES` – Die Domains/IPs für die Allowlist
|
||||||
|
|
||||||
|
### 4. Testen & Verwenden
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Konfiguration prüfen
|
||||||
|
./crowdsec-manager.sh --test
|
||||||
|
|
||||||
|
# Interaktives Menü starten (Standard)
|
||||||
|
./crowdsec-manager.sh
|
||||||
|
|
||||||
|
# Allowlist-Sync (für Cron)
|
||||||
|
./crowdsec-manager.sh --run
|
||||||
|
|
||||||
|
# Testlauf ohne Änderungen
|
||||||
|
./crowdsec-manager.sh --run --dry-run
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Cron einrichten
|
||||||
|
|
||||||
|
```bash
|
||||||
|
crontab -e
|
||||||
|
```
|
||||||
|
|
||||||
|
```cron
|
||||||
|
*/30 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --run >> /var/log/crowdsec-manager-cron.log 2>&1
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Wichtig:** `--run` muss angegeben werden, da ohne Parameter das interaktive Menü startet.
|
||||||
|
|
||||||
|
## Interaktives Menü
|
||||||
|
|
||||||
|
```
|
||||||
|
╔═══════════════════════════════════════════════════════╗
|
||||||
|
║ CrowdSec Manager v0.1.0 ║
|
||||||
|
╚═══════════════════════════════════════════════════════╝
|
||||||
|
|
||||||
|
── ALLOWLIST MANAGEMENT ──
|
||||||
|
1) Allowlist synchronisieren 2) Dry-Run
|
||||||
|
3) Allowlist anzeigen 4) Config testen
|
||||||
|
5) Flush (alle Einträge entfernen)
|
||||||
|
|
||||||
|
── DECISIONS ──
|
||||||
|
10) Alle anzeigen 11) Suchen 12) Hinzufügen 13) Entfernen
|
||||||
|
|
||||||
|
── ALERTS ──
|
||||||
|
20) Alle anzeigen 21) Inspizieren 22) Löschen
|
||||||
|
|
||||||
|
── INFORMATIONEN ──
|
||||||
|
30) IP-Info (Komplett) 31) Metriken 32) Status
|
||||||
|
33) Bouncers 34) Machines 35) Parsers
|
||||||
|
36) Scenarios 37) Collections
|
||||||
|
|
||||||
|
── ERWEITERT ──
|
||||||
|
40) Eigener cscli-Befehl 0) Beenden
|
||||||
|
```
|
||||||
|
|
||||||
|
## Konfiguration
|
||||||
|
|
||||||
|
Die gesamte Konfiguration erfolgt über: [`config/crowdsec-manager.conf`](config/crowdsec-manager.conf)
|
||||||
|
|
||||||
|
### CrowdSec Basisbefehl
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Direkt installiert
|
||||||
|
CSCLI_CMD="cscli"
|
||||||
|
|
||||||
|
# Docker
|
||||||
|
CSCLI_CMD="docker exec crowdsec cscli"
|
||||||
|
|
||||||
|
# Docker Compose
|
||||||
|
CSCLI_CMD="docker compose exec crowdsec cscli"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Domains & IPs
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ALLOWLIST_ENTRIES=(
|
||||||
|
"example.com" # Domain (wird aufgelöst)
|
||||||
|
"cdn.example.com"
|
||||||
|
"203.0.113.50" # Einzelne IP
|
||||||
|
"10.0.0.0/8" # CIDR-Bereich
|
||||||
|
"2001:db8::1" # IPv6
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Benachrichtigungen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
NOTIFY_ENABLED=true
|
||||||
|
NOTIFY_ON="changes" # always | changes | errors
|
||||||
|
|
||||||
|
# Ntfy
|
||||||
|
NOTIFY_NTFY_ENABLED=true
|
||||||
|
NOTIFY_NTFY_URL="https://ntfy.sh"
|
||||||
|
NOTIFY_NTFY_TOPIC="mein-crowdsec"
|
||||||
|
|
||||||
|
# Gotify
|
||||||
|
NOTIFY_GOTIFY_ENABLED=true
|
||||||
|
NOTIFY_GOTIFY_URL="https://gotify.meinedomain.de"
|
||||||
|
NOTIFY_GOTIFY_TOKEN="AbCdEf12345"
|
||||||
|
NOTIFY_GOTIFY_PRIORITY=5
|
||||||
|
|
||||||
|
# E-Mail
|
||||||
|
NOTIFY_EMAIL_ENABLED=true
|
||||||
|
NOTIFY_EMAIL_TO="admin@example.com"
|
||||||
|
NOTIFY_EMAIL_SMTP_SERVER="smtp.example.com"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Verwendung (CLI)
|
||||||
|
|
||||||
|
```
|
||||||
|
Verwendung:
|
||||||
|
crowdsec-manager.sh [OPTIONEN]
|
||||||
|
|
||||||
|
Modi:
|
||||||
|
(ohne Optionen) Startet das interaktive Menü
|
||||||
|
--run Allowlist synchronisieren (für Cron)
|
||||||
|
|
||||||
|
Optionen:
|
||||||
|
-c, --config FILE Konfigurationsdatei angeben
|
||||||
|
-d, --dry-run Testlauf ohne Änderungen
|
||||||
|
-v, --verbose Ausführliche Ausgabe (DEBUG)
|
||||||
|
-q, --quiet Minimale Ausgabe (nur ERROR)
|
||||||
|
-l, --list Aktuelle Allowlist anzeigen
|
||||||
|
-f, --flush Alle verwalteten Einträge entfernen
|
||||||
|
-t, --test Konfiguration testen
|
||||||
|
-i, --interactive Interaktives Menü starten
|
||||||
|
-h, --help Hilfe anzeigen
|
||||||
|
-V, --version Version anzeigen
|
||||||
|
```
|
||||||
|
|
||||||
|
## Ablaufdiagramm (Allowlist-Sync)
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────┐
|
||||||
|
│ Script: --run │
|
||||||
|
└────────────┬────────────┘
|
||||||
|
│
|
||||||
|
┌───────▼────────┐
|
||||||
|
│ Config laden │
|
||||||
|
│ Lock erwerben │
|
||||||
|
│ Health-Check │
|
||||||
|
└───────┬────────┘
|
||||||
|
│
|
||||||
|
┌───────▼────────┐
|
||||||
|
│ Aktuelle Liste │
|
||||||
|
│ abrufen + Backup│
|
||||||
|
└───────┬────────┘
|
||||||
|
│
|
||||||
|
┌───────▼────────┐
|
||||||
|
│ DNS-Auflösung │
|
||||||
|
│ aller Einträge │
|
||||||
|
└───────┬────────┘
|
||||||
|
│
|
||||||
|
┌───────▼────────┐
|
||||||
|
│ Vergleich & │
|
||||||
|
│ Synchronisation │
|
||||||
|
└───────┬────────┘
|
||||||
|
│
|
||||||
|
┌───────▼────────┐
|
||||||
|
│ Report & │
|
||||||
|
│ Notifications │
|
||||||
|
└───────┬────────┘
|
||||||
|
│
|
||||||
|
┌───────▼────────┐
|
||||||
|
│ Lock lösen │
|
||||||
|
│ Aufräumen │
|
||||||
|
└─────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## Abhängigkeiten
|
||||||
|
|
||||||
|
| Paket | Erforderlich | Zweck |
|
||||||
|
|-------|:---:|--------|
|
||||||
|
| `bash` (≥ 4.0) | ✅ | Script-Ausführung |
|
||||||
|
| `dig` (dnsutils / bind-utils) | ✅ | DNS-Auflösung |
|
||||||
|
| `curl` | ⚡ | Ntfy-, Gotify- und E-Mail-Benachrichtigungen |
|
||||||
|
| `python3` | ⚡ | JSON-Escaping für Gotify (Fallback: sed) |
|
||||||
|
| `notify-send` | ⚡ | Desktop-Benachrichtigungen |
|
||||||
|
| `mail` | ⚡ | E-Mail-Fallback |
|
||||||
|
|
||||||
|
✅ = Erforderlich | ⚡ = Optional (je nach Konfiguration)
|
||||||
|
|
||||||
|
## Dateien & Struktur
|
||||||
|
|
||||||
|
```
|
||||||
|
crowdsec-manager/
|
||||||
|
├── crowdsec-manager.sh # Hauptscript
|
||||||
|
├── config/
|
||||||
|
│ └── crowdsec-manager.conf # Konfigurationsdatei
|
||||||
|
├── examples/
|
||||||
|
│ └── crontab.example # Crontab-Beispiele
|
||||||
|
├── docs/
|
||||||
|
│ ├── DOCUMENTATION.md # Dokumentationsindex
|
||||||
|
│ ├── CONFIGURATION.md # Konfigurationsreferenz
|
||||||
|
│ ├── ALLOWLIST.md # Allowlist-Verwaltung & Cron
|
||||||
|
│ ├── ADMIN.md # Interaktives Menü & Admin
|
||||||
|
│ ├── NOTIFICATIONS.md # Benachrichtigungssystem
|
||||||
|
│ └── TROUBLESHOOTING.md # Fehlerbehebung & FAQ
|
||||||
|
├── README.md # Diese Datei
|
||||||
|
├── LICENSE # MIT Lizenz
|
||||||
|
└── .gitignore
|
||||||
|
```
|
||||||
|
|
||||||
|
## Dokumentation
|
||||||
|
|
||||||
|
Die detaillierte Dokumentation ist aufgeteilt in:
|
||||||
|
|
||||||
|
| Dokument | Beschreibung |
|
||||||
|
|----------|-------------|
|
||||||
|
| [docs/CONFIGURATION.md](docs/CONFIGURATION.md) | Alle Konfigurationsoptionen |
|
||||||
|
| [docs/ALLOWLIST.md](docs/ALLOWLIST.md) | Allowlist-Verwaltung, CLI, Cron |
|
||||||
|
| [docs/ADMIN.md](docs/ADMIN.md) | Interaktives Menü & Administration |
|
||||||
|
| [docs/NOTIFICATIONS.md](docs/NOTIFICATIONS.md) | Ntfy, Gotify, E-Mail, Desktop |
|
||||||
|
| [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) | Fehlerbehebung & FAQ |
|
||||||
|
|
||||||
|
## Lizenz
|
||||||
|
|
||||||
|
MIT License – siehe [LICENSE](LICENSE) Datei.
|
||||||
|
|
||||||
|
## Beitragen
|
||||||
|
|
||||||
|
Pull Requests und Issues sind willkommen! Bitte stelle sicher, dass deine Änderungen die bestehende Funktionalität nicht brechen.
|
||||||
|
|||||||
183
config/crowdsec-manager.conf
Normal file
183
config/crowdsec-manager.conf
Normal file
@@ -0,0 +1,183 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# ============================================================================
|
||||||
|
# CrowdSec Manager - Konfigurationsdatei
|
||||||
|
# ============================================================================
|
||||||
|
# Diese Datei enthält alle konfigurierbaren Parameter für das Script.
|
||||||
|
# Passe die Werte an deine Umgebung an.
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# CrowdSec Basis-Konfiguration
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Basisbefehl für CrowdSec CLI (cscli)
|
||||||
|
# Beispiele:
|
||||||
|
# Direkt installiert: CSCLI_CMD="cscli"
|
||||||
|
# Docker: CSCLI_CMD="docker exec crowdsec cscli"
|
||||||
|
# Docker Compose: CSCLI_CMD="docker compose exec crowdsec cscli"
|
||||||
|
# Podman: CSCLI_CMD="podman exec crowdsec cscli"
|
||||||
|
CSCLI_CMD="docker exec crowdsec cscli"
|
||||||
|
|
||||||
|
# Name der Allowlist-Decision-Liste in CrowdSec
|
||||||
|
# Diese Liste wird vom Script angelegt und verwaltet
|
||||||
|
ALLOWLIST_NAME="crowdsec-manager"
|
||||||
|
|
||||||
|
# Beschreibung der Allowlist
|
||||||
|
ALLOWLIST_DESCRIPTION="Managed by crowdsec-manager script"
|
||||||
|
|
||||||
|
# Dauer für die Allowlist-Einträge (wie lange ein Eintrag gültig ist)
|
||||||
|
# Format: s=Sekunden, m=Minuten, h=Stunden
|
||||||
|
# Empfehlung: Etwas länger als das Cron-Intervall setzen
|
||||||
|
ALLOWLIST_DURATION="25h"
|
||||||
|
|
||||||
|
# Typ der Allowlist-Einträge
|
||||||
|
# Mögliche Werte: "allow" (Whitelist)
|
||||||
|
ALLOWLIST_REASON="allowlist-manager-auto"
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Domains / DNS / IPs zum Allowlisten
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Liste der Domains, Subdomains und einzelnen IPs
|
||||||
|
# Trenne mehrere Einträge mit Leerzeichen
|
||||||
|
# Unterstützte Formate:
|
||||||
|
# - Domains: example.com
|
||||||
|
# - Subdomains: subdomain.example.com
|
||||||
|
# - IPv4-Adressen: 192.168.1.100
|
||||||
|
# - IPv6-Adressen: 2001:db8::1
|
||||||
|
# - CIDR-Notation: 192.168.1.0/24
|
||||||
|
# - CIDR IPv6: 2001:db8::/32
|
||||||
|
|
||||||
|
ALLOWLIST_ENTRIES=(
|
||||||
|
# === Domains & Subdomains ===
|
||||||
|
"example.com"
|
||||||
|
"subdomain.example.com"
|
||||||
|
|
||||||
|
# === Einzelne IPs ===
|
||||||
|
# "192.168.1.100"
|
||||||
|
# "2001:db8::1"
|
||||||
|
|
||||||
|
# === CIDR-Bereiche ===
|
||||||
|
# "10.0.0.0/8"
|
||||||
|
# "2001:db8::/32"
|
||||||
|
)
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# DNS-Auflösung
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Eigenen DNS-Server verwenden (leer lassen für System-DNS)
|
||||||
|
# Beispiele: "1.1.1.1", "8.8.8.8", "9.9.9.9"
|
||||||
|
DNS_SERVER=""
|
||||||
|
|
||||||
|
# IPv6-Adressen ebenfalls auflösen? (true/false)
|
||||||
|
RESOLVE_IPV6=true
|
||||||
|
|
||||||
|
# DNS-Auflösungs-Timeout in Sekunden
|
||||||
|
DNS_TIMEOUT=5
|
||||||
|
|
||||||
|
# Anzahl DNS-Auflösungsversuche bei Fehler
|
||||||
|
DNS_RETRIES=3
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Logging
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Log-Level: DEBUG, INFO, WARN, ERROR
|
||||||
|
LOG_LEVEL="INFO"
|
||||||
|
|
||||||
|
# Pfad zur Log-Datei (leer = nur stdout)
|
||||||
|
LOG_FILE="/var/log/crowdsec-manager.log"
|
||||||
|
|
||||||
|
# Maximale Größe der Log-Datei in KB bevor rotiert wird (0 = keine Rotation)
|
||||||
|
LOG_MAX_SIZE_KB=5120
|
||||||
|
|
||||||
|
# Anzahl der aufzubewahrenden rotierten Log-Dateien
|
||||||
|
LOG_ROTATE_COUNT=3
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Backup
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Backup vor Änderungen erstellen? (true/false)
|
||||||
|
BACKUP_ENABLED=true
|
||||||
|
|
||||||
|
# Verzeichnis für Backups
|
||||||
|
BACKUP_DIR="/var/backup/crowdsec-manager"
|
||||||
|
|
||||||
|
# Anzahl aufzubewahrende Backups (ältere werden gelöscht)
|
||||||
|
BACKUP_RETAIN_COUNT=7
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Lock-File (verhindert parallele Ausführung)
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Lock-File aktivieren? (true/false)
|
||||||
|
LOCK_ENABLED=true
|
||||||
|
|
||||||
|
# Pfad zum Lock-File
|
||||||
|
LOCK_FILE="/tmp/crowdsec-manager.lock"
|
||||||
|
|
||||||
|
# Timeout für Lock in Sekunden (0 = sofort abbrechen wenn gesperrt)
|
||||||
|
LOCK_TIMEOUT=300
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Benachrichtigungen
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Benachrichtigungen aktivieren? (true/false)
|
||||||
|
NOTIFY_ENABLED=false
|
||||||
|
|
||||||
|
# Wann benachrichtigen?
|
||||||
|
# "always" - Immer nach Ausführung
|
||||||
|
# "changes" - Nur wenn Änderungen vorgenommen wurden
|
||||||
|
# "errors" - Nur bei Fehlern
|
||||||
|
NOTIFY_ON="changes"
|
||||||
|
|
||||||
|
# --- Notify-Send (Desktop-Benachrichtigungen) ---
|
||||||
|
NOTIFY_DESKTOP_ENABLED=false
|
||||||
|
|
||||||
|
# --- Ntfy (https://ntfy.sh) ---
|
||||||
|
NOTIFY_NTFY_ENABLED=false
|
||||||
|
NOTIFY_NTFY_URL="https://ntfy.sh"
|
||||||
|
NOTIFY_NTFY_TOPIC="crowdsec-manager"
|
||||||
|
NOTIFY_NTFY_PRIORITY="default"
|
||||||
|
NOTIFY_NTFY_TOKEN=""
|
||||||
|
# Tags/Emojis für Ntfy-Nachrichten
|
||||||
|
NOTIFY_NTFY_TAGS="shield,white_check_mark"
|
||||||
|
|
||||||
|
# --- Gotify (https://gotify.net) ---
|
||||||
|
NOTIFY_GOTIFY_ENABLED=false
|
||||||
|
# URL deiner Gotify-Instanz (mit Protokoll, ohne trailing slash)
|
||||||
|
NOTIFY_GOTIFY_URL="https://gotify.example.com"
|
||||||
|
# App-Token aus Gotify (unter Apps -> Token erstellen)
|
||||||
|
NOTIFY_GOTIFY_TOKEN=""
|
||||||
|
# Priorität der Nachricht (1-10, höher = wichtiger)
|
||||||
|
# 1-3: Niedrig, 4-7: Normal, 8-10: Hoch/Kritisch
|
||||||
|
NOTIFY_GOTIFY_PRIORITY=5
|
||||||
|
|
||||||
|
# --- E-Mail ---
|
||||||
|
NOTIFY_EMAIL_ENABLED=false
|
||||||
|
NOTIFY_EMAIL_TO="admin@example.com"
|
||||||
|
NOTIFY_EMAIL_FROM="crowdsec@example.com"
|
||||||
|
NOTIFY_EMAIL_SUBJECT="CrowdSec Manager Report"
|
||||||
|
# SMTP-Server Konfiguration
|
||||||
|
NOTIFY_EMAIL_SMTP_SERVER="smtp.example.com"
|
||||||
|
NOTIFY_EMAIL_SMTP_PORT="587"
|
||||||
|
NOTIFY_EMAIL_SMTP_USER=""
|
||||||
|
NOTIFY_EMAIL_SMTP_PASS=""
|
||||||
|
NOTIFY_EMAIL_SMTP_TLS=true
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Erweiterte Optionen
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Automatische Bereinigung: Entfernt IPs aus der Allowlist, die nicht mehr
|
||||||
|
# zu den konfigurierten Domains/IPs gehören (true/false)
|
||||||
|
AUTO_CLEANUP=true
|
||||||
|
|
||||||
|
# Health-Check vor Ausführung (true/false)
|
||||||
|
HEALTH_CHECK=true
|
||||||
|
|
||||||
|
# Dry-Run Modus als Standard (kann mit --dry-run überschrieben werden)
|
||||||
|
DRY_RUN=false
|
||||||
1716
crowdsec-manager.sh
Normal file
1716
crowdsec-manager.sh
Normal file
File diff suppressed because it is too large
Load Diff
198
docs/ADMIN.md
Normal file
198
docs/ADMIN.md
Normal file
@@ -0,0 +1,198 @@
|
|||||||
|
# Interaktive Administration
|
||||||
|
|
||||||
|
Dokumentation der interaktiven CrowdSec-Administrationsfunktionen im CrowdSec Manager v0.1.0.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Übersicht
|
||||||
|
|
||||||
|
Ab Version 0.1.0 startet das Script standardmäßig ein **interaktives Menü**, über das CrowdSec-Funktionen direkt verwaltet werden können – ohne manuell `cscli`-Befehle absetzen zu müssen.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Interaktives Menü starten (Standard)
|
||||||
|
./crowdsec-manager.sh
|
||||||
|
|
||||||
|
# Oder explizit:
|
||||||
|
./crowdsec-manager.sh --interactive
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Menü-Struktur
|
||||||
|
|
||||||
|
```
|
||||||
|
╔═══════════════════════════════════════════════════════╗
|
||||||
|
║ CrowdSec Manager v0.1.0 ║
|
||||||
|
╚═══════════════════════════════════════════════════════╝
|
||||||
|
|
||||||
|
── ALLOWLIST MANAGEMENT ──────────────────────────────
|
||||||
|
1) Allowlist synchronisieren (DNS auflösen & updaten)
|
||||||
|
2) Allowlist synchronisieren (Dry-Run)
|
||||||
|
3) Aktuelle Allowlist anzeigen
|
||||||
|
4) Konfiguration testen
|
||||||
|
5) Alle verwalteten Einträge entfernen (Flush)
|
||||||
|
|
||||||
|
── DECISIONS ─────────────────────────────────────────
|
||||||
|
10) Alle Decisions anzeigen
|
||||||
|
11) Decision suchen (nach IP)
|
||||||
|
12) Decision manuell hinzufügen
|
||||||
|
13) Decision entfernen
|
||||||
|
|
||||||
|
── ALERTS ────────────────────────────────────────────
|
||||||
|
20) Alle Alerts anzeigen
|
||||||
|
21) Alert inspizieren (Detail-Ansicht)
|
||||||
|
22) Alerts löschen
|
||||||
|
|
||||||
|
── INFORMATIONEN ─────────────────────────────────────
|
||||||
|
30) IP-Informationen (Komplett-Check)
|
||||||
|
31) CrowdSec Metriken
|
||||||
|
32) CrowdSec Status & Version
|
||||||
|
33) Bouncers anzeigen
|
||||||
|
34) Machines anzeigen
|
||||||
|
35) Parsers anzeigen
|
||||||
|
36) Scenarios anzeigen
|
||||||
|
37) Collections anzeigen
|
||||||
|
|
||||||
|
── ERWEITERT ─────────────────────────────────────────
|
||||||
|
40) Eigenen cscli-Befehl ausführen
|
||||||
|
|
||||||
|
0) Beenden
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Funktionen im Detail
|
||||||
|
|
||||||
|
### Allowlist Management (1-5)
|
||||||
|
|
||||||
|
| Nr. | Funktion | Beschreibung |
|
||||||
|
|-----|----------|-------------|
|
||||||
|
| 1 | Sync | Führt die komplette Allowlist-Synchronisation aus (DNS auflösen, Vergleich, Update) |
|
||||||
|
| 2 | Dry-Run | Wie 1, aber ohne tatsächliche Änderungen an CrowdSec |
|
||||||
|
| 3 | Anzeigen | Zeigt alle aktuellen Allowlist-Einträge |
|
||||||
|
| 4 | Test | Prüft Config, DNS-Auflösung und CrowdSec-Verbindung |
|
||||||
|
| 5 | Flush | Entfernt alle vom Script verwalteten Einträge (mit Bestätigung) |
|
||||||
|
|
||||||
|
### Decisions (10-13)
|
||||||
|
|
||||||
|
#### 10) Alle Decisions anzeigen
|
||||||
|
|
||||||
|
Zeigt alle aktiven CrowdSec Decisions an (Ban, Allow, Captcha, Throttle).
|
||||||
|
|
||||||
|
Entspricht: `cscli decisions list`
|
||||||
|
|
||||||
|
#### 11) Decision suchen
|
||||||
|
|
||||||
|
Sucht alle Decisions für eine bestimmte IP-Adresse.
|
||||||
|
|
||||||
|
Entspricht: `cscli decisions list -i <IP>`
|
||||||
|
|
||||||
|
#### 12) Decision manuell hinzufügen
|
||||||
|
|
||||||
|
Interaktiver Assistent zum Hinzufügen einer Decision:
|
||||||
|
|
||||||
|
1. **IP/CIDR eingeben** – Die zu behandelnde IP-Adresse oder CIDR-Range
|
||||||
|
2. **Typ wählen:**
|
||||||
|
- `ban` – IP sperren
|
||||||
|
- `allow` – IP erlauben (Allowlist)
|
||||||
|
- `captcha` – Captcha anzeigen
|
||||||
|
- `throttle` – Traffic drosseln
|
||||||
|
3. **Dauer** – z.B. `10m`, `1h`, `24h`, `7d` (Standard: 4h)
|
||||||
|
4. **Grund** – Optionaler Kommentar
|
||||||
|
5. **Bestätigung** – Zusammenfassung mit Ja/Nein-Abfrage
|
||||||
|
|
||||||
|
#### 13) Decision entfernen
|
||||||
|
|
||||||
|
Entfernt eine Decision entweder nach:
|
||||||
|
- **IP-Adresse** – Alle Decisions für diese IP
|
||||||
|
- **Decision-ID** – Spezifische Decision
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Alerts (20-22)
|
||||||
|
|
||||||
|
#### 20) Alle Alerts anzeigen
|
||||||
|
|
||||||
|
Zeigt alle aktuellen Alerts an.
|
||||||
|
|
||||||
|
Entspricht: `cscli alerts list`
|
||||||
|
|
||||||
|
#### 21) Alert inspizieren
|
||||||
|
|
||||||
|
Zeigt Detail-Informationen zu einem spezifischen Alert (nach Alert-ID).
|
||||||
|
|
||||||
|
Entspricht: `cscli alerts inspect <ID> -d`
|
||||||
|
|
||||||
|
#### 22) Alerts löschen
|
||||||
|
|
||||||
|
Löscht Alerts nach:
|
||||||
|
- **Einzelne Alert-ID** – Spezifischen Alert löschen
|
||||||
|
- **IP-Adresse** – Alle Alerts für eine IP
|
||||||
|
- **Zeitraum** – Alle Alerts älter als z.B. `24h`, `7d`
|
||||||
|
|
||||||
|
Jede Löschung erfordert eine Bestätigung.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Informationen (30-37)
|
||||||
|
|
||||||
|
#### 30) IP-Informationen (Komplett-Check)
|
||||||
|
|
||||||
|
Sammelt umfassende Informationen zu einer IP-Adresse in 4 Schritten:
|
||||||
|
|
||||||
|
```
|
||||||
|
[1/4] Reverse-DNS: PTR-Record Lookup
|
||||||
|
[2/4] Aktive Decisions: Alle Decisions für diese IP
|
||||||
|
[3/4] Alerts: Alle Alerts für diese IP
|
||||||
|
[4/4] Alert-Details: Detail-Inspektion der letzten 5 Alerts
|
||||||
|
```
|
||||||
|
|
||||||
|
Nützlich für schnelle Untersuchung verdächtiger IPs.
|
||||||
|
|
||||||
|
#### 31) CrowdSec Metriken
|
||||||
|
|
||||||
|
Zeigt aktuelle CrowdSec-Metriken (Acquisition, Parser, Scenarios, etc.).
|
||||||
|
|
||||||
|
Entspricht: `cscli metrics`
|
||||||
|
|
||||||
|
#### 32) CrowdSec Status & Version
|
||||||
|
|
||||||
|
Zeigt die CrowdSec-Version und den Hub-Status.
|
||||||
|
|
||||||
|
#### 33-37) Hub-Komponenten
|
||||||
|
|
||||||
|
| Nr. | Komponente | cscli-Befehl |
|
||||||
|
|-----|-----------|-------------|
|
||||||
|
| 33 | Bouncers | `cscli bouncers list` |
|
||||||
|
| 34 | Machines | `cscli machines list` |
|
||||||
|
| 35 | Parsers | `cscli parsers list` |
|
||||||
|
| 36 | Scenarios | `cscli scenarios list` |
|
||||||
|
| 37 | Collections | `cscli collections list` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Erweitert (40)
|
||||||
|
|
||||||
|
#### 40) Eigener cscli-Befehl
|
||||||
|
|
||||||
|
Ermöglicht die Ausführung beliebiger `cscli`-Befehle über den konfigurierten `CSCLI_CMD`.
|
||||||
|
|
||||||
|
```
|
||||||
|
Basis: docker exec crowdsec cscli
|
||||||
|
Gib nur die Argumente nach 'cscli' ein.
|
||||||
|
Beispiel: decisions list -o json
|
||||||
|
|
||||||
|
cscli> decisions list -o json
|
||||||
|
```
|
||||||
|
|
||||||
|
Der eingegebene Befehl wird an den konfigurierten Basisbefehl angehängt und ausgeführt.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tipps
|
||||||
|
|
||||||
|
- Das Menü merkt sich den Kontext nicht zwischen Aufrufen. Jede Funktion ist eigenständig.
|
||||||
|
- Bei allen destruktiven Aktionen (Flush, Decisions/Alerts löschen) wird eine Bestätigung abgefragt.
|
||||||
|
- Die Navigation erfolgt rein über Nummern-Eingabe.
|
||||||
|
- Nach jeder Funktion wird auf Enter gewartet, bevor das Menü neu angezeigt wird.
|
||||||
|
- Mit `0`, `q` oder `exit` wird das Programm beendet.
|
||||||
202
docs/ALLOWLIST.md
Normal file
202
docs/ALLOWLIST.md
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
# Allowlist Management
|
||||||
|
|
||||||
|
Dokumentation der automatischen Allowlist-Verwaltung im CrowdSec Manager v0.1.0.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Funktionsweise
|
||||||
|
|
||||||
|
Das Script arbeitet nach dem **Desired-State-Prinzip**: Du definierst WAS allowgelistet sein soll (Domains/IPs), und das Script sorgt dafür, dass der IST-Zustand in CrowdSec dem SOLL-Zustand entspricht.
|
||||||
|
|
||||||
|
### Ablauf einer Synchronisation
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Vorbereitung
|
||||||
|
├── Abhängigkeiten prüfen (dig, curl)
|
||||||
|
├── Lock-File erwerben
|
||||||
|
├── Temporäre Dateien erstellen
|
||||||
|
└── CrowdSec Health-Check
|
||||||
|
|
||||||
|
2. Datenerfassung
|
||||||
|
├── Aktuelle CrowdSec-Allowlist abrufen → current_ips.txt
|
||||||
|
├── Backup der aktuellen Liste erstellen
|
||||||
|
└── DNS-Auflösung aller Einträge → new_ips.txt
|
||||||
|
|
||||||
|
3. Synchronisation
|
||||||
|
├── Vergleich: current_ips.txt vs. new_ips.txt
|
||||||
|
├── Neue IPs hinzufügen (in new, nicht in current)
|
||||||
|
├── Veraltete IPs entfernen (in current, nicht in new)
|
||||||
|
└── Statistiken aktualisieren
|
||||||
|
|
||||||
|
4. Abschluss
|
||||||
|
├── Zusammenfassung ausgeben
|
||||||
|
├── Benachrichtigungen senden
|
||||||
|
├── Lock-File freigeben
|
||||||
|
└── Temporäre Dateien aufräumen
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Kommandozeilen-Optionen
|
||||||
|
|
||||||
|
### Startmodi (v0.1.0)
|
||||||
|
|
||||||
|
| Aufruf | Beschreibung |
|
||||||
|
|--------|-------------|
|
||||||
|
| `./script.sh` | Startet das **interaktive Menü** (Standard) |
|
||||||
|
| `./script.sh --run` | Führt Allowlist-Sync aus (für **Cron**) |
|
||||||
|
| `./script.sh --interactive` | Startet das interaktive Menü (explizit) |
|
||||||
|
|
||||||
|
> **Wichtig für Cron:** Ab v0.1.0 muss `--run` angegeben werden, da ohne Parameter das interaktive Menü startet.
|
||||||
|
|
||||||
|
### Alle Optionen
|
||||||
|
|
||||||
|
| Option | Kurz | Beschreibung |
|
||||||
|
|--------|------|-------------|
|
||||||
|
| `--run` | | Allowlist-Sync ausführen (nicht-interaktiv, für Cron) |
|
||||||
|
| `--interactive` | `-i` | Interaktives Menü starten |
|
||||||
|
| `--config FILE` | `-c` | Eigene Konfigurationsdatei laden |
|
||||||
|
| `--dry-run` | `-d` | Simuliert alle Aktionen ohne CrowdSec zu ändern |
|
||||||
|
| `--verbose` | `-v` | Setzt Log-Level auf DEBUG |
|
||||||
|
| `--quiet` | `-q` | Setzt Log-Level auf ERROR |
|
||||||
|
| `--list` | `-l` | Zeigt aktuelle CrowdSec-Allowlist an |
|
||||||
|
| `--flush` | `-f` | Entfernt ALLE vom Script verwalteten Einträge |
|
||||||
|
| `--test` | `-t` | Testet Config, DNS und CrowdSec-Verbindung |
|
||||||
|
| `--help` | `-h` | Zeigt Hilfe an |
|
||||||
|
| `--version` | `-V` | Zeigt Version an |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dry-Run Modus
|
||||||
|
|
||||||
|
Im Dry-Run Modus werden alle Schritte normal durchgeführt (DNS-Auflösung, Vergleich), aber die CrowdSec-Befehle werden **nicht** ausgeführt:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./crowdsec-manager.sh --run --dry-run
|
||||||
|
```
|
||||||
|
|
||||||
|
Ausgabe:
|
||||||
|
```
|
||||||
|
[INFO] [DRY-RUN] Würde hinzufügen: 203.0.113.50
|
||||||
|
[INFO] [DRY-RUN] Würde entfernen: 198.51.100.20
|
||||||
|
```
|
||||||
|
|
||||||
|
Auch im interaktiven Menü (Punkt 2) kann ein Dry-Run gestartet werden.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Test-Modus
|
||||||
|
|
||||||
|
Prüft die gesamte Konfiguration ohne etwas zu ändern:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./crowdsec-manager.sh --test
|
||||||
|
```
|
||||||
|
|
||||||
|
Ausgabe:
|
||||||
|
```
|
||||||
|
Konfigurationstest:
|
||||||
|
|
||||||
|
[OK] Konfigurationsdatei geladen
|
||||||
|
CrowdSec-Erreichbarkeit... [OK]
|
||||||
|
DNS-Auflösung... [OK] dig gefunden
|
||||||
|
|
||||||
|
Konfigurierte Einträge (3):
|
||||||
|
[Domain] example.com -> 93.184.216.34, 2606:2800:220:1:...
|
||||||
|
[Domain] cdn.example.com -> 104.16.132.229
|
||||||
|
[IP/CIDR] 192.168.1.0/24
|
||||||
|
|
||||||
|
Benachrichtigungen:
|
||||||
|
Aktiviert: true
|
||||||
|
Desktop: false
|
||||||
|
Ntfy: true
|
||||||
|
Gotify: false
|
||||||
|
E-Mail: false
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Flush-Modus
|
||||||
|
|
||||||
|
Entfernt **alle** vom Script verwalteten Einträge aus CrowdSec (identifiziert über `ALLOWLIST_REASON`):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./crowdsec-manager.sh --flush
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Achtung:** Manuell mit `cscli decisions add` erstellte Einträge werden NICHT entfernt.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Cron-Integration
|
||||||
|
|
||||||
|
### Empfohlene Intervalle
|
||||||
|
|
||||||
|
| Anwendungsfall | Intervall | Cron-Ausdruck |
|
||||||
|
|:---:|:---:|:---:|
|
||||||
|
| Dynamische DNS (DynDNS) | 15 Minuten | `*/15 * * * *` |
|
||||||
|
| Cloud-Dienste / CDN | 30 Minuten | `*/30 * * * *` |
|
||||||
|
| Statische Infrastruktur | Stündlich | `0 * * * *` |
|
||||||
|
| Feste IPs | Täglich | `0 3 * * *` |
|
||||||
|
|
||||||
|
### Einrichtung
|
||||||
|
|
||||||
|
```bash
|
||||||
|
crontab -e
|
||||||
|
```
|
||||||
|
|
||||||
|
Empfohlener Eintrag:
|
||||||
|
```cron
|
||||||
|
# CrowdSec Manager - alle 30 Minuten
|
||||||
|
*/30 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --run >> /var/log/crowdsec-manager-cron.log 2>&1
|
||||||
|
```
|
||||||
|
|
||||||
|
### ALLOWLIST_DURATION vs. Cron-Intervall
|
||||||
|
|
||||||
|
Die `ALLOWLIST_DURATION` muss **immer größer** als das Cron-Intervall sein:
|
||||||
|
|
||||||
|
```
|
||||||
|
Cron: */30 * * * * → ALLOWLIST_DURATION="1h" ✅
|
||||||
|
Cron: 0 * * * * → ALLOWLIST_DURATION="2h" ✅
|
||||||
|
Cron: 0 * * * * → ALLOWLIST_DURATION="30m" ❌ Zu kurz!
|
||||||
|
```
|
||||||
|
|
||||||
|
### Cron-spezifisches Verhalten
|
||||||
|
|
||||||
|
Das Script erkennt automatisch ob es im Terminal oder per Cron läuft:
|
||||||
|
- **Terminal:** Farbige Ausgabe
|
||||||
|
- **Cron:** Plain-Text Ausgabe (keine Escape-Codes)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Exit-Codes
|
||||||
|
|
||||||
|
| Exit-Code | Bedeutung |
|
||||||
|
|:---:|---------|
|
||||||
|
| `0` | Erfolgreich |
|
||||||
|
| `1` | Kritischer Fehler (Config fehlt, CrowdSec nicht erreichbar) |
|
||||||
|
| `2` | Teilweise erfolgreich (mit nicht-kritischen Fehlern) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Mehrere Konfigurationen
|
||||||
|
|
||||||
|
Du kannst mehrere Konfigurationsdateien für verschiedene Allowlists verwenden:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Webserver-Allowlist
|
||||||
|
./crowdsec-manager.sh --run --config config/webserver.conf
|
||||||
|
|
||||||
|
# Monitoring-Allowlist
|
||||||
|
./crowdsec-manager.sh --run --config config/monitoring.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
Jede Konfiguration sollte einen eigenen `ALLOWLIST_REASON` verwenden:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# webserver.conf
|
||||||
|
ALLOWLIST_REASON="allowlist-webserver"
|
||||||
|
|
||||||
|
# monitoring.conf
|
||||||
|
ALLOWLIST_REASON="allowlist-monitoring"
|
||||||
|
```
|
||||||
278
docs/CONFIGURATION.md
Normal file
278
docs/CONFIGURATION.md
Normal file
@@ -0,0 +1,278 @@
|
|||||||
|
# Konfigurationsreferenz
|
||||||
|
|
||||||
|
Dokumentation aller Konfigurationsoptionen für den CrowdSec Manager v0.1.0.
|
||||||
|
|
||||||
|
> **Datei:** `config/crowdsec-manager.conf`
|
||||||
|
> Die Konfigurationsdatei ist ein Bash-Script und wird per `source` eingebunden.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Inhaltsverzeichnis
|
||||||
|
|
||||||
|
1. [CrowdSec Basis-Konfiguration](#crowdsec-basis-konfiguration)
|
||||||
|
2. [Allowlist-Einträge](#allowlist-einträge)
|
||||||
|
3. [DNS-Konfiguration](#dns-konfiguration)
|
||||||
|
4. [Logging](#logging)
|
||||||
|
5. [Backup](#backup)
|
||||||
|
6. [Lock-File](#lock-file)
|
||||||
|
7. [Auto-Cleanup](#auto-cleanup)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## CrowdSec Basis-Konfiguration
|
||||||
|
|
||||||
|
### `CSCLI_CMD`
|
||||||
|
|
||||||
|
Der Befehl zum Aufrufen von CrowdSec CLI. Ermöglicht die Unterstützung verschiedener Installationsarten:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Native Installation
|
||||||
|
CSCLI_CMD="cscli"
|
||||||
|
|
||||||
|
# Docker (Container-Name: crowdsec)
|
||||||
|
CSCLI_CMD="docker exec crowdsec cscli"
|
||||||
|
|
||||||
|
# Docker Compose (Service-Name: crowdsec)
|
||||||
|
CSCLI_CMD="docker compose exec crowdsec cscli"
|
||||||
|
|
||||||
|
# Docker Compose mit eigenem Compose-File
|
||||||
|
CSCLI_CMD="docker compose -f /opt/crowdsec/docker-compose.yml exec crowdsec cscli"
|
||||||
|
|
||||||
|
# Podman
|
||||||
|
CSCLI_CMD="podman exec crowdsec cscli"
|
||||||
|
|
||||||
|
# SSH auf Remote-Server
|
||||||
|
CSCLI_CMD="ssh user@server cscli"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Tipp:** Teste den Befehl manuell, bevor du ihn in die Config einträgst:
|
||||||
|
```bash
|
||||||
|
docker exec crowdsec cscli version
|
||||||
|
```
|
||||||
|
|
||||||
|
### `ALLOWLIST_NAME`
|
||||||
|
|
||||||
|
Name der verwalteten Allowlist. Wird zur Identifizierung in CrowdSec verwendet.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ALLOWLIST_NAME="crowdsec-manager"
|
||||||
|
```
|
||||||
|
|
||||||
|
### `ALLOWLIST_DURATION`
|
||||||
|
|
||||||
|
Gültigkeitsdauer eines Allowlist-Eintrags. Sollte **etwas länger als das Cron-Intervall** sein.
|
||||||
|
|
||||||
|
| Cron-Intervall | Empfohlene Duration |
|
||||||
|
|:---:|:---:|
|
||||||
|
| Alle 15 Minuten | `30m` |
|
||||||
|
| Alle 30 Minuten | `1h` |
|
||||||
|
| Stündlich | `2h` |
|
||||||
|
| Alle 6 Stunden | `12h` |
|
||||||
|
| Täglich | `25h` |
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ALLOWLIST_DURATION="25h"
|
||||||
|
```
|
||||||
|
|
||||||
|
### `ALLOWLIST_REASON`
|
||||||
|
|
||||||
|
Der `origin`-Tag für die verwalteten Decisions. Damit unterscheidet das Script seine eigenen Einträge von manuell erstellten.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ALLOWLIST_REASON="allowlist-manager-auto"
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Wichtig:** Ändere diesen Wert NICHT nach der ersten Ausführung, da sonst bestehende Einträge nicht mehr zugeordnet werden können.
|
||||||
|
|
||||||
|
### `HEALTH_CHECK`
|
||||||
|
|
||||||
|
Ob vor dem Sync ein CrowdSec-Health-Check durchgeführt werden soll.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
HEALTH_CHECK=true
|
||||||
|
```
|
||||||
|
|
||||||
|
### `DRY_RUN`
|
||||||
|
|
||||||
|
Global aktivierbarer Dry-Run Modus. Kann auch per CLI mit `--dry-run` aktiviert werden.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
DRY_RUN=false
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Allowlist-Einträge
|
||||||
|
|
||||||
|
### `ALLOWLIST_ENTRIES`
|
||||||
|
|
||||||
|
Bash-Array mit allen zu verwaltenden Einträgen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ALLOWLIST_ENTRIES=(
|
||||||
|
# === Webserver & CDN ===
|
||||||
|
"meinedomain.de"
|
||||||
|
"www.meinedomain.de"
|
||||||
|
"cdn.meinedomain.de"
|
||||||
|
|
||||||
|
# === Mail-Server ===
|
||||||
|
"mail.meinedomain.de"
|
||||||
|
|
||||||
|
# === Monitoring ===
|
||||||
|
"monitoring.example.com"
|
||||||
|
|
||||||
|
# === Feste IPs ===
|
||||||
|
"203.0.113.10"
|
||||||
|
"203.0.113.20"
|
||||||
|
|
||||||
|
# === Büro-Netzwerk (CIDR) ===
|
||||||
|
"192.168.1.0/24"
|
||||||
|
|
||||||
|
# === IPv6 ===
|
||||||
|
"2001:db8::1"
|
||||||
|
"2001:db8:1::/48"
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Regeln für Einträge:**
|
||||||
|
- Ein Eintrag pro Zeile (in Anführungszeichen)
|
||||||
|
- Kommentare mit `#` sind direkt in der Zeile möglich
|
||||||
|
- Leere Zeilen werden ignoriert
|
||||||
|
- Domains werden automatisch per DNS aufgelöst
|
||||||
|
- IPs und CIDRs werden direkt eingetragen
|
||||||
|
- IPv4 und IPv6 werden unterstützt
|
||||||
|
|
||||||
|
**Erkennung von Eintragstypen:**
|
||||||
|
|
||||||
|
| Eintragstyp | Beispiel | Aktion |
|
||||||
|
|-------------|----------|--------|
|
||||||
|
| IPv4 | `192.168.1.1` | Direkt eintragen |
|
||||||
|
| IPv6 | `2001:db8::1` | Direkt eintragen |
|
||||||
|
| IPv4-CIDR | `10.0.0.0/8` | Als `range` eintragen |
|
||||||
|
| IPv6-CIDR | `2001:db8::/32` | Als `range` eintragen |
|
||||||
|
| Domain | `example.com` | DNS auflösen → IPs eintragen |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## DNS-Konfiguration
|
||||||
|
|
||||||
|
### `DNS_SERVER`
|
||||||
|
|
||||||
|
Eigenen DNS-Server für die Auflösung verwenden. Leer lassen für den System-DNS (aus `/etc/resolv.conf`).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# System-DNS (Standard)
|
||||||
|
DNS_SERVER=""
|
||||||
|
|
||||||
|
# Cloudflare
|
||||||
|
DNS_SERVER="1.1.1.1"
|
||||||
|
|
||||||
|
# Google
|
||||||
|
DNS_SERVER="8.8.8.8"
|
||||||
|
|
||||||
|
# Quad9
|
||||||
|
DNS_SERVER="9.9.9.9"
|
||||||
|
|
||||||
|
# Eigener DNS
|
||||||
|
DNS_SERVER="10.0.0.53"
|
||||||
|
```
|
||||||
|
|
||||||
|
### `RESOLVE_IPV6`
|
||||||
|
|
||||||
|
Ob auch AAAA-Records (IPv6) aufgelöst werden sollen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
RESOLVE_IPV6=true # IPv4 + IPv6
|
||||||
|
RESOLVE_IPV6=false # Nur IPv4
|
||||||
|
```
|
||||||
|
|
||||||
|
### `DNS_TIMEOUT` und `DNS_RETRIES`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
DNS_TIMEOUT=5 # Timeout in Sekunden pro DNS-Anfrage
|
||||||
|
DNS_RETRIES=3 # Wiederholungsversuche bei Fehler
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Logging
|
||||||
|
|
||||||
|
### `LOG_LEVEL`
|
||||||
|
|
||||||
|
Steuert die Ausführlichkeit der Ausgabe:
|
||||||
|
|
||||||
|
| Level | Beschreibung |
|
||||||
|
|-------|-------------|
|
||||||
|
| `DEBUG` | Alles loggen (jede DNS-Anfrage, jeder Vergleich) |
|
||||||
|
| `INFO` | Standard: Wichtige Schritte und Ergebnisse |
|
||||||
|
| `WARN` | Nur Warnungen und Fehler |
|
||||||
|
| `ERROR` | Nur Fehler |
|
||||||
|
|
||||||
|
```bash
|
||||||
|
LOG_LEVEL="INFO"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Tipp:** Verwende `--verbose` beim manuellen Aufruf und `--quiet` für Cron.
|
||||||
|
|
||||||
|
### `LOG_FILE`
|
||||||
|
|
||||||
|
Pfad zur Log-Datei. Leer lassen wenn nur auf stdout ausgegeben werden soll.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
LOG_FILE="/var/log/crowdsec-manager.log"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Log-Rotation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
LOG_MAX_SIZE_KB=5120 # Rotation bei 5 MB
|
||||||
|
LOG_ROTATE_COUNT=3 # 3 alte Dateien aufbewahren
|
||||||
|
```
|
||||||
|
|
||||||
|
Rotierte Dateien:
|
||||||
|
```
|
||||||
|
crowdsec-manager.log ← Aktuell
|
||||||
|
crowdsec-manager.log.0 ← Vorherige
|
||||||
|
crowdsec-manager.log.1
|
||||||
|
crowdsec-manager.log.2 ← Älteste
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Backup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
BACKUP_ENABLED=true
|
||||||
|
BACKUP_DIR="/var/backup/crowdsec-manager"
|
||||||
|
BACKUP_RETAIN_COUNT=7 # 7 Backups aufbewahren
|
||||||
|
```
|
||||||
|
|
||||||
|
Backup-Dateien werden im Format `allowlist_YYYYMMDD_HHMMSS.bak` gespeichert. Ältere Backups werden automatisch gelöscht.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Lock-File
|
||||||
|
|
||||||
|
Das Lock-File verhindert parallele Ausführung (z.B. wenn ein Cron-Lauf länger dauert als das Intervall).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
LOCK_ENABLED=true
|
||||||
|
LOCK_FILE="/tmp/crowdsec-manager.lock"
|
||||||
|
LOCK_TIMEOUT=300 # 5 Minuten warten, dann abbrechen
|
||||||
|
```
|
||||||
|
|
||||||
|
**Verwaiste Lock-Files:** Das Script erkennt automatisch, ob der im Lock-File referenzierte Prozess noch läuft. Wenn nicht, wird das Lock-File entfernt.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Auto-Cleanup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
AUTO_CLEANUP=true
|
||||||
|
```
|
||||||
|
|
||||||
|
Wenn aktiviert, entfernt das Script IPs aus der CrowdSec-Allowlist, die:
|
||||||
|
- In der aktuellen Allowlist vorhanden sind (mit dem Origin `ALLOWLIST_REASON`)
|
||||||
|
- NICHT mehr in der aufgelösten IP-Liste enthalten sind
|
||||||
|
|
||||||
|
Wenn also eine Domain ihre IP ändert, wird die alte IP automatisch aus der Allowlist entfernt.
|
||||||
182
docs/DOCUMENTATION.md
Normal file
182
docs/DOCUMENTATION.md
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
# CrowdSec Manager – Dokumentation
|
||||||
|
|
||||||
|
## Version 0.1.0
|
||||||
|
|
||||||
|
Umfassende Dokumentation für den CrowdSec Manager.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dokumentationsübersicht
|
||||||
|
|
||||||
|
| Dokument | Beschreibung |
|
||||||
|
|----------|-------------|
|
||||||
|
| [CONFIGURATION.md](CONFIGURATION.md) | Alle Konfigurationsoptionen im Detail |
|
||||||
|
| [ALLOWLIST.md](ALLOWLIST.md) | Allowlist-Verwaltung, CLI-Optionen, Cron-Integration |
|
||||||
|
| [ADMIN.md](ADMIN.md) | Interaktives Menü & CrowdSec-Administration |
|
||||||
|
| [NOTIFICATIONS.md](NOTIFICATIONS.md) | Benachrichtigungen (Ntfy, Gotify, E-Mail, Desktop) |
|
||||||
|
| [TROUBLESHOOTING.md](TROUBLESHOOTING.md) | Fehlerbehebung & FAQ |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Schnellstart
|
||||||
|
|
||||||
|
### 1. Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /opt
|
||||||
|
git clone https://github.com/dein-user/crowdsec-manager.git
|
||||||
|
cd crowdsec-manager
|
||||||
|
chmod +x crowdsec-manager.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Abhängigkeiten
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Debian / Ubuntu
|
||||||
|
sudo apt update && sudo apt install -y dnsutils curl
|
||||||
|
|
||||||
|
# RHEL / CentOS / Fedora
|
||||||
|
sudo dnf install -y bind-utils curl
|
||||||
|
|
||||||
|
# Alpine
|
||||||
|
apk add --no-cache bind-tools curl
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Konfiguration
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nano config/crowdsec-manager.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
Mindestens setzen:
|
||||||
|
- `CSCLI_CMD` – CrowdSec CLI Befehl
|
||||||
|
- `ALLOWLIST_ENTRIES` – Domains/IPs für die Allowlist
|
||||||
|
|
||||||
|
### 4. Test
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./crowdsec-manager.sh --test
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Verwendung
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Interaktives Menü (Standard)
|
||||||
|
./crowdsec-manager.sh
|
||||||
|
|
||||||
|
# Allowlist-Sync (für Cron)
|
||||||
|
./crowdsec-manager.sh --run
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. Cron einrichten
|
||||||
|
|
||||||
|
```bash
|
||||||
|
crontab -e
|
||||||
|
```
|
||||||
|
|
||||||
|
```cron
|
||||||
|
*/30 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --run >> /var/log/crowdsec-manager-cron.log 2>&1
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Architektur
|
||||||
|
|
||||||
|
### Dateien
|
||||||
|
|
||||||
|
| Datei | Aufgabe |
|
||||||
|
|-------|---------|
|
||||||
|
| `crowdsec-manager.sh` | Hauptscript (Allowlist-Sync + Interaktives Admin-Menü) |
|
||||||
|
| `config/crowdsec-manager.conf` | Zentrale Konfigurationsdatei |
|
||||||
|
| `examples/crontab.example` | Vorlagen für Cron-Einträge |
|
||||||
|
| `docs/` | Dokumentation (aufgeteilt nach Themen) |
|
||||||
|
|
||||||
|
### Voraussetzungen
|
||||||
|
|
||||||
|
- **Bash 4.0+** (für assoziative Arrays)
|
||||||
|
- **dig** (DNS-Auflösung) – Teil von `dnsutils` / `bind-utils`
|
||||||
|
- **CrowdSec** mit CLI-Zugriff
|
||||||
|
- Optional: **curl** (für Ntfy/Gotify/E-Mail-Benachrichtigungen)
|
||||||
|
- Optional: **python3** (für JSON-Escaping bei Gotify)
|
||||||
|
|
||||||
|
### Sicherheitsaspekte
|
||||||
|
|
||||||
|
- **Lock-File** verhindert Race Conditions bei paralleler Ausführung
|
||||||
|
- **Temporäre Dateien** werden nach Ausführung automatisch gelöscht (auch bei Abbruch)
|
||||||
|
- **Keine sensiblen Daten** in der Log-Ausgabe
|
||||||
|
- Config-Datei sollte nur vom Script-Benutzer lesbar sein: `chmod 600 config/crowdsec-manager.conf`
|
||||||
|
- Für DNS-Spoofing Schutz: DNSSEC-validierende DNS-Server verwenden
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Logging & Monitoring
|
||||||
|
|
||||||
|
### Log-Datei analysieren
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Letzte Ausführung anzeigen
|
||||||
|
grep "$(date '+%Y-%m-%d')" /var/log/crowdsec-manager.log
|
||||||
|
|
||||||
|
# Nur Fehler
|
||||||
|
grep "\[ERROR\]" /var/log/crowdsec-manager.log
|
||||||
|
|
||||||
|
# Nur Änderungen
|
||||||
|
grep -E "Hinzugefügt|Entfernt" /var/log/crowdsec-manager.log
|
||||||
|
```
|
||||||
|
|
||||||
|
### Exit-Codes für Monitoring
|
||||||
|
|
||||||
|
| Exit-Code | Bedeutung |
|
||||||
|
|:---:|---------|
|
||||||
|
| `0` | Erfolgreich |
|
||||||
|
| `1` | Kritischer Fehler |
|
||||||
|
| `2` | Teilweise erfolgreich (mit Fehlern) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Integration
|
||||||
|
|
||||||
|
### Ansible
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- name: Deploy CrowdSec Manager
|
||||||
|
hosts: crowdsec_servers
|
||||||
|
tasks:
|
||||||
|
- name: Clone repository
|
||||||
|
git:
|
||||||
|
repo: https://github.com/user/crowdsec-manager.git
|
||||||
|
dest: /opt/crowdsec-manager
|
||||||
|
|
||||||
|
- name: Deploy config
|
||||||
|
template:
|
||||||
|
src: crowdsec-manager.conf.j2
|
||||||
|
dest: /opt/crowdsec-manager/config/crowdsec-manager.conf
|
||||||
|
mode: '0600'
|
||||||
|
|
||||||
|
- name: Setup cron
|
||||||
|
cron:
|
||||||
|
name: "CrowdSec Manager"
|
||||||
|
minute: "*/30"
|
||||||
|
job: "/opt/crowdsec-manager/crowdsec-manager.sh --run >> /var/log/crowdsec-manager-cron.log 2>&1"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Docker Compose Sidecar
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
crowdsec:
|
||||||
|
image: crowdsecurity/crowdsec
|
||||||
|
container_name: crowdsec
|
||||||
|
|
||||||
|
allowlist-manager:
|
||||||
|
image: alpine
|
||||||
|
volumes:
|
||||||
|
- ./crowdsec-manager:/app
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
command: >
|
||||||
|
sh -c "apk add --no-cache bash bind-tools curl docker-cli &&
|
||||||
|
while true; do
|
||||||
|
/app/crowdsec-manager.sh --run;
|
||||||
|
sleep 1800;
|
||||||
|
done"
|
||||||
|
```
|
||||||
205
docs/NOTIFICATIONS.md
Normal file
205
docs/NOTIFICATIONS.md
Normal file
@@ -0,0 +1,205 @@
|
|||||||
|
# Benachrichtigungen
|
||||||
|
|
||||||
|
Dokumentation des Benachrichtigungssystems im CrowdSec Manager v0.1.0.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Übersicht
|
||||||
|
|
||||||
|
Das Benachrichtigungssystem ist modular aufgebaut. Vier Kanäle können gleichzeitig aktiv sein:
|
||||||
|
|
||||||
|
```
|
||||||
|
┌── Desktop (notify-send)
|
||||||
|
├── Ntfy (HTTP POST)
|
||||||
|
should_notify? ─────┤
|
||||||
|
├── Gotify (HTTP POST / JSON)
|
||||||
|
└── E-Mail (SMTP via curl / mail)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Allgemeine Konfiguration
|
||||||
|
|
||||||
|
### Benachrichtigungen aktivieren
|
||||||
|
|
||||||
|
```bash
|
||||||
|
NOTIFY_ENABLED=true
|
||||||
|
```
|
||||||
|
|
||||||
|
### Benachrichtigungs-Bedingungen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
NOTIFY_ON="changes"
|
||||||
|
```
|
||||||
|
|
||||||
|
| Wert | Bedingung |
|
||||||
|
|------|-----------|
|
||||||
|
| `always` | Nach jeder Ausführung |
|
||||||
|
| `changes` | Wenn IPs hinzugefügt, entfernt oder Fehler aufgetreten sind |
|
||||||
|
| `errors` | Nur bei Fehlern |
|
||||||
|
|
||||||
|
### Benachrichtigungs-Inhalt
|
||||||
|
|
||||||
|
Jede Benachrichtigung enthält:
|
||||||
|
|
||||||
|
```
|
||||||
|
=== CrowdSec Manager Report ===
|
||||||
|
Status: OK
|
||||||
|
Zeitpunkt: 2026-03-11 14:30:00
|
||||||
|
---
|
||||||
|
Domains aufgelöst: 5
|
||||||
|
IPs gesamt: 12
|
||||||
|
Hinzugefügt: 3
|
||||||
|
Entfernt: 1
|
||||||
|
Unverändert: 8
|
||||||
|
Fehler: 0
|
||||||
|
```
|
||||||
|
|
||||||
|
Bei Fehlern werden zusätzliche Details angehängt:
|
||||||
|
```
|
||||||
|
Details:
|
||||||
|
WARN: Keine Auflösung für broken-domain.com
|
||||||
|
ERROR: Konnte 203.0.113.50 nicht hinzufügen: ...
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Desktop-Benachrichtigung (notify-send)
|
||||||
|
|
||||||
|
Verwendet `notify-send` für Desktop-Notifications auf Linux.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
NOTIFY_DESKTOP_ENABLED=true
|
||||||
|
```
|
||||||
|
|
||||||
|
**Voraussetzungen:**
|
||||||
|
- `notify-send` muss installiert sein (Teil von `libnotify-bin` auf Debian/Ubuntu)
|
||||||
|
- Desktop-Session muss aktiv sein
|
||||||
|
|
||||||
|
**Verhalten:**
|
||||||
|
- Bei Fehlern: Urgency wird auf `critical` gesetzt
|
||||||
|
- Ansonsten: `normal`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ntfy
|
||||||
|
|
||||||
|
[Ntfy](https://ntfy.sh) ist ein Open-Source Benachrichtigungsdienst. Du kannst die öffentliche Instanz oder eine eigene nutzen.
|
||||||
|
|
||||||
|
### Konfiguration
|
||||||
|
|
||||||
|
```bash
|
||||||
|
NOTIFY_NTFY_ENABLED=true
|
||||||
|
NOTIFY_NTFY_URL="https://ntfy.sh" # oder eigene Instanz
|
||||||
|
NOTIFY_NTFY_TOPIC="mein-crowdsec" # Dein Topic
|
||||||
|
NOTIFY_NTFY_PRIORITY="default" # low, default, high, urgent
|
||||||
|
NOTIFY_NTFY_TOKEN="tk_xxxxxxxx" # Access Token (optional)
|
||||||
|
NOTIFY_NTFY_TAGS="shield,white_check_mark" # Emoji-Tags
|
||||||
|
```
|
||||||
|
|
||||||
|
### Prioritäten
|
||||||
|
|
||||||
|
- Bei Fehlern wird automatisch `high` verwendet
|
||||||
|
- Ansonsten der konfigurierte Wert
|
||||||
|
|
||||||
|
### Tags
|
||||||
|
|
||||||
|
- Bei Fehlern werden automatisch `warning,shield` verwendet
|
||||||
|
- Ansonsten der konfigurierte Wert
|
||||||
|
|
||||||
|
### Voraussetzungen
|
||||||
|
|
||||||
|
- `curl` muss installiert sein
|
||||||
|
- Ntfy-Server muss erreichbar sein
|
||||||
|
|
||||||
|
### Ntfy-App
|
||||||
|
|
||||||
|
Du kannst die [Ntfy-App](https://ntfy.sh) auf Android/iOS installieren und das Topic abonnieren, um Push-Benachrichtigungen zu erhalten.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Gotify
|
||||||
|
|
||||||
|
[Gotify](https://gotify.net) ist ein Self-Hosted Push-Benachrichtigungsdienst.
|
||||||
|
|
||||||
|
### Konfiguration
|
||||||
|
|
||||||
|
```bash
|
||||||
|
NOTIFY_GOTIFY_ENABLED=true
|
||||||
|
NOTIFY_GOTIFY_URL="https://gotify.meinedomain.de" # Gotify-Server URL
|
||||||
|
NOTIFY_GOTIFY_TOKEN="AbCdEf12345" # App-Token
|
||||||
|
NOTIFY_GOTIFY_PRIORITY=5 # Priorität (0-10)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Einrichtung in Gotify
|
||||||
|
|
||||||
|
1. Melde dich in deinem Gotify-Webinterface an
|
||||||
|
2. Erstelle eine neue **Application** (z.B. "CrowdSec Manager")
|
||||||
|
3. Kopiere den generierten **Token**
|
||||||
|
4. Trage URL und Token in die Config ein
|
||||||
|
|
||||||
|
### Prioritäten
|
||||||
|
|
||||||
|
| Bereich | Bedeutung |
|
||||||
|
|---------|-----------|
|
||||||
|
| 0 | Minimale Priorität |
|
||||||
|
| 1-3 | Niedrig |
|
||||||
|
| 4-7 | Normal |
|
||||||
|
| 8-10 | Hoch |
|
||||||
|
|
||||||
|
- Konfigurierte Priorität wird als Standard verwendet
|
||||||
|
- Bei Fehlern wird automatisch Priorität `8` (hoch) gesetzt
|
||||||
|
|
||||||
|
### Voraussetzungen
|
||||||
|
|
||||||
|
- `curl` muss installiert sein
|
||||||
|
- Gotify-Server muss erreichbar sein
|
||||||
|
- Für JSON-Escaping wird `python3` bevorzugt (Fallback: `sed`)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## E-Mail
|
||||||
|
|
||||||
|
E-Mails werden bevorzugt über SMTP mit `curl` gesendet. Fallback ist der `mail`-Befehl.
|
||||||
|
|
||||||
|
### Konfiguration
|
||||||
|
|
||||||
|
```bash
|
||||||
|
NOTIFY_EMAIL_ENABLED=true
|
||||||
|
NOTIFY_EMAIL_TO="admin@example.com"
|
||||||
|
NOTIFY_EMAIL_FROM="crowdsec@meinserver.de"
|
||||||
|
NOTIFY_EMAIL_SUBJECT="CrowdSec Manager Report"
|
||||||
|
NOTIFY_EMAIL_SMTP_SERVER="smtp.example.com"
|
||||||
|
NOTIFY_EMAIL_SMTP_PORT="587" # 587 für STARTTLS, 465 für SSL
|
||||||
|
NOTIFY_EMAIL_SMTP_USER="mailuser"
|
||||||
|
NOTIFY_EMAIL_SMTP_PASS="mailpass"
|
||||||
|
NOTIFY_EMAIL_SMTP_TLS=true
|
||||||
|
```
|
||||||
|
|
||||||
|
### SMTP-Ports
|
||||||
|
|
||||||
|
| Port | Protokoll | `SMTP_TLS` |
|
||||||
|
|------|-----------|-----------|
|
||||||
|
| 587 | STARTTLS | `true` (verwendet `smtps://`) |
|
||||||
|
| 465 | Implicit TLS/SSL | `true` |
|
||||||
|
| 25 | Unverschlüsselt | `false` |
|
||||||
|
|
||||||
|
### Fallback
|
||||||
|
|
||||||
|
Wenn `curl` nicht verfügbar ist, wird versucht den `mail`-Befehl zu verwenden. Dieser muss auf dem System konfiguriert sein (z.B. mit Postfix/Sendmail).
|
||||||
|
|
||||||
|
### Voraussetzungen
|
||||||
|
|
||||||
|
- `curl` (bevorzugt) oder `mail`
|
||||||
|
- SMTP-Server muss erreichbar sein
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Sicherheitshinweise
|
||||||
|
|
||||||
|
- **Tokens und Passwörter** werden in der Konfigurationsdatei gespeichert. Stelle sicher, dass die Datei nur von berechtigten Benutzern lesbar ist:
|
||||||
|
```bash
|
||||||
|
chmod 600 config/crowdsec-manager.conf
|
||||||
|
```
|
||||||
|
- Keine sensiblen Daten (Passwörter, Tokens) werden in der Log-Ausgabe angezeigt
|
||||||
|
- Verwende eigene/selbst gehostete Instanzen (Ntfy, Gotify) für erhöhte Sicherheit
|
||||||
135
docs/TROUBLESHOOTING.md
Normal file
135
docs/TROUBLESHOOTING.md
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
# Troubleshooting & FAQ
|
||||||
|
|
||||||
|
Hilfe bei häufigen Problemen und Antworten auf oft gestellte Fragen.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Häufige Probleme
|
||||||
|
|
||||||
|
### "dig: command not found"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Debian/Ubuntu
|
||||||
|
sudo apt install dnsutils
|
||||||
|
|
||||||
|
# RHEL/CentOS/Fedora
|
||||||
|
sudo dnf install bind-utils
|
||||||
|
|
||||||
|
# Alpine
|
||||||
|
apk add --no-cache bind-tools
|
||||||
|
|
||||||
|
# Arch Linux
|
||||||
|
sudo pacman -S bind
|
||||||
|
```
|
||||||
|
|
||||||
|
### "CrowdSec ist nicht erreichbar"
|
||||||
|
|
||||||
|
1. Prüfe ob CrowdSec läuft:
|
||||||
|
```bash
|
||||||
|
docker ps | grep crowdsec
|
||||||
|
# oder
|
||||||
|
systemctl status crowdsec
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Teste den Befehl manuell:
|
||||||
|
```bash
|
||||||
|
docker exec crowdsec cscli version
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Prüfe Docker-Berechtigungen:
|
||||||
|
```bash
|
||||||
|
groups $(whoami) | grep docker
|
||||||
|
```
|
||||||
|
|
||||||
|
### "Lock-File existiert bereits"
|
||||||
|
|
||||||
|
1. Prüfe ob noch ein Prozess läuft:
|
||||||
|
```bash
|
||||||
|
cat /tmp/crowdsec-manager.lock
|
||||||
|
ps aux | grep crowdsec-manager
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Wenn kein Prozess läuft, Lock manuell entfernen:
|
||||||
|
```bash
|
||||||
|
rm /tmp/crowdsec-manager.lock
|
||||||
|
```
|
||||||
|
|
||||||
|
### Domain wird nicht aufgelöst
|
||||||
|
|
||||||
|
1. Manuell testen:
|
||||||
|
```bash
|
||||||
|
dig +short A example.com
|
||||||
|
dig +short @8.8.8.8 A example.com
|
||||||
|
```
|
||||||
|
|
||||||
|
2. DNS-Server in der Config setzen:
|
||||||
|
```bash
|
||||||
|
DNS_SERVER="8.8.8.8"
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Timeout erhöhen:
|
||||||
|
```bash
|
||||||
|
DNS_TIMEOUT=10
|
||||||
|
DNS_RETRIES=5
|
||||||
|
```
|
||||||
|
|
||||||
|
### Berechtigungs-Fehler
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Script ausführbar machen
|
||||||
|
chmod +x crowdsec-manager.sh
|
||||||
|
|
||||||
|
# Log-Datei
|
||||||
|
sudo touch /var/log/crowdsec-manager.log
|
||||||
|
sudo chown $(whoami) /var/log/crowdsec-manager.log
|
||||||
|
|
||||||
|
# Backup-Verzeichnis
|
||||||
|
sudo mkdir -p /var/backup/crowdsec-manager
|
||||||
|
sudo chown $(whoami) /var/backup/crowdsec-manager
|
||||||
|
```
|
||||||
|
|
||||||
|
### Interaktives Menü startet statt Cron-Sync
|
||||||
|
|
||||||
|
Ab v0.1.0 startet das Script standardmäßig das interaktive Menü. Für den Cron-Betrieb **muss** `--run` angegeben werden:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Falsch (startet interaktives Menü):
|
||||||
|
*/30 * * * * /opt/.../crowdsec-manager.sh
|
||||||
|
|
||||||
|
# Richtig:
|
||||||
|
*/30 * * * * /opt/.../crowdsec-manager.sh --run
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## FAQ
|
||||||
|
|
||||||
|
**F: Werden manuell erstellte CrowdSec-Decisions beeinflusst?**
|
||||||
|
A: Nein. Das Script verwaltet nur Decisions mit dem konfigurierten `ALLOWLIST_REASON`. Alle manuell erstellten Einträge bleiben unberührt.
|
||||||
|
|
||||||
|
**F: Was passiert wenn CrowdSec nicht erreichbar ist?**
|
||||||
|
A: Das Script bricht mit Exit-Code 1 ab. Beim nächsten Cron-Lauf wird erneut versucht. Die bestehende Allowlist bleibt unverändert.
|
||||||
|
|
||||||
|
**F: Was passiert wenn eine Domain nicht aufgelöst werden kann?**
|
||||||
|
A: Die Domain wird übersprungen und eine Warnung geloggt. Alle anderen Domains werden normal verarbeitet. Bestehende Einträge bleiben bis zum Ablauf der `ALLOWLIST_DURATION` bestehen.
|
||||||
|
|
||||||
|
**F: Kann ich das Script auf einem anderen Server als CrowdSec laufen lassen?**
|
||||||
|
A: Ja, über `CSCLI_CMD` z.B. via SSH:
|
||||||
|
```bash
|
||||||
|
CSCLI_CMD="ssh user@crowdsec-server cscli"
|
||||||
|
```
|
||||||
|
|
||||||
|
**F: Unterstützt das Script Wildcard-Domains?**
|
||||||
|
A: Nein, Wildcard-Domains (z.B. `*.example.com`) werden nicht unterstützt. Jede Subdomain muss einzeln eingetragen werden.
|
||||||
|
|
||||||
|
**F: Wie viele Einträge kann das Script verwalten?**
|
||||||
|
A: Kein festes Limit. Die DNS-Auflösung wird linear pro Eintrag durchgeführt. Bei hunderten Domains kann die Laufzeit einige Minuten betragen.
|
||||||
|
|
||||||
|
**F: Kann ich das Script unter macOS verwenden?**
|
||||||
|
A: Ja, solange `dig` und Bash 4+ verfügbar sind. macOS liefert standardmäßig Bash 3.2 – installiere Bash 4+ z.B. via Homebrew.
|
||||||
|
|
||||||
|
**F: Was ist der Unterschied zwischen dem interaktiven Menü und dem CLI?**
|
||||||
|
A: Das interaktive Menü (Standard) bietet eine grafische Auswahl aller Funktionen. Der CLI-Modus (`--run`, `--list`, etc.) ist für automatisierten/Cron-Betrieb gedacht.
|
||||||
|
|
||||||
|
**F: Können im interaktiven Menü auch direkte cscli-Befehle ausgeführt werden?**
|
||||||
|
A: Ja, Menüpunkt 40 ermöglicht die Ausführung beliebiger cscli-Befehle über den konfigurierten Basisbefehl.
|
||||||
32
examples/crontab.example
Normal file
32
examples/crontab.example
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# ============================================================================
|
||||||
|
# CrowdSec Manager v0.1.0 - Crontab Beispiele
|
||||||
|
# ============================================================================
|
||||||
|
# Installation: crontab -e (und gewünschte Zeile einfügen)
|
||||||
|
#
|
||||||
|
# WICHTIG: Das Script startet ohne Parameter das interaktive Menü.
|
||||||
|
# Für den Cron-Betrieb MUSS der Parameter --run angegeben werden!
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
# --- Standard: Alle 30 Minuten ausführen ---
|
||||||
|
*/30 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --run >> /var/log/crowdsec-manager-cron.log 2>&1
|
||||||
|
|
||||||
|
# --- Alle 15 Minuten ---
|
||||||
|
# */15 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --run >> /var/log/crowdsec-manager-cron.log 2>&1
|
||||||
|
|
||||||
|
# --- Stündlich ---
|
||||||
|
# 0 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --run >> /var/log/crowdsec-manager-cron.log 2>&1
|
||||||
|
|
||||||
|
# --- Alle 6 Stunden ---
|
||||||
|
# 0 */6 * * * /opt/crowdsec-manager/crowdsec-manager.sh --run >> /var/log/crowdsec-manager-cron.log 2>&1
|
||||||
|
|
||||||
|
# --- Täglich um 03:00 Uhr ---
|
||||||
|
# 0 3 * * * /opt/crowdsec-manager/crowdsec-manager.sh --run >> /var/log/crowdsec-manager-cron.log 2>&1
|
||||||
|
|
||||||
|
# --- Mit eigenem Config-Pfad ---
|
||||||
|
# */30 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --run --config /etc/crowdsec-manager/meine-config.conf >> /var/log/crowdsec-manager-cron.log 2>&1
|
||||||
|
|
||||||
|
# --- Im Quiet-Modus (nur Fehler loggen) ---
|
||||||
|
# */30 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --run --quiet >> /var/log/crowdsec-manager-cron.log 2>&1
|
||||||
|
|
||||||
|
# --- Dry-Run zum Testen ---
|
||||||
|
# */30 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --run --dry-run >> /var/log/crowdsec-manager-cron.log 2>&1
|
||||||
Reference in New Issue
Block a user