From ad47979000606ac7bb1c361ba0f5c1c1048ce431 Mon Sep 17 00:00:00 2001 From: Micha Date: Tue, 23 Jun 2026 11:03:26 +0200 Subject: [PATCH] Add consolidated Auth-Matrix doc Consolidate effective access policy per public domain (Authelia bypass/two_factor, native exceptions, Tailscale-only, IP-allowlist) into a single reviewable matrix, surfacing the Authelia bypass list that previously lived only in the live config. Indexed in docs/README.md. Co-Authored-By: Claude Opus 4.8 --- docs/AUTH_MATRIX.md | 69 +++++++++++++++++++++++++++++++++++++++++++++ docs/README.md | 1 + 2 files changed, 70 insertions(+) create mode 100644 docs/AUTH_MATRIX.md diff --git a/docs/AUTH_MATRIX.md b/docs/AUTH_MATRIX.md new file mode 100644 index 0000000..0539b22 --- /dev/null +++ b/docs/AUTH_MATRIX.md @@ -0,0 +1,69 @@ +# Auth-Matrix + +Typ: Inventar/Referenz · Stand: 2026-06-23 · Status: aktiv + +Konsolidierte Review-Sicht auf die **effektive Zugriffskontrolle je oeffentlicher +UI/Domain**. Bisher lag das verstreut: Authelia-ACL nur in der Live-Config, die +Bypass-/Ausnahmefaelle in `HOMELAB_ARCHITECTURE_MASTER_V2.md` (Prosa + Service- +und Ausnahmen-Tabellen) und die Begruendungen in `DECISIONS.md`. Diese Datei +buendelt das an **einem** Ort und **verlinkt** auf die Quellen statt zu kopieren. + +## Quelle der Wahrheit + +- **Authelia-ACL** (bypass / two_factor / Catch-all): `security/authelia/configuration.yml` + (`access_control`). Repo-zu-Host-Drift prueft `services/authelia-diff.sh`. +- **Dienste ohne ForwardAuth** (bewusste Ausnahmen): Ausnahmen-Tabelle in + `HOMELAB_ARCHITECTURE_MASTER_V2.md` + die jeweiligen `DECISIONS.md`-Eintraege. +- **Nicht-Authelia-Schutzschichten** (Tailscale-Bind, Traefik-IP-Allowlist): die + jeweilige `docker-compose.yml` per Label bzw. Host-Bind. + +> Diese Matrix ist die kommentierte Lese-/Review-Sicht. Bei Widerspruch gewinnen +> die oben genannten Quellen; dann diese Datei nachziehen. + +## Policy-Klassen + +- **Bypass** — Authelia laesst durch, **kein 2FA**; Schutz liegt allein in der + App-eigenen Anmeldung. Bewusst fuer Public-Apps mit eigenen Clients. +- **two_factor** — Authelia-ForwardAuth mit 2FA (Operator-TOTP), `authelia@file`. +- **Keine Authelia (native)** — bewusste Ausnahme ohne ForwardAuth, App-Auth bleibt. +- **Tailscale-only / LAN-only** — gar nicht oeffentlich, kein Traefik bzw. an + Tailscale-/LAN-IP gebunden. +- **IP-Allowlist** — oeffentlich geroutet, aber per Traefik-Middleware auf + vertrauenswuerdige Quell-Netze begrenzt (sonst 403). + +## Matrix + +| UI / Domain | Effektive Policy | Mechanismus | Quelle / Begruendung | +|---|---|---|---| +| `auth.kaleschke.info` | Bypass (Authelia selbst) | — | muss immer erreichbar sein | +| `immich`, `paperless`, `mealie`, `vault`, `ntfy`, `git` `.kaleschke.info` | **Bypass** → native App-Auth, kein 2FA | Authelia laesst durch | `configuration.yml`; Public-Apps mit eigener Auth/Clients | +| `vault.kaleschke.info/admin` | **IP-Allowlist** (Tailnet `100.64.0.0/10` + LAN `192.168.178.0/24`), sonst 403 | Traefik `ipallowlist` (Label) | DECISIONS 2026-06-23 (Audit-P1) | +| `files.kaleschke.info`, `scrutiny.kaleschke.info` | **two_factor** (explizit) | `authelia@file` | `configuration.yml`; scrutiny zusaetzlich privileged | +| uebrige `*.kaleschke.info` mit Middleware (monitoring/grafana, glances, glance, speedtest, bentopdf, mail-archiver, paperless-gpt, hermes, super-productivity, borg-ui, code-server) | **two_factor** (Catch-all) | `authelia@file` Catch-all | `configuration.yml`; Haertung 2026-06-06 | +| `komodo.kaleschke.info` | **Keine Authelia** (native) | bewusste Ausnahme, keine ForwardAuth (Webhooks/`/ws/periphery`) | DECISIONS 2026-04; **Audit-P1: public + RW-Docker-Socket → Tailscale-only geplant (Task #5)** | +| `nextcloud` | Keine Authelia (native) | WebDAV/CardDAV/Client-Flows | DECISIONS 2026-04 / Ausnahmen-Tabelle | +| `n8n.kaleschke.info` | Keine pauschale Authelia (native) | Webhook-Endpunkte `/webhook/*` | Ausnahmen-Tabelle; ⚠ Middleware-Abweichung lt. policy-check | +| `plex.kaleschke.info` | Keine Authelia (native Plex) | File-Provider-Route; WAN-Port 32400 + Remote Access aus | DECISIONS 2026-05-28 | +| `home.kaleschke.info` (homeassistant) | Keine Authelia (native HA) | Traefik + `smarthome_net`; LAN-Port 8123 | Ausnahmen-Tabelle; ⚠ Middleware-Abweichung lt. policy-check | +| AdGuard-Admin | **Tailscale-only**, nicht oeffentlich | Host-Bind `100.80.98.33:8082`, kein Traefik | DECISIONS 2026-05-26 | +| `influxdb3-core` :8181 | **LAN-only** Writer (HA) | Host-Port, kein Traefik, nicht in `frontend_net` | dokumentierte Ausnahme | + +## Review-Gaps (Audit 2026-06-23) + +- **Komodo** ist die kritischste offene Position: public erreichbar + RW-Docker- + Socket. Plan: Tailscale-only (Task #5), interner Gitea→Komodo-Webhook bereits + als erreichbar bestaetigt (Task #4). +- **Bypass-Liste bewusst ohne 2FA**: Bei App-CVE oder Account-Kompromiss greift + davor kein Authelia. Akzeptiert fuer Public-Apps mit eigenen Clients; Review- + Trigger = neue sensible App in der Liste oder veraendertes Risikoprofil. +- **Middleware-Abweichungen** (policy-check `TRAEFIK002`): `n8n` und + `homeassistant` sind erwartbar (native Ausnahmen). `grafana` steht **nicht** in + der Ausnahmen-Tabelle und ist als Catch-all-`two_factor` gefuehrt — die + abweichende Middleware ist live zu bestaetigen (offen). + +## Pflege + +Diese Matrix bei jeder Aenderung an Authelia-ACL, vorgeschalteter Middleware, +Tailscale-Bind oder IP-Allowlist mitziehen. Zugehoerige Drift-Erkennung: +`services/authelia-diff.sh` (ACL), `ops/policy-checks/check_repo.ps1` (Middleware- +Standard `TRAEFIK002`). diff --git a/docs/README.md b/docs/README.md index 3ab0e15..805b4c9 100644 --- a/docs/README.md +++ b/docs/README.md @@ -40,6 +40,7 @@ geloescht (Git-Historie ist das Archiv). Verbindliche Doku-Regeln: |---|---| | `STORAGE_LAYOUT.md` | verbindliche Storage-/Share-/Pfad-Regeln | | `SECRETS_MAP.md` | Secret-Namen, Speicherorte und Einbindungsarten ohne Werte | +| `AUTH_MATRIX.md` | konsolidierte Auth-Matrix: effektive Policy je Domain (bypass/2FA/native/Tailscale/IP-Allowlist) | | `AUTHELIA_OIDC_PLAN.md` | Plan & Runbook fuer app-uebergreifendes SSO via Authelia OIDC | | `HARDWARE_INVENTORY.md` | Host-, Disk-, SMART- und Power-Baseline | | `NETWORK_INVENTORY.md` | Router, DNS, Tailscale, Portfreigaben und Netzthemen |