
Proxy HTTP inverse filtrant
Proxy HTTP inverse pour filtrer les requêtes selon différentes règles. Peut être utilisé entre le serveur web de production et le serveur d'application pour empêcher les abus du backend de l'application.
Le but original de ce programme était de défendre searx, mais il peut être utilisé pour protéger toute application web.
$ go install github.com/asciimoo/filtron
$ "$GOPATH/bin/filtron" --help
Une règle a deux attributs requis : name et actions
Une règle peut contenir tous les attributs suivants :
limit entier - Définit combien de requêtes correspondantes sont autorisées à accéder à l'application dans un intervalle de interval secondes. (Peut être omis si 0)interval entier - Plage de temps en secondes pour réinitialiser les compteurs de la règle (Peut être omis si limit est 0)filters liste de sélecteursaggregations liste de sélecteurs (si filters est spécifié, il ne s'active que si le filtre correspond)subrules liste de règles (si filters est spécifié, il ne s'active que si le filtre correspond)disabled booléen - Désactiver une règle (par défaut false)stop booléen - Terminer la validation de la requête immédiatement et ignorer les règles restantes (par défaut false)Représentation JSON d'une règle :
{
"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"}}
]
}
Explication : Autoriser seulement 10 requêtes par minute où q est représenté comme paramètre GET et l'en-tête user-agent commence par curl. La requête est journalisée sur STDERR et bloquée avec un message d'erreur personnalisé si la limite est dépassée. Voir plus d'exemples ici.
actionsLes actions d'une règle sont activées séquentiellement si une requête dépasse la limite de la règle
Note : Seule la première action de la règle qui fournit une réponse personnalisée sera exécutée
logJournaliser la requête
blockRenvoyer une réponse HTTP 429 au lieu de passer la requête à l'application
shell Exécuter une commande shell. Les paramètres cmd (chaîne) et args (liste de sélecteurs) sont requis (Exemple : {"name": "shell", "params": {"cmd": "echo %v is the IP", "args": ["IP"]}})
filtersSi tous les sélecteurs sont trouvés, un compteur est incrémenté. La règle bloque la requête si le compteur atteint limit
aggregationsCompte les valeurs retournées par les sélecteurs. La règle bloque la requête si le nombre de n'importe quelle valeur atteint limit
subrulesChaque règle peut contenir un nombre quelconque de sous-règles. S'active lorsque le filtre de la règle parente correspond.
Les différentes parties de la requête peuvent être extraites à l'aide d'expressions de sélecteur.
Les sélecteurs sont des chaînes qui peuvent correspondre à n'importe quel attribut d'une requête HTTP avec la syntaxe suivante :
[!]RequestAttribute[:SubAttribute][=Expression]
! peut inverser le sélecteurRequestAttribute (obligatoire) sélectionne une partie spécifique d'une requête - valeurs possibles :
IPHostPathMethodGETPOSTParam - c'est un alias pour GET et POSTCookieHeaderSubAttribute si n'est pas une valeur unique, cela peut spécifier l'attribut interneIP retourne l'adresse IP du client
GET:x retourne le paramètre GET x s'il existe
!Header:Accept-Language retourne vrai s'il n'y a pas d'en-tête HTTP Accept-Language
Path=^/(x|y)$ correspond si le chemin est /x ou /y
IP=nslookup(example.com) correspond si l'adresse IP du client est l'une des adresses IP de example.com.
Filtron peut être configuré via son API REST qui écoute sur 127.0.0.1:4005 par défaut.
/rulesRègles chargées au format JSON
/rules/reloadRecharger le fichier de règles spécifié au démarrage
Interface utilisateur construite sur l'API

Bogues ou suggestions ? Visitez le gestionnaire de tickets.
RequestAttributeExpression valeur possible :
nslookup(Hostname) pour filtrer les valeurs des attributs sélectionnés avec les adresses IP de Hostname. Filtron résout Hostname en ses adresses IP lorsque la règle est chargée (IPv4 et IPv6).