
Monitor ligero de ataques web. Un solo binario de Go + SQLite. No es OSSEC, no es un WAF.
Un monitor de ataques web. Se coloca junto a nginx / Caddy / la aplicación, hace tail de los registros de acceso y te avisa cuando un sitio está siendo sondeado o explotado. Si este proceso muere, el sitio sigue sirviendo.
No es Wazuh, ni OSSEC, ni un WAF.
El comando es gpewebdefender. Los hosts, tokens, pines del mapa, GeoIP y rutas de registro son flags o archivos de entorno — no hay nada compilado sobre una empresa o servidor concretos.
Si nunca lo has ejecutado: lee este archivo de principio a fin una vez y luego haz el Método A o el Método B. No te saltes “Elige una forma”.
Vista completa: dochub/index.html o /docs/ en un manager en ejecución. Empieza en 03 · Instalación y ejecución.
Panel en vivo desde un equipo de operador real. Tus nombres y pines serán los que configures.
Un disparo se lanza solo cuando ocurre una alerta — del país del atacante al host alcanzado — y luego desaparece. Los hosts permanecen en el mapa. El feed son los mismos eventos, numerados.

Haz clic en una fila. Placa del país, marca del tipo de ataque y el servidor alcanzado, además de los campos habituales (regla, MITRE, evidencia). Sin marcas permanentes.

Informes → Insight. Las mismas alertas, desglosadas. 1h / 24h / 7d es un reloj real. Haz clic en una barra o en una tarjeta de host para ir a Search. CSV / JSON / Copy exportan esa ventana (cookie de sesión, sin token de ingesta en el archivo).





FTS5 en el manager. Palabra clave, IP, host, tipo. Más recientes primero (haz clic en When para invertir). Sin Elasticsearch.


| Tienes | Instalación |
|---|---|
| Un portátil y curiosidad | gpewebdefender demo — ataques falsos, no tu sitio |
| Una caja Linux que ya escribe un registro de acceso | All-in-one — el manager hace tail de ese registro. Sin agente. |
| Una caja adicional pequeña + uno o más servidores web |
No abras el puerto 8787 a internet. La escucha por defecto es 127.0.0.1:8787. Usa un túnel SSH hasta que pongas HTTPS + un inicio de sesión delante.
go build -o gpewebdefender.exe .\cmd\gpewebdefender
gpewebdefender.exe demo
Linux:
go build -o gpewebdefender ./cmd/gpewebdefender
./gpewebdefender demo
Abre http://127.0.0.1:8787
Esas capturas del mapa son inventadas. Consulta DocHub 04 antes de tomar un panel como realidad.
Desde este repositorio, como root. Compila primero un binario de Linux si estás en Windows:
$env:GOOS="linux"; $env:GOARCH="amd64"; $env:CGO_ENABLED="0"
go build -o gpewebdefender-linux-amd64 .\cmd\gpewebdefender
All-in-one (esta caja tiene el registro de acceso):
chmod +x deploy/install-manager.sh deploy/install-agent.sh
sudo ./deploy/install-manager.sh --all-in-one \
--tail /var/log/nginx/access.log \
--journal \
--home 40.7,-74.0
Split (primero el monitor, luego cada caja web):
# on the monitor
sudo ./deploy/install-manager.sh --home 40.7,-74.0
# on a web / SSH box
scp root@MONITOR:/usr/local/bin/gpewebdefender /usr/local/bin/gpewebdefender
scp root@MONITOR:/etc/gpewebdefender/env /etc/gpewebdefender/env
sudo ./deploy/install-agent.sh \
--url http://MONITOR:8787 \
--name web-1 \
--tail /var/log/nginx/access.log \
--journal
Reemplaza MONITOR, web-1 y la ruta del registro con tus valores.
Luego, desde tu portátil:
ssh -L 8787:127.0.0.1:8787 user@THEBOX
Abre http://127.0.0.1:8787/login y crea el primer admin (una persona). Ese no es el token de ingesta.
/usr/local/bin/gpewebdefender y haz chmod +x.useradd --system --home /var/lib/gpewebdefender --shell /usr/sbin/nologin gpewebdefenderrules/ y dochub/ dentro de /var/lib/gpewebdefender/.deploy/env.example a /etc/gpewebdefender/env. Pon un GWD_TOKEN largo y aleatorio. Modo 640.deploy/gpewebdefender.service.example a systemd. Edita home / tail si es necesario.systemctl daemon-reload && systemctl enable --now gpewebdefenderLos ejemplos están en deploy/.
/login → primer admin. O define SIEM_ADMIN_USER + SIEM_ADMIN_PASSWORD una vez y luego borra la línea de la contraseña.US o 40.7,-74.0), una fila por agente --name..mmdb de MaxMind / DB-IP y pasa --geoip.deploy/nginx-gwd.conf.example. Deniega /api/ingest en el vhost público. DocHub 15 y 18./api/ingest. Nunca envíes contraseñas. DocHub .Si la interfaz está vacía: no estás en demo y ningún --tail / agente ha enviado una línea todavía. journalctl -u gpewebdefender -n 50.
Cualquier cosa que aparezca en un registro de acceso:
.env, .git, phpMyAdmin, wp-login, actuators)--journal o auth.logkind=applogin / tenantlogin / secprobeNo puede ver los cuerpos de las peticiones POST a menos que los registres (normalmente no deberías).
Formato combined de nginx / Apache, o JSON de nginx / Caddy / Traefik. Vale la pena cambiarse a JSON. Consulta DocHub 05.
YAML integrado en rules/. Archivos extra: --rules path/to/more.yaml. Honeypot de CMS opcional: --rules packs (carga packs/cms.yaml). No es un escáner de plugins.
Un único binario estático de Go + SQLite. Una caja dedicada de 2 CPU / 2 GB es más que suficiente. Sin JVM, sin OpenSearch, sin Elasticsearch.
Este árbol es el producto público. No tiene inventario, tokens ni hostnames.
go test ./...
set GOOS=linux
set GOARCH=amd64
set CGO_ENABLED=0
go build -o gpewebdefender-linux-amd64 .\cmd\gpewebdefender
Mantén la configuración de la flota en producción fuera de este repositorio.
| Split — el manager en la caja adicional, un agente por host web (o SSH) |
deploy/gpewebdefender-agent.service.example--name--tail--journal