docs: record tailscale acl plan and watcher activation

This commit is contained in:
2026-06-05 23:27:40 +02:00
parent 2f3d184a3b
commit dda6021116
2 changed files with 75 additions and 15 deletions
+72 -13
View File
@@ -91,22 +91,81 @@ tailscale ip -4
tailscale ip -6
```
### ACL-Policy (Operator-Entscheidung offen)
### ACL-Policy — Entwurf und Rollout-Plan (Stand 2026-06-05, NICHT angewendet)
Die Tailnet-ACL ist aktuell nicht im Repo gespiegelt. Sie wird in der
Tailscale-Admin-Konsole unter `Access controls` verwaltet (kein Wert/Secret
gehoert ins Repo). Offene Entscheidung:
Die Tailnet-ACL wird in der Tailscale-Admin-Konsole unter `Access controls`
verwaltet (kein Wert/Secret gehoert ins Repo). Aktueller Live-Stand ist
Default-Allow (`src: ["*"] -> dst: ["*:*"]`), d. h. jedes Tailnet-Geraet darf
alles inklusive der LAN-Subnet-Route.
- Default-Allow belassen (jedes Tailnet-Geraet darf alles, inkl. der
LAN-Subnet-Route), **oder**
- restriktivere, Tag-basierte ACL einfuehren: nur Operator-Geraete duerfen die
Subnet-Route `192.168.178.0/24` und die Admin-Ports nutzen, Familien-/Mobil-
geraete nur die explizit benoetigten Dienste.
**Abgestimmte Richtung (Operator-Entscheidungen 2026-06-05):**
Empfehlung (zur Entscheidung, nicht umgesetzt): Da der Subnet-Router das ganze
LAN ins Tailnet bringt, ist eine restriktive ACL der wirksamste Hebel. Naechster
Schritt waere, die aktuelle Policy read-only aus der Admin-Konsole zu sichten
und dann eine Tag-Struktur (`tag:operator`, `tag:family`) zu entwerfen.
- Ziel ist eine restriktivere, Tag-basierte ACL.
- Single-User-Realitaet: aktuell gehoeren alle Nodes demselben User
`michaelkaleschke@`. Eine Differenzierung Operator/Familie ist nur ueber
**Tags** moeglich. Tagging aendert Ownership/Key-Expiry und erfordert je Geraet
Re-Auth — deshalb bewusst ein eigener, spaeterer Schritt.
- **Heute bewusst nur Sichtung + Entwurf, kein Tagging, keine Anwendung.**
- Familiengeraete brauchen Tailnet-Zugriff auf **bestimmte** Dienste (welche
genau, ist noch zu konkretisieren) — `tag:family` bekommt gezielte `dst`-Regeln.
- `iphone-14` ist ein Operator-Geraet und faellt unter `tag:operator`.
**Geraete -> Tag (fuer den spaeteren Tagging-Schritt):**
| Tag | Geraete |
|---|---|
| `tag:server` | `kallilabcore` (Host, Subnet-Router) |
| `tag:operator` | `baerchen-1`, `iphone-14` |
| `tag:family` | kuenftige Familiengeraete |
**Entwurf (Vorschlag, noch nicht in der Konsole gespeichert):**
```json
{
"tagOwners": {
"tag:server": ["autogroup:admin"],
"tag:operator": ["autogroup:admin"],
"tag:family": ["autogroup:admin"]
},
"autoApprovers": {
"routes": { "192.168.178.0/24": ["tag:server"] }
},
"acls": [
{ "action": "accept", "src": ["tag:operator"], "dst": ["*:*"] },
{ "action": "accept", "src": ["tag:server"], "dst": ["tag:operator:*"] },
{ "action": "accept", "src": ["tag:family"], "dst": ["100.80.98.33:443"] }
],
"ssh": [
{ "action": "accept", "src": ["tag:operator"], "dst": ["tag:server"],
"users": ["root", "autogroup:nonroot"] }
]
}
```
> Die `tag:family`-`dst` `100.80.98.33:443` ist ein **Platzhalter** und wird
> durch die real benoetigten Familien-Dienste ersetzt, sobald diese feststehen.
**Lockout-sichere Reihenfolge (wenn die Umsetzung freigegeben wird):**
1. `tagOwners` + `autoApprovers` + neue ACL-Regeln speichern, **Allow-all-Regel
zunaechst behalten**.
2. Geraete taggen (`baerchen-1`, `iphone-14` -> operator; `kallilabcore` ->
server) und je Geraet die Verbindung verifizieren.
3. Subnet-Route bleibt approved (jetzt via `autoApprovers`/`tag:server`).
4. **Erst zuletzt** die Allow-all-Regel entfernen -> restriktiv schalten.
5. Sofort Smoke-Tests fahren (siehe unten).
**Smoke-Tests nach Anwendung:**
- `baerchen-1` erreicht Host: `ping 100.80.98.33`, `ssh kallilabcore hostname` (read-only).
- `baerchen-1` erreicht LAN ueber Route: z. B. AdGuard-Admin `http://100.80.98.33:8082`, `curl -kI https://192.168.178.58`.
- Falls testbar: ein nicht-Operator-Geraet erreicht Route/Admin-Ports **nicht** mehr.
- Host-Gegencheck: `tailscale status` zeigt alle Soll-Peers weiter verbunden.
**Noch offene Eingaben vor Finalisierung:**
1. Aktueller ACL-JSON aus der Admin-Konsole (read-only gesichtet, nur Struktur dokumentiert).
2. Konkrete Liste der Dienste/Ports, die Familiengeraete ueber Tailscale brauchen.
## Portfreigaben und Exposure