一个 Web 攻击监控器。它部署在 nginx / Caddy / 应用旁边,实时跟踪访问日志,并在站点被探测或利用时通知你。如果该进程崩溃,站点仍可继续提供服务。
它不是 Wazuh,不是 OSSEC,也不是 WAF。
命令是 gpewebdefender。主机、令牌、地图图钉、GeoIP 和日志路径均由参数或环境文件指定 —— 不会编译任何特定公司或服务器的信息。
如果你从未运行过此工具: 请从头到尾通读本文件一次,然后选择方法 A 或方法 B。不要跳过“选择部署形态”。
完整文档:dochub/index.html 或运行中管理器的 /docs/。从 03 · 安装与运行 开始。
来自真实运行机器的实时仪表盘。你的名称和图钉将按你的配置显示。
仅当发生告警时才会发射一条光束 —— 从攻击者所在国家射向被攻击主机 —— 然后消失。主机始终保留在地图上。信息流是相同事件的编号列表。

点击一行。显示国家徽章、攻击类型标记以及被攻击的服务器,还有常见字段(规则、MITRE、证据)。不会留下常驻轨迹。

报告 → 洞察。相同告警的分类统计。1小时 / 24小时 / 7天是真实时钟。点击柱状条或主机卡片进入搜索。CSV / JSON / 复制 可导出该时间窗口(使用会话 Cookie,文件中不包含摄取令牌)。





在管理器上使用 FTS5。支持关键字、IP、主机、类型搜索。默认按最新排列(点击 时间 可翻转)。无需 Elasticsearch。


| 你的情况 | 安装方式 |
|---|---|
| 一台笔记本电脑和好奇心 | gpewebdefender demo —— 模拟攻击,不涉及你的站点 |
| 一台已经在写访问日志的 Linux 机器 | 一体机(All-in-one) —— 管理器跟踪该日志,无需代理。 |
| 一台小型额外机器 + 一台或多台 Web 服务器 | 分离部署(Split) —— 管理器在额外机器上,每台 Web(或 SSH)主机部署一个代理 |
不要将 8787 端口暴露到互联网。默认监听地址为 127.0.0.1:8787。在配置 HTTPS + 登录前置之前,请使用 SSH 隧道。
go build -o gpewebdefender.exe .\cmd\gpewebdefender
gpewebdefender.exe demo
Linux:
go build -o gpewebdefender ./cmd/gpewebdefender
./gpewebdefender demo
打开 http://127.0.0.1:8787
那些地图截图是虚构的。在把仪表盘当作真实情况之前,请先参阅 DocHub 04。
在本仓库中以 root 身份执行。如果你在 Windows 上,请先构建 Linux 二进制文件:
$env:GOOS="linux"; $env:GOARCH="amd64"; $env:CGO_ENABLED="0"
go build -o gpewebdefender-linux-amd64 .\cmd\gpewebdefender
一体机部署(本机拥有访问日志):
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
分离部署(先监控机,再每台 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
将 MONITOR、web-1 和日志路径替换为你自己的值。
然后从你的笔记本电脑:
ssh -L 8787:127.0.0.1:8787 user@THEBOX
打开 http://127.0.0.1:8787/login 并创建第一个 admin(真实人员)。这不是摄取令牌。
/usr/local/bin/gpewebdefender 并执行 chmod +x。useradd --system --home /var/lib/gpewebdefender --shell /usr/sbin/nologin gpewebdefenderrules/ 和 dochub/ 复制到 /var/lib/gpewebdefender/。deploy/env.example 复制为 /etc/gpewebdefender/env。设置一长串随机 GWD_TOKEN。权限设为 640。deploy/gpewebdefender.service.example 复制到 systemd。如有需要,编辑 home / tail。systemctl daemon-reload && systemctl enable --now gpewebdefender--name 以及 / 的 。示例位于 deploy/。
/login → 创建第一个 admin。或者一次性设置 SIEM_ADMIN_USER + SIEM_ADMIN_PASSWORD,然后删除密码行。US 或 40.7,-74.0),每个代理 --name 对应一行。.mmdb 文件并传递 --geoip。deploy/nginx-gwd.conf.example。在公共 vhost 上拒绝 /api/ingest。参见 DocHub 15 和 18。/api/ingest POST 提交 JSON。切勿发送密码。参见 DocHub 19。如果 UI 为空:你未处于 demo 模式,且当前还没有 --tail 或代理发送过任何日志行。执行 journalctl -u gpewebdefender -n 50 查看。
任何出现在访问日志中的内容:
.env、.git、phpMyAdmin、wp-login、actuator 端点)--journal 或 auth.log 监控 sshd / sudokind=applogin / tenantlogin / secprobe 事件除非你记录 POST 请求体(通常你不应该这样做),否则它无法看到 POST 请求体。
nginx / Apache combined 格式,或 nginx / Caddy / Traefik JSON 格式。建议改用 JSON。参见 DocHub 05。
内置 YAML 位于 rules/。额外规则文件:--rules path/to/more.yaml。可选的 CMS 蜜罐:--rules packs(加载 packs/cms.yaml)。这不是插件扫描器。
一个静态 Go 二进制文件 + SQLite。一台专用的 2 CPU / 2 GB 机器绰绰有余。无需 JVM、无需 OpenSearch、无需 Elasticsearch。
本目录树是公开产品。其中不含资产清单、令牌或主机名。
go test ./...
set GOOS=linux
set GOARCH=amd64
set CGO_ENABLED=0
go build -o gpewebdefender-linux-amd64 .\cmd\gpewebdefender
请勿将生产环境的部署配置放入本仓库。
--tail--journaldeploy/gpewebdefender-agent.service.example