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.