docs: close audit remediation status

This commit is contained in:
2026-06-23 19:50:48 +02:00
parent 79657d526c
commit ee0d450a27
4 changed files with 59 additions and 7 deletions
+20 -1
View File
@@ -1,6 +1,6 @@
# Alert Rules # Alert Rules
Stand: 2026-06-18 Stand: 2026-06-23
Diese Datei beschreibt die produktiven Alarmwege und wichtigsten Regeln. Die Diese Datei beschreibt die produktiven Alarmwege und wichtigsten Regeln. Die
Konfiguration selbst liegt in `monitoring/prometheus/alerts.yml` und in den Konfiguration selbst liegt in `monitoring/prometheus/alerts.yml` und in den
@@ -18,6 +18,25 @@ Skripten unter `services/posture-check/`.
| Borg Pre-Hook | `ops/borg-ui/scripts/pre-borg.sh` | ntfy `homelab-alerts` | | Borg Pre-Hook | `ops/borg-ui/scripts/pre-borg.sh` | ntfy `homelab-alerts` |
| Restore Jobs | `ops/restore-tests/run-restore-job-with-ntfy.sh` | Fehler `homelab-alerts`, Erfolg `homelab-info` | | Restore Jobs | `ops/restore-tests/run-restore-job-with-ntfy.sh` | Fehler `homelab-alerts`, Erfolg `homelab-info` |
## End-to-End-Drills
Stand 2026-06-23 sind die produktionsnahen Alarmwege bis zum Handy des
Operators synthetisch belegt:
| Pfad | Test | Ergebnis |
|---|---|---|
| Direkter ntfy-Kanal | `ops/restore-tests/send-ntfy.sh homelab-alerts ...` | Handy-Empfang bestaetigt |
| Restore-Wrapper Fehler | `run-restore-job-with-ntfy.sh codex-negative-alert-test homelab-info` | `Restore job failed: codex-negative-alert-test` am Handy bestaetigt |
| Restore-Freshness Negativtest | `run-restore-checks.sh freshness-negative` | `TEST: Restore freshness alert path ok` am Handy bestaetigt; produktive Dumps nicht veraendert |
| Alertmanager -> Bridge -> ntfy | `amtool alert add HomelabAlertChainTest ...` im `monitoring-alertmanager`-Container | `FIRING` und `RESOLVED` am Handy bestaetigt; Bridge loggte `sent 1 ntfy notifications` |
| Docker Critical Events | `test-docker-critical-events.sh` + `docker-critical-events-supervisor.sh smoke` | Filtertest gruen; `Docker critical watcher smoke` am Handy bestaetigt |
| Borg Pre-Hook Fehler | `PRE_BACKUP_DUMPS=/bin/false POSTURE_CHECK=/bin/true FRESHNESS_CHECK=/bin/true pre-borg.sh` | `Borg pre-hook failed: pre-backup-dumps` am Handy bestaetigt; keine echten Backups/Dumps angefasst |
Nicht separat belegt wurde eine temporaere Prometheus-Testregel bis
Alertmanager. Der kritischere Pfad Alertmanager -> Bridge -> ntfy -> Handy ist
bewiesen; Prometheus-Regelladung wird im Monitoring-Reload-/Alert-Smoke des
Monitoring-Hardening-Punkts mitgeprueft.
## Prometheus-Regeln ## Prometheus-Regeln
| Alarm | Ausloeser | Severity | Aktion | | Alarm | Ausloeser | Severity | Aktion |
+2 -2
View File
@@ -27,7 +27,6 @@ Host-Reports (`/mnt/user/backups/restore-reports/`) und in der Git-Historie.
| Home Assistant Tibber | Operator/Codex | Tibber per HA-UI-Config-Flow verbinden. Danach Energy-Dashboard um echte Kosten/Preisquelle ergaenzen; SolarEdge-PV, Netz und Speicher sind bereits konfiguriert und validiert | `docs/runbooks/smart-home-bootstrap.md`, `docs/DECISIONS.md` | | Home Assistant Tibber | Operator/Codex | Tibber per HA-UI-Config-Flow verbinden. Danach Energy-Dashboard um echte Kosten/Preisquelle ergaenzen; SolarEdge-PV, Netz und Speicher sind bereits konfiguriert und validiert | `docs/runbooks/smart-home-bootstrap.md`, `docs/DECISIONS.md` |
| Nearline-Pull Dead-Man's-Switch | Operator | **S4U-Root-Cause 2026-06-21 behoben + verifiziert:** Task `KalliLab H Drive Nearline Pull` von S4U auf LogonType `Interactive` ("Nur wenn Benutzer angemeldet") umgestellt (kein Passwort noetig, da `michi` Dauer-Konsolen-User) -> per Planer mit `0x0` bestaetigt. Spiegel frisch, Exit-Code-Leak gefixt, Heartbeat-Pings gepusht. **Verbleibt (optional, niedrige Dringlichkeit):** je einen Healthchecks-Check anlegen + Capability-URL hinterlegen (baerchen ENV `HEALTHCHECKS_NEARLINE_URL`/Datei; Unraid `/mnt/user/appdata/secrets/healthchecks_borg_url`) | `ops/h-drive-nearline/README.md` | | Nearline-Pull Dead-Man's-Switch | Operator | **S4U-Root-Cause 2026-06-21 behoben + verifiziert:** Task `KalliLab H Drive Nearline Pull` von S4U auf LogonType `Interactive` ("Nur wenn Benutzer angemeldet") umgestellt (kein Passwort noetig, da `michi` Dauer-Konsolen-User) -> per Planer mit `0x0` bestaetigt. Spiegel frisch, Exit-Code-Leak gefixt, Heartbeat-Pings gepusht. **Verbleibt (optional, niedrige Dringlichkeit):** je einen Healthchecks-Check anlegen + Capability-URL hinterlegen (baerchen ENV `HEALTHCHECKS_NEARLINE_URL`/Datei; Unraid `/mnt/user/appdata/secrets/healthchecks_borg_url`) | `ops/h-drive-nearline/README.md` |
| Monitoring Single-File-Bind-Mount Hardening | Operator/Claude | alertmanager/blackbox/loki/promtail + alertmanager-ntfy-bridge lokal auf Directory-Mounts umgestellt (grafana-provisioning war bereits Directory-Mount); `docker compose config` gruen. **Verbleibt:** Push + Komodo-Redeploy des monitoring-Stacks mit `--force-recreate` (Mount-Pfade aendern sich), danach Reload-/Alert-Smoke | `monitoring/docker-compose.yml` | | Monitoring Single-File-Bind-Mount Hardening | Operator/Claude | alertmanager/blackbox/loki/promtail + alertmanager-ntfy-bridge lokal auf Directory-Mounts umgestellt (grafana-provisioning war bereits Directory-Mount); `docker compose config` gruen. **Verbleibt:** Push + Komodo-Redeploy des monitoring-Stacks mit `--force-recreate` (Mount-Pfade aendern sich), danach Reload-/Alert-Smoke | `monitoring/docker-compose.yml` |
| Audit 2026-06-23 Remediation-Reste | Codex/Operator | **P1/P2-Kern erledigt** (Commits `23a6975..3e9c12e`). Verbleibt: #19 Snapshot-Restore-Test live validieren + in `schedule.md` (`run-restore-checks.sh hetzner-snapshot`); #12 `vaultwarden`+`Redis` per force-recreate aus Default-`bridge`; #14 Drift-Redeploy `gitea` 1.26.4 + `dawarich_redis` 8.8.0; #15 Immich-Stackpfad messen + Repo/Doku angleichen | `docs/AUTH_MATRIX.md`, `docs/DECISIONS.md` (2026-06-23), `ops/restore-tests/hetzner-snapshot-runbook.md` |
--- ---
@@ -77,7 +76,8 @@ Bewusst nicht jetzt - Begruendungen in `docs/DECISIONS.md`, hier nur Thema und T
- **2026-06-23** Alert-Kette end-to-end verifiziert (Codex-Drills): send-ntfy + Restore-Wrapper + Freshness-Negativtest + Alertmanager→bridge→ntfy + Docker-Critical-Watcher-Smoke + Borg-pre-hook-Fehler — alle aufs Handy bestaetigt. Beleg-Bug: `send-ntfy.sh` war nicht executable (`6870ae5`). Rest optional: Prometheus→AM-Leg via Testregel. - **2026-06-23** Alert-Kette end-to-end verifiziert (Codex-Drills): send-ntfy + Restore-Wrapper + Freshness-Negativtest + Alertmanager→bridge→ntfy + Docker-Critical-Watcher-Smoke + Borg-pre-hook-Fehler — alle aufs Handy bestaetigt. Beleg-Bug: `send-ntfy.sh` war nicht executable (`6870ae5`). Rest optional: Prometheus→AM-Leg via Testregel.
- **2026-06-23** Audit-Remediation abgeschlossen: Vault `/admin` + Komodo public zu (403, IP-Allowlist), Off-site-Snapshots bewiesen + monatlicher Test, Live-Drift bereinigt, `backend_net` auf `internal:true` gesetzt (Egress live BLOCKED, 12/12 Member ok). Doku: `AUTH_MATRIX.md`, DECISIONS, Snapshot-Runbook. Commits `23a6975..` ff. - **2026-06-23** Audit-Remediation abgeschlossen: Vault `/admin` + Komodo public zu (403, IP-Allowlist), Off-site-Snapshots bewiesen + monatlicher Test, Live-Drift bereinigt, `backend_net` auf `internal:true` gesetzt (Egress live BLOCKED, 12/12 Member ok). Doku: `AUTH_MATRIX.md`, DECISIONS, Snapshot-Runbook. Commits `23a6975..` ff.
- **2026-06-17** Offene TODOs gegen Live-Stand abgeglichen: Paperless-OIDC-Secret verdrahtet und Service-Smoke gruen; alter Tailscale-Docker-State nach `_archive/tailscale-removed-2026-06-06/` verschoben; Tailnet-Restpunkt geschlossen.- **2026-06-19** Backup-Hardening live verifiziert: Borg-Scope-Drift 0 (alle 33 Quellen konfiguriert), Dumps frisch (11/11 present), neue Dump-Alerts aktiv (25 Regeln, 0 feuern). Prometheus-`alerts.yml`-Stale-Handle (FUSE-Einzeldatei-Mount) per `--force-recreate` behoben und anschliessend dauerhaft auf Directory-Mount umgestellt (recreated, 25 Regeln aktiv). - **2026-06-17** Offene TODOs gegen Live-Stand abgeglichen: Paperless-OIDC-Secret verdrahtet und Service-Smoke gruen; alter Tailscale-Docker-State nach `_archive/tailscale-removed-2026-06-06/` verschoben; Tailnet-Restpunkt geschlossen.
- **2026-06-19** Backup-Hardening live verifiziert: Borg-Scope-Drift 0 (alle 33 Quellen konfiguriert), Dumps frisch (11/11 present), neue Dump-Alerts aktiv (25 Regeln, 0 feuern). Prometheus-`alerts.yml`-Stale-Handle (FUSE-Einzeldatei-Mount) per `--force-recreate` behoben und anschliessend dauerhaft auf Directory-Mount umgestellt (recreated, 25 Regeln aktiv).
- **2026-06-18** Backup-Audit-Hardening: Dump-Frische-Metriken + Alerts `HomelabBorgDumpMissing/Stale`, Freshness-Checks + Nearline-Pull um `n8n`/`globals` ergaenzt, 4 Tier-2-Container in Critical-Watch, Scope-Doku fuer `projekte`/Hermes praezisiert. H:-Nearline (still seit 2026-06-04) nachgeholt + Task neu registriert. - **2026-06-18** Backup-Audit-Hardening: Dump-Frische-Metriken + Alerts `HomelabBorgDumpMissing/Stale`, Freshness-Checks + Nearline-Pull um `n8n`/`globals` ergaenzt, 4 Tier-2-Container in Critical-Watch, Scope-Doku fuer `projekte`/Hermes praezisiert. H:-Nearline (still seit 2026-06-04) nachgeholt + Task neu registriert.
--- ---
+14 -3
View File
@@ -39,6 +39,17 @@ ENV-Override (`SNAPSHOT_DIR`, `PROBE_FILE`, `SNAPSHOT_NAME_GLOB`,
`SNAPSHOT_SSH_OPTS`, `MIN_SNAPSHOTS`, `MAX_SNAPSHOT_AGE_HOURS`) bleibt fuer `SNAPSHOT_SSH_OPTS`, `MIN_SNAPSHOTS`, `MAX_SNAPSHOT_AGE_HOURS`) bleibt fuer
kuenftige Abweichungen verfuegbar. kuenftige Abweichungen verfuegbar.
**Verbleibender Host-Schritt (Codex/Du):** Unraid-User-Script ## Host-Schedule
`restore-hetzner-snapshot-monthly` anlegen (Cron `0 6 15 * *`), Vorlage in
`unraid-user-scripts.md`. Unraid-User-Script `restore-hetzner-snapshot-monthly` ist live angelegt und in
Cron aktiv:
```text
0 6 15 * * /usr/local/emhttp/plugins/user.scripts/startCustom.php /boot/config/plugins/user.scripts/scripts/restore-hetzner-snapshot-monthly/script > /dev/null 2>&1
```
Der Job ruft den ntfy-Wrapper auf:
```bash
/mnt/user/services/homelab-infra/ops/restore-tests/run-restore-job-with-ntfy.sh hetzner-snapshot homelab-info
```
+23 -1
View File
@@ -151,10 +151,32 @@ Cron:
exec /mnt/user/services/homelab-infra/ops/restore-tests/monthly-random-restore.sh exec /mnt/user/services/homelab-infra/ops/restore-tests/monthly-random-restore.sh
``` ```
## Script 8 - `restore-hetzner-snapshot-monthly`
Cron:
- `0 6 15 * *` (15. des Monats 06:00)
Inhalt:
```bash
#!/bin/bash
set -euo pipefail
exec bash /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-job-with-ntfy.sh \
hetzner-snapshot homelab-info
```
Erwartung:
- listet Hetzner Storage Box Snapshots read-only via SFTP aus dem `borg-ui`-Container
- restauriert eine kleine Probe-Datei aus `.zfs/snapshot` in ein Temp-Verzeichnis
- schreibt den Report nach `/mnt/user/backups/restore-reports/`
- sendet Erfolg nach `homelab-info`, Fehler nach `homelab-alerts`
## Stand ## Stand
- die ersten Bash-Jobs wurden am 2026-05-07 hostseitig erfolgreich verifiziert - die ersten Bash-Jobs wurden am 2026-05-07 hostseitig erfolgreich verifiziert
- `freshness`, `vaultwarden`, `gitea`, `paperless`, `immich` und `authelia` sind als Host-Jobs verfuegbar - `freshness`, `vaultwarden`, `gitea`, `paperless`, `immich`, `authelia` und `hetzner-snapshot` sind als Host-Jobs verfuegbar
- ntfy-Wrapper schreibt Erfolg/Fehler-Meldungen an die definierten Topics - ntfy-Wrapper schreibt Erfolg/Fehler-Meldungen an die definierten Topics
## Fehler-Topic ## Fehler-Topic