KilimcininKorOglu/inkwell
GitHub: KilimcininKorOglu/inkwell
基于 Go 构建的轻量级 DMARC 聚合报告分析器,自动采集解析多域名的邮件认证报告并提供 Gmail 风格的可视化仪表板
Stars: 0 | Forks: 0
# Inkwell
使用 Go 构建的现代化 DMARC 聚合报告分析器。
Inkwell 持续轮询 IMAP 邮箱以获取 DMARC 聚合报告邮件,解析 XML 附件(`.zip`、`.gz`、`.xml`),将结构化结果存储在 MariaDB 中,并提供交互式仪表板进行分析。可以通过 Web UI 管理多个域,每个域都有其独立的 IMAP 配置。
## 功能特性
- **多域支持** -- 通过 Web UI 管理多个 IMAP 邮箱,支持按域启用/禁用切换
- **自动化 IMAP 轮询** -- 通过 IMAP4 SSL 获取未读 DMARC 报告,采用基于 UID 的消息跟踪
- **稳健的解析能力** -- 处理聚合数据,包括 IP 处置策略、DKIM 对齐、SPF 验证和反向 DNS 解析
- **Gmail 风格仪表板** -- 受 Gmail 启发的深色模式 UI,包含会话列表、带高级过滤器的搜索栏、紧凑的指标标签以及下钻 IP 检查
- **加密凭据** -- IMAP 密码使用 AES-256-GCM 加密存储
- **单一二进制文件** -- 无运行时依赖,编译为单个 Go 可执行文件(约 15MB)
## 快速开始
### 前置条件
- Go 1.24+(用于从源代码构建)
- MariaDB 10.11+ 或 MySQL 8.0+
- 一个或多个接收 DMARC 聚合报告的 IMAP 邮箱
### 构建
```
make build
```
二进制文件输出到 `bin/inkwell`。
### 配置
复制并编辑环境文件:
```
cp .env.example .env
```
生成用于 IMAP 密码存储的加密密钥:
```
openssl rand -hex 32
```
将其作为 `ENCRYPTION_KEY` 添加到您的 `.env` 中。
### 环境变量
| 变量 | 默认值 | 描述 |
| ---------------- | ---------- | -------------------------------------------- |
| `DB_HOST` | `db` | MariaDB 主机名 |
| `DB_NAME` | `dmarc` | 数据库名称 |
| `DB_USER` | `dmarcuser`| 数据库用户 |
| `DB_PASSWORD` | `dmarcpass`| 数据库密码 |
| `DB_ROOT_PASSWORD` | | MariaDB root 密码(仅限 Docker 设置) |
| `FETCH_INTERVAL` | `300` | IMAP 轮询周期之间的秒数 |
| `PORT` | `8080` | 仪表板 HTTP 端口 |
| `ADMIN_USER` | | 仪表板登录用户名(留空 = 无认证) |
| `ADMIN_PASSWORD` | | 仪表板登录密码(留空 = 无认证) |
| `ENCRYPTION_KEY` | | 用于 AES-256-GCM 加密的 32 字节十六进制密钥 |
IMAP 服务器设置是通过 Web UI 在 `/domains` 中针对每个域进行配置的,而不是通过环境变量。
### 运行
```
# Direct
./bin/inkwell
# 或者使用 Docker Compose(启动 MariaDB + Inkwell)
docker compose up -d --build
```
通过 `http://localhost:8080` 访问仪表板。
### 添加域
1. 导航至 `/domains`(或点击侧边栏中的“Domains”)
2. 点击“Add Domain”
3. 输入 IMAP 服务器详细信息(主机、端口、用户、密码、文件夹)
4. 保存 -- 获取器将在下一个周期开始轮询
## 构建命令
| 命令 | 描述 |
| ------------------- | --------------------------------------------------- |
| `make build` | 为当前 OS/架构构建 |
| `make run` | 构建并运行 |
| `make lint` | 格式化并检查 |
| `make build-all` | 交叉编译 Linux, Windows, macOS |
| `make build-linux` | 交叉编译 Linux amd64 + arm64 |
| `make build-darwin` | 交叉编译 macOS amd64 + arm64 |
| `make clean` | 移除构建产物 |
所有交叉编译均使用 CGO_ENABLED=0(纯 Go,无需外部工具链)。
## 架构
```
main.go
|-- goroutine: Multi-Domain IMAP Fetcher (background polling)
| |-- fetcher.go --> Per-domain IMAP connect, extract XML from ZIP/GZ/XML
| '-- parser.go --> Parse XML, reverse DNS, write to MariaDB
|
'-- HTTP Server (Chi router)
|-- GET / Dashboard (Gmail mailbox UI)
|-- GET /dashboard/content HTMX partial (metrics + conversation list)
|-- GET /dashboard/detail/{id} HTMX partial (IP drill-down reading pane)
|-- GET /domains Domain management (list)
|-- GET /domains/new Add domain form
|-- POST /domains Create domain
|-- GET /domains/{id}/edit Edit domain form
|-- POST /domains/{id} Update domain
|-- POST /domains/{id}/delete Delete domain
'-- POST /domains/{id}/toggle Enable/disable domain
```
### 数据库模式
```
domains (1) --> reports (N) --> records (N) --> auth_results (N)
```
- **domains** -- 每个受监控域的 IMAP 配置(加密密码)
- **reports** -- 每个 DMARC 聚合报告一条记录(以唯一的 `report_id` 为键)
- **records** -- 报告中每个 IP/策略评估行一条记录
- **auth_results** -- 每条记录的细粒度 DKIM/SPF 认证结果
### 技术栈
| 组件 | 技术 |
| ------------- | ---------------------------------------- |
| 语言 | Go 1.24 |
| Web 框架 | Chi v5 |
| 数据库 ORM | GORM + go-sql-driver/mysql |
| IMAP 客户端 | emersion/go-imap v2 |
| XML 解析 | encoding/xml (stdlib) |
| 加密 | AES-256-GCM (crypto/aes + crypto/cipher) |
| 前端 | HTMX + Alpine.js |
| 模板 | html/template (stdlib) |
## 安全性
- IMAP 密码在存入数据库前使用 AES-256-GCM 进行静态加密
- 存储 ENCRYPTION_KEY 是保存密码的必要条件 -- 如果没有它,系统将拒绝存储密码
- 所有更改状态的 POST 端点均进行 CSRF 令牌验证
- 仪表板访问可通过 HTTP Basic Auth(`ADMIN_USER` + `ADMIN_PASSWORD`)进行保护
- Basic Auth 使用恒定时间比较以防止时序攻击
- ZIP/GZ 解压缩上限为 100MB 以防止 ZIP 炸弹攻击
- 数据库错误信息在显示给用户前会进行净化处理
- 静态资源在未认证情况下提供
对于生产部署,请始终通过 HTTPS(使用反向代理)运行,因为 HTTP Basic Auth 会以 base64 形式传输凭据。
## 反向代理
Inkwell 支持在 Nginx、Traefik 或类似反向代理后部署。仪表板在内部绑定到 `0.0.0.0:PORT`。配置您的代理以转发到此端口。
## 许可证
详情请参阅 [LICENSE](LICENSE)。
标签:DKIM, DMARC, EVTX分析, Go, Golang, IMAP, MariaDB, Ruby工具, SPF, XML解析, 仪表盘, 单二进制文件, 反钓鱼, 域名防护, 安全编程, 开源, 报告分析, 日志审计, 网络安全, 网络调试, 自动化, 邮件安全, 邮箱监控, 隐私保护