mcp技术安全
加强安保 模型上下文协议 用于管理的(MCP)服务器 Technitium DNS服务器 通过其HTTP API。
专为配合使用而设计 克劳德代码 以及其他MCP兼容客户端。
特性
- 39工具 涵盖DNS区域、记录、阻止、缓存、设置、应用程序、DNSSEC、日志和诊断
- 输入验证 所有参数(RFC 1035域检查、IP验证、枚举分配表)
- HTTPS强制 对本地网络进行明确的HTTP选择加入
- 只读模式 仅公开安全的查询工具
- 需要确认 用于破坏性操作(删除区域、删除记录、刷新缓存/允许/阻止、卸载应用程序)
- 速率限制 对破坏性操作有更严格的限制
- 审核日志记录 结构化JSONL到stderr
- 响应消毒 删除令牌、密码、堆栈跟踪和敏感路径
- 错误清理 防止错误消息中的凭据/路径泄漏
- 令牌文件支持 用于安全的凭证存储
- 认证互斥体 防止并发身份验证竞争
- POST-only API调用 用于所有突变操作;区域导出使用具有短时间会话令牌的GET(Technitium API要求)
快速开始
# Clone and build
git clone https://github.com/rosschurchill/technitium-mcp-secure.git
cd technitium-mcp-secure
npm install
npm run build
# Register with Claude Code (see "Generating an API Token" below first)
claude mcp add technitium-dns \
--env TECHNITIUM_URL=https://your-server-ip:5380 \
--env TECHNITIUM_TOKEN=your-api-token \
-- node /path/to/technitium-mcp-secure/dist/index.js配置
所有配置都是通过环境变量进行的:
| 变量 | 必填 | 描述 |
|---|---|---|
TECHNITIUM_URL | 是 | 服务器URL(例如。 https://192.168.1.100:5380) |
TECHNITIUM_TOKEN | 令牌/密码之一 | API令牌(首选) |
TECHNITIUM_TOKEN_FILE | 令牌/密码之一 | 包含令牌的文件的路径(必须是模式0600) |
TECHNITIUM_PASSWORD | 令牌/密码 | 管理员密码(首选令牌)之一 |
TECHNITIUM_USER | 否 | 用户名(默认值: admin) |
TECHNITIUM_READONLY | 否 | 设置 true 隐藏所有写入工具 |
TECHNITIUM_ALLOW_HTTP | 否 | 设置 true 允许不安全的HTTP连接 |
身份验证优先级: TECHNITIUM_TOKEN > TECHNITIUM_TOKEN_FILE > TECHNITIUM_PASSWORD
从中清除敏感环境变量 process.env 在阅读之后。
工具
只读(18个工具)
| 工具 | 说明 |
|---|---|
dns_health_check | 服务器版本、正常运行时间、转发器配置、故障率 |
dns_get_stats | 查询顶级客户端/域/已阻止的统计信息 |
dns_check_update | 检查是否有更新的服务器版本可用 |
dns_resolve | 通过服务器测试DNS解析 |
dns_list_zones | 列出所有已配置的区域 |
dns_zone_options | 区域DNSSEC、传输和通知设置 |
dns_export_zone | 以BIND格式导出区域文件 |
dns_list_records | 列出区域中的记录 |
dns_list_blocked | 列出被阻止的域(分层,支持深入查看) |
dns_list_allowed | 列出允许的域(分层,支持深入查看) |
dns_list_cache | 列出缓存区域(分层,支持深入查看) |
dns_get_settings | 完整服务器设置 |
dns_query_logs | 使用筛选器查询DNS日志 |
dns_list_apps | 列出已安装的DNS应用程序 |
dns_list_app_store | 列出Technitium应用商店中的可用应用程序 |
dns_get_app_config | 获取已安装应用程序的配置 |
dns_dnssec_info | 区域的DNSSEC属性 |
dns_get_ds | DNSSEC签名区域的DS记录 |
书写(21个工具)
| 工具 | 说明 |
|---|---|
dns_create_zone | 创建新的DNS区域 |
dns_delete_zone | 删除区域(需要 confirm: true) |
dns_enable_zone | 启用禁用区域 |
dns_disable_zone | 禁用区域(保留记录) |
dns_set_zone_options | 更新区域配置(通知、传输ACL) |
dns_add_record | 添加DNS记录 |
dns_update_record | 更新现有记录 |
dns_delete_record | 删除记录(需要 confirm: true) |
dns_block_domain | 阻止域 |
dns_remove_blocked | 从阻止列表中删除域 |
dns_flush_blocked | 刷新整个自定义阻止列表(需要 confirm: true) |
dns_allow_domain | 允许域(绕过阻止列表) |
dns_remove_allowed | 从允许列表中删除域 |
dns_flush_allowed | 刷新整个允许列表(需要 confirm: true) |
dns_flush_cache | 刷新DNS缓存(需要 confirm: true) |
dns_delete_cached | 从缓存中删除特定域 |
dns_set_settings | 更新服务器设置(转发器、阻止等) |
dns_update_blocklists | 强制立即更新阻止列表 |
dns_temp_disable_blocking | 暂时禁用阻止(自动重新启用) |
dns_install_app | 从应用商店安装DNS应用 |
dns_uninstall_app | 卸载应用程序(需要 confirm: true) |
安全
生成API令牌
建议使用API令牌进行身份验证。令牌避免在每次请求时发送您的管理员密码,并且可以独立撤销。
选项A:Web管理UI
- 打开Technitium网站管理(例如。
http://your-server-ip:5380) - 使用您的管理员凭据登录
- 首选 行政 (齿轮图标,右上角)
- 向下滚动至 会话
- 在...之下 创建API令牌,输入名称(例如。
mcp-server) - 点击 创建
- 复制显示的令牌值-这是唯一一次显示它
选项B:API(卷曲)
# Login first to get a session token
curl -s -X POST 'http://your-server-ip:5380/api/user/login' \
-d 'user=admin&pass=yourpassword' | jq -r '.response.token'
# Then create a non-expiring API token using the session token
curl -s -X POST 'http://your-server-ip:5380/api/user/createToken' \
-d 'user=admin&pass=yourpassword&tokenName=mcp-server' | jq -r '.response.token'安全地存储令牌:
# Option 1: Pass directly as env var (simplest)
claude mcp add technitium-dns \
--env TECHNITIUM_TOKEN=your-token-here ...
# Option 2: Use a token file (more secure - keeps token out of shell history)
echo "your-token-here" > ~/.technitium-token
chmod 600 ~/.technitium-token
claude mcp add technitium-dns \
--env TECHNITIUM_TOKEN_FILE=~/.technitium-token ...本地网络(HTTP)
如果您的Technitium服务器没有配置TLS(仅适用于局域网设置),您需要明确允许HTTP:
claude mcp add technitium-dns \
--env TECHNITIUM_URL=http://your-server-ip:5380 \
--env TECHNITIUM_TOKEN=your-token \
--env TECHNITIUM_ALLOW_HTTP=true \
-- node /path/to/technitium-mcp-secure/dist/index.jsstderr将记录一条警告,提醒您凭据以明文形式发送。
只读模式
对于仅监视用例,隐藏所有写入工具:
claude mcp add technitium-dns-readonly \
--env TECHNITIUM_URL=http://your-server-ip:5380 \
--env TECHNITIUM_TOKEN=your-token \
--env TECHNITIUM_READONLY=true \
--env TECHNITIUM_ALLOW_HTTP=true \
-- node /path/to/dist/index.js速率限制
- 全局:100个请求/分钟
- 创建/修改操作:10/分钟
- 删除/刷新操作:5/分钟
审计日志
所有工具调用都以JSONL形式记录到stderr中,并带有时间戳、工具名称、经过净化的参数、结果状态和持续时间。敏感值(令牌、密码)在记录之前会被编辑。
尚未实施
Technitium API具有约173个终点。此MCP服务器涵盖了最有用的36。API中提供了以下类别,但尚未公开:
- DHCP管理 --范围、租赁、保留(~12个端点)
- 用户和组管理 --创建/删除用户、管理组、权限(约15个端点)
- 集群管理 --多服务器群集、运行状况、故障转移(约15个端点)
- 区域导入/克隆/转换 --从文件导入、从其他服务器克隆、转换区域类型
- DNSSEC签名和密钥管理 --签名/取消签名区域、旋转键、算法配置
- 允许/阻止区域导入/导出 --从文件批量导入/导出
- 设置备份/还原 --完整服务器配置备份和还原
- 日志管理 --日志文件删除,日志设置更改
如果你需要其中任何一个,欢迎投稿或开题。
兼容性
经过测试 Technitium DNS服务器v14.3 在Alpine Linux上。所有36个API端点均通过实时的v14 API验证。
注: Technitium的API路径在不同版本之间发生了变化。如果您看到404错误,请检查您的服务器版本是否为v14+。早期版本使用了不同的路径(例如。 /api/allowedZones/list 而不是 /api/allowed/list).
需求
- Node.js>=18
- Technitium DNS服务器v14+
更新日志
v1.2.0版本
- 添加19个新工具(共39个):删除/刷新允许和阻止、删除缓存、启用/禁用/配置/导出区域、服务器设置管理、临时阻止禁用、阻止列表更新、应用商店/安装/卸载/配置、DNSSEC信息、更新检查
- 所有36个API终点均通过验证,返回200个Technitium v14.3
- 添加“尚未实施”部分,记录可用的API类别
v1.1.1
- 修复
dns_resolve缺少必需的server参数(现在默认为this-server) - 修复
dns_query_logs缺失name和classPath查询日志(Sqlite)应用程序的参数 - 修复
dns_list_allowed,dns_allow_domain使用错误的API路径(/api/allowedZones/*->/api/allowed/*) - 修复
dns_list_blocked,dns_block_domain使用错误的API路径(/api/blockedZones/*->/api/blocked/*) - 修复
dns_list_cache使用错误的API路径(/api/cache/zones/list->/api/cache/list) - 修复
dns_allow_domain,dns_block_domain使用错误的参数名称(zone->domain) - 所有17个API端点均通过验证返回200个Technitium v14.3
v1.1.0版本
- 安全强化:输入验证、审计日志、速率限制、响应净化
- HTTPS强制,带有HTTP选择加入、只读模式、破坏性操作确认
- 令牌文件支持,auth互斥,POST-only API调用,env-var清除
v1.0.0
- 初始版本包含20个DNS管理工具
许可证
麻省理工学院
