CKMS:企业级 KMS 激活服务器,支持 Anti-CC 防护与 Web 管理后台

作者: Mr.Xuan 分类: 我的作品 发布时间: 2026-08-07 11:51

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 基础设施一键部署。

What’s your Reaction?
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code

#9 #8 #73 #72 #71 #70 #7 #69 #68 #67 #66 #65 #64 #63 #62 #61 #60 #6 #59 #58 #57 #56 #55 #54 #53 #52 #51 #50 #5 #49 #48 #47 #46 #45 #44 #43 #42 #41 #40 #4 #39 #38 #37 #36 #35 #34 #33 #32 #31 #30 #3 #29 #28 #27 #26 #25 #24 #23 #22 #21 #20 #2 #19 #18 #17 #16 #15 #14 #13 #12 #11 #102 #101 #10 #1 #0126 #0124 #0122 #0121 #0120 #0119 #0118 #0117 #0116 #0115 #0114 #0113 #0112 #0111 #0110 #0109 #0108 #0107 #0106 #0105 #0104 #0103 #0102 #0100