Alle Artikel

Gatekeeper: Anmeldeschranke für Websites hinter nginx oder Traefik

Veröffentlicht

Vorschauen neuer Versionen, Berichte, interne Werkzeuge: Viele Seiten sollen nicht öffentlich sein, brauchen aber keine eigene Benutzerverwaltung. Ein geteiltes Passwort (HTTP Basic Auth) wird weitergegeben und nie geändert; eine vollständige Identitätsplattform ist für ein paar Seiten zu viel.

Dafür haben wir den Gatekeeper gebaut: einen kleinen Dienst hinter dem Reverse Proxy, der entscheidet, wer welche Seite sehen darf.

So funktioniert es

Bei jeder Anfrage fragt der Reverse Proxy den Gatekeeper – nginx mit auth_request, Traefik mit forwardAuth. Ohne Sitzung sieht der Besucher die Anmeldeseite direkt unter der Adresse, die er aufgerufen hat; nach der Anmeldung landet er wieder dort.

Je Host stehen zwei Wege offen:

  • Einmalcode per E-Mail: acht Ziffern, 15 Minuten gültig und nur in dem Browser, der ihn angefordert hat.
  • Ein beliebiger OpenID-Connect-Anbieter: Zitadel, Google, Microsoft, GitLab oder ein anderer.

In beiden Fällen entscheidet eine Liste von Gruppen, wer welchen Host betreten darf – mit einzelnen Adressen oder einer ganzen Domain.

Sicher gebaut

  • Im Zweifel zu: Ein unbekannter Host, ein beschädigtes Cookie oder ein Fehler beim Anbieter enden auf der Anmeldeseite, nie mit Zugang.
  • Keine Hinweise auf Adressen: Eine Adresse ohne Zugang bekommt dieselbe Antwort in derselben Zeit wie eine mit Zugang – nur diese erhält eine E-Mail.
  • Sitzungen sind verschlüsselte Cookies, an den Host gebunden; Codes werden nur als Hash gespeichert.
  • Vor dem Adressfeld hält ein optionaler Proof-of-Work über unseren ALTCHA-Dienst Bots fern.
  • Kommt eine Code-Mail zurück, erhält diese Adresse 48 Stunden lang keine weitere.
  • Die Anmeldeseiten kommen ohne Skripte aus und tragen eine strenge Content Security Policy; nur der optionale ALTCHA-Schritt lädt sein Widget.

Schlank im Betrieb

Der Gatekeeper ist ein einziges statisches Go-Programm: ein Abbild von 15 MB, das im Leerlauf rund 5 MiB Arbeitsspeicher braucht. Es gibt keine Datenbank und kein Volume – Sitzungen liegen im Cookie, offene Codes im Speicher, Benutzer und Gruppen in einer JSON-Datei. gatekeeper check prüft eine Konfiguration vor dem Neustart. Anmeldeseiten und E-Mails gibt es auf Englisch, Deutsch, Russisch und Georgisch, mit eigenem Namen, Logo und eigenen Farben oder in neutralem Aussehen.

In nginx braucht ein geschützter Bereich drei Zeilen; das vollständige Beispiel steht in der README:

location / {
    auth_request /_gatekeeper/auth;
    error_page 401 = /_gatekeeper/sign_in;
    error_page 403 = /_gatekeeper/denied;
}

Im Einsatz

Der Gatekeeper schützt die Lighthouse- und SEO-Berichte unserer Websites und die Vorschauen neuer Versionen.

Der Quellcode liegt auf GitLab und GitHub, das Abbild auf Docker Hub, unter der MIT-Lizenz.

Gern richten wir ihn auch für Ihre Seiten ein.

Bereit für den nächsten Schritt?

Es gab nie einen besseren Zeitpunkt, um anzufangen. Erzählen Sie uns von Ihrem Projekt.

Kontakt aufnehmen