26 KiB
serviceport 开发计划
0.3.0:Kubernetes、版本与模块拆分
-
目标服务增加可选分组字段,列表支持分组和未分组筛选,网关关联目标下拉显示分组;旧配置无需数据迁移即可读取。
-
增加 Drone CI 流水线,固定 Go 1.25、Node 22,自动执行测试、静态检查、前端构建和 Linux amd64 构建。
-
增加独立「代理」菜单管理共享出口,目标只保存 outboundId 引用,下拉选择或直接连接。旧内联出口自动迁移为独立加密代理记录;引用中的代理禁止删除,运行中关联网关阻止修改,共享出口变更使关联 SSH 身份确认失效。
-
内置 client-go port-forward,不依赖 kubectl;六类服务可选择 Pod、Service 或 Deployment 出口,支持 kubeconfig、context、命名空间配置,沿用目标端口和 TLS 主机名。
-
通道按连接独立管理,关闭/失败时清理;Kubernetes 凭据与目标数据库凭据独立。配置、资源解析、转发故障返回 Kubernetes 失败阶段,详细使用见 Kubernetes。
-
根 VERSION 作为版本来源,CLI、管理 API、界面和发布包展示同一程序版本,构建脚本注入提交及 UTC 构建时间。
-
API 拆出鉴权、网关配置、校验和 HTTP 辅助模块;前端拆出审计 composable、代理出口和版本组件。AGENTS.md 记录模块归属、共享文件交接及验证约定。
更新时间:2026-09-09。本文记录已确认的设计与已实现扩展;实现使用方式见 README,实测范围与未完成的外部兼容验证见 验证说明。
1. 目标与技术方案
采用 Vue 3 + TypeScript + Element Plus、Go、SQLite,前端构建产物嵌入 Go 程序,面向本地及小团队,支持单程序部署。
| 服务 | 支持版本或功能 | 访问模式 |
|---|---|---|
| MySQL | 5.7.44、8.0、8.4 | 默认读写,可选只读 |
| MongoDB | 6.0、7.0、8.0,单机或直连节点 | 默认读写,可选只读 |
| SSH | 交互终端、远程命令、SFTP | 不设置只读选项 |
| Redis | RESP、认证映射、流水线和订阅 | 读写 |
| RabbitMQ | AMQP 0-9-1、PLAIN 认证 | 读写 |
| PostgreSQL | 简单查询、扩展查询、上游 MD5/SCRAM | 读写 |
每条代理独立监听端口,一个网关账号映射到一个目标账号,可独立选择直连或外部 SOCKS5 出口。客户端使用网关凭据,Go 使用保存的目标凭据连接上游。
只读是 MySQL/MongoDB 网关的可选功能,默认关闭。 未启用时正常支持协议范围内的读写操作;启用后执行严格查询白名单。Redis、RabbitMQ、PostgreSQL 暂不提供只读。
不包含多管理员、网页查询工具、网页终端、SOCKS5 服务端入口、连接池、负载均衡或自动故障切换。六类目标均可选择直连、SOCKS5 或 SSH 转发出口。
2. 管理界面与配置接口
- 提供管理员登录、概览、代理列表、配置、连接记录和安全审计页面,支持搜索、连接测试、启停及删除。
- 概览展示代理数量、实际运行状态、当前连接数和近期错误。
- 创建时选择
mysql、mongodb、ssh、redis、rabbitmq或pgsql,创建后不可切换类型。 - 公共配置包括名称、监听地址、端口、来源 IP/CIDR 白名单、目标地址、认证信息、连接上限和出口配置。
- MySQL、MongoDB 提供“只读模式”开关,默认关闭。API 使用
accessMode: readwrite | readonly,省略时默认readwrite;已有记录迁移为读写,SSH 不接受该字段。 - 启用只读时展示兼容范围及隐藏副作用边界,列表和详情显示访问模式及被拒绝请求数。
- 切换模式必须先停止代理并断开现有连接,重新启动后生效。
- MongoDB 目标认证库
authSource默认admin;客户端网关认证库固定为admin。 - SSH 表单提供目标认证方式、客户端公钥管理及主机指纹确认。
- 提供不包含真实密码的连接示例;MongoDB 示例包含
directConnection=true、authSource=admin、authMechanism=SCRAM-SHA-256。 - 连接测试返回数据库类型、版本和 TLS 状态;MongoDB 额外返回节点角色。SSH 未确认主机指纹前仅允许身份探测。
- 管理 API 使用
/api/v1,覆盖会话、代理 CRUD、测试、启停、状态、记录和秘密查看;/healthz提供存活检查。 - SQLite 保存配置及期望启用状态,实际状态取自监听器。已有无类型记录迁移为 MySQL,已有无出口记录迁移为直连。
3. 密码、密钥与管理员认证
- 开发阶段默认关闭管理员登录;设置 SERVICEPORT_AUTH_ENABLED=true 后,通过环境变量或 Windows 首次设置页面初始化管理员。登录密码使用 bcrypt,不保存可恢复副本,不提供原文查看。
- 提供本机交互式密码重置命令,重置后注销已有会话。
- 使用服务端会话、HttpOnly Cookie 和 CSRF 校验。
- 目标密码、网关密码、SOCKS5 密码、SSH 上游私钥及私钥口令使用 AES-GCM 加密保存,每次加密使用独立随机 nonce。
- 手动密钥模式从环境变量读取主密钥,不存入 SQLite;Windows 未提供主密钥时使用当前用户 DPAPI 保护的自动本地密钥。备份须保留整个数据目录或 SQLite 与外部主密钥。
- 管理员可以查看目标密码、网关密码、SOCKS5 密码和 SSH 私钥口令。SSH 私钥仅允许上传或替换,不提供原文下载;客户端公钥可正常查看。
POST /api/v1/proxies/{id}/reveal-password接受秘密类别和管理员登录密码,重新认证后仅返回指定秘密;要求有效会话、CSRF 校验,响应设置Cache-Control: no-store。- 查看接口按会话和来源 IP 分别限制每 5 分钟最多 5 次尝试。
- 前端显示原文 30 秒后隐藏,离开页面即清除,不写入浏览器持久化存储,提供显式复制按钮。
- 普通 API 仅返回秘密是否设置,不返回明文或密文;更新时省略秘密字段表示保留原值。
- 审计记录秘密查看和 SSH 指纹确认的操作者、时间、来源 IP、对象及结果,不记录秘密。敏感接口的输入输出必须脱敏。
- 仅有 bcrypt 哈希的旧凭据无法恢复原文,必须重新设置后才能支持查看。
4. 可选只读模式
4.1 公共规则
- 仅在
accessMode=readonly时启用;读写模式的单语句不执行只读白名单,MySQL 多语句批次始终要求全部满足只读规则。 - 在转发上游前解析请求,未知、无法解析或未列入白名单的操作一律拒绝,不采用关键词匹配。
- 网关不自动修改目标数据库权限。此模式限制客户端请求,不能保证阻止视图、服务端扩展等数据库内部隐藏的写入副作用。
- 白名单随代码版本维护,首版不提供管理员自定义放行规则。
- 拒绝时返回服务原生协议错误并保留连接;事件日志记录代理、时间、来源 IP、命令类别和规则编号;命令正文另写入加密命令审计表,具体范围见逐命令审计说明。
- 直连和 SOCKS5 使用同一检查逻辑;切换模式不得保留使用旧策略的连接。
4.2 MySQL 只读
- 使用固定版本的 Vitess SQL parser 构建 AST,先验证对目标版本的解析能力;解析失败不回退原文放行。
- 允许单条
SELECT,递归检查子查询、UNION、CTE、表达式和函数,CTE 仅允许读取。 - 允许
SHOW DATABASES/TABLES/COLUMNS/INDEX/CREATE TABLE/CREATE VIEW/VARIABLES/STATUS和DESCRIBE。 - 普通
EXPLAIN SELECT检查被解释查询;拒绝EXPLAIN ANALYZE。 - 拒绝 DML、DDL、权限及管理操作、
CALL、DO、LOAD DATA、SELECT INTO、变量赋值、锁定读取和可执行版本注释。多语句最多 100 条,全部通过只读检查后才开始转发。 - 函数白名单为
COUNT/SUM/AVG/MIN/MAX、ABS/CEIL/CEILING/FLOOR/ROUND、COALESCE/IFNULL/NULLIF/IF、CONCAT/CONCAT_WS/LENGTH/CHAR_LENGTH/LOWER/UPPER/SUBSTRING/TRIM/REPLACE、CAST/CONVERT、DATE/YEAR/MONTH/DAY/NOW/CURRENT_TIMESTAMP、DATABASE/SCHEMA/VERSION/USER/CURRENT_USER。拒绝其他函数、自定义函数及库限定函数。 - 允许读取系统变量,拒绝用户变量;
SET仅允许NAMES和autocommit=0|1,不允许任意会话配置或修改只读状态。 - 允许
BEGIN、START TRANSACTION、COMMIT、ROLLBACK,拒绝显式READ WRITE;事务内逐条检查。 - 二进制预编译在 prepare 时检查 AST,按连接登记批准的 statement ID。执行、长参数和关闭操作仅接受已批准语句,连接重置后清空状态。
- 拒绝 SQL 文本形式的动态
PREPARE/EXECUTE。 - 协议控制仅放行认证、握手、ping、切换数据库、连接重置、退出及已支持的元数据读取路径,其他命令默认拒绝。
4.3 MongoDB 只读
- 按 BSON 结构检查命令及参数,拒绝重复字段、未知命令和未知操作符;驱动通用元数据字段维护独立白名单。
- 允许握手、认证、
ping、buildInfo、listDatabases、listCollections、listIndexes、find、count、distinct、aggregate、getMore、killCursors和endSessions。 - 聚合阶段仅允许
$match/$project/$addFields/$set/$unset/$group/$sort/$limit/$skip/$unwind/$count/$sortByCount/$replaceRoot/$replaceWith/$lookup/$facet/$unionWith,递归检查嵌套 pipeline。 - 查询操作符限
$eq/$ne/$gt/$gte/$lt/$lte/$in/$nin/$and/$or/$nor/$not/$exists/$type/$regex/$options/$all/$elemMatch/$size/$expr。 - 聚合表达式允许字段引用、字面量,以及
$literal/$eq/$ne/$gt/$gte/$lt/$lte/$cmp/$and/$or/$not/$add/$subtract/$multiply/$divide/$mod/$abs/$ceil/$floor/$round/$cond/$ifNull/$switch/$convert/$toString/$toInt/$toLong/$toDouble/$toDecimal/$toDate/$toBool/$concat/$toLower/$toUpper/$substrBytes/$substrCP/$strLenBytes/$strLenCP/$trim/$sum/$avg/$min/$max/$first/$last/$push/$addToSet。 - 递归检查表达式,按上下文区分操作符与数据;
$literal内按数据处理,不因普通数据包含操作符字符串而误判。 - 明确拒绝
$out、$merge、$where、$function、$accumulator、mapReduce、写命令、DDL 和权限管理。 explain仅允许queryPlanner,内部命令必须通过同样检查。- 支持普通逻辑会话;只读模式首版拒绝多文档事务及其控制请求。
- 游标按客户端连接和命名空间登记,
getMore、killCursors只能访问该连接已批准的游标;连接结束清理状态。
5. 协议实现
5.1 MySQL
- 使用固定版本的
go-mysql-org/go-mysql,先完成认证、TLS、事务、预编译及连接注入的独立验证。 - 网关认证使用
mysql_native_password;上游支持该机制及caching_sha2_password,MySQL 8.4 不依赖开启旧插件。 - 每个客户端独占上游连接,不共享连接池,保留事务、会话变量、默认数据库和预编译状态。
- 支持查询、结果集、错误响应、事务、预编译执行与关闭、连接重置及会话隔离。
- 按目标能力协商协议,兼容结果集终止方式、字符集和事务状态差异。
- 默认使用
utf8mb4、utf8mb4_general_ci,不向 MySQL 5.7 自动发送 8.x 专属排序规则。 - 原样转发已获准 SQL 和上游错误,不改写 SQL 以兼容不同数据库版本。
- 不支持复制和 LOCAL INFILE。目标支持 zlib 压缩;多语句仅允许全部符合只读规则的批次(读写模式亦然),同一上游会话顺序执行并返回多个结果集,遇错停止,不自动回滚。
5.2 MongoDB
- 实现独立 wire protocol 模块;官方 Go 驱动仅用于连接测试及验收,不作为任意命令转发层。
- 支持现代
hello、初始isMaster兼容握手、OP_MSG和推测认证。 - 客户端和上游分别完成 SCRAM-SHA-256,不转发客户端认证消息。首版不支持 SCRAM-SHA-1、X.509 或云身份认证。
- 每个客户端独占上游连接,保留 BSON 类型、请求关联、游标及会话标识,权限由目标账号执行。
- 读写模式支持 CRUD、聚合、索引、批量写入、游标,以及目标节点支持的事务。
- 客户端必须使用
directConnection=true;不进行副本集发现、节点地址改写、自动故障切换或分片路由。 - 单机不支持多文档事务;直连副本集主节点时验证事务可用,主节点降级或切换后向客户端传递错误。
- 不支持压缩和 exhaust,不保证变更流、复制及备份工具兼容性。
5.3 SSH
- 使用固定版本的
golang.org/x/crypto/ssh,分别建立客户端到网关、网关到目标的 SSH 连接。 - 客户端通过网关密码或登记公钥认证,每条代理至少启用一种方式;公钥支持备注、指纹、添加和移除。
- 上游选择密码或私钥认证,支持私钥口令,不隐式回退其他认证方式。
- 支持 Ed25519 和使用 SHA-2 签名的 RSA,不启用旧 SHA-1 算法。
- 每条代理生成独立的 Ed25519 网关主机密钥,加密持久化;展示指纹,重启及普通修改不改变密钥。
- 首次探测目标时只获取公钥,不发送目标凭据。管理员通过独立渠道核对 SHA-256 指纹并确认保存后,才能认证测试或启动。
- 后续主机密钥不匹配立即拒绝连接;目标地址或端口变化必须重新确认。仅切换 SOCKS5 出口不清除指纹,新路径仍须匹配原指纹。
- 每个客户端独占上游 SSH 连接,支持多个 session channel、PTY、窗口变化、shell、exec、必要的控制请求、退出状态和半关闭。
- SFTP 通过
sftpsubsystem 双向转发,文件权限由目标账号控制,不保存文件正文。 - 拒绝 TCP 本地及远程转发、Agent 转发、X11 和非 SFTP subsystem;环境变量仅允许
TERM、LANG、LC_*。 - 不保证旧式 SCP 协议兼容性,以 SFTP 及现代客户端基于 SFTP 的传输为验收范围。
6. SOCKS5 出口
- 每条代理的
outbound.mode为direct或socks5,默认direct;SOCKS5 配置包含地址、端口、认证方式及可选用户名、密码。 - 支持无认证和用户名密码认证;启用密码认证时不得降级为无认证,凭据按 UTF-8 字节数校验 1–255 字节限制。
- 建立支持
context的公共出站连接接口,供实际服务连接、连接测试和 SSH 指纹探测使用。协议库通过连接注入或适配接入,不得绕过配置直连。 - 流程为连接 SOCKS5 → 认证协商 →
CONNECT目标 → 目标 TLS/SSH 握手和服务认证。 - 仅支持 TCP
CONNECT,不支持 UDP、BIND、多级代理链或额外的 SOCKS5-over-TLS。 - 目标域名交给 SOCKS5 服务器解析,不提前本地解析;支持 IPv4/IPv6。SOCKS5 服务器自身域名由 Go 所在机器解析。
- 数据库 TLS 服务器名称和证书校验仍使用原始目标主机名;SSH 指纹仍对应目标服务,不使用 SOCKS5 地址替代。
- SOCKS5 失败不回退直连。
- 直连建连阶段或 SOCKS5 连接、认证及
CONNECT阶段共享 5 秒超时;目标握手和认证使用 15 秒超时。 - 取消、超时和中间失败必须关闭已建立连接,避免连接及 goroutine 泄漏。
- 连接测试执行完整出口路径及目标认证;管理端区分出口连接、SOCKS5 认证、目标连接和目标认证失败,客户端仅返回必要协议错误。
- 修改出口与修改目标配置一样,必须先停止代理。
7. 运行与数据保留
- 管理端默认监听
127.0.0.1:8080,远程访问通过 HTTPS 反向代理。 - 服务代理默认监听
0.0.0.0,来源 IP/CIDR 白名单可选:留空允许所有来源,填写后在认证前检查,仅放行匹配来源;非法 IP/CIDR 拒绝保存。 - MySQL、MongoDB 客户端 TLS 可选,普通连接无需证书;配置证书后同一端口接受 TLS(最低 TLS 1.2)。取消网关强制 TLS,目标上游 TLS 仍按目标配置执行。
- 修复 MySQL 客户端能力协商:客户端声明 MULTI_STATEMENTS、DEPRECATE_EOF 等未协商能力时不再直接断开;使用网关已声明的协议格式,上游仍禁用多语句。回归覆盖普通查询、预编译、ping 和只读拦截;官方 MySQL 5.7.44 CLI 非 TLS 连接实际网关并对 MySQL 8.4.11 目标执行
SELECT 1成功。 - 2026-09-09 取消强制 TLS 后回归:MySQL 5.7.44 真实目标(上游 TLS + zlib)同时验证网关普通连接与 TLS,读写、只读和审计通过;MySQL/MongoDB 的普通连接、有证书/无证书场景通过协议测试。日志:
artifacts/mysql-verification/optional-tls-mysql57.log。 - 数据库上游默认启用 TLS 并验证证书,可显式关闭,不提供跳过验证模式;MySQL 5.7 验收环境启用 TLS 1.2。
- SSH 使用自身加密及主机密钥校验,不套用数据库 TLS 配置。
- 每条代理默认最多 100 个客户端连接,SSH 每连接最多 10 个 session channel;不设置普通查询或 SSH 会话总时长限制。
- 修改运行配置、切换只读或删除前必须停止,停止会断开已有连接,页面提前提示。
- 启动时检查端口冲突并恢复已启用配置,单条启动失败不影响其他代理。
- 进程退出时停止接受连接,最多等待 30 秒后关闭剩余连接。
- 连接、安全事件和命令审计记录保留 7 天,定期清理。SQL、MongoDB 命令、SSH exec/交互输入及 SFTP 操作写入独立加密命令表;认证握手、命令输出和文件正文不记录。
8. 验证与验收
8.1 默认行为和只读
- 新建及迁移后的数据库代理默认读写;关闭只读正常写入,开启后执行白名单,SSH 不受影响。
- 切换模式断开旧连接,新连接使用新策略;直连和 SOCKS5 行为一致。
- MySQL 覆盖注释绕过、CTE/UNION、子查询、函数、锁定读取、文件输出、动态 SQL、多语句和 statement ID 状态。
- MongoDB 覆盖嵌套
$lookup/$facet/$unionWith、$out/$merge、服务端脚本、重复字段、未知操作符、跨连接游标及事务拒绝。 - 使用具备写权限的上游测试账号验证网关限制;通过上游请求计数或测试审计确认拒绝请求未被转发,并检查数据和结构未变化。
- 对 SQL/BSON 检查器进行模糊测试,畸形、超深或异常输入不得崩溃或默认放行。
8.2 协议矩阵
- MySQL 5.7.44、8.0、8.4 使用 CLI 和 Go 驱动验证认证、TLS、字符集、查询类型、读写、事务、预编译及会话隔离;8.4 不开启旧认证插件。
- MongoDB 6.0、7.0、8.0 使用
mongosh和官方 Go 驱动验证握手、认证、CRUD、BSON、批量写入、跨批次游标、错误和直连副本集主节点事务。 - SSH 使用 OpenSSH、
ssh、sftp验证密码、公钥、带口令私钥、首次指纹确认、指纹变化拒绝、重启指纹稳定、终端缩放、退出码、多 channel 和文件传输。 - 验证不支持的 SSH 转发被拒绝,目标断开、半关闭及认证失败后正确清理。
8.3 出口、安全与界面
- 三类服务覆盖直连、无认证 SOCKS5、用户名密码 SOCKS5,以及出口不可达、认证失败、目标拒绝、超时和取消。
- 使用仅 SOCKS5 环境可解析的目标域名验证远端 DNS;覆盖 IPv4/IPv6、禁止降级、失败不直连、TLS 主机名和 SSH 指纹校验。
- 验证秘密查看的重新认证、会话、CSRF、限流、禁缓存、自动隐藏及 API/日志脱敏。
- 覆盖白名单拒绝、端口冲突、连接限额、启停、重启恢复及异常断连后的资源清理。
- 页面验收覆盖创建配置、连接测试、版本或指纹展示、模式选择、启动、复制连接示例、查看状态、停止及删除。
9. 开发顺序与交付物
- 完成三类协议、公共出站适配和只读策略的独立验证,固定依赖及测试镜像版本。
- 建立 Go 服务、SQLite 自动迁移、秘密存储、管理员会话和配置 API。
- 实现公共监听器、出站连接层、协议模块及可选只读策略,接入生命周期和记录。
- 实现 Vue 管理界面、秘密查看、SSH 指纹确认和连接示例。
- 完成版本矩阵、端到端测试、构建嵌入和部署文档。
交付自动迁移、管理员密码重置命令、构建启动说明、环境变量示例、可选只读白名单及限制文档、TLS/SSH/SOCKS5 配置说明,以及包含数据库、OpenSSH 和 SOCKS5 的 Docker Compose 测试环境。
Windows 双击启动(0.1.1)
- 已实现无环境凭据启动:自动打开浏览器,首次页面设置管理员,后续复用账号。
- 默认数据目录
%APPDATA%\serviceport;随机主密钥使用当前 Windows 用户 DPAPI 加密保存,独占锁阻止多个进程同时启动。 - 自动生成一年有效的 localhost TLS 证书;保持服务器环境变量部署兼容。
- 本地初始化仅监听回环地址,校验 Host、Origin 和一次性随机 token;初始化完成后关闭设置入口。
- 错误保留在控制台窗口;提供打包后的首次启动、浏览器设置、密钥持久化和重启验证脚本
scripts/verify-desktop.mjs。
0.2.0:服务解耦、主题与开发免登录
-
目标代理出口新增 SSH 转发(
outbound.mode=ssh):支持跳板机账号密码及固定 SHA256 主机指纹,使用 direct-tcpip 连接目标,适用于 MySQL/MongoDB/SSH。域名由跳板机解析,连接独立管理 SSH 通道、超时和关闭,不回退直连。跳板机须允许 TCP 转发;本期跳板机认证为密码,目标 SSH 自身仍支持私钥。 -
开发免登录模式下点击查看密码直接显示账号和密码,支持分别复制;启用管理员认证时保留重新认证。连接测试详情展示返回字段、目标地址、出口方式、耗时和失败阶段。
-
目标服务独立管理连接地址、认证凭据、上游 TLS、SSH 目标指纹及 SOCKS5 出口;多个同协议网关通过 targetId 引用同一目标。
-
网关独立管理监听、来源白名单、连接上限、网关账号、SSH 网关身份及可选只读策略。删除网关不删除目标;被引用的目标不能删除;修改目标须先停止所有关联网关。
-
旧数据通过事务自动拆分为 targets/gateways 两张加密配置表,引用有外键约束;迁移保留原网关 ID、密码、SSH 主机身份和启用状态。回滚版本须恢复升级前备份。
-
新增 /api/v1/targets CRUD、连接测试、密码查看和 SSH 指纹确认;网关仍使用 /api/v1/proxies。旧版内联创建请求兼容导入为独立目标,但网关更新禁止修改目标参数;新界面只使用 targetId 创建网关。
-
管理界面增加浅色、深色、海蓝及跟随系统主题,浏览器持久化选择。
-
开发阶段默认 SERVICEPORT_AUTH_ENABLED=false:跳过管理员创建与登录,直达控制台;仅限回环访问,保留 Host/Origin/CSRF 校验。设置 true 恢复 bcrypt 管理员登录、会话及密码查看重新认证。远程部署必须显式开启认证。
目标压缩与逐命令审计
-
开发启动入口:根目录
start-dev.cmd调用scripts/start-dev.ps1,固定使用项目data/serviceport.sqlite与同目录 DPAPI 密钥、TLS 文件,重启复用配置,默认回环免登录。测试数据库单独存放,不使用开发配置库。 -
2026-09-09 实测 Windows MySQL Community 5.7.44:目标 TLS 开启,分别使用 none/zlib 压缩,通过读写、预编译、事务提交/回滚、中文与 emoji、只读阻止 DELETE/UPDATE prepare、错误密码拒绝、网关明文连接拒绝和命令审计。临时数据库自动删除;日志在
artifacts/mysql-verification/real-mysql57-*.log。本次真实实例测试为直连,未覆盖 SOCKS5 或 MySQL 8.x。 -
MySQL 5.7 兼容 zlib CLIENT_COMPRESS,先读取并回放目标 greeting,仅在目标声明支持时请求压缩;MongoDB hello 协商 zlib OP_COMPRESSED,限制解压尺寸、校验包结构/校验和,避免压缩认证与凭据管理命令。目标不支持时回退为未压缩,测试返回实际算法。SSH 当前仅 none。
-
命令日志独立加密存储,记录网关、目标、来源 IP、协议、操作类别、内容和放行/拦截决策,支持 200 条游标分页,保留 7 天。单条内容 16 KiB 截断并标记;不能写入审计时阻止继续发送请求。
-
SQL 记录查询与预编译模板,执行包记录 statement ID/参数字节数;MongoDB 记录 Extended JSON 主体,批量文档序列只记录存在与字节数。认证握手不记。
-
SSH exec 记录请求命令,shell 按提交输入行记录并明确不等同执行确认;SFTP 解析请求类别、路径/句柄、偏移与长度,不保存文件正文。远端脚本内部命令和终端编辑不能由网关可靠还原。
审计分库、导出与连接编排
- 配置固定在
data/serviceport.sqlite;命令审计与连接/安全事件写入data/audit/YYYY-MM-DD.sqlite,按 UTC 日期分库,同日分别使用 commands/events 表。 - 启动自动迁移旧日志,命令密文保持不变,迁移中断可重试;升级前停止服务并备份整个 data 目录。日志保留 7 天,过期分库清理;查询和导出跨分库进行。
- 命令审计支持网关、协议、目标、来源 IP、决策、操作类型、关键词和时间筛选;连接与审计支持服务、来源 IP、事件类型、关键词和时间筛选。两页均支持游标分页和按筛选条件导出全部 CSV,不受当前页限制。
- CSV 使用 UTF-8 BOM、正确转义及公式防护,通过临时文件下载,避免完整导出占用服务端内存。
- 拖拽连接支持把网关拖到同协议目标,也可依次点击连接;运行中的网关须先停止,保存后刷新仍保留关联。
- MySQL 放行 SHOW TABLE STATUS(含库名、LIKE、WHERE)、SHOW FULL PROCESSLIST,以及 SHOW VARIABLES 与 information_schema.ENGINES 查询组成的只读批次。
- Redis 暂不改写 Cluster 重定向;RabbitMQ 仅支持 AMQP 0-9-1;PostgreSQL 暂不支持独立 CancelRequest。三种新增服务暂无只读开关,压缩仍仅支持 MySQL/MongoDB。