celguard: Verbesserungen

Echte Client-IPs, schlanke Konfiguration, schnellere Auswertung

Mit celguard habe ich ein Traefik-Plugin vorgestellt, das eingehende HTTP-Anfragen anhand frei definierbarer Regeln filtert. Seitdem hat sich einiges getan: Version 0.4.1 bringt einige Verbesserungen, die den Alltag mit dem Plugin spürbar leichter machen.

Echte Client-IPs hinter Proxys Wer celguard hinter einem Proxy oder Load Balancer betreibt, sieht in der Anfrage nicht die echte Client-IP, sondern die des Proxys. Neu ist die source_ip-Option, die die Client-IP mit einem CEL-Ausdruck aus einem Header auflöst:

matcher:
  source_ip: request.headers['x-real-ip']

Regeln können dann auf request.source_ip zugreifen; fehlt der Header, wird auf die Socket-Adresse zurückgefallen.

Schlanke Konfiguration Die Konfiguration ist jetzt klar getrennt: Im Abschnitt plugin stehen globale Einstellungen wie default_status, im Abschnitt matcher die source_ip und die Regeln. Aktionen werden direkt an der Regel definiert und lassen sich mit YAML-Ankern zwischen mehreren Regeln teilen – eine separate Aktionsliste entfällt damit.

Einfachere Header-Abfragen Header-Werte kommen jetzt je nach Anzahl als String oder Liste an, und es gibt kleine Hilfsfunktionen wie contains, lower und trim. Eine Regel wie „Anfragen ohne User-Agent blockieren“ ist damit in einer Zeile:

request.headers.contains('user-agent') == false

Schneller und kleiner Im Inneren wurde auf die neue Version 0.14 des CEL-Crates umgestiegen, die Auswertung pro Anfrage optimiert und die Abhängigkeiten reduziert. Das Wasm-Binary ist kleiner und Anfragen werden schneller ausgewertet.

Die aktuelle Doku mit Beispielen findet man im Repository.