
Defensa asimétrica contra agentes de IA adversarios. VeilGate evalúa cada solicitud entrante, redirige a los agentes sospechosos a un entorno honeypot consistente por IP y cuantifica el costo computacional impuesto al atacante.
VeilGate es un proxy de engaño de código abierto para equipos que quieren aumentar el coste del escaneo de seguridad automatizado sin poner reglas de bloqueo frágiles delante de los usuarios reales.
Se sitúa delante de una aplicación web, puntúa cada solicitud y elige uno de tres resultados:
El objetivo no es una invulnerabilidad mágica. El objetivo es una mejor relación coste-beneficio: mantener a los humanos y a la automatización normal en movimiento, mientras se hace que los escáneres asistidos por IA gasten tiempo, tokens y atención en callejones sin salida creíbles.
observe, challenge, tarpit y auto controlado por umbrales.X-Veilgate-Token, para que las SPA de origen cruzado puedan resolver y reincorporar el token en llamadas API posteriores. La respuesta de desafío 401 tiene en cuenta a las SPA: devuelve HTML para las navegaciones de nivel superior y JSON (con los metadatos PoW para resolver en línea) para los contextos fetch / XHR.Descarga el binario, instala un servicio systemd, instala las reglas comunitarias y escribe una configuración inicial en modo observe.
# One-liner
curl -sSL https://veilgate.dev/install.sh | sudo bash -s -- --upstream http://localhost:3000
# Or download first, then run
curl -sSL https://veilgate.dev/install.sh -o install.sh
sudo ./install.sh --upstream http://localhost:3000
Opciones:
La configuración incluida usa rules_dir: "~/.veilgate/rules". Bajo systemd, VeilGate se ejecuta como el usuario veilgate, cuyo directorio personal es /var/lib/veilgate, por lo que esto se resuelve a /var/lib/veilgate/.veilgate/rules.
Si se omite --secret en una instalación nueva, el instalador lo solicita en terminales interactivas y, en caso contrario, genera un secreto aleatorio. Si el usuario del servicio no existe, el instalador pregunta antes de crearlo en terminales interactivas y, en instalaciones no interactivas, lo crea por defecto.
Después de la instalación:
systemctl status veilgate
journalctl -u veilgate -f
docker run -d --name veilgate \
--network host \
-v /etc/veilgate/veilgate.yaml:/etc/veilgate/veilgate.yaml:ro \
-v ~/.veilgate/rules:/home/nonroot/.veilgate/rules \
-e VEILGATE_SECRET=$(openssl rand -hex 32) \
ghcr.io/c0oki3s/veilgate:latest -config /etc/veilgate/veilgate.yaml
Requisito previo: Go 1.25.10 o superior.
git clone https://github.com/C0oki3s/veilgate.git
cd veilgate
make build
./veilgate -config configs/veilgate.yaml
Por defecto, VeilGate escucha en :8080, hace de proxy hacia http://localhost:3000 y expone métricas en :9090.
La configuración por defecto arranca en modo observe: establece una línea base del tráfico normal antes de habilitar challenge o tarpit.
Despliegue recomendado:
observe durante al menos varios días.challenge para el tráfico ambiguo.tarpit cuando tus umbrales se ajusten a tu entorno.Empieza con configs/veilgate.yaml:
listen: ":8080"
upstream: "http://localhost:3000"
mode: "observe"
rules_dir: "~/.veilgate/rules"
detector:
score_challenge_threshold: 40
score_tarpit_threshold: 70
trusted_ips: []
trusted_proxies: []
metrics:
listen: ":9090"
Referencia completa: Referencia de configuración.
VeilGate no incluye ninguna regla integrada. El binario lee rules_dir al arrancar y recarga los cambios en caliente; si el directorio está vacío, arranca sin señales de detección. Las reglas provienen de un único lugar:
install.sh lo clona automáticamente en la primera instalación. También puedes actualizarlo manualmente con el subcomando integrado update-rules — sin recompilar ni reiniciar:| ¿Instala reglas automáticamente? | |
|---|---|
install.sh (primera ejecución) |
# Install the latest pack into ~/.veilgate/rules (the default location)
veilgate update-rules
# Or pin to a release tag
veilgate update-rules --dir ~/.veilgate/rules --version v1.2.0
# List available releases
veilgate update-rules --list
Tras la instalación, el observador fsnotify de VeilGate detecta los nuevos archivos en unos ~500 ms. Cada archivo existente se respalda como <name>.bak antes de sobrescribirse (pasa --no-backup para omitirlo). La versión instalada se registra en <rules_dir>/.rules-version.json para que la CI y los operadores puedan comprobar qué versión está en ejecución sin consultar los metadatos de git.
Trata ambos directorios como política de seguridad: revisa los cambios antes de desplegar en producción, especialmente detector.yaml e ip_reputation.yaml. Guía completa y procedimiento de reversión: docs/how-to/install-community-rules.md.
veilgate.yaml y archivos de reglas.veilgate update-rules.VEILGATE_SECRET o challenge.secret antes de usar el modo challenge o tarpit. VeilGate se niega a arrancar fuera del modo observe con el secreto de desafío por defecto.rules/ como política de seguridad. Revísalos y controla sus versiones.make test
make fmt
make build
La carpeta de nivel superior tests contiene pruebas de integración de caja negra. Las pruebas unitarias privadas de paquete viven junto a sus paquetes porque verifican los helpers no exportados del detector, de huellas TLS, de tarpit y de ML.
Apache-2.0. Ver LICENSE.
| Opción | Por defecto | Descripción |
|---|
--upstream URL | http://127.0.0.1:3000 | Tu aplicación upstream |
--listen ADDR | :8080 | Dirección de escucha del proxy |
--metrics-listen ADDR | 127.0.0.1:9090 | Métricas (mantener privadas) |
--secret SECRET | se solicita o se genera | Secreto de firma del desafío |
--user USER | veilgate | Usuario del servicio con el que ejecutar VeilGate |
--no-service | — | Omitir el servicio systemd |
--no-rules | — | Omitir la instalación de reglas comunitarias |
| Modo | Úsalo cuando | Comportamiento |
|---|
observe | Despliegue inicial y ajuste | Puntúa y registra el tráfico; siempre reenvía al upstream |
challenge | Te sientes cómodo interrumpiendo a clientes sospechosos | El tráfico con puntuación media recibe una prueba de trabajo |
tarpit | Estás listo para engañar a agentes de alta confianza | El tráfico con puntuación alta recibe la aplicación falsa |
auto | Quieres que los umbrales dirijan la aplicación de medidas por solicitud | Reenvía lo que esté por debajo del umbral, desafía las puntuaciones medias y aplica tarpit a las puntuaciones altas |
| Sí — clona mediante git |
binario veilgate (arranque) | No — lee rules_dir, nunca descarga |
veilgate update-rules | Solo cuando lo invocas explícitamente |