CrowdSec Tagesbericht per Email

Dieses Bash-Skript generiert einen vollständigen HTML-Bericht aller CrowdSec-Alerts der vergangenen 24 Stunden. Es ruft mit cscli alerts list -o json --since 24h --limit 0 alle Alerts ab und erstellt daraus eine übersichtliche Tabelle, die für jeden Vorfall folgende Informationen enthält:

  • Zeitpunkt der Entscheidung

  • Ziel (Einzel-IP oder IP-Range)

  • Entscheidungstyp (z.B. BAN, CAPTCHA)

  • Szenarioname ohne Präfix

  • Betroffene Logdatei(en) mit vollem Pfad

  • Nachricht (Message) des Alerts

Am Ende der Tabelle werden Datum, Uhrzeit und der Hostname des Servers angezeigt. Der Bericht wird per HTML-E-Mail an eine definierte Adresse verschickt. So erhält man einmal täglich eine vollständige Übersicht über alle Sicherheitsvorfälle inklusive aller relevanten Metadaten.

				
					#!/bin/bash
# /etc/cron.daily/crowdsec-complete-daily-report
# Cron-Skript: Alle Alerts der letzten 24 Stunden mit vollständigen Logpfaden und Nachricht als HTML-Mail

# Konfiguration
EMAIL_TO="your-email@domain.com"
EMAIL_SUBJECT="🛡️ CrowdSec Tagesbericht $(date +'%Y-%m-%d')"
TMP_HTML="/tmp/crowdsec-complete-report.html"

# Alerts der letzten 24 Stunden abrufen (unbegrenzt)
ALERTS_JSON=$(cscli alerts list -o json --since 24h --limit 0)
ALERT_COUNT=$(echo "$ALERTS_JSON" | jq length)

# HTML-Header
cat > "$TMP_HTML" <<EOF
<html>
<head>
  <meta charset="UTF-8">
  <style>
    body { font-family: Arial, sans-serif; }
    table { width: 100%; border-collapse: collapse; font-size: 13px; }
    th, td { border: 1px solid #ddd; padding: 8px; vertical-align: top; }
    th { background-color: #f2f2f2; }
    .ip { font-weight: bold; color: #2196F3; }
    .range { font-weight: bold; color: #FF9800; }
  </style>
</head>
<body>
  <h2>🛡️ CrowdSec Tagesbericht – Alle Vorfälle</h2>
  <p><strong>Zeitraum:</strong> Letzte 24 Stunden (bis $(date +"%Y-%m-%d %H:%M:%S"))</p>
  <p><strong>Anzahl Vorfälle:</strong> $ALERT_COUNT</p>
  <table>
    <tr>
      <th>Zeitpunkt</th>
      <th>Ziel (IP/Range)</th>
      <th>Typ</th>
      <th>Szenario</th>
      <th>Logdatei (voller Pfad)</th>
      <th>Nachricht</th>
    </tr>
EOF

# Alerts durchlaufen
echo "$ALERTS_JSON" | jq -c '.[] | {stop: .stop_at, decisions: .decisions, events: .events, message: .message}' | while read -r alert; do
  STOP=$(echo "$alert" | jq -r '.stop')
  MSG=$(echo "$alert" | jq -r '.message // "–"')

  # Logdatei-Pfade ermitteln
  LOGFILES=$(echo "$alert" | jq -r '
    .events
    | map(.meta[]? | select(.key=="datasource_path") | .value)
    | unique
    | join(", ")
  ')
  [ -z "$LOGFILES" ] && LOGFILES="unbekannt"

  # Entscheidungen verarbeiten
  echo "$alert" | jq -r --arg paths "$LOGFILES" --arg msg "$MSG" '
    .decisions[]
    | [
        (if .scope=="Ip" then "<span class=\"ip\">\(.value)</span>" else "<span class=\"range\">\(.value)</span>" end),
        (.type|ascii_upcase),
        (.scenario|split("/")|.[1]),
        ($paths),
        ($msg)
      ]
    | @tsv
  ' | while IFS=$'\t' read -r target typ scen logfiles message; do
    echo "<tr><td>${STOP//T/ }</td><td>${target}</td><td>${typ}</td><td>${scen}</td><td>${logfiles}</td><td>${message}</td></tr>" >> "$TMP_HTML"
  done
done

# HTML-Footer
cat >> "$TMP_HTML" <<EOF
  </table>
  <p><small>Report generiert am $(date +"%Y-%m-%d %H:%M:%S") von CrowdSec auf $(hostname)</small></p>
</body>
</html>
EOF

# Email versenden
mail -s "$EMAIL_SUBJECT" \
     -a "Content-Type: text/html; charset=UTF-8" \
     "$EMAIL_TO" < "$TMP_HTML"

# Temporäre Datei löschen
rm -f "$TMP_HTML"

				
			

Um autoatisiert einen täglichen Bericht per E-Mail zu erhalten, den Sourcecode unter /etc/cron.daily/crowdsec-daily-report abspeichern. 

Machen Sie das Script ausführbar:

sudo chmod +x /etc/cron.daily/crowdsec-daily-report


Automatisierter CrowdSec Tagesbericht per E-Mail
Screenshot: Automatisierter CrowdSec Tagesbericht per E-Mail

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Vielleicht gefällt dir auch folgendes?

.user.ini auf NGINX ausblenden

Die „.user.ini“-Datei, die Wordfence erstellt, kann vertrauliche Informationen enthalten, und der öffentliche Zugriff darauf sollte eingeschränkt werden. Wenn NGINX genutzt ist, muss man das selber

Mehr lesen »
WordPress Cookie Plugin von Real Cookie Banner