HarborGuard/HarborGuard
GitHub: HarborGuard/HarborGuard
一个容器安全扫描与可视化平台,通过多工具集成简化镜像漏洞管理与修复。
Stars: 605 | Forks: 22
# 功能
一个全面的容器安全扫描平台,提供直观的 Web 界面来管理和可视化 Docker 镜像的安全评估。
## 截图
## 安装
### Docker(推荐)
运行 Harbor Guard 的最小功能集:
```
docker run -p 3000:3000 ghcr.io/harborguard/harborguard:latest
```
授予 Harbor Guard 访问本地镜像的权限:
```
docker run -p 3000:3000 \
-v /var/run/docker.sock:/var/run/docker.sock \
ghcr.io/harborguard/harborguard:latest
```
自动修补镜像(文件系统权限需要特权访问):
```
docker run --privileged \
-p 3000:3000 \
-v /var/run/docker.sock:/var/run/docker.sock \
ghcr.io/harborguard/harborguard:latest
```
使用外部 PostgreSQL 数据库:
```
docker run -p 3000:3000 \
-e DATABASE_URL="postgresql://user:pass@host:5432/harborguard" \
-v /var/run/docker.sock:/var/run/docker.sock \
ghcr.io/harborguard/harborguard:latest
```
访问应用地址 `http://localhost:3000`
Harbor Guard 通过环境变量支持全面的配置。所有变量都有合理的默认值和适当的验证。
| 变量 | 描述 | 默认值 | 有效值 | 示例 |
|----------|-------------|---------|--------------|---------|
| **扫描器配置** |
| `MAX_CONCURRENT_SCANS` | 限制并发扫描执行以防止资源耗尽 | `3` | `1-20` | `MAX_CONCURRENT_SCANS=5` |
| `SCAN_TIMEOUT_MINUTES` | 单个扫描执行的最大允许时间 | `30` | `5-180` | `SCAN_TIMEOUT_MINUTES=60` |
| `ENABLED_SCANNERS` | 启用的扫描器列表(逗号分隔) | `trivy,grype,syft,dockle,osv,dive` | 任意组合:`trivy`、`grype`、`syft`、`dockle`、`osv`、`dive` | `ENABLED_SCANNERS=trivy,grype` |
| **日志与调试** |
| `LOG_LEVEL` | 控制应用程序日志详细程度 | `info` | `debug`、`info`、`warn`、`error` | `LOG_LEVEL=debug` |
| **数据库与维护** |
| `DATABASE_URL` | PostgreSQL 数据库连接字符串 | 内置 PostgreSQL | 外部 PostgreSQL:`postgresql://user:pass@host:port/db` | `DATABASE_URL="postgresql://user:pass@localhost:5432/harborguard"` |
| `CLEANUP_OLD_SCANS_DAYS` | 自动删除指定天数之前的扫描记录 | `30` | `1-365` | `CLEANUP_OLD_SCANS_DAYS=90` |
| **网络与部署** |
| `PORT` | 服务器监听端口 | `3000` | `1000-65535` | `PORT=8080` |
| `HOSTNAME` | 服务器绑定地址 | `0.0.0.0` | 有效 IP 地址 | `HOSTNAME=127.0.0.1` |
| **通知** |
| `TEAMS_WEBHOOK_URL` | Microsoft Teams 通知 Webhook URL | *无* | 有效的 HTTPS URL | `TEAMS_WEBHOOK_URL=https://outlook.office.com/webhook/...` |
| `SLACK_WEBHOOK_URL` | Slack 通知 Webhook URL | *无* | 有效的 HTTPS URL | `SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...` |
| `GOTIFY_SERVER_URL` | Gotify 自托管通知服务器 URL | *无* | 有效的 HTTP/HTTPS URL | `GOTIFY_SERVER_URL=https://gotify.example.com` |
| `GOTIFY_APP_TOKEN` | Gotify 身份验证应用令牌 | *无* | 有效的令牌字符串 | `GOTIFY_APP_TOKEN=AC5X0f7ISmwz-zJ` |
| `APPRISE_API_URL` | 多服务通知的 Apprise API URL | *无* | 有效的 HTTP/HTTPS URL | `APPRISE_API_URL=https://apprise.example.com` |
| `APPRISE_CONFIG_KEY` | Apprise 配置键(可选) | *无* | 配置键字符串 | `APPRISE_CONFIG_KEY=harborguard` |
| `APPRISE_URLS` | 直接 Apprise 通知 URL(逗号分隔) | *无* | 逗号分隔的服务 URL | `APPRISE_URLS=mailto://user:pass@gmail.com,discord://webhook/...` |
| `NOTIFY_ON_HIGH_SEVERITY` | 仅对高/严重发现发送通知 | `true` | `true`、`false` | `NOTIFY_ON_HIGH_SEVERITY=false` |
| **监控与健康检查** |
| `HEALTH_CHECK_ENABLED` | 启用 `/api/health` 和 `/api/ready` 端点 | `true` | `true`、`false` | `HEALTH_CHECK_ENABLED=false` |
| `VERSION_CHECK_ENABLED` | 启用自动版本检查以获取更新 | `true` | `true`、`false` | `VERSION_CHECK_ENABLED=false` |
### S3/对象存储(分布式部署)
这些变量配置 S3 兼容存储用于分布式传感器部署。每个变量也接受 AWS 或 HarborGuard 传感器的备用名称。
| 变量 | 描述 | 默认值 | 替代项 |
|----------|-------------|---------|-------------|
| `S3_ENDPOINT` | S3 兼容端点 URL(例如 MinIO) | *无* | `HG_S3_ENDPOINT` |
| `S3_BUCKET` | S3 存储桶名称 | *无* | `HG_S3_BUCKET` |
| `S3_ACCESS_KEY` | S3 访问密钥 | *无* | `AWS_ACCESS_KEY_ID`、`HG_S3_ACCESS_KEY` |
| `S3_SECRET_KEY` | S3 秘密密钥 | *无* | `AWS_SECRET_ACCESS_KEY`、`HG_S3_SECRET_KEY` |
| `S3_REGION` | S3 区域 | `us-east-1` | `AWS_REGION` |
### 高级环境变量
这些变量通常用于内部配置或高级部署:
| 变量 | 描述 | 默认值 | 示例 |
|----------|-------------|---------|---------|
| `SCANNER_WORKDIR` | 扫描器操作的working directory | `/workspace` | `SCANNER_WORKDIR=/tmp/scanners` |
| `PATCH_WORKDIR` | 修补操作的working directory | `/workspace/patches` | `PATCH_WORKDIR=/tmp/patches` |
| `ENABLE_RAW_OUTPUT` | 在 API 响应中启用原始扫描输出 | `false` | `ENABLE_RAW_OUTPUT=true` |
| `SENSOR_CLI_PATH` | 传感器 CLI 二进制文件路径 | `/app/sensor/harborguard-sensor` | `SENSOR_CLI_PATH=/usr/local/bin/sensor` |
| `PUPPETEER_EXECUTABLE_PATH` | PDF 报告生成所需的 Chromium 二进制路径 | *自动检测* | `PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser` |
| `NEXT_PUBLIC_DEMO_MODE` | 启用具有有限功能的演示模式 | `false` | `NEXT_PUBLIC_DEMO_MODE=true` |
| `NEXT_PUBLIC_APP_URL` | 公共应用程序 URL(用于演示模式和 OpenAPI 规范) | `http://localhost:3000` | `NEXT_PUBLIC_APP_URL=https://harborguard.example.com` |
| `NEXT_PUBLIC_API_URL` | 公共 API URL(用于 OpenAPI 规范) | *自动检测* | `NEXT_PUBLIC_API_URL=https://api.harborguard.example.com` |
| `NEXT_PUBLIC_APP_VERSION` | 覆盖应用程序版本显示 | *自动检测* | `NEXT_PUBLIC_APP_VERSION=1.0.0` |
| `NODE_ENV` | Node.js 环境模式 | `production` | `NODE_ENV=development` |
| `NEXT_RUNTIME` | Next.js 运行时环境 | *自动检测* | `NEXT_RUNTIME=nodejs` |
| `PGDATA` | PostgreSQL 数据目录(仅限内置 PostgreSQL) | `/var/lib/postgresql/data` | `PGDATA=/data/postgres` |
| `POSTGRES_USER` | PostgreSQL 用户名(仅限内置 PostgreSQL) | `harborguard` | `POSTGRES_USER=admin` |
| `POSTGRES_PASSWORD` | PostgreSQL 密码(仅限内置 PostgreSQL) | `harborguard` | `POSTGRES_PASSWORD=secure_password`
| `POSTGRES_DB` | PostgreSQL 数据库名称(仅限内置 PostgreSQL) | `harborguard` | `POSTGRES_DB=harborguard_prod` |
### 快速配置示例
**开发环境设置:**
```
# 最小开发配置
PORT=3000
LOG_LEVEL=debug
HEALTH_CHECK_ENABLED=true
```
**生产环境设置:**
```
# 使用 PostgreSQL 和通知的生产配置
DATABASE_URL="postgresql://user:password@db:5432/harborguard"
PORT=8080
LOG_LEVEL=warn
MAX_CONCURRENT_SCANS=10
SCAN_TIMEOUT_MINUTES=60
ENABLED_SCANNERS=trivy,grype,syft
# 选择您的通知服务:
# 选项 1:Microsoft Teams
TEAMS_WEBHOOK_URL=https://outlook.office.com/webhook/your-webhook-url
# 选项 2:Slack
# SLACK_WEBHOOK_URL=https://hooks.slack.com/services/your-webhook
# 选项 3:自托管 Gotify
# GOTIFY_SERVER_URL=https://gotify.example.com
# GOTIFY_APP_TOKEN=your-app-token
# 选项 4:Apprise(支持 80+ 通知服务)
# APPRISE_API_URL=https://apprise.example.com
# APPRISE_URLS=discord://webhook/...,mailto://user:pass@gmail.com
NOTIFY_ON_HIGH_SEVERITY=true
CLEANUP_OLD_SCANS_DAYS=60
HEALTH_CHECK_ENABLED=true
VERSION_CHECK_ENABLED=true
```
**资源受限环境:**
```
# 针对低资源环境优化
MAX_CONCURRENT_SCANS=1
SCAN_TIMEOUT_MINUTES=15
ENABLED_SCANNERS=trivy,grype
LOG_LEVEL=error
CLEANUP_OLD_SCANS_DAYS=7
```
**Docker 部署:**
```
docker run -p 8080:8080 \
-e PORT=8080 \
-e MAX_CONCURRENT_SCANS=5 \
-e LOG_LEVEL=info \
-e TEAMS_WEBHOOK_URL=https://your-webhook-url \
-v /var/run/docker.sock:/var/run/docker.sock \
ghcr.io/harborguard/harborguard:latest
```
### 开发环境设置
1. 克隆仓库:
```
git clone https://github.com/HarborGuard/HarborGuard.git
cd HarborGuard
```
2. 安装依赖:
```
npm install
```
3. 设置数据库:
```
npm run db:init
```
4. 启动开发服务器:
```
npm run dev
```
## 用途
Harbor Guard 是一个现代 Web 应用程序,旨在通过为多个扫描工具提供统一界面和高级可视化功能来简化容器安全管理。
### 多工具安全扫描
Harbor Guard 集成并协调多个行业标准的扫描工具:
- **[Trivy](https://github.com/aquasecurity/trivy)** - 容器全面漏洞扫描器
- **[Grype](https://github.com/anchore/grype)** - Anchore 提供的漏洞扫描器
- **[Syft](https://github.com/anchore/syft)** - 软件物料清单(SBOM)生成器
- **[Dockle](https://github.com/goodwithtech/dockle)** - 容器镜像安全检查和最佳实践检查器
- **[OSV Scanner](https://github.com/google/osv-scanner)** - 开源漏洞数据库扫描器
- **[Dive](https://github.com/wagoodman/dive)** - Docker 镜像层分析和优化工具
### 优化的可视化策略
该平台采用多种创新方法来可视化漏洞数据:
#### 库漏洞散点图
- **多维映射** - X 轴表示严重级别,Y 轴表示漏洞数量
- **交互式筛选** - 按严重级别切换可见性并实时更新计数
- **可点击探索** - 从图表点直接导航到库特定分析
- **颜色编码严重级别** - 所有界面保持一致的颜色方案(红/橙/黄/蓝)
#### 分层分析
- **水平标签导航** - 每个 Docker 层都有独立的标签页进行专注分析
- **动态尺寸调整** - 标签布局可适应任意数量的层而不会断裂
- **文件系统探索** - 查看每层中添加或修改的文件详情
- **尺寸优化洞察** - 图层大小的视觉指示器和优化机会
#### 查找结果管理
- **按严重性分组** - 按严重、中危、低危对查找结果进行分类
- **进度跟踪** - 扫描完成和修复状态的视觉指示器
- **导出灵活性** - 单个 JSON 报告或完整的 ZIP 存档
- **API 可访问性** - 用于以编程方式访问扫描数据的公共 REST 端点
## 贡献
我们欢迎贡献!请参阅我们的[贡献指南](CONTRIBUTING.md)获取详细信息。
## 许可证
本项目根据 AGPL-3.0 许可证授权 - 详情见 [LICENSE](LICENSE) 文件。
## 支持
- 🐛 [报告问题](https://github.com/HarborGuard/HarborGuard/issues)
- 💬 [讨论](https://github.com/HarborGuard/HarborGuard/discussions)
- 📧 [电子邮件支持](mailto:hello@harborguard.co)
## 感谢
特别感谢集成安全工具的维护者:
- Aqua Security (Trivy)
- Anchore (Grype, Syft)
- goodwithtech (Dockle)
- Google (OSV Scanner)
- wagoodman (Dive)
- containers (Skopeo, Buildah)
![]() |
![]() |
![]() |
环境变量
Harbor Guard 通过环境变量支持全面的配置。所有变量都有合理的默认值和适当的验证。
| 变量 | 描述 | 默认值 | 有效值 | 示例 |
|----------|-------------|---------|--------------|---------|
| **扫描器配置** |
| `MAX_CONCURRENT_SCANS` | 限制并发扫描执行以防止资源耗尽 | `3` | `1-20` | `MAX_CONCURRENT_SCANS=5` |
| `SCAN_TIMEOUT_MINUTES` | 单个扫描执行的最大允许时间 | `30` | `5-180` | `SCAN_TIMEOUT_MINUTES=60` |
| `ENABLED_SCANNERS` | 启用的扫描器列表(逗号分隔) | `trivy,grype,syft,dockle,osv,dive` | 任意组合:`trivy`、`grype`、`syft`、`dockle`、`osv`、`dive` | `ENABLED_SCANNERS=trivy,grype` |
| **日志与调试** |
| `LOG_LEVEL` | 控制应用程序日志详细程度 | `info` | `debug`、`info`、`warn`、`error` | `LOG_LEVEL=debug` |
| **数据库与维护** |
| `DATABASE_URL` | PostgreSQL 数据库连接字符串 | 内置 PostgreSQL | 外部 PostgreSQL:`postgresql://user:pass@host:port/db` | `DATABASE_URL="postgresql://user:pass@localhost:5432/harborguard"` |
| `CLEANUP_OLD_SCANS_DAYS` | 自动删除指定天数之前的扫描记录 | `30` | `1-365` | `CLEANUP_OLD_SCANS_DAYS=90` |
| **网络与部署** |
| `PORT` | 服务器监听端口 | `3000` | `1000-65535` | `PORT=8080` |
| `HOSTNAME` | 服务器绑定地址 | `0.0.0.0` | 有效 IP 地址 | `HOSTNAME=127.0.0.1` |
| **通知** |
| `TEAMS_WEBHOOK_URL` | Microsoft Teams 通知 Webhook URL | *无* | 有效的 HTTPS URL | `TEAMS_WEBHOOK_URL=https://outlook.office.com/webhook/...` |
| `SLACK_WEBHOOK_URL` | Slack 通知 Webhook URL | *无* | 有效的 HTTPS URL | `SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...` |
| `GOTIFY_SERVER_URL` | Gotify 自托管通知服务器 URL | *无* | 有效的 HTTP/HTTPS URL | `GOTIFY_SERVER_URL=https://gotify.example.com` |
| `GOTIFY_APP_TOKEN` | Gotify 身份验证应用令牌 | *无* | 有效的令牌字符串 | `GOTIFY_APP_TOKEN=AC5X0f7ISmwz-zJ` |
| `APPRISE_API_URL` | 多服务通知的 Apprise API URL | *无* | 有效的 HTTP/HTTPS URL | `APPRISE_API_URL=https://apprise.example.com` |
| `APPRISE_CONFIG_KEY` | Apprise 配置键(可选) | *无* | 配置键字符串 | `APPRISE_CONFIG_KEY=harborguard` |
| `APPRISE_URLS` | 直接 Apprise 通知 URL(逗号分隔) | *无* | 逗号分隔的服务 URL | `APPRISE_URLS=mailto://user:pass@gmail.com,discord://webhook/...` |
| `NOTIFY_ON_HIGH_SEVERITY` | 仅对高/严重发现发送通知 | `true` | `true`、`false` | `NOTIFY_ON_HIGH_SEVERITY=false` |
| **监控与健康检查** |
| `HEALTH_CHECK_ENABLED` | 启用 `/api/health` 和 `/api/ready` 端点 | `true` | `true`、`false` | `HEALTH_CHECK_ENABLED=false` |
| `VERSION_CHECK_ENABLED` | 启用自动版本检查以获取更新 | `true` | `true`、`false` | `VERSION_CHECK_ENABLED=false` |
### S3/对象存储(分布式部署)
这些变量配置 S3 兼容存储用于分布式传感器部署。每个变量也接受 AWS 或 HarborGuard 传感器的备用名称。
| 变量 | 描述 | 默认值 | 替代项 |
|----------|-------------|---------|-------------|
| `S3_ENDPOINT` | S3 兼容端点 URL(例如 MinIO) | *无* | `HG_S3_ENDPOINT` |
| `S3_BUCKET` | S3 存储桶名称 | *无* | `HG_S3_BUCKET` |
| `S3_ACCESS_KEY` | S3 访问密钥 | *无* | `AWS_ACCESS_KEY_ID`、`HG_S3_ACCESS_KEY` |
| `S3_SECRET_KEY` | S3 秘密密钥 | *无* | `AWS_SECRET_ACCESS_KEY`、`HG_S3_SECRET_KEY` |
| `S3_REGION` | S3 区域 | `us-east-1` | `AWS_REGION` |
### 高级环境变量
这些变量通常用于内部配置或高级部署:
| 变量 | 描述 | 默认值 | 示例 |
|----------|-------------|---------|---------|
| `SCANNER_WORKDIR` | 扫描器操作的working directory | `/workspace` | `SCANNER_WORKDIR=/tmp/scanners` |
| `PATCH_WORKDIR` | 修补操作的working directory | `/workspace/patches` | `PATCH_WORKDIR=/tmp/patches` |
| `ENABLE_RAW_OUTPUT` | 在 API 响应中启用原始扫描输出 | `false` | `ENABLE_RAW_OUTPUT=true` |
| `SENSOR_CLI_PATH` | 传感器 CLI 二进制文件路径 | `/app/sensor/harborguard-sensor` | `SENSOR_CLI_PATH=/usr/local/bin/sensor` |
| `PUPPETEER_EXECUTABLE_PATH` | PDF 报告生成所需的 Chromium 二进制路径 | *自动检测* | `PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser` |
| `NEXT_PUBLIC_DEMO_MODE` | 启用具有有限功能的演示模式 | `false` | `NEXT_PUBLIC_DEMO_MODE=true` |
| `NEXT_PUBLIC_APP_URL` | 公共应用程序 URL(用于演示模式和 OpenAPI 规范) | `http://localhost:3000` | `NEXT_PUBLIC_APP_URL=https://harborguard.example.com` |
| `NEXT_PUBLIC_API_URL` | 公共 API URL(用于 OpenAPI 规范) | *自动检测* | `NEXT_PUBLIC_API_URL=https://api.harborguard.example.com` |
| `NEXT_PUBLIC_APP_VERSION` | 覆盖应用程序版本显示 | *自动检测* | `NEXT_PUBLIC_APP_VERSION=1.0.0` |
| `NODE_ENV` | Node.js 环境模式 | `production` | `NODE_ENV=development` |
| `NEXT_RUNTIME` | Next.js 运行时环境 | *自动检测* | `NEXT_RUNTIME=nodejs` |
| `PGDATA` | PostgreSQL 数据目录(仅限内置 PostgreSQL) | `/var/lib/postgresql/data` | `PGDATA=/data/postgres` |
| `POSTGRES_USER` | PostgreSQL 用户名(仅限内置 PostgreSQL) | `harborguard` | `POSTGRES_USER=admin` |
| `POSTGRES_PASSWORD` | PostgreSQL 密码(仅限内置 PostgreSQL) | `harborguard` | `POSTGRES_PASSWORD=secure_password`
| `POSTGRES_DB` | PostgreSQL 数据库名称(仅限内置 PostgreSQL) | `harborguard` | `POSTGRES_DB=harborguard_prod` |
### 快速配置示例
**开发环境设置:**
```
# 最小开发配置
PORT=3000
LOG_LEVEL=debug
HEALTH_CHECK_ENABLED=true
```
**生产环境设置:**
```
# 使用 PostgreSQL 和通知的生产配置
DATABASE_URL="postgresql://user:password@db:5432/harborguard"
PORT=8080
LOG_LEVEL=warn
MAX_CONCURRENT_SCANS=10
SCAN_TIMEOUT_MINUTES=60
ENABLED_SCANNERS=trivy,grype,syft
# 选择您的通知服务:
# 选项 1:Microsoft Teams
TEAMS_WEBHOOK_URL=https://outlook.office.com/webhook/your-webhook-url
# 选项 2:Slack
# SLACK_WEBHOOK_URL=https://hooks.slack.com/services/your-webhook
# 选项 3:自托管 Gotify
# GOTIFY_SERVER_URL=https://gotify.example.com
# GOTIFY_APP_TOKEN=your-app-token
# 选项 4:Apprise(支持 80+ 通知服务)
# APPRISE_API_URL=https://apprise.example.com
# APPRISE_URLS=discord://webhook/...,mailto://user:pass@gmail.com
NOTIFY_ON_HIGH_SEVERITY=true
CLEANUP_OLD_SCANS_DAYS=60
HEALTH_CHECK_ENABLED=true
VERSION_CHECK_ENABLED=true
```
**资源受限环境:**
```
# 针对低资源环境优化
MAX_CONCURRENT_SCANS=1
SCAN_TIMEOUT_MINUTES=15
ENABLED_SCANNERS=trivy,grype
LOG_LEVEL=error
CLEANUP_OLD_SCANS_DAYS=7
```
**Docker 部署:**
```
docker run -p 8080:8080 \
-e PORT=8080 \
-e MAX_CONCURRENT_SCANS=5 \
-e LOG_LEVEL=info \
-e TEAMS_WEBHOOK_URL=https://your-webhook-url \
-v /var/run/docker.sock:/var/run/docker.sock \
ghcr.io/harborguard/harborguard:latest
```
Harbor Guard - 一次扫描一个,保护容器安全。
标签:CI/CD安全, DevSecOps, Docker镜像扫描, Harbor, Llama, LLM防护, Web仪表盘, Web截图, 上游代理, 反取证, 可视化管理, 图像安全, 多工具集成, 安全扫描平台, 安全评估, 容器安全, 容器安全平台, 容器运行时安全, 容器防护, 开源安全工具, 测试用例, 漏洞修复, 漏洞管理平台, 端点安全, 网络安全培训, 自动化攻击, 补丁管理, 请求拦截, 逆向工程平台, 镜像漏洞, 镜像漏洞扫描


