Mirror Komodo IP-allowlist labels and document de-publicization
Codex applied the ipallowlist middleware (Tailnet 100.64.0.0/10 + LAN 192.168.178.0/24) to the Komodo router live in the inline-managed self-stack; public now returns 403. Mirror the labels in ops/komodo/docker-compose.yml for parity (not auto-deployed), record the decision in docs/DECISIONS.md, and update docs/AUTH_MATRIX.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+4
-4
@@ -40,7 +40,7 @@ buendelt das an **einem** Ort und **verlinkt** auf die Quellen statt zu kopieren
|
|||||||
| `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) |
|
| `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 |
|
| `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 |
|
| 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)** |
|
| `komodo.kaleschke.info` | **IP-Allowlist** (Tailnet + LAN), sonst 403; native (keine Authelia) | Traefik `ipallowlist` (Label) + native Komodo-Auth | DECISIONS 2026-06-23; Webhooks/Periphery laufen intern, nicht ueber Traefik |
|
||||||
| `nextcloud` | Keine Authelia (native) | WebDAV/CardDAV/Client-Flows | DECISIONS 2026-04 / Ausnahmen-Tabelle |
|
| `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 |
|
| `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 |
|
| `plex.kaleschke.info` | Keine Authelia (native Plex) | File-Provider-Route; WAN-Port 32400 + Remote Access aus | DECISIONS 2026-05-28 |
|
||||||
@@ -50,9 +50,9 @@ buendelt das an **einem** Ort und **verlinkt** auf die Quellen statt zu kopieren
|
|||||||
|
|
||||||
## Review-Gaps (Audit 2026-06-23)
|
## Review-Gaps (Audit 2026-06-23)
|
||||||
|
|
||||||
- **Komodo** ist die kritischste offene Position: public erreichbar + RW-Docker-
|
- **Komodo**: beschlossen IP-Allowlist (Tailnet + LAN) statt public (DECISIONS
|
||||||
Socket. Plan: Tailscale-only (Task #5), interner Gitea→Komodo-Webhook bereits
|
2026-06-23). Self-Stack ist inline in Komodo verwaltet → Labels via Komodo-UI
|
||||||
als erreichbar bestaetigt (Task #4).
|
setzen (Task #6), dann verifizieren (#7).
|
||||||
- **Bypass-Liste bewusst ohne 2FA**: Bei App-CVE oder Account-Kompromiss greift
|
- **Bypass-Liste bewusst ohne 2FA**: Bei App-CVE oder Account-Kompromiss greift
|
||||||
davor kein Authelia. Akzeptiert fuer Public-Apps mit eigenen Clients; Review-
|
davor kein Authelia. Akzeptiert fuer Public-Apps mit eigenen Clients; Review-
|
||||||
Trigger = neue sensible App in der Liste oder veraendertes Risikoprofil.
|
Trigger = neue sensible App in der Liste oder veraendertes Risikoprofil.
|
||||||
|
|||||||
@@ -11,6 +11,38 @@ in `HOMELAB_ARCHITECTURE_MASTER_V2.md` §13, `docs/MASTER_TODO.md` (Geparkt),
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 2026-06-23 - Komodo nur aus vertrauenswuerdigen Netzen (IP-Allowlist statt public)
|
||||||
|
|
||||||
|
**Entscheidung:** Der Komodo-Router (`komodo.kaleschke.info`) bekommt eine
|
||||||
|
Label-definierte `ipallowlist`-Middleware auf Tailnet `100.64.0.0/10` + LAN
|
||||||
|
`192.168.178.0/24`; public-Zugriff liefert kuenftig `403`. KEINE ForwardAuth
|
||||||
|
(die bewusste Komodo-Ausnahme bleibt), `KOMODO_HOST` bleibt
|
||||||
|
`https://komodo.kaleschke.info`. Der GANZE Router wird begrenzt, kein
|
||||||
|
pfadbasierter Public-Bypass.
|
||||||
|
|
||||||
|
**Kontext:** Audit 2026-06-23 (P1): Komodo war public mit `200` erreichbar und
|
||||||
|
koppelt ueber den RW-Docker-Socket der Periphery an Host-root-aehnliche Macht
|
||||||
|
(Core -> Periphery -> `docker.sock` -> jeder Container/Datenpfad). Read-only
|
||||||
|
gemessen: Gitea→Komodo-Webhooks (`/listener`) und Periphery (`/ws/periphery`)
|
||||||
|
laufen INTERN ueber `komodo-core:9120`, NICHT ueber Traefik. Der public Router
|
||||||
|
hat damit keine legitimen externen Consumer; eine Allowlist auf dem ganzen Router
|
||||||
|
schliesst die Public-Flaeche, ohne Automation zu brechen.
|
||||||
|
|
||||||
|
**Umsetzung / Ausnahme:** Der Komodo-Self-Stack ist inline in Komodo verwaltet
|
||||||
|
(`repo=""`, `files_on_host=false`, `webhook_enabled=false`, vgl. 2026-05-04),
|
||||||
|
KEIN GitOps-Push-Stack. Die Labels werden in der Komodo-UI am Inline-Compose
|
||||||
|
gesetzt; `ops/komodo/docker-compose.yml` ist nur Spiegel/Doku und wird zur
|
||||||
|
Paritaet nachgezogen.
|
||||||
|
|
||||||
|
**Alternativen:** Reines Tailscale-only (Route + public DNS-Record raus,
|
||||||
|
`KOMODO_HOST` auf Tailscale-Host) — strenger (kein 403-Endpunkt, keine
|
||||||
|
Hostname-Disclosure), aber mehr Aufwand und geaenderter Operator-Zugriff;
|
||||||
|
verworfen zugunsten des bewaehrten, minimalen Allowlist-Musters (analog Vault
|
||||||
|
/admin). **Review-Trigger:** Wunsch nach vollstaendiger Unsichtbarkeit von aussen
|
||||||
|
oder Aenderung am Komodo-Zugriffspfad.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 2026-06-23 - Vaultwarden /admin nur aus vertrauenswuerdigen Netzen (IP-Allowlist)
|
## 2026-06-23 - Vaultwarden /admin nur aus vertrauenswuerdigen Netzen (IP-Allowlist)
|
||||||
|
|
||||||
**Entscheidung:** Das Vaultwarden-Admin-Panel `/admin` bekommt einen zweiten,
|
**Entscheidung:** Das Vaultwarden-Admin-Panel `/admin` bekommt einen zweiten,
|
||||||
|
|||||||
@@ -74,7 +74,14 @@ services:
|
|||||||
- traefik.http.routers.komodo.tls=true
|
- traefik.http.routers.komodo.tls=true
|
||||||
- traefik.http.routers.komodo.tls.certresolver=le
|
- traefik.http.routers.komodo.tls.certresolver=le
|
||||||
- traefik.http.services.komodo.loadbalancer.server.port=9120
|
- traefik.http.services.komodo.loadbalancer.server.port=9120
|
||||||
|
# Audit 2026-06-23 (P1): Komodo war public mit 200 erreichbar + RW-Docker-Socket-Kette.
|
||||||
|
# IP-Allowlist begrenzt den GANZEN Router auf Tailnet + LAN (public -> 403). KEINE ForwardAuth
|
||||||
|
# (Webhooks/Periphery laufen intern ueber komodo-core:9120, nicht ueber Traefik).
|
||||||
|
# ACHTUNG: Self-Stack ist inline in Komodo verwaltet -> diese Labels muessen in der Komodo-UI
|
||||||
|
# am Inline-Compose gesetzt werden; diese Datei ist nur Spiegel.
|
||||||
|
- traefik.http.routers.komodo.middlewares=komodo-allowlist@docker
|
||||||
|
- traefik.http.middlewares.komodo-allowlist.ipallowlist.sourcerange=100.64.0.0/10,192.168.178.0/24
|
||||||
|
|
||||||
security_opt:
|
security_opt:
|
||||||
- no-new-privileges:true
|
- no-new-privileges:true
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user