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解析, 仪表盘, 单二进制文件, 反钓鱼, 域名防护, 安全编程, 开源, 报告分析, 日志审计, 网络安全, 网络调试, 自动化, 邮件安全, 邮箱监控, 隐私保护