From ce8e44b808f1d73e01871bc0b0f055d082d6443b Mon Sep 17 00:00:00 2001 From: scriptos Date: Mon, 16 Mar 2026 10:14:12 +0100 Subject: [PATCH 1/2] Parameter angepasst. --- README.md | 25 +++++++++++++---------- crowdsec-manager.sh | 43 +++++++++++++++++++++++++--------------- docs/ALLOWLIST.md | 16 ++++++++------- docs/DOCUMENTATION.md | 10 ++++------ docs/TROUBLESHOOTING.md | 6 +++--- examples/crontab.example | 20 +++++++++---------- 6 files changed, 67 insertions(+), 53 deletions(-) diff --git a/README.md b/README.md index fdfa03e..7655e76 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Der **CrowdSec Manager** ist ein Bash-Script, das: - **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 +- **`--sync-allowlist`-Flag** für automatischen Cron-Betrieb - **Eigene cscli-Befehle** direkt aus dem Menü ausführen ## Features @@ -37,7 +37,7 @@ Der **CrowdSec Manager** ist ein Bash-Script, das: | **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` | +| **Cron-fähig** | Optimiert für automatische Ausführung mit `--sync-allowlist` | ## Schnellstart @@ -79,10 +79,10 @@ nano config/crowdsec-manager.conf ./crowdsec-manager.sh # Allowlist-Sync (für Cron) -./crowdsec-manager.sh --run +./crowdsec-manager.sh --sync-allowlist # Testlauf ohne Änderungen -./crowdsec-manager.sh --run --dry-run +./crowdsec-manager.sh --sync-allowlist --dry-run ``` ### 5. Cron einrichten @@ -92,10 +92,10 @@ crontab -e ``` ```cron -*/30 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --run >> /var/log/crowdsec-manager-cron.log 2>&1 +*/30 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --sync-allowlist >> /var/log/crowdsec-manager-cron.log 2>&1 ``` -> **Wichtig:** `--run` muss angegeben werden, da ohne Parameter das interaktive Menü startet. +> **Wichtig:** `--sync-allowlist` muss angegeben werden, da ohne Parameter das interaktive Menü startet. ## Interaktives Menü @@ -184,7 +184,7 @@ Verwendung: Modi: (ohne Optionen) Startet das interaktive Menü - --run Allowlist synchronisieren (für Cron) + --sync-allowlist Allowlist synchronisieren (für Cron) Optionen: -c, --config FILE Konfigurationsdatei angeben @@ -195,6 +195,7 @@ Optionen: -f, --flush Alle verwalteten Einträge entfernen -t, --test Konfiguration testen -i, --interactive Interaktives Menü starten + --sync-allowlist Allowlist-Sync ausführen (nicht-interaktiv) -h, --help Hilfe anzeigen -V, --version Version anzeigen ``` @@ -203,7 +204,7 @@ Optionen: ``` ┌─────────────────────────┐ -│ Script: --run │ +│ Script: --sync-allowlist│ └────────────┬────────────┘ │ ┌───────▼────────┐ @@ -214,7 +215,7 @@ Optionen: │ ┌───────▼────────┐ │ Aktuelle Liste │ - │ abrufen + Backup│ + │ abrufen │ └───────┬────────┘ │ ┌───────▼────────┐ @@ -225,11 +226,13 @@ Optionen: ┌───────▼────────┐ │ Vergleich & │ │ Synchronisation │ + │ (nur bei Änd.) │ └───────┬────────┘ │ ┌───────▼────────┐ - │ Report & │ - │ Notifications │ + │ Backup, Report │ + │ & Notifications │ + │ (nur bei Änd.) │ └───────┬────────┘ │ ┌───────▼────────┐ diff --git a/crowdsec-manager.sh b/crowdsec-manager.sh index a1c6888..61d19d8 100644 --- a/crowdsec-manager.sh +++ b/crowdsec-manager.sh @@ -1,6 +1,6 @@ #!/bin/bash # ============================================================================ -# CrowdSec Manager v0.1.0 +# CrowdSec Manager v0.2.0 # ============================================================================ # Verwaltet automatisch eine CrowdSec-Allowlist und bietet interaktive # CrowdSec-Administration über ein Menü. @@ -481,6 +481,12 @@ sync_allowlist() { STAT_UNCHANGED=$(echo "$unchanged" | wc -l) fi + # Keine Änderungen erkannt → frühzeitig zurückkehren + if [[ -z "$to_add" ]] && [[ -z "$to_remove" ]]; then + log "INFO" "Keine Änderungen erkannt - Allowlist ist bereits aktuell" + return 1 + fi + if [[ -n "$to_add" ]]; then log "INFO" "Neue IPs zum Hinzufügen gefunden:" while IFS= read -r ip; do @@ -488,8 +494,6 @@ sync_allowlist() { log "INFO" " + $ip" add_to_allowlist "$ip" done <<< "$to_add" - else - log "INFO" "Keine neuen IPs zum Hinzufügen" fi if [[ -n "$to_remove" ]]; then @@ -499,9 +503,9 @@ sync_allowlist() { log "INFO" " - $ip" remove_from_allowlist "$ip" done <<< "$to_remove" - else - log "INFO" "Keine veralteten IPs zum Entfernen" fi + + return 0 } # ============================================================================ @@ -1408,11 +1412,15 @@ run_allowlist_sync() { fi get_current_allowlist - create_backup resolve_all_entries - sync_allowlist + + if sync_allowlist; then + # Änderungen erkannt → Backup erstellen & benachrichtigen + create_backup + send_notifications + fi + print_summary - send_notifications cleanup_temp release_lock @@ -1472,7 +1480,7 @@ ${BOLD}Verwendung:${NC} ${BOLD}Modi:${NC} (ohne Optionen) Startet das interaktive Menü - --run Allowlist synchronisieren (für Cron) + --sync-allowlist Allowlist synchronisieren (für Cron) ${BOLD}Optionen:${NC} -c, --config FILE Konfigurationsdatei angeben @@ -1483,20 +1491,21 @@ ${BOLD}Optionen:${NC} -f, --flush Alle verwalteten Einträge entfernen -t, --test Konfiguration testen -i, --interactive Interaktives Menü starten - --run Allowlist-Sync ausführen (nicht-interaktiv) + --sync-allowlist Allowlist-Sync ausführen (nicht-interaktiv) -h, --help Diese Hilfe anzeigen -V, --version Version anzeigen ${BOLD}Beispiele:${NC} $SCRIPT_NAME # Interaktives Menü - $SCRIPT_NAME --run # Allowlist-Sync (Cron-Modus) - $SCRIPT_NAME --run --dry-run # Testlauf + $SCRIPT_NAME --sync-allowlist # Allowlist-Sync (Cron-Modus) + $SCRIPT_NAME --sync-allowlist --dry-run # Testlauf + $SCRIPT_NAME --sync-allowlist --quiet # Sync ohne Ausgabe (nur Fehler) $SCRIPT_NAME --interactive # Interaktives Menü $SCRIPT_NAME --list # Allowlist anzeigen $SCRIPT_NAME --config /etc/conf.conf # Eigene Config ${BOLD}Cron-Beispiel:${NC} - */30 * * * * ${SCRIPT_DIR}/${SCRIPT_NAME} --run 2>&1 + */30 * * * * ${SCRIPT_DIR}/${SCRIPT_NAME} --sync-allowlist --quiet 2>&1 ${BOLD}Konfiguration:${NC} Standard: config/crowdsec-manager.conf @@ -1683,8 +1692,8 @@ main() { action="interactive" shift ;; - --run) - action="run" + --sync-allowlist) + action="sync-allowlist" shift ;; -h|--help) @@ -1727,9 +1736,11 @@ main() { interactive_menu exit 0 ;; + sync-allowlist) + ;; esac - # === Automatischer Sync (--run, für Cron) === + # === Automatischer Sync (--sync-allowlist) === load_config [[ -n "${DRY_RUN:-}" ]] || DRY_RUN=false diff --git a/docs/ALLOWLIST.md b/docs/ALLOWLIST.md index 33f8c10..44bf1af 100644 --- a/docs/ALLOWLIST.md +++ b/docs/ALLOWLIST.md @@ -24,8 +24,10 @@ Das Script arbeitet nach dem **Desired-State-Prinzip**: Du definierst WAS allowg 3. Synchronisation ├── Vergleich: current_ips.txt vs. new_ips.txt + ├── Bei keinen Änderungen: Frühzeitiger Abbruch (kein Backup, keine Benachrichtigung) ├── Neue IPs hinzufügen (in new, nicht in current) ├── Veraltete IPs entfernen (in current, nicht in new) + ├── Backup der vorherigen Liste erstellen └── Statistiken aktualisieren 4. Abschluss @@ -44,16 +46,16 @@ Das Script arbeitet nach dem **Desired-State-Prinzip**: Du definierst WAS allowg | Aufruf | Beschreibung | |--------|-------------| | `./script.sh` | Startet das **interaktive Menü** (Standard) | -| `./script.sh --run` | Führt Allowlist-Sync aus (für **Cron**) | +| `./script.sh --sync-allowlist` | 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. +> **Wichtig für Cron:** Ab v0.2.0 muss `--sync-allowlist` angegeben werden, da ohne Parameter das interaktive Menü startet. ### Alle Optionen | Option | Kurz | Beschreibung | |--------|------|-------------| -| `--run` | | Allowlist-Sync ausführen (nicht-interaktiv, für Cron) | +| `--sync-allowlist` | | 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 | @@ -72,7 +74,7 @@ Das Script arbeitet nach dem **Desired-State-Prinzip**: Du definierst WAS allowg 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 +./crowdsec-manager.sh --sync-allowlist --dry-run ``` Ausgabe: @@ -148,7 +150,7 @@ 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 +*/30 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --sync-allowlist >> /var/log/crowdsec-manager-cron.log 2>&1 ``` ### Cron-spezifisches Verhalten @@ -175,10 +177,10 @@ Du kannst mehrere Konfigurationsdateien für verschiedene Allowlists verwenden: ```bash # Webserver-Allowlist -./crowdsec-manager.sh --run --config config/webserver.conf +./crowdsec-manager.sh --sync-allowlist --config config/webserver.conf # Monitoring-Allowlist -./crowdsec-manager.sh --run --config config/monitoring.conf +./crowdsec-manager.sh --sync-allowlist --config config/monitoring.conf ``` Jede Konfiguration sollte einen eigenen `ALLOWLIST_REASON` verwenden: diff --git a/docs/DOCUMENTATION.md b/docs/DOCUMENTATION.md index 21e5ce0..24bf467 100644 --- a/docs/DOCUMENTATION.md +++ b/docs/DOCUMENTATION.md @@ -1,7 +1,5 @@ # CrowdSec Manager – Dokumentation -## Version 0.1.0 - Umfassende Dokumentation für den CrowdSec Manager. --- @@ -65,7 +63,7 @@ Mindestens setzen: ./crowdsec-manager.sh # Allowlist-Sync (für Cron) -./crowdsec-manager.sh --run +./crowdsec-manager.sh --sync-allowlist ``` ### 6. Cron einrichten @@ -75,7 +73,7 @@ crontab -e ``` ```cron -*/30 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --run >> /var/log/crowdsec-manager-cron.log 2>&1 +*/30 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --sync-allowlist >> /var/log/crowdsec-manager-cron.log 2>&1 ``` --- @@ -157,7 +155,7 @@ grep -E "Hinzugefügt|Entfernt" /var/log/crowdsec-manager.log cron: name: "CrowdSec Manager" minute: "*/30" - job: "/opt/crowdsec-manager/crowdsec-manager.sh --run >> /var/log/crowdsec-manager-cron.log 2>&1" + job: "/opt/crowdsec-manager/crowdsec-manager.sh --sync-allowlist >> /var/log/crowdsec-manager-cron.log 2>&1" ``` ### Docker Compose Sidecar @@ -176,7 +174,7 @@ services: command: > sh -c "apk add --no-cache bash bind-tools curl docker-cli && while true; do - /app/crowdsec-manager.sh --run; + /app/crowdsec-manager.sh --sync-allowlist; sleep 1800; done" ``` diff --git a/docs/TROUBLESHOOTING.md b/docs/TROUBLESHOOTING.md index c0aa2cb..6379312 100644 --- a/docs/TROUBLESHOOTING.md +++ b/docs/TROUBLESHOOTING.md @@ -90,14 +90,14 @@ 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: +Ab v0.1.0 startet das Script standardmäßig das interaktive Menü. Für den Cron-Betrieb **muss** `--sync-allowlist` angegeben werden: ```bash # Falsch (startet interaktives Menü): */30 * * * * /opt/.../crowdsec-manager.sh # Richtig: -*/30 * * * * /opt/.../crowdsec-manager.sh --run +*/30 * * * * /opt/.../crowdsec-manager.sh --sync-allowlist ``` --- @@ -129,7 +129,7 @@ A: Kein festes Limit. Die DNS-Auflösung wird linear pro Eintrag durchgeführt. 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. +A: Das interaktive Menü (Standard) bietet eine grafische Auswahl aller Funktionen. Der CLI-Modus (`--sync-allowlist`, `--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. diff --git a/examples/crontab.example b/examples/crontab.example index 2017dca..b7c672e 100644 --- a/examples/crontab.example +++ b/examples/crontab.example @@ -1,32 +1,32 @@ # ============================================================================ -# CrowdSec Manager v0.1.0 - Crontab Beispiele +# CrowdSec Manager - 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! +# Für den Cron-Betrieb MUSS --sync-allowlist angegeben werden! # ============================================================================ # --- Standard: Alle 30 Minuten ausführen --- -*/30 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --run >> /var/log/crowdsec-manager-cron.log 2>&1 +*/30 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --sync-allowlist >> /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 +# */15 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --sync-allowlist >> /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 +# 0 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --sync-allowlist >> /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 +# 0 */6 * * * /opt/crowdsec-manager/crowdsec-manager.sh --sync-allowlist >> /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 +# 0 3 * * * /opt/crowdsec-manager/crowdsec-manager.sh --sync-allowlist >> /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 +# */30 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --sync-allowlist --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 +# */30 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --sync-allowlist --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 +# */30 * * * * /opt/crowdsec-manager/crowdsec-manager.sh --sync-allowlist --dry-run >> /var/log/crowdsec-manager-cron.log 2>&1 -- 2.54.0 From 4ab56382ac556e5f2ef45d60435420a45dd5399d Mon Sep 17 00:00:00 2001 From: scriptos Date: Mon, 16 Mar 2026 10:15:10 +0100 Subject: [PATCH 2/2] Version entfernt --- docs/ADMIN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ADMIN.md b/docs/ADMIN.md index 436298b..b1fd1ef 100644 --- a/docs/ADMIN.md +++ b/docs/ADMIN.md @@ -22,7 +22,7 @@ Ab Version 0.1.0 startet das Script standardmäßig ein **interaktives Menü**, ``` ╔═══════════════════════════════════════════════════════╗ -║ CrowdSec Manager v0.1.0 ║ +║ CrowdSec Manager ║ ╚═══════════════════════════════════════════════════════╝ ── ALLOWLIST MANAGEMENT ────────────────────────────── -- 2.54.0