
Filternder Reverse-HTTP-Proxy
Reverse-HTTP-Proxy zum Filtern von Anfragen nach verschiedenen Regeln. Kann zwischen Produktions-Webserver und Anwendungsserver eingesetzt werden, um Missbrauch des Anwendungs-Backends zu verhindern.
Der ursprüngliche Zweck dieses Programms war die Verteidigung von searx, aber es kann zum Schutz jeder Webanwendung verwendet werden.
$ go install github.com/asciimoo/filtron
$ "$GOPATH/bin/filtron" --help
Eine Regel hat zwei erforderliche Attribute: name und actions
Eine Regel kann alle folgenden Attribute enthalten:
limit Ganzzahl - Definiert, wie viele übereinstimmende Anfragen innerhalb von interval Sekunden auf die Anwendung zugreifen dürfen. (Kann weggelassen werden, wenn 0)interval Ganzzahl - Zeitraum in Sekunden zum Zurücksetzen der Regelzahlen (Kann weggelassen werden, wenn limit 0 ist)filters Liste von Selektorenaggregations Liste von Selektoren (wenn filters angegeben ist, wird es nur aktiviert, wenn der Filter zutrifft)subrules Liste von Regeln (wenn filters angegeben ist, wird es nur aktiviert, wenn der Filter zutrifft)disabled Bool - Deaktiviert eine Regel (Standard ist false)stop Bool - Beendet die Anfragevalidierung sofort und überspringt die restlichen Regeln (Standard ist false)JSON-Darstellung einer Regel:
{
"name": "example rule",
"interval": 60,
"limit": 10,
"filters": ["GET:q", "Header:User-Agent=^curl"],
"actions": [
{"name": "log",
"params": {"destination": "stderr"}},
{"name": "block",
"params": {"message": "Not allowed"}}
]
}
Erklärung: Erlaube nur 10 Anfragen pro Minute, bei denen q als GET-Parameter dargestellt wird und der User-Agent-Header mit curl beginnt. Die Anfrage wird auf STDERR protokolliert und bei Überschreitung des Limits mit einer benutzerdefinierten Fehlermeldung blockiert. Weitere Beispiele finden Sie hier.
actionsDie Aktionen einer Regel werden sequentiell aktiviert, wenn eine Anfrage das Limit der Regel überschreitet
Hinweis: Nur die erste Aktion der Regel, die eine benutzerdefinierte Antwort liefert, wird ausgeführt
logProtokolliert die Anfrage
blockLiefert eine HTTP-429-Antwort, anstatt die Anfrage an die Anwendung weiterzuleiten
shell Führt einen Shell-Befehl aus. cmd (String) und args (Liste von Selektoren) sind erforderliche Parameter (Beispiel: {"name": "shell", "params": {"cmd": "echo %v is the IP", "args": ["IP"]}})
filtersWenn alle Selektoren gefunden werden, wird ein Zähler erhöht. Die Regel blockiert die Anfrage, wenn der Zähler limit erreicht
aggregationsZählt die von den Selektoren zurückgegebenen Werte. Die Regel blockiert die Anfrage, wenn die Anzahl eines Wertes limit erreicht
subrulesJede Regel kann beliebig viele Unterregeln enthalten. Wird bei Übereinstimmung des Filters der übergeordneten Regel aktiviert.
Verschiedene Teile einer Anfrage können mit Hilfe von Selektorausdrücken extrahiert werden.
Selektoren sind Zeichenketten, die jedes Attribut einer HTTP-Anfrage mit folgender Syntax abgleichen können:
[!]RequestAttribute[:SubAttribute][=Expression]
! kann den Selektor negierenRequestAttribute (erforderlich) wählt einen bestimmten Teil einer Anfrage aus - mögliche Werte:
IPHostPathMethodGETPOSTParam - ein Alias für sowohl GET als auch POSTCookieHeaderSubAttribute wenn kein einzelner Wert ist, kann dies das innere Attribut festlegenIP gibt die IP-Adresse des Clients zurück
GET:x gibt den GET-Parameter x zurück, falls vorhanden
!Header:Accept-Language gibt true zurück, wenn kein Accept-Language HTTP-Header vorhanden ist
Path=^/(x|y)$ stimmt überein, wenn der Pfad /x oder /y ist
IP=nslookup(example.com) stimmt überein, wenn die IP-Adresse des Clients eine der IP-Adressen von example.com ist.
Filtron kann über seine REST-API konfiguriert werden, die standardmäßig auf 127.0.0.1:4005 lauscht.
/rulesGeladene Regeln im JSON-Format
/rules/reloadLädt die beim Start angegebene Regeldatei neu
Auf der API basierende UI

Fehler oder Vorschläge? Besuchen Sie den Issue-Tracker.
RequestAttributeExpression möglicher Wert:
nslookup(Hostname), um die ausgewählten Attributwerte mit den IP-Adressen von Hostname zu filtern. Filtron löst Hostname beim Laden der Regel in seine IP-Adressen auf (IPv4 und IPv6).