
Proxy inverso HTTP de filtrado
Proxy HTTP inverso para filtrar solicitudes según diferentes reglas. Se puede usar entre el servidor web de producción y el servidor de aplicaciones para evitar abusos del backend de la aplicación.
El propósito original de este programa era defender searx, pero puede usarse para proteger cualquier aplicación web.
$ go install github.com/asciimoo/filtron
$ "$GOPATH/bin/filtron" --help
Una regla tiene dos atributos obligatorios: name y actions
Una regla puede contener todos los siguientes atributos:
limit entero - Define cuántas solicitudes coincidentes pueden acceder a la aplicación dentro de interval segundos. (Se puede omitir si es 0)interval entero - Rango de tiempo en segundos para reiniciar los números de la regla (Se puede omitir si limit es 0)filters lista de selectoresaggregations lista de selectores (si se especifica filters, se activa solo si el filtro coincide)subrules lista de reglas (si se especifica filters, se activa solo si el filtro coincide)disabled booleano - Deshabilitar una regla (por defecto es false)stop booleano - Finalizar la validación de la solicitud inmediatamente y omitir las reglas restantes (por defecto es false)Representación JSON de una regla:
{
"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"}}
]
}
Explicación: Permitir solo 10 solicitudes por minuto donde q esté representado como parámetro GET y el encabezado de agente de usuario comience con curl. La solicitud se registra en STDERR y se bloquea con un mensaje de error personalizado si se excede el límite. Vea más ejemplos aquí.
actionsLas acciones de una regla se activan secuencialmente si una solicitud supera el límite de la regla.
Nota: Solo se ejecutará la primera acción de la regla que proporcione una respuesta personalizada.
logRegistrar la solicitud
blockEnviar respuesta HTTP 429 en lugar de pasar la solicitud a la aplicación
shell Ejecutar un comando de shell. cmd (cadena) y args (lista de selectores) son parámetros obligatorios (Ejemplo: {"name": "shell", "params": {"cmd": "echo %v is the IP", "args": ["IP"]}})
filtersSi se encuentran todos los selectores, incrementa un contador. La regla bloquea la solicitud si el contador alcanza limit.
aggregationsCuenta los valores devueltos por los selectores. La regla bloquea la solicitud si el número de cualquier valor alcanza limit.
subrulesCada regla puede contener cualquier número de subreglas. Se activa con la coincidencia del filtro de la regla padre.
Se pueden extraer diferentes partes de una solicitud utilizando expresiones selectoras.
Los selectores son cadenas que pueden coincidir con cualquier atributo de una solicitud HTTP con la siguiente sintaxis:
[!]RequestAttribute[:SubAttribute][=Expression]
! puede negar el selectorRequestAttribute (obligatorio) selecciona una parte específica de una solicitud - valores posibles:
IPHostPathMethodGETPOSTParam - es un alias tanto para GET como para POSTCookieHeaderSubAttribute si no es un valor único, esto puede especificar el atributo internoIP devuelve la dirección IP del cliente
GET:x devuelve el parámetro GET x si existe
!Header:Accept-Language devuelve verdadero si no hay un encabezado HTTP Accept-Language
Path=^/(x|y)$ coincide si la ruta es /x o /y
IP=nslookup(example.com) coincide si la dirección IP del cliente es una de las direcciones IP de example.com.
Filtron se puede configurar a través de su API REST que escucha en 127.0.0.1:4005 por defecto.
/rulesReglas cargadas en formato JSON
/rules/reloadRecargar el archivo de reglas especificado al inicio
Interfaz construida sobre la API

¿Errores o sugerencias? Visite el rastreador de problemas.
RequestAttributeExpression valor posible:
nslookup(Hostname) para filtrar los valores de los atributos seleccionados con las direcciones IP de Hostname. Filtron resuelve Hostname a sus direcciones IP cuando se carga la regla (IPv4 e IPv6).