fran-olivares/usulnet

GitHub: fran-olivares/usulnet

一个基于单一 Go 二进制文件的自托管 Docker 基础设施管理平台,将容器编排、网络代理、安全、监控和备份等运维能力整合在一个 Web 界面中,旨在替代多种分散的运维工具。

Stars: 119 | Forks: 6

# usulnet 自带隐私工具的自托管 Docker 管理平面。单一 Go 二进制文件,AGPL-3.0,一次构建——本仓库中的所有功能都在 标准二进制文件中提供,没有版本限制,没有回传电话。 [![Go](https://img.shields.io/badge/go-1.25%2B-00ADD8?logo=go&logoColor=white)](go.mod) [![License](https://img.shields.io/badge/license-AGPL--3.0-blue)](LICENSE) [![Release](https://img.shields.io/github/v/release/fr4nsys/usulnet?include_prereleases&color=success)](https://github.com/fr4nsys/usulnet/releases) usulnet 在你自有的硬件上通过单一进程管理容器生命周期、安全扫描、备份、 反向代理配置、监控、多节点编排、主机 基础架构工具(防火墙、crontab、WireGuard mesh、docker-engine config、镜像构建器)以及一个可选的隐私模块(OSINT 侦察和 文件元数据清理)。 v26.5.2 Beta — 发布于 2026-05-19。Bug 报告: [issues](https://github.com/fr4nsys/usulnet/issues)。发布说明: [`CHANGELOG.md`](CHANGELOG.md) 和 [`docs/v26.5.2/release-notes.md`](docs/v26.5.2/release-notes.md) (v26.5.1 归档: [`docs/v26.5/release-notes-v26.5.1.md`](docs/v26.5/release-notes-v26.5.1.md))。 ![Dashboard](https://raw.githubusercontent.com/fran-olivares/usulnet/main/docs/screenshots/dashboard-hero.png) ## 快速开始 ``` curl -fsSL https://raw.githubusercontent.com/fr4nsys/usulnet/main/deploy/install.sh | sudo bash ``` 安装程序会拉取生产环境的 compose 文件,生成数据库 密码、JWT 密钥、AES-256 数据加密密钥以及自签名的 TLS 证书。准备就绪后,它会打印访问 URL。 ![Installer terminal output](https://raw.githubusercontent.com/fran-olivares/usulnet/main/docs/screenshots/install-terminal.png) 打开 `https://:7443`,以 `admin` / `usulnet` 登录,然后 在个人资料页面更改密码。 ![Login page](https://static.pigsec.cn/wp-content/uploads/repos/cas/d8/d854ad1de90d04bbed2a3850b17d6e2c27cd652ee4b6bd146c9ac3fd15da375c.png) 手动 Docker Compose 安装、独立二进制文件安装和离线 步骤请参阅 [`docs/installation.md`](docs/installation.md)。 ## v26.5.2 的新特性 在 v26.5.1 基础上的优化版本。**无需数据库迁移。** 将 Shodan 侦察连接器添加到 AGPL 二进制文件中(继 HIBP 之后的第二个自带密钥外部 连接器),将 `usulnet-agent` 移植到 Cobra,包含 `run` / `version` / `validate-config` 子命令和规范的 `USULNET_AGENT_DOCKER_HOST` 环境变量,推出了全局 CLI `--quiet` / `--json` 标志以及 JSON 错误封装,添加了 `migrate up` / `down [N]` / `status` 子命令,在整个 Web 界面中引入了 header / sidebar / modal / flash a11y 地标,将 shell tab 自动补全内置到两个生产环境的 Docker 镜像中,并发布了新的操作员 CLI 参考文档 [`docs/cli.md`](docs/cli.md)。各功能的详细信息见 [`docs/v26.5.2/release-notes.md`](docs/v26.5.2/release-notes.md); 每个 PR 的完整更新日志见 [`CHANGELOG.md`](CHANGELOG.md) 中的 `[v26.5.2]` 部分。 ## v26.5.1 的内容 之前受 Business 版本限制的十一个模块现在包含在 标准的 AGPL 构建中,此外还有 proxy-extended 增强和 可选的本地服务 TLS 调度器。各功能的详细信息见 [`docs/v26.5/release-notes-v26.5.1.md`](docs/v26.5/release-notes-v26.5.1.md); 每次迁移的完整审计见 [`CHANGELOG.md`](CHANGELOG.md) 中的 `[v26.5.1]` 部分。 ![Sidebar — v26.5.1 modules](https://raw.githubusercontent.com/fran-olivares/usulnet/main/docs/screenshots/sidebar-v26.5.1.png) | 模块 | 功能说明 | | --- | --- | | **Calendar** | 运维日历,支持手动事件以及对备份运行和计划任务的只读聚合;支持 RFC 5545 `.ics` 导出。 | | **Proxy extended** | 访问列表、死主机、位置、重定向、流。权威状态存储在 PostgreSQL 中;后端功能矩阵通过 `GET /api/v1/proxy/support` 呈现。 | | **DNS** | 支持 Cloudflare、AWS Route 53、DigitalOcean、RFC 2136 的提供商插件。支持在重启后依然有效的 ACME DNS-01 状态机。静态凭证使用 AES-256-GCM 加密。 | | **Crontab** | 通过 `robfig/cron/v3` 调度的托管型 shell / docker / http cron 任务。支持 WebSocket 实时追踪、分页执行记录以及主体大小限制。 | | **Firewall** | 通过现有的主机管理 SSH 通道进行 UFW / nftables / iptables 规则管理。 | | **SSL observatory** | 进程内 TLS 扫描、证书健康评分、基于目标的告警阈值、SNI 虚拟主机扫描、每日扫描。 | | **Backup verification** | 在沙盒化的 recon-launcher 容器中进行计划 + 按需恢复测试。通过 backup-service `Verify` pipeline 进行真实的校验和及解压。 | | **Image builder** | 本地 Dockerfile pipeline,支持实时日志流(Redis pub/sub + WebSocket/SSE),256 MiB 上下文限制,七个兼容 AGPL 的入门模板,可选 cosign 钩子。 | | **Automated rollback** | 通过事件驱动的 `changes.Service.Subscribe` 检测失败的部署,并恢复到上一个已知的良好 stack 版本。支持每个 stack 的互斥锁、冷却时间、dry-run 预览、仅追加的 Postgres 触发审计日志。 | | **WireGuard** | Peer + 接口管理器,通过 NATS 扩展为主→代理 mesh。真实的 Curve25519 密钥,静态数据使用 AES-256-GCM 加密,5 分钟 TTL 的一次性 QR,每个代理的 mesh 状态页面。 | | **Marketplace** | 通过 `go:embed` 内置于二进制文件中的精选应用目录。运行时不产生任何出站 HTTP。仅限本地评价。通过 stack 服务进行安装。 | 同样在 v26.5.1 中:**docker-engine 配置**编辑器(支持原子 `daemon.json` 写入及快照历史和重载回滚 — 无需迁移),**侧边栏版本清理**(所有 `isEditionAvailable` / `RequireFeature` / `limitProvider` 调用点 已移除;`license.CELimits()` 合并到了 `license.OpenLimits()`), **bootstrap 重构**(将 2,700 行的 `startStandalone` 拆分 为分阶段的 `init_*.go` 文件),以及通过 `USULNET_TLS_LOCAL_SERVICES=true` 实现的**可选本地服务 TLS**,用于集群内的 Postgres / Redis / NATS。 ## 功能 ### Docker 控制平面 | 领域 | 能力 | | --- | --- | | Containers | 完整生命周期(创建 / 启动 / 停止 / 重启 / 暂停 / 终止 / 移除)、批量操作、实时统计、exec 终端、日志查看器、文件系统浏览器。 | | Images | 拉取、检查、清理、层历史;Docker Hub 和带有加密凭证的私有镜像库。 | | Image builder | 本地 Dockerfile 构建流水线,带有实时日志流(Redis pub/sub + WebSocket/SSE),有上限的上下文上传(默认 256 MiB),兼容 AGPL 的入门模板,可选 cosign 签名钩子。 | | Volumes and networks | 创建、检查、清理、文件浏览器;bridge / overlay / macvlan;连接和断开容器。 | | Stacks | 从 YAML、Git 仓库或内置目录进行 Docker Compose 部署。 | | Marketplace | 离线的精选应用目录,通过 `go:embed` 内置于二进制文件中;仅限本地评论;安装操作通过模板化的 docker-compose 驱动现有的 stack。 | | Swarm | 集群初始化、节点管理、服务、副本扩容、独立到 swarm 的转换。 | | Multi-node | `standalone`、`master` 和 `agent` 模式;通过 NATS 进行带有 mTLS 的代理 ↔ master 流量;通过 SSH 从 UI 部署代理。 | | Reverse proxy | Caddy 和 Nginx Proxy Manager 适配器;带有自动续期的 Let's Encrypt;TCP/UDP 流代理。扩展状态(访问列表、死主机、位置、重定向、流)在 PostgreSQL 中作为权威状态,具有明确的后端支持矩阵。 | | DNS automation | 支持 Cloudflare、AWS Route 53、DigitalOcean 和 RFC 2136 域名服务器的提供商插件;能在重启后存活的 ACME DNS-01 状态机;静态凭证使用 AES-256-GCM 加密。 | | Backups | 容器 / 卷 / stack 目标;带有保留策略的 cron 计划;gzip 或 zstd;支持本地、S3、MinIO、Azure Blob、GCS、B2、SFTP。 | | Backup verification | 在沙盒容器(只读 rootfs、丢弃 capabilities、no-new-privileges、默认 seccomp)中进行计划 + 按需恢复测试;通过 backup-service `Verify` pipeline 进行真实校验和和解压。 | | Automated rollback | 通过事件驱动的 `changes` 订阅检测失败的部署,并回滚到上一个已知良好的 stack 版本;每个 stack 的互斥锁可防止手动部署发生冲突;冷却窗口;dry-run 预览;通过 Postgres 触发器实现仅追加的审计日志。 | | SSL observatory | 进程内 TLS 扫描、证书健康评分、基于目标的告警阈值、SNI 虚拟主机扫描、每日计划扫描、通过通知服务路由的过期警报。 | | Monitoring | 每个容器和主机的 CPU / RAM / 网络 / 磁盘;具有 `OK → Pending → Firing → Resolved` 状态机的阈值警报;11 个通知渠道(Email、Slack、Discord、Telegram、Gotify、ntfy、PagerDuty、Opsgenie、Microsoft Teams、通用 webhook、自定义)。 | | Logs and events | 带有搜索功能的聚合容器日志;带有过滤功能的 Docker 事件流;每个网络接口的 packet capture。 | | Vulnerabilities | 针对镜像和文件系统的 Trivy CVE 扫描;每个容器和整个基础架构的 0–100 安全评分;CycloneDX 和 SPDX 格式的 SBOM;Docker CIS Benchmark 检查。 | | Calendar | 带有手动事件和对备份运行 + 计划任务进行只读聚合的运维日历;支持 RFC 5545 `.ics` 导出。 | ![Marketplace browse](https://static.pigsec.cn/wp-content/uploads/repos/cas/d6/d6a753f14569c09df6392642868d3092df47284b7a0208f0a615772ec7b7d33c.png) ### 主机和基础架构工具 | 领域 | 能力 | | --- | --- | | Firewall | 通过现有的 SSH 主机通道进行 UFW / nftables / iptables 规则管理。Web UI + REST API;闭枚举验证;每次应用的审计日志。 | | Crontab | 使用 `robfig/cron/v3` 解析的托管 cron 任务(shell、docker、http 类型);分页执行;WebSocket 实时追踪;HTTP 主体限制为 64 KiB。 | | Docker engine config | `/etc/docker/daemon.json` 编辑器,支持原子写入(temp + `fsync` + `rename`)、带有轮转的快照历史,以及在严格的 60 秒超时下的重载与回滚。Monaco diff 编辑器 + 历史记录页面。 | | WireGuard | 扩展为通过 NATS 网关的 master→agent mesh 的 Peer + 接口管理器。真实的 Curve25519 密钥,静态的私有/预共享密钥使用 AES-256-GCM 加密,带有 5 分钟 TTL 的一次性 QR 端点,每个 agent 的 mesh 状态页面。 | ![Firewall rules](https://static.pigsec.cn/wp-content/uploads/repos/cas/82/82f7ae706c9e7f0c8d53b2090da3d3b2ea286919f2a388b250eaf7fcdf960fb4.png) ![WireGuard peers](https://static.pigsec.cn/wp-content/uploads/repos/cas/7f/7f83073cc0475e7ac9070682f4f5fa082ecac4c300924649829eff6036f43aa5.png) ### 能力要求 上表中的模块通过现有的 主机管理传输或 bind mount 连接到主机。能力要求: | 模块 | 需求 | | --- | --- | | firewall | agent 进程具有 `NET_ADMIN` capability;主机上可用 `ufw` / `nft` / `iptables`。 | | WireGuard | 每个 agent 主机上有 WireGuard kernel module + `wg` / `wg-quick`;agent 进程具有 `NET_ADMIN` capability;master 上设置了 `USULNET_ENCRYPTION_KEY`。 | | docker-engine config | 主机的 `/etc/docker` 以 `:rw` 方式 bind mount 到 usulnet 容器中。 | | image builder | 挂载 Docker socket(平台已要求)。 | | backup verification | 挂载 Docker socket(已要求)。 | | DNS providers | 到每个提供商 API 端点的出站访问权限;已设置 `USULNET_ENCRYPTION_KEY`。 | 所有其他 v26.5.1 模块(crontab、-observatory、calendar、 marketplace、rollback、proxy-extended)除了默认的 compose stack 外不需要任何其他内容。完整详情见 [`docs/installation.md`](docs/installation.md#capability-requirements-v2651-modules)。 ### 隐私和侦察(可选) 默认关闭 — 每个 recon 路由都会返回 404,直到管理员设置 `USULNET_RECON_ENABLED=true` 并记录法律声明确认 (`POST /api/v1/recon/_ack`)。完整的设计和威胁模型见 [`docs/recon.md`](docs/recon.md);签名审核见 [`docs/v26.5/security-review-checklist.md`](docs/v26.5/security-review-checklist.md)。 ![Recon dashboard](https://static.pigsec.cn/wp-content/uploads/repos/cas/1a/1a0f91e1e5b3d0585bdaff6a8f8ded1234ca2eb938ecd96fd2ca8e818b4ab97b.png) | 领域 | 能力 | | --- | --- | | OSINT recon | 由 SpiderFoot 驱动,针对电子邮件、域名、电话、IP、用户名进行被动扫描。在扫描开始前会验证所有权(DNS TXT、电子邮件链接、RDAP、管理员证明、自我声明)。 | | Scan profiles | 四个内置配置文件,加上对用户自定义配置的完整 CRUD。内置行不可变;模块目录是封闭的。 | | Reports | 每次扫描的 JSON、CSV 和分页 A4 PDF,位于 `/api/v1/recon/scans/{id}/report.{json,csv,pdf}`。PDF 由纯 Go 生成且字节确定。 | | Metadata hygiene | `mat2` 剥离以及 `exiftool` / `pdfid` / `oletools` 提取。每个任务都在一个新的容器中运行,带有只读的 rootfs,丢弃所有 Linux capabilities,seccomp 为默认值,并有 PID / 内存限制。 | | Sandbox network | 专用的 `usulnet-recon` Docker 网络,具有严格的出站允许列表(默认为 DNS、80、443)。 | | HIBP connector | 可选的 Have-I-Been-Pwned 集成。凭证以 AES-256-GCM 加密静态存储在 `recon_connectors` 中;密钥永远不会通过 API 或日志返回。 | | Retention | 每日清理超过租户 TTL(默认 90 天)的发现、扫描和审计日志。对元数据工件进行两阶段删除。 | | Audit | 仅追加的 `recon_audit_log` 记录每个改变状态的操作,包含执行者、目标和请求哈希。 | ### 身份验证、RBAC、平台 | 领域 | 能力 | | --- | --- | | Authentication | 带有可配置过期时间的 JWT;用于编程访问的 `X-API-KEY`;带有备份代码的 TOTP 2FA;LDAP / Active Directory;OAuth2 / OIDC(GitHub、Google、Microsoft、自定义)。 | | Authorisation | 带有 44+ 个细粒度权限的 RBAC、自定义角色、基于团队的资源范围划分。 | | Secrets | 为所有敏感值提供静态 AES-256-GCM 加密;bcrypt 密码哈希;可配置的密码复杂性;账户锁定。 | | Transport | 带有自动生成的自签名证书(或自带)的 TLS;用于节点间消息传递的 mTLS;可配置的速率限制;CSRF;安全的默认 cookie。通过 `USULNET_TLS_LOCAL_SERVICES=true` 为集群内的 Postgres / Redis / NATS 启用可选的本地服务 TLS。 | | Audit | 将每个用户的操作日志持久化到 PostgreSQL,包含 IP、时间戳、详细信息;支持 CSV 导出。 | | Observability | Prometheus `/metrics`(管理员认证),包括 Go runtime 和进程指标;OpenTelemetry 监测。 | | API | 位于 `/api/v1` 下的 REST;位于 `/api/v1/openapi.json` 的 OpenAPI 3.0;位于 `/docs/api` 的 Swagger UI;用于日志、exec、统计、事件、指标、packet capture 和 nvim 的 WebSocket 流。 | ### 开发者工具 基于 Web 的终端中心,带有容器 exec 和主机 SSH。 带有 `lazy.nvim` 的 Monaco 编辑器和 Neovim,用于浏览器内文件编辑。 适用于容器、主机和 SFTP 的文件系统浏览器。代码片段和速查 表。在容器事件上触发带有重试机制的传出 webhook。由 Git push 触发的 自动部署规则。用于多步操作的 Runbooks。 用于备份、扫描、指标、更新检查、recon 保留和清理的 Cron 计划任务。 ## 架构 usulnet 以单一二进制文件形式提供,可在以下三种模式之一下运行: - `standalone` — 单个 Docker 主机,所有服务在本地。不需要 NATS。 - `master` — `standalone` 加上用于远程 agent 的 NATS 网关服务器。 - `agent` — 通过 NATS 连接到 master。无 Web UI;针对 其本地主机执行 Docker 操作。 PostgreSQL 跨 **56 个迁移**存储领域状态(users、RBAC、 connections、backups、scans、alerts、recon、audit log,加上 v26.5.1 移植的模块:calendar、proxy-extended、DNS、crontab、firewall、SSL observatory、backup verification、image builder、automated rollback、 WireGuard、marketplace)。Redis 支持会话存储和 JWT 黑名单。带有 JetStream 的 NATS 带有持久化地承载节点间流量。完整的组件图、请求流程和拓扑结构见 [`docs/architecture.md`](docs/architecture.md)。 ### 多节点设置 ``` # 在 control plane 主机上 export USULNET_MODE=master AGENT_TOKEN= docker compose up -d # 在每个您想要管理的远程主机上 docker run -d --name usulnet-agent --restart unless-stopped \ -v /var/run/docker.sock:/var/run/docker.sock \ usulnet/usulnet-agent:latest \ --gateway nats://:4222 \ --token ``` Master ↔ agent 流量在 `usulnet-backend` Docker 网络上通过带有 mTLS 的 NATS 流动。完整的 agent 协议、NATS subject 映射和 TLS 配置见 [`docs/agents.md`](docs/agents.md)。 ![Multi-node topology](https://static.pigsec.cn/wp-content/uploads/repos/cas/7d/7d51ff5074209605c4980f207a8d822627bd62f1ab9a3a4cf606971ca05125dd.png) ### 技术栈 | 层级 | 组件 | | --- | --- | | 语言 | Go 1.25.10 | | HTTP router | Chi v5 | | Templates | Templ(编译时 HTML) | | CSS | 通过独立 CLI 使用 Tailwind(无 Node.js) | | 浏览器 | Alpine.js, HTMX, xterm.js, Monaco | | 数据库 | 通过 pgx/v5 和 sqlx 使用 PostgreSQL 16 | | 缓存 / 会话 | Redis 7 | | 消息传递 | 带有 JetStream 的 NATS 2.10 | | 身份验证 | JWT, OAuth2 / OIDC, LDAP, TOTP | | 漏洞扫描器 | Trivy | | PDF | gofpdf (纯 Go) | | 调度 | robfig/cron v3 | | DNS(提供商插件) | net/http (Cloudflare, DigitalOcean), aws-sdk-go-v2/route53, miekg/dns (RFC 2136 + TSIG) | | WireGuard | golang.org/x/crypto/curve25519 + agent 端的 `wg` / `wg-quick` | ## 配置 `config.yaml` 加上以 `USULNET_` 为前缀的环境变量(嵌套 键由 `_` 连接)。Viper 加载器将环境覆盖视为 规范配置。 ``` USULNET_SERVER_PORT=9090 USULNET_DATABASE_URL=postgres://usulnet:secret@db/usulnet?sslmode=disable USULNET_SECURITY_JWT_SECRET=<64-hex> USULNET_ENCRYPTION_KEY=<64-hex> USULNET_RECON_ENABLED=true USULNET_MODE=standalone # 为集群内 Postgres / Redis / NATS 启用 TLS (v26.5.1) USULNET_TLS_LOCAL_SERVICES=true # Module knobs USULNET_IMAGE_BUILDER_MAX_CONTEXT_BYTES=268435456 # 256 MiB USULNET_SSL_OBSERVATORY_PER_TARGET_CONCURRENCY=4 ``` 完整的参考、默认值和生产 compose 模板见 [`docs/installation.md`](docs/installation.md)。 ## CLI ``` usulnet serve # run the server usulnet migrate up # apply pending migrations usulnet migrate status # show migration state usulnet migrate down [N] # roll back N migrations (default 1) usulnet config check # validate configuration usulnet config show # display config with secrets masked usulnet admin reset-password # reset the admin password usulnet recon … # opt-in recon subcommand tree usulnet meta … # opt-in metadata hygiene subcommand tree usulnet version # print build info ``` 全局标志会影响每个子命令:`--quiet` 会抑制 信息性摘要(错误和主要数据仍会打印); `--json` 是 `--output json` 的快捷方式,并且还会将 stderr 上的错误格式化程序切换为单记录封装 — `{"error":"","code":}`。普通错误带有固定的 `usulnet:` 前缀。退出代码(0 成功,64 用法错误,70 基础架构,71 服务器不可达,72 身份验证)在整个二进制文件中是稳定的。完整 参考:[`docs/cli.md`](docs/cli.md)。 Agent 二进制文件(`usulnet-agent`)作为一个 Cobra 树提供,包含 `run`、 `version` 和 `validate-config` 子命令。在重启 agent 之前验证配置: ``` usulnet-agent validate-config --config /etc/usulnet-agent/config.yaml ``` 完整的 agent 参考:[`docs/agents.md`](docs/agents.md)。 ![usulnet version output](https://static.pigsec.cn/wp-content/uploads/repos/cas/a6/a66ffee2ae1e74620d2f684cfc427fb8a4a47c87c56c95b335908c2fa73eff85.png) ## API 示例 `/api/v1` 下的 REST,使用 `X-API-KEY` 或 `Authorization: Bearer ` 进行身份验证。完整的 OpenAPI 位于 `/api/v1/openapi.json`, Swagger UI 位于 `/docs/api`。参考:[`docs/api.md`](docs/api.md)。 ``` # 列出正在运行的容器 curl -fsSL -H "X-API-KEY: $USULNET_API_KEY" \ https://usulnet.example.com:7443/api/v1/containers?status=running | jq # 浏览嵌入式 marketplace catalog curl -fsSL -H "X-API-KEY: $USULNET_API_KEY" \ https://usulnet.example.com:7443/api/v1/marketplace/apps | jq '.[].slug' # 针对每个已启用的目标触发 SSL observatory 扫描 curl -fsSL -X POST -H "X-API-KEY: $USULNET_API_KEY" \ https://usulnet.example.com:7443/api/v1/ssl/scan # 通过 agent transport 在主机上应用 firewall rule curl -fsSL -X POST -H "X-API-KEY: $USULNET_API_KEY" \ -H "Content-Type: application/json" \ -d '{"host_id":"","chain":"INPUT","action":"ACCEPT","protocol":"tcp","port":22,"comment":"ssh"}' \ https://usulnet.example.com:7443/api/v1/firewall/rules # 启动备份验证运行 curl -fsSL -X POST -H "X-API-KEY: $USULNET_API_KEY" \ https://usulnet.example.com:7443/api/v1/backup-verify/runs \ -d '{"backup_id":"","method":"extract"}' ``` 用于实时容器日志 / exec / 统计信息 / 镜像构建 输出 / crontab 执行追踪的 WebSocket 端点遵循相同的路径方案,并带有 `Upgrade: websocket` 标头。 ## 文档 | 主题 | 路径 | | --- | --- | | 安装与部署 | [`docs/installation.md`](docs/installation.md) | | 能力要求(v26.5.1 模块) | [`docs/installation.md#capability-requirements-v2651-modules`](docs/installation.md#capability-requirements-v2651-modules) | | 开发设置与工作流 | [`docs/development.md`](docs/development.md) | | CLI 参考(`usulnet` 二进制文件) | [`docs/cli.md`](docs/cli.md) | | REST 和 WebSocket API | [`docs/api.md`](docs/api.md) | | 架构 | [`docs/architecture.md`](docs/architecture.md) | | 侦察和元数据模块 | [`docs/recon.md`](docs/recon.md) | | 多节点 Agent | [`docs/agents.md`](docs/agents.md) | | 许可 | [`docs/licensing.md`](docs/licensing.md) | | 签名安全审查(recon,v26.5) | [`docs/v26.5/security-review-checklist.md`](docs/v26.5/security-review-checklist.md) | | 安全审查(v26.5.1 加固审计) | [`docs/v26.5/security-review-v26.5.1.md`](docs/v26.5/security-review-v26.5.1.md) | | 安全审查(v26.5.2 加固审计) | [`docs/v26.5/security-review-v26.5.2.md`](docs/v26.5/security-review-v26.5.2.md) | | 发行说明(v26.5.2) | [`docs/v26.5.2/release-notes.md`](docs/v26.5.2/release-notes.md) | | 发行说明(v26.5.1) | [`docs/v26.5/release-notes-v26.5.1.md`](docs/v26.5/release-notes-v26.5.1.md) | | 移植模块状态看板 | [`docs/v26.5/v26.5.1-ported-modules.md`](docs/v26.5/v26.5.1-ported-modules.md) | | 完整更新日志 | [`CHANGELOG.md`](CHANGELOG.md) | | 截图 | [`docs/screenshots/`](docs/screenshots/) | ## 开发 ``` git clone https://github.com/fr4nsys/usulnet.git cd usulnet make dev-up # postgres, redis, nats, minio make build # templ generate + tailwind compile + go build make run ``` `make quality` 运行完整的门控:`golangci-lint`、`go vet`、 `scripts/check-naming.sh` 以及覆盖率阈值检查(临时 15 %,目标 40 %)。`make publish-public` 在 `build/public/` 下为发布工作流生成精心策划的 公共镜像树。完整的开发者指南 — 工作流、钩子、性能分析、调试 — 见 [`docs/development.md`](docs/development.md)。 提交遵循 [Conventional Commits](https://www.conventionalcommits.org)。 ## 许可证 [AGPL-3.0-or-later](LICENSE)。自托管永久免费。 一个 AGPL 构建,包含所有功能 — 没有版本限制,没有闭源 扩展点,没有受付费许可等级限制的功能。可选的 商业支持合同记录在 [`docs/licensing.md`](docs/licensing.md) 中;它们不会解锁额外的 运行时功能。 ![License page — AGPL banner](https://static.pigsec.cn/wp-content/uploads/repos/cas/4e/4e2006f470b1d4ef6ee579fdada39c1e7cc1775d6e6606c0a39165262a89a21b.png) ## 安全 将漏洞报告发送至 。请勿针对 安全发现公开 issue。 安全态势: - **外部端口暴露面:** 默认仅发布 HTTPS (7443)。 HTTP (8080) 和 NATS (4222) 保持在 `usulnet-backend` Docker 网络内部。 - **无回传电话。** 在运行时不向任何 usulnet 控制的 端点发出出站请求。每个出站调用(镜像库、DNS 提供商、 OAuth 签发者、HIBP)均由操作员配置。 - **容器用户** `usulnet:1000`(非 root)。Recon 沙盒以 `nobody:nogroup` (65534) 身份运行,具有只读的 rootfs 并且所有 Linux capabilities 均被丢弃。 - **静态数据使用 AES-256-GCM 加密** 适用于所有敏感值(密码为 bcrypt;WireGuard 密钥、DNS 提供商凭证、HIBP 密钥、原始 recon payloads、JWT 签名密钥、OAuth 客户端密钥)。 - **CI govulncheck** 在每次推送和 PR 时运行。v26.5.1 依赖 基线涵盖 Go 1.25.10、pgx 5.9.2、NATS 1.52.0、go-redis 9.19.0、 go-chi 5.2.5、jwt 5.3.1、go-oidc 3.18.0、go-ldap 3.4.13、 docker 28.5.2;两个 Moby 误报(GO-2026-4883、 GO-2026-4887)在带有内联理由的允许列表中。 完整的加固审计: [`docs/v26.5/security-review-v26.5.2.md`](docs/v26.5/security-review-v26.5.2.md) (当前 — 涵盖 v26.5.2 差异:Shodan 连接器、agent Cobra 移植、 CLI tab 自动补全安装脚本、Web a11y 地标、JSON 错误 封装、带有 BREACH 缓解的路由范围前端 gzip、批量 警报事件解决、request-id `strconv` 交换)和 [`docs/v26.5/security-review-v26.5.1.md`](docs/v26.5/security-review-v26.5.1.md) (基线 — 移植到 AGPL 构建中的十一个 v26.2.7 模块)。
标签:Docker管理, EVTX分析, Go语言, VPN组网, 基础设施, 安全合规, 容器编排, 搜索引擎查询, 日志审计, 测试用例, 版权保护, 程序破解, 网络代理, 请求拦截, 运维平台