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">
|
||||
<img src="https://assets.techniverse.net/f1/git/graphics/gray0-catonline.svg" alt="">
|
||||
</p>
|
||||
| Feature | Beschreibung |
|
||||
|---------|-------------|
|
||||
| **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">
|
||||
<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>
|
||||
## Schnellstart
|
||||
|
||||
### 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