Módulo de Caddy
Añade una directiva ipscanner a un bloque de sitio y cada visitante se revisa antes de reverse_proxy. Empieza en modo monitor y no bloquea nada hasta que cambies.
Gratis, licencia MITCaddy 2.8+
Log de acceso
Clases de tráfico
Cada visitante recibe una clase. Bloquea una clase desde el panel, o ponla en block_classes.
Instalación
Caddy la lee de IPSCANNER_API_KEY, o de api_key en el Caddyfile.
export IPSCANNER_API_KEY=<your API key>Con xcaddy o en Docker. Requiere Caddy 2.8 o posterior.
xcaddy build --with github.com/ipscanner/ipscanner-caddy
./caddy list-modules | grep ipscannerEl sitio guarda la política y muestra el tráfico. Copia su Site ID.
Añade un sitioSite ID
site_4fQ8nZ2kLm7xR1vT9cBw
Sin línea order global: se ejecuta antes de basic_auth y reverse_proxy.
example.com {
ipscanner {
site_id site_4fQ8nZ2kLm7xR1vT9cBw
}
reverse_proxy localhost:8080
}Sin sitio
El modo y las clases bloqueadas van en la configuración. Un matcher como ipscanner /app/* limita la revisión a algunas rutas.
example.com {
ipscanner {
mode enforce
block_classes malicious_automation tor
}
reverse_proxy localhost:8080
}Placeholders
Los define la directiva, para log_append, matchers vars y cabeceras.
| Placeholder | Valores |
|---|---|
{http.vars.ipscanner.status}ok, error, timeout, backoff, skipped | ok, error, timeout, backoff, skipped |
{http.vars.ipscanner.class}Clase de tráfico, definida si el estado es ok | Clase de tráfico, definida si el estado es ok |
{http.vars.ipscanner.action}allow, flag, block, would_flag, would_block | allow, flag, block, would_flag, would_block |
log_append ipscanner_class {http.vars.ipscanner.class}
log_append ipscanner_action {http.vars.ipscanner.action}
@flagged vars ipscanner.action flag
request_header @flagged X-Review 1IP del cliente
El módulo revisa la IP del cliente que resolvió Caddy. Confía en tus proxies, y trusted_proxies_strict impide que un visitante añada un salto falso.
{
servers {
trusted_proxies static 10.0.0.0/8
trusted_proxies_strict
}
}Ajustes
Todas opcionales. La configuración JSON usa los mismos nombres.
| Subdirectiva | Por defecto | Qué hace |
|---|---|---|
api_keyAPI key. Sin ella, todas las solicitudes pasan. | {env.IPSCANNER_API_KEY} | API key. Sin ella, todas las solicitudes pasan. |
site_idSitio del panel que fija el modo y la política. | Vacío | Sitio del panel que fija el modo y la política. |
modeMonitor o enforce. Con un sitio, solo cuenta monitor. | monitor | Monitor o enforce. Con un sitio, solo cuenta monitor. |
block_classesBloqueadas en modo enforce sin sitio. | malicious_automation | Bloqueadas en modo enforce sin sitio. |
timeoutTiempo máximo por revisión. | 1.5s | Tiempo máximo por revisión. |
cache_ttlCuánto se reutiliza un veredicto por visitante. | 10m | Cuánto se reutiliza un veredicto por visitante. |
cache_sizeEntradas de la caché de veredictos. | 10000 | Entradas de la caché de veredictos. |
policy_ttlCuánto dura en caché la política del sitio. | 30s | Cuánto dura en caché la política del sitio. |
skip_pathsRegex de rutas que nunca se revisan. | Archivos estáticos | Regex de rutas que nunca se revisan. |
block_messageTexto de la página 403. | Blocked by IPScanner edge guard. | Texto de la página 403. |
debugCabeceras de debug y una línea de log por decisión. | Desactivado | Cabeceras de debug y una línea de log por decisión. |
api_urlURL base de la API. | https://ipscanner.io | URL base de la API. |
Siempre pasa
skip_paths.Preguntas
Compila Caddy con el módulo, lee una semana de decisiones y luego bloquea.