Parameter angepasst.

This commit is contained in:
2026-03-16 10:14:12 +01:00
parent b69103a91c
commit ce8e44b808
6 changed files with 67 additions and 53 deletions

View File

@@ -17,7 +17,7 @@ Der **CrowdSec Manager** ist ein Bash-Script, das:
- **Interaktives Menü** als Standard-Modus (für manuelle Verwaltung) - **Interaktives Menü** als Standard-Modus (für manuelle Verwaltung)
- **CrowdSec Admin-Funktionen**: Decisions, Alerts, Bouncers, Machines, Metriken, IP-Info - **CrowdSec Admin-Funktionen**: Decisions, Alerts, Bouncers, Machines, Metriken, IP-Info
- **Gotify** als zusätzlicher Benachrichtigungskanal - **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 - **Eigene cscli-Befehle** direkt aus dem Menü ausführen
## Features ## Features
@@ -37,7 +37,7 @@ Der **CrowdSec Manager** ist ein Bash-Script, das:
| **Dry-Run** | Testmodus ohne tatsächliche Änderungen | | **Dry-Run** | Testmodus ohne tatsächliche Änderungen |
| **Lock-File** | Verhindert parallele Ausführung | | **Lock-File** | Verhindert parallele Ausführung |
| **Backup** | Sichert den Zustand vor Änderungen | | **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 ## Schnellstart
@@ -79,10 +79,10 @@ nano config/crowdsec-manager.conf
./crowdsec-manager.sh ./crowdsec-manager.sh
# Allowlist-Sync (für Cron) # Allowlist-Sync (für Cron)
./crowdsec-manager.sh --run ./crowdsec-manager.sh --sync-allowlist
# Testlauf ohne Änderungen # Testlauf ohne Änderungen
./crowdsec-manager.sh --run --dry-run ./crowdsec-manager.sh --sync-allowlist --dry-run
``` ```
### 5. Cron einrichten ### 5. Cron einrichten
@@ -92,10 +92,10 @@ crontab -e
``` ```
```cron ```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ü ## Interaktives Menü
@@ -184,7 +184,7 @@ Verwendung:
Modi: Modi:
(ohne Optionen) Startet das interaktive Menü (ohne Optionen) Startet das interaktive Menü
--run Allowlist synchronisieren (für Cron) --sync-allowlist Allowlist synchronisieren (für Cron)
Optionen: Optionen:
-c, --config FILE Konfigurationsdatei angeben -c, --config FILE Konfigurationsdatei angeben
@@ -195,6 +195,7 @@ Optionen:
-f, --flush Alle verwalteten Einträge entfernen -f, --flush Alle verwalteten Einträge entfernen
-t, --test Konfiguration testen -t, --test Konfiguration testen
-i, --interactive Interaktives Menü starten -i, --interactive Interaktives Menü starten
--sync-allowlist Allowlist-Sync ausführen (nicht-interaktiv)
-h, --help Hilfe anzeigen -h, --help Hilfe anzeigen
-V, --version Version anzeigen -V, --version Version anzeigen
``` ```
@@ -203,7 +204,7 @@ Optionen:
``` ```
┌─────────────────────────┐ ┌─────────────────────────┐
Script: --run │ Script: --sync-allowlist
└────────────┬────────────┘ └────────────┬────────────┘
┌───────▼────────┐ ┌───────▼────────┐
@@ -214,7 +215,7 @@ Optionen:
┌───────▼────────┐ ┌───────▼────────┐
│ Aktuelle Liste │ │ Aktuelle Liste │
│ abrufen + Backup │ abrufen
└───────┬────────┘ └───────┬────────┘
┌───────▼────────┐ ┌───────▼────────┐
@@ -225,11 +226,13 @@ Optionen:
┌───────▼────────┐ ┌───────▼────────┐
│ Vergleich & │ │ Vergleich & │
│ Synchronisation │ │ Synchronisation │
│ (nur bei Änd.) │
└───────┬────────┘ └───────┬────────┘
┌───────▼────────┐ ┌───────▼────────┐
Report & Backup, Report
│ Notifications & Notifications │
│ (nur bei Änd.) │
└───────┬────────┘ └───────┬────────┘
┌───────▼────────┐ ┌───────▼────────┐

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# ============================================================================ # ============================================================================
# CrowdSec Manager v0.1.0 # CrowdSec Manager v0.2.0
# ============================================================================ # ============================================================================
# Verwaltet automatisch eine CrowdSec-Allowlist und bietet interaktive # Verwaltet automatisch eine CrowdSec-Allowlist und bietet interaktive
# CrowdSec-Administration über ein Menü. # CrowdSec-Administration über ein Menü.
@@ -481,6 +481,12 @@ sync_allowlist() {
STAT_UNCHANGED=$(echo "$unchanged" | wc -l) STAT_UNCHANGED=$(echo "$unchanged" | wc -l)
fi 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 if [[ -n "$to_add" ]]; then
log "INFO" "Neue IPs zum Hinzufügen gefunden:" log "INFO" "Neue IPs zum Hinzufügen gefunden:"
while IFS= read -r ip; do while IFS= read -r ip; do
@@ -488,8 +494,6 @@ sync_allowlist() {
log "INFO" " + $ip" log "INFO" " + $ip"
add_to_allowlist "$ip" add_to_allowlist "$ip"
done <<< "$to_add" done <<< "$to_add"
else
log "INFO" "Keine neuen IPs zum Hinzufügen"
fi fi
if [[ -n "$to_remove" ]]; then if [[ -n "$to_remove" ]]; then
@@ -499,9 +503,9 @@ sync_allowlist() {
log "INFO" " - $ip" log "INFO" " - $ip"
remove_from_allowlist "$ip" remove_from_allowlist "$ip"
done <<< "$to_remove" done <<< "$to_remove"
else
log "INFO" "Keine veralteten IPs zum Entfernen"
fi fi
return 0
} }
# ============================================================================ # ============================================================================
@@ -1408,11 +1412,15 @@ run_allowlist_sync() {
fi fi
get_current_allowlist get_current_allowlist
create_backup
resolve_all_entries resolve_all_entries
sync_allowlist
if sync_allowlist; then
# Änderungen erkannt → Backup erstellen & benachrichtigen
create_backup
send_notifications
fi
print_summary print_summary
send_notifications
cleanup_temp cleanup_temp
release_lock release_lock
@@ -1472,7 +1480,7 @@ ${BOLD}Verwendung:${NC}
${BOLD}Modi:${NC} ${BOLD}Modi:${NC}
(ohne Optionen) Startet das interaktive Menü (ohne Optionen) Startet das interaktive Menü
--run Allowlist synchronisieren (für Cron) --sync-allowlist Allowlist synchronisieren (für Cron)
${BOLD}Optionen:${NC} ${BOLD}Optionen:${NC}
-c, --config FILE Konfigurationsdatei angeben -c, --config FILE Konfigurationsdatei angeben
@@ -1483,20 +1491,21 @@ ${BOLD}Optionen:${NC}
-f, --flush Alle verwalteten Einträge entfernen -f, --flush Alle verwalteten Einträge entfernen
-t, --test Konfiguration testen -t, --test Konfiguration testen
-i, --interactive Interaktives Menü starten -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 -h, --help Diese Hilfe anzeigen
-V, --version Version anzeigen -V, --version Version anzeigen
${BOLD}Beispiele:${NC} ${BOLD}Beispiele:${NC}
$SCRIPT_NAME # Interaktives Menü $SCRIPT_NAME # Interaktives Menü
$SCRIPT_NAME --run # Allowlist-Sync (Cron-Modus) $SCRIPT_NAME --sync-allowlist # Allowlist-Sync (Cron-Modus)
$SCRIPT_NAME --run --dry-run # Testlauf $SCRIPT_NAME --sync-allowlist --dry-run # Testlauf
$SCRIPT_NAME --sync-allowlist --quiet # Sync ohne Ausgabe (nur Fehler)
$SCRIPT_NAME --interactive # Interaktives Menü $SCRIPT_NAME --interactive # Interaktives Menü
$SCRIPT_NAME --list # Allowlist anzeigen $SCRIPT_NAME --list # Allowlist anzeigen
$SCRIPT_NAME --config /etc/conf.conf # Eigene Config $SCRIPT_NAME --config /etc/conf.conf # Eigene Config
${BOLD}Cron-Beispiel:${NC} ${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} ${BOLD}Konfiguration:${NC}
Standard: config/crowdsec-manager.conf Standard: config/crowdsec-manager.conf
@@ -1683,8 +1692,8 @@ main() {
action="interactive" action="interactive"
shift shift
;; ;;
--run) --sync-allowlist)
action="run" action="sync-allowlist"
shift shift
;; ;;
-h|--help) -h|--help)
@@ -1727,9 +1736,11 @@ main() {
interactive_menu interactive_menu
exit 0 exit 0
;; ;;
sync-allowlist)
;;
esac esac
# === Automatischer Sync (--run, für Cron) === # === Automatischer Sync (--sync-allowlist) ===
load_config load_config
[[ -n "${DRY_RUN:-}" ]] || DRY_RUN=false [[ -n "${DRY_RUN:-}" ]] || DRY_RUN=false

View File

@@ -24,8 +24,10 @@ Das Script arbeitet nach dem **Desired-State-Prinzip**: Du definierst WAS allowg
3. Synchronisation 3. Synchronisation
├── Vergleich: current_ips.txt vs. new_ips.txt ├── 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) ├── Neue IPs hinzufügen (in new, nicht in current)
├── Veraltete IPs entfernen (in current, nicht in new) ├── Veraltete IPs entfernen (in current, nicht in new)
├── Backup der vorherigen Liste erstellen
└── Statistiken aktualisieren └── Statistiken aktualisieren
4. Abschluss 4. Abschluss
@@ -44,16 +46,16 @@ Das Script arbeitet nach dem **Desired-State-Prinzip**: Du definierst WAS allowg
| Aufruf | Beschreibung | | Aufruf | Beschreibung |
|--------|-------------| |--------|-------------|
| `./script.sh` | Startet das **interaktive Menü** (Standard) | | `./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) | | `./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 ### Alle Optionen
| Option | Kurz | Beschreibung | | 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 | | `--interactive` | `-i` | Interaktives Menü starten |
| `--config FILE` | `-c` | Eigene Konfigurationsdatei laden | | `--config FILE` | `-c` | Eigene Konfigurationsdatei laden |
| `--dry-run` | `-d` | Simuliert alle Aktionen ohne CrowdSec zu ändern | | `--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: Im Dry-Run Modus werden alle Schritte normal durchgeführt (DNS-Auflösung, Vergleich), aber die CrowdSec-Befehle werden **nicht** ausgeführt:
```bash ```bash
./crowdsec-manager.sh --run --dry-run ./crowdsec-manager.sh --sync-allowlist --dry-run
``` ```
Ausgabe: Ausgabe:
@@ -148,7 +150,7 @@ crontab -e
Empfohlener Eintrag: Empfohlener Eintrag:
```cron ```cron
# CrowdSec Manager - alle 30 Minuten # 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 ### Cron-spezifisches Verhalten
@@ -175,10 +177,10 @@ Du kannst mehrere Konfigurationsdateien für verschiedene Allowlists verwenden:
```bash ```bash
# Webserver-Allowlist # Webserver-Allowlist
./crowdsec-manager.sh --run --config config/webserver.conf ./crowdsec-manager.sh --sync-allowlist --config config/webserver.conf
# Monitoring-Allowlist # 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: Jede Konfiguration sollte einen eigenen `ALLOWLIST_REASON` verwenden:

View File

@@ -1,7 +1,5 @@
# CrowdSec Manager Dokumentation # CrowdSec Manager Dokumentation
## Version 0.1.0
Umfassende Dokumentation für den CrowdSec Manager. Umfassende Dokumentation für den CrowdSec Manager.
--- ---
@@ -65,7 +63,7 @@ Mindestens setzen:
./crowdsec-manager.sh ./crowdsec-manager.sh
# Allowlist-Sync (für Cron) # Allowlist-Sync (für Cron)
./crowdsec-manager.sh --run ./crowdsec-manager.sh --sync-allowlist
``` ```
### 6. Cron einrichten ### 6. Cron einrichten
@@ -75,7 +73,7 @@ crontab -e
``` ```
```cron ```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: cron:
name: "CrowdSec Manager" name: "CrowdSec Manager"
minute: "*/30" 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 ### Docker Compose Sidecar
@@ -176,7 +174,7 @@ services:
command: > command: >
sh -c "apk add --no-cache bash bind-tools curl docker-cli && sh -c "apk add --no-cache bash bind-tools curl docker-cli &&
while true; do while true; do
/app/crowdsec-manager.sh --run; /app/crowdsec-manager.sh --sync-allowlist;
sleep 1800; sleep 1800;
done" done"
``` ```

View File

@@ -90,14 +90,14 @@ sudo chown $(whoami) /var/backup/crowdsec-manager
### Interaktives Menü startet statt Cron-Sync ### 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 ```bash
# Falsch (startet interaktives Menü): # Falsch (startet interaktives Menü):
*/30 * * * * /opt/.../crowdsec-manager.sh */30 * * * * /opt/.../crowdsec-manager.sh
# Richtig: # 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. 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?** **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?** **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. A: Ja, Menüpunkt 40 ermöglicht die Ausführung beliebiger cscli-Befehle über den konfigurierten Basisbefehl.

View File

@@ -1,32 +1,32 @@
# ============================================================================ # ============================================================================
# CrowdSec Manager v0.1.0 - Crontab Beispiele # CrowdSec Manager - Crontab Beispiele
# ============================================================================ # ============================================================================
# Installation: crontab -e (und gewünschte Zeile einfügen) # Installation: crontab -e (und gewünschte Zeile einfügen)
# #
# WICHTIG: Das Script startet ohne Parameter das interaktive Menü. # 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 --- # --- 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 --- # --- 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 --- # --- 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 --- # --- 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 --- # --- 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 --- # --- 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) --- # --- 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 --- # --- 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