CKMS:企业级 KMS 激活服务器,支持 Anti-CC 防护与 Web 管理后台
CKMS (Custom KMS) 是一个与 Microsoft KMS (Key Management Service) 协议完全兼容的企业级激活服务器。项目在 vlmcsd 核心之上,深度扩展了 Anti-CC 防护、ACL 访问控制、GeoIP 地区过滤、远程集中管理 与 PHP Web 管理后台,覆盖从单机部署到多服务器集群运维的完整场景。
GitHub 仓库:https://github.com/xuanlove/ckms(MIT License)
📑 文章目录
核心功能
| 能力 | 说明 |
|---|---|
| 协议兼容 | KMS v4 / v5 / v6 全版本支持,MS RPC 与简单 Socket 双传输层 |
| Anti-CC 防护 | 滑动窗口计数限流,单 IP 超限自动拒绝,防止激活接口被恶意刷量 |
| ACL 访问控制 | IP 白名单/黑名单,支持单 IP、IP 段、CIDR 子网掩码 |
| GeoIP 过滤 | 按 ISO 国家码限制允许激活的地区,精准管控来源地域 |
| 远程管理 | 周期心跳上报 + 远端配置双向同步,HMAC-SHA256 签名认证,防重放防篡改 |
| Web 控制台 | PHP 管理后台:服务器列表/黑白名单/参数配置/申请审批一站式管理 |
| 日志系统 | 按天滚动写入,自动清理过期日志,保留天数可配置 |
| 热重载 | 运行中发送 SIGHUP 即可重载配置,无需重启服务 |
| 多平台 | Linux (amd64/i386/arm64) + Windows (x86/x64),预编译二进制开箱即用 |
支持平台
| 系统 | 架构 | 传输层 | 预编译 |
|---|---|---|---|
| Linux | x86_64 (amd64) | Socket / MS RPC | ✅ |
| Linux | i386 | Socket | ✅ |
| Linux | ARM64 (aarch64) | Socket | ✅ |
| Windows | x64 | Socket / MS RPC | ✅ |
| Windows | x86 | Socket | ✅ |
默认使用内置加密(CRYPTO=internal),零外部依赖,无需安装 OpenSSL 即可运行。
快速开始
启动服务端
# Linux
chmod +x ckmsd
./ckmsd # 默认监听 0.0.0.0:1688
# Windows(管理员 cmd)
ckmsd.exe # 前台运行
ckmsd.exe -s # 注册为系统服务(安装到 C:\ckmsd)
验证连接
./ckms # 测试本地 127.0.0.1:1688
./ckms 192.168.1.10:1688 # 测试远端服务器
./ckms -v # 输出详细信息
./ckms -l Windows # 查看可用应用清单
客户端激活
Windows 激活
# 管理员 cmd
slmgr /skms <服务器IP>:1688
slmgr /ipk <GVLK>
slmgr /ato
slmgr /xpr :: 查看激活状态
Office 激活
# 进入 Office 安装目录
cscript ospp.vbs /sethst:<服务器IP>
cscript ospp.vbs /setprt:1688
cscript ospp.vbs /inpkey:<GVLK>
cscript ospp.vbs /act
GVLK(批量授权密钥)列表详见 man/vlmcsd.7。
编译教程
环境依赖
| 依赖 | 用途 | 安装命令 (Debian/Ubuntu) |
|---|---|---|
| gcc / clang | 主编译器 | apt-get install build-essential |
| GNU make | 构建工具 | apt-get install make |
| libssl-dev | HTTPS 远程管理(可选) | apt-get install libssl-dev |
| gcc-multilib | i386 交叉编译(可选) | apt-get install gcc-multilib libc6-dev-i386 |
| gcc-aarch64-linux-gnu | ARM64 交叉编译(可选) | apt-get install gcc-aarch64-linux-gnu |
| MinGW-w64 | Windows 交叉编译(可选) | apt-get install gcc-mingw-w64-x86-64 gcc-mingw-w64-i686 |
本机编译
cd src
make # 编译服务端 + 客户端
make allmulti # 额外编译多调用二进制
| 产物 | 说明 |
|---|---|
| vlmcsd | KMS 服务端 |
| vlmcs | KMS 客户端 |
| vlmcsdmulti | 多调用二进制(服务端 + 客户端合一) |
| lib/libkms.a | 静态库(可被第三方程序调用) |
全平台一键构建
| 脚本 | 用途 | 产物目录 |
|---|---|---|
| build-release.sh | 全平台构建(Linux amd64/i386/arm64 + Windows x64/x86) | release/ |
| build-all.sh | Linux 三架构交叉编译 | dist/ |
| build-linux.sh | Linux 三架构(开发用) | dist/linux/ |
./build-release.sh # 推荐:一次生成 5 个平台二进制
编译选项
| 选项 | 默认值 | 说明 |
|---|---|---|
| CRYPTO | internal | 加密后端:internal / openssl / openssl_with_aes / windows / polarssl |
| HAVE_SSL | 0 | 启用远程管理 HTTPS(需 OpenSSL) |
| USE_THREADS | 自动 | 启用 pthreads 并发 |
| MAX_THREADS | 16 | 最大并发连接数 |
| USE_MSRPC | 0 | Windows 下启用 MS RPC 传输(更高兼容性) |
| PROGRAM_NAME | bin/vlmcsd | 服务端输出路径 |
| CLIENT_NAME | bin/vlmcs | 客户端输出路径 |
| MULTI_NAME | bin/vlmcsdmulti | 多调用二进制输出路径 |
| STRIP | 1 | 是否 strip 调试符号 |
# 启用 HTTPS 远程管理(需 libssl-dev)
make HAVE_SSL=1 CRYPTO=openssl
# Windows x64 交叉编译
make CC=x86_64-w64-mingw32-gcc PROGRAM_NAME=bin/ckmsd.exe CLIENT_NAME=bin/ckms.exe
# Linux ARM64 交叉编译
make CC=aarch64-linux-gnu-gcc
配置文件说明
CKMS 通过 config.ini(INI 格式)统一配置扩展功能。使用 -i 指定路径,运行中发送 SIGHUP 可热重载。
; ===============================
; Anti-CC 防护
; ===============================
MaxRequests=20 ; 单 IP 时间窗口内最大请求数,超出即拒绝
WindowMinutes=1 ; 时间窗口(分钟)
; ===============================
; 远程管理
; ===============================
RemoteEnable=false ; 启用心跳上报 + 配置同步
RemoteUrl=http://localhost/ckms/web/api/
RemoteApiKey=your-api-key ; 认证密钥(需与 Web 后台一致)
; ===============================
; 公网 IP 发现
; ===============================
RemoteIPEnable=false ; 启用后通过探针获取真实公网 IP(NAT 穿透)
; ===============================
; GeoIP 过滤
; ===============================
GeoFilterEnable=false ; 启用按国家码过滤
GeoAllowCountries= ; 允许的国家码,逗号分隔,如 CN,US,JP
; ===============================
; 日志
; ===============================
LogEnabled=true ; 启用日志
LogRetentionDays=30 ; 保留天数(0 = 永久保留)
LogDir=Log ; 日志目录(相对程序目录)
所有字段均为可选,缺失时使用默认值。
服务端命令行参数
| 参数 | 说明 |
|---|---|
| -L <addr:port> | 指定监听地址,可多次使用 |
| -P <port> | 指定默认端口(需在 -L 之前使用) |
| -o0|1|2|3 | 公网防护等级(0=无 / 1=仅私网监听 / 2=拒绝公网连接 / 3=1+2) |
| -i <file> | 加载 INI 配置文件 |
| -D | 后台守护进程模式 |
| -p <file> | 写入 PID 文件 |
| -s | Windows 注册为系统服务 |
| -t <sec> | TCP 连接超时(默认 30 秒) |
| -m <n> | 最大并发客户端数 |
| -d | 处理完一个请求后立即断开 |
| -F0|1 | 是否允许绑定未配置的 IP(1=允许) |
| -x0|1 | 退出行为(0=尽力运行 / 1=严格退出) |
| -V | 显示版本信息 |
| -h | 显示帮助 |
./ckmsd # 默认监听 0.0.0.0:1688
./ckmsd -i /path/to/config.ini # 加载 INI 配置
./ckmsd -L 192.168.1.10:1688 # 指定监听地址
./ckmsd -o1 # 仅监听私网地址(公网不可达)
./ckmsd -o3 # 最高防护:仅私网 + 拒绝公网
./ckmsd -D -p /var/run/ckmsd.pid # 后台运行 + PID 文件
./ckmsd -m 100 -t 10 # 限制 100 并发,10 秒超时
Web 管理后台
部署
cp -r web /var/www/html/ckms
chown -R www-data:www-data /var/www/html/ckms/data
chmod -R 755 /var/www/html/ckms/data
访问 http://your-host/ckms/,默认密码 admin123(首次登录后请立即修改)。
功能一览
| 模块 | 功能 |
|---|---|
| 服务器管理 | 添加服务器(自动生成 API Key)、在线状态、版本、地区、封禁 IP 数、重置 Key、删除 |
| 黑白名单 | 在线编辑白名单/黑名单,支持单 IP、IP 段、CIDR 子网 |
| 系统设置 | 时区、Anti-CC 参数、日志保留、GeoIP 过滤、心跳超时、状态页可见内容 |
| 申请管理 | 审批用户自助提交的白名单申请 |
| 状态页 | /ckms/status.php 公开展示服务器状态(可见内容由管理员配置) |
数据持久化
| 文件 | 内容 |
|---|---|
| servers.json | 服务器列表(名称、API Key、心跳、版本、封禁 IP) |
| whitelist.txt | 白名单 |
| blacklist.txt | 黑名单 |
| applications.json | 白名单申请记录 |
| admin.json | 管理员密码哈希与全局配置 |
| login_fails.json | 登录失败计数(防爆破) |
数据写入采用 临时文件 + rename 原子操作,写入前自动备份到 .bak。即使进程崩溃也不会丢失数据,多服务器并发心跳安全可靠。
远程管理与心跳
启用 RemoteEnable=true 后,ckmsd 自动与远端管理后台保持双向同步:
| 周期 | 方向 | 内容 |
|---|---|---|
| 每 120 秒 | 上报 → | 心跳:版本、监听地址、封禁 IP 列表、在线状态 |
| 每 600 秒 | ← 拉取 | 配置:白名单、黑名单、Anti-CC 参数、GeoIP 配置 |
认证机制:API 通过四元组鉴权,有效防止重放和未授权访问:
| Header | 说明 |
|---|---|
| x-api-key | 服务器 API Key(管理后台生成) |
| x-nonce | 随机串(防重放) |
| x-timestamp | 时间戳(防重放) |
| x-signature | HMAC-SHA256(path|nonce|timestamp, api_key) |
注意事项
安全
- 修改默认密码:Web 后台默认密码 admin123,部署后立即修改
- 保护 API Key:RemoteApiKey 等同于服务器身份凭证,切勿泄露
- 端口管控:1688 端口暴露公网时,务必启用 Anti-CC 和白名单,防止被滥用
- 启用 HTTPS:远程管理走 HTTP 时 API Key 以明文传输,生产环境建议 make HAVE_SSL=1 并使用 https:// 地址
运行
- 充值计数:KMS 服务器需达到最小客户端计数才会响应激活(Windows 25 个,Office 5 个)。可用 ckms 手动发送请求充值
- 防火墙:确保 TCP 1688 入站放行;启用远程管理时确保 ckmsd 可访问 RemoteUrl
- 日志磁盘:日志按天写入 LogDir,注意磁盘空间。LogRetentionDays=0 表示永久保留
- NAT 环境:RemoteIPEnable=false 时上报本地网卡 IP;服务器在 NAT 后时启用该项可上报真实公网 IP
- 公网防护:生产环境建议使用 -o3(仅私网监听 + 拒绝公网连接),获得最高安全等级
文档与目录结构
man page 文档(man/ 目录):
| 文件 | 内容 |
|---|---|
| vlmcsd.7 | KMS 概念与快速上手 |
| vlmcsd.8 | ckmsd 全部命令行选项 |
| vlmcs.1 | ckms 客户端使用 |
| vlmcsdmulti.1 | 多调用二进制说明 |
| vlmcsd.ini.5 | INI 配置文件语法 |
| vlmcsd-floppy.7 | floppy144.vfd 启动盘使用 |
总结
CKMS 在 vlmcsd 稳定核心之上补齐了企业运维所需的完整闭环:Anti-CC 防护防止激活接口被刷量,ACL 与 GeoIP 精细管控来源,远程心跳 + 配置双向同步支撑多服务器集群,PHP Web 后台让运维人员无需 SSH 即可管理全部节点。默认零依赖、支持热重载与多平台预编译,适合作为内网 KMS 基础设施一键部署。
