security: public Deploy härten (Reverse-Proxy, GoTrue-Rate-Limit, RLS-Revoke)

Für die öffentlich erreichbare Instanz (dev.openbureau.ch):

1. Reverse-Proxy nur /auth/* durchreichen — /rest, /storage, /realtime raus.
   PostgREST /rest/v1/ gab die komplette DB-Schema-Beschreibung (OpenAPI) preis;
   der Browser nutzt Supabase nur fürs Login, Daten laufen über /api/*.
   (Caddy-Block in create-openbureau-lxc.sh + proxmox/README.md angepasst.)
2. GoTrue GOTRUE_RATE_LIMIT_TOKEN_REFRESH=100 — bremst Brute-Force aufs /token,
   das public direkt gegen GoTrue läuft (nicht übers Node-Rate-Limit).
3. db/schema.sql: revoke all from anon/authenticated auf posts/comments/forums/
   threads; grants nur noch service_role. RLS bleibt so auch bei künftigen
   Policies dicht (Defense-in-Depth statt "RLS ohne Policy").

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-04 05:11:19 +02:00
parent 50cec7a965
commit 9163f5c90d
5 changed files with 34 additions and 7 deletions
+4
View File
@@ -89,6 +89,10 @@ services:
# Single-Author: Self-Signup aus. User wird per Admin-API angelegt
# (Kommando steht im README / LXC-Output).
GOTRUE_DISABLE_SIGNUP: "true"
# Brute-Force-Bremse aufs /token: das öffentliche Login läuft direkt gegen
# GoTrue (nicht über das Node-Rate-Limit), daher hier kappen — max. 100
# Token-Anfragen / 5 Min. Reichlich für einen Autor, bremst Rateversuche.
GOTRUE_RATE_LIMIT_TOKEN_REFRESH: "100"
GOTRUE_JWT_ADMIN_ROLES: service_role
GOTRUE_JWT_AUD: authenticated
GOTRUE_JWT_DEFAULT_GROUP_NAME: authenticated