Claude Code Prompt: RZ Diagnose-Script

Verwendung

cd /path/to/ozmai
claude

Dann diesen Prompt einfügen:


Der Prompt

Schreibe ein interaktives Bash-Diagnose-Script für RZ-Admins.

Dateiname: rz_diagnose.sh

Das Script erkennt die klassischen RZ-Probleme automatisch
und gibt pro Befund eine farbige Ausgabe mit Handlungsempfehlung.

## Anforderungen

### Erkennungs-Checks (alle automatisch, keine User-Eingabe nötig)

1. DISK: /var Auslastung
   - Warnung bei > 80%, Kritisch bei > 90%
   - Bei Treffer: du -sh /var/* | sort -rh | head -10
   - Zeige Top-Verursacher
   - Empfehlung: truncate / logrotate / lvextend

2. LOAD: System Load vs CPU-Kerne
   - Warnung bei Load > CPU-Kerne × 1.5
   - Kritisch bei Load > CPU-Kerne × 3
   - Bei Treffer: top -b -n 1 | head -20
   - %wa (iowait) separat anzeigen
   - Empfehlung: MySQL PROCESSLIST prüfen / iostat

3. MYSQL: Slow Queries und Locks
   - Nur wenn MySQL läuft (mysql --connect-timeout=2)
   - SHOW PROCESSLIST: Queries > 30s anzeigen
   - Threads_connected vs max_connections in %
   - Slow Query Log aktiv? Wenn nein: Hinweis
   - Empfehlung: EXPLAIN / Index prüfen

4. SSH: Brute-Force Erkennung
   - Failed password Einträge in letzter Stunde
   - Warnung bei > 100, Kritisch bei > 1000
   - Top 5 Angreifer-IPs anzeigen
   - Erfolgreiche Logins in letzter Stunde (kritisch!)
   - fail2ban Status wenn installiert
   - Empfehlung: iptables / PasswordAuthentication no

5. DISK I/O: Engpass
   - iostat wenn verfügbar (sysstat Paket)
   - %util > 80% = Warnung
   - Zeige Top-I/O-Prozess (iotop -b -n 1 wenn verfügbar)
   - Empfehlung: iotop / lsof / MySQL Buffer Pool

6. MEMORY: RAM und Swap
   - Swap-Nutzung > 20% = Warnung, > 60% = Kritisch
   - Zeige Top-5 RAM-Verbraucher
   - Empfehlung: Dienste prüfen / RAM erweitern

7. FAIL2BAN: Status
   - Installiert und aktiv?
   - Wenn nicht: Hinweis mit Installationsbefehl

8. EOL-Check: PHP und MySQL Versionen
   - PHP Version erkennen
   - MySQL/MariaDB Version erkennen
   - EOL-Versionen markieren:
     PHP 7.2 → EOL Nov 2020
     PHP 7.4 → EOL Nov 2022
     MySQL 5.7 → EOL Okt 2023
   - Empfehlung: Migration

## Output-Format

Farbschema:
  ✓ GRÜN   → alles ok
  ⚠ GELB   → Warnung, Handlung empfohlen
  ✗ ROT    → Kritisch, sofortige Handlung
  ℹ BLAU   → Information

Struktur pro Check:
  ════════════════════════════════
  [DISK] /var Auslastung
  ════════════════════════════════
  ✗ KRITISCH: /var ist zu 94% voll (9.4G / 10G)

  Top-Verursacher:
    7.9G  /var/log/syslog
    180M  /var/log/syslog.1
    12M   /var/log/auth.log

  Empfehlung:
    → truncate -s 0 /var/log/syslog
    → systemctl kill -s HUP rsyslog
    → logrotate -f /etc/logrotate.d/rsyslog
    → Langfristig: lvextend -r -L +5G /dev/vg0/lv_var

## Distro-Erkennung

Das Script muss automatisch erkennen:
  Debian / Ubuntu  → auth.log, journalctl -u sshd
  RHEL / Rocky     → /var/log/secure, journalctl -u sshd
  Arch             → journalctl -u sshd
  FreeBSD          → /var/log/auth.log, service sshd status
                     kein systemctl! kein journalctl!

Distro-Erkennung via:
  /etc/os-release   → Linux
  uname -s          → FreeBSD

## Zusammenfassung am Ende

Nach allen Checks:
  ════════════════════════════════
  ZUSAMMENFASSUNG
  ════════════════════════════════
  Checks gesamt:  8
  OK:             5  ✓
  Warnungen:      2  ⚠
  Kritisch:       1  ✗

  Kritische Probleme:
    → [DISK] /var zu 94% voll

  Warnungen:
    → [SSH] 847 Brute-Force Versuche in letzter Stunde
    → [EOL] PHP 7.2 ist End of Life seit Nov 2020

## Optionen

Script soll folgende Flags unterstützen:
  --quiet     nur Warnungen und Kritische ausgeben
  --json      Output als JSON (für Monitoring-Integration)
  --check MODUL   nur einen Check ausführen
                  z.B.: --check disk
                        --check mysql
                        --check ssh

## Sicherheit

- Script läuft als normaler User soweit möglich
- MySQL-Checks: versuchen ohne Passwort (socket auth)
  wenn fehlschlägt: überspringen mit Hinweis
- Keine Passwörter im Script
- Keine destruktiven Befehle – nur lesen und anzeigen

## Ausgabe

Speichere das fertige Script als: rz_diagnose.sh
Mache es ausführbar: chmod +x rz_diagnose.sh
Erstelle zusätzlich: rz_diagnose_README.md
  mit: Installation, Verwendung, Beispiel-Output

Nach dem Script

# Script testen:
bash rz_diagnose.sh
bash rz_diagnose.sh --quiet
bash rz_diagnose.sh --check disk
bash rz_diagnose.sh --check mysql
bash rz_diagnose.sh --json

# In ozmai ingestieren:
# Quellenname: rz_diagnose_README.md
# Channel: #klassiker
# → ozmai kennt dann das Script und erklärt es

# Testfragen:
# "Was prüft rz_diagnose.sh beim MySQL-Check?"
# "Wie erkenne ich mit dem Script einen Brute-Force?"
# "Was bedeutet --json beim Diagnose-Script?"

Erweiterungen (v0.2)

Nach erstem Test:
→ cron: Script stündlich laufen lassen, Output in #laufend ingestieren
→ webhook: bei Kritisch → Slack/Matrix Benachrichtigung
→ history: letzten Run vergleichen → "neu seit letztem Check"
→ CVE-Modul: Version erkennen → NVD API abfragen → bekannte CVEs