登录进来。证据出去。
面向 IT、AI 和 OT 的开源安全流水线:从原始日志到经过验证的事件,再到 NIS2 通知草稿。
项目页面与在线演示 · 快速开始 · 控制台 · 架构 · 状态(SSOT)
徽章反映的是
main分支上最近一次真实运行的结果,而非承诺。Scorecard 剩余的发现项是已接受、已记录的权衡取舍,而非缺口;参见 SSOT.md §1。
FENGARDE 将 IT、AI 和 OT 的安全遥测连接起来,以展示发生了什么、 谁或什么采取了行动、受到了什么影响、事件之间如何关联,以及 有哪些证据支持这一结论。
为欧洲工业中型企业打造:开源、自托管、 Apache-2.0 许可,具备 NIS2 事件通知草稿路径、确定性的 德语/英语报告生成器、面向 MSP 式部署的可选 RBAC/MFA/审计日志/多租户, 一个可选的 HA 配置(经过实机杀进程测试,而不只是接线),以及永不离开 你的网络的 AI 分诊。
日志被收集、归一化为单一模式(OCSF), 在滑动窗口上经过关联规则处理,分组为带有 因果图和哈希链证据包的事件,并索引到 OpenSearch 中。 每个服务都是独立的,仅通过消息总线与其他服务通信, 因此任何部分都可以扩展或替换,而无需重写其他部分。
OLLAMA_URL 时使用本地 Ollama;否则使用
带标签的确定性桩。告警数据绝不会通过第三方 LLM
API 传输,控制台会标明实际运行的是哪个引擎。在实测的两个模型中判定质量较差(qwen2.5:3b 在 54 条带标签告警中正确 1 条,qwen2.5:7b 在 54 条中正确 7 条,且多为 suspicious 答案);参见
eval/llm_triage/RESULTS.md。是 OpenSearch,不是 Elastic: 存储引擎没有许可证星号 (ADR 003)。值得了解,但 并不是相对于 Wazuh 的差异化优势(它的索引器同样是 OpenSearch 的分支)。
| 方式 | 需要 | 你将获得 |
|---|---|---|
| 项目页面 | 一个浏览器 | 在实验室运行的录像上呈现的真实控制台,包含可重放的攻击、架构、全部 46 条规则以及四段录制的演示。静态页面;写入操作保留在你的浏览器中(docs/console-demo.md 明确说明了哪些是真实的)。 |
make e2e | Python 3 | 从 SSH 暴力破解到真实告警,在重放时保持幂等。无需 Docker、Redis 或 OpenSearch。 |
make demo | Docker | 完整的实时技术栈;大约一分钟内,控制台中就会出现真实的暴力破解告警。 |
git clone https://github.com/supermhel/fengarde.git && cd fengarde
make preflight # doctor: checks vm.max_map_count, Docker RAM, free ports
make demo # docker compose up -- a real SSH brute-force alert appears
# in the dashboard within ~30-60s, no manual step
# open http://localhost:8080
没有 Docker 可用?整个检测流水线可以零基础设施运行:
make e2e # SSH brute-force -> real alert -> idempotent replay, no Docker/Redis/OpenSearch
bash tools/demo.sh # same test, narrated (Windows: powershell -File tools\demo.ps1)
你将看到的内容: 60 秒内来自同一 IP 的 10 次登录失败(SSH 的 Failed password 或 Windows 的 EventID 4625——两者都会归一化为相同的 OCSF Authentication 事件)会触发 common_bruteforce.yml(threshold: 10、window_seconds: 60,按源 IP 分组),告警会出现在仪表盘的告警列表中,并且在重复投递下保持幂等。
前置条件: Docker Desktop 或 Docker Engine + Compose v2,为 Docker 分配至少 4 GB 内存;Linux、macOS,或通过 WSL2 运行的 Windows(Linux 容器、POSIX sh 脚本)。仅当你需要贡献解析器时才需要 Python 3——这不需要 Docker(参见贡献)。
vm.max_map_countsudo sysctl -w vm.max_map_count=262144
# persist across reboots:
echo 'vm.max_map_count=262144' | sudo tee /etc/sysctl.d/99-fengarde.conf
没有它,OpenSearch 会因 JVM 崩溃而失败,而不是给出有用的错误信息。在 macOS Docker Desktop 上不需要(已在其 VM 内部处理)。make preflight 会为你检查这一点,并在缺少任何内容时打印确切的修复方法。
其他目标:
make test # full zero-infra contract test suite, no Docker needed
make up # start the stack detached
make down # stop the stack, remove volumes
make ha-up # opt-in: Redis Sentinel + 3-node OpenSearch HA (needs REDIS_PASSWORD)
make ha-down # stop the HA profile, remove its volumes
| 端口 | 服务 | 用途 |
|---|---|---|
| 6379 | redis (siem-bus) | 服务之间的消息总线 |
| 9200 | opensearch (siem-store) | 事件/告警存储 + 查询 API |
| 5601 | dashboards (siem-dashboards) | OpenSearch Dashboards |
| 8000 | ws6-inventory | 资产清单 API(IP/MAC 历史) |
| 8080 | ws7-dashboard | FENGARDE 告警控制台 |
| 5514/udp | ws1-collectors | 实时 syslog 接入(未认证——仅限受信网段) |
| 8013 | ws3-indexer | 分诊 API——仅限内部,不发布到主机 |
| 9090 | prometheus | 指标——可选启用,observability compose 配置 |
| 3000 | grafana | 基于 Prometheus 的仪表盘——可选启用,同一配置;默认 admin/admin,见 SECURITY.md §1 |
| 8081 | goatcounter | 用于自托管项目页面副本的自托管访问计数器——可选启用,同一配置;无 Cookie,数据不会离开你的网络(通过 docker exec 一次性设置,见 docs/deployment.md) |
make preflight 会在启动前检查已发布的端口是否空闲。
执行 make up 后,控制台位于 http://localhost:8080(React 18 和 Vite;此前位于 /legacy/ 的单文件 UI 已于 2026-10-20 停用)。共十一个视图(侧边栏十个加账户),分为三组:
| 分组 | 视图 |
|---|---|
| 检测 | 概览、告警(分诊、AI 判定、“为何触发”、NIS2 草稿)、事件(因果图、证据包、事件报告) |
| 调查 | 事件(查询栏、分面、直方图、原始/OCSF)、覆盖(MITRE 热力图、所有规则、管理员可按租户切换) |
| 运营 | 来源(连接设备,等待其首个事件)、资产清单(实时资产记录,管理员可添加设备)、运营(服务健康、死信、Prometheus 面板)、审计、设置(用户和通知渠道,仅管理员) |
| 账户 | MFA 注册 |
支持德语和英语、浅色和深色、手机宽度。登录接受 MFA 验证码,并显示所连接的主机、登录服务是否响应,并在使用明文 HTTP 时发出警告。每个角色可执行的操作列在登录页面上。
![]() | ![]() |
![]() | ![]() |
录制的演示(docs/video/):从攻击到证据、从登录到设置、分析师使用德语 NIS2 草稿进行分诊、连接设备。以上所有内容均由 tools/console_e2e 在实时栈上以管理员、分析师和只读身份驱动,覆盖两种语言、深色模式和手机宽度。