1. Windows环境下Docker部署PentestMCP概述
PentestMCP是一个将常见Web渗透测试工具封装在Docker容器中的Model Context Protocol(MCP)服务器,特别适合在Windows环境下搭建安全测试环境。这个方案最大的优势在于通过Docker容器化技术,避免了在Windows系统上直接安装和配置各种安全工具的繁琐过程,同时保持了环境的隔离性和可移植性。
在实际工作中,我发现很多安全从业者在Windows平台上搭建渗透测试环境时,经常会遇到工具依赖冲突、环境配置复杂等问题。PentestMCP通过预置的Docker镜像,一次性集成了nmap、nikto、sqlmap、dirb、wpscan等常用工具,大大简化了环境准备过程。特别值得一提的是,这个方案还提供了与Claude工具的集成能力,使得安全测试工作可以更加智能化和自动化。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与依赖安装
2.1 Docker Desktop安装与配置
在Windows上部署PentestMCP,首先需要安装Docker Desktop。我推荐使用最新稳定版本,因为早期版本可能存在与Windows系统的兼容性问题。安装过程需要注意以下几点:
- 确保系统满足最低要求:Windows 10/11 64位专业版或企业版(版本2004或更高),至少4GB内存
- 启用WSL2后端(性能更好)或Hyper-V(传统方案)
- 安装完成后,在设置中配置国内镜像源加速下载:
json复制{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
提示:安装完成后务必重启系统,否则可能遇到Docker服务无法启动的问题。我在实际部署中发现,很多安装问题都是由于没有完全重启系统导致的。
2.2 其他必要组件
除了Docker外,还需要准备以下组件:
- Git for Windows:用于克隆PentestMCP仓库
- 文本编辑器:推荐VS Code,便于编辑配置文件
- Claude Desktop(可选):如果需要与Claude工具集成
在安装这些组件时,建议使用管理员权限运行安装程序,并确保将它们添加到系统PATH环境变量中。我曾经遇到过因为PATH配置不正确导致后续步骤失败的情况,排查起来相当耗时。
3. PentestMCP部署详细步骤
3.1 获取PentestMCP源码
首先需要从GitHub获取PentestMCP的源代码。我建议创建一个专门的工作目录来存放这些文件:
bash复制mkdir C:\pentest
cd C:\pentest
git clone https://github.com/YOUR_USERNAME/pentest-mcp-server.git
cd pentest-mcp-server
如果遇到网络问题导致克隆失败,可以尝试使用Git的镜像源或者配置代理。在实际操作中,我发现国内用户可能需要多次尝试才能成功克隆仓库。
3.2 构建Docker镜像
进入项目目录后,执行以下命令构建Docker镜像:
bash复制docker build -t pentest-mcp-server .
首次构建可能需要3-5分钟,因为需要下载Debian基础镜像并安装所有Kali工具。在这个过程中,可能会遇到以下问题及解决方案:
- apt-get更新失败:由于网络问题,可以尝试更换apt源或者重试
- 依赖下载超时:适当增加构建超时时间,或者分段构建
- 内存不足:在Docker设置中增加分配的内存资源
经验分享:我在构建过程中发现,如果遇到某个工具安装失败,可以单独注释掉Dockerfile中对应的部分,先完成其他工具的安装,然后再单独处理有问题的工具。
3.3 MCP目录结构配置
PentestMCP需要特定的目录结构来存放配置文件。在Windows上需要执行以下操作:
bash复制mkdir %USERPROFILE%\.docker\mcp\catalogs
copy custom.yaml %USERPROFILE%\.docker\mcp\catalogs\custom.yaml
这里需要注意Windows路径的特殊性。与Linux/macOS不同,Windows路径需要使用反斜杠,并且在Docker挂载时需要特别注意路径格式。我曾经因为路径格式错误导致容器无法读取配置文件,花费了大量时间排查。
3.4 更新MCP注册表
编辑或创建%USERPROFILE%\.docker\mcp\registry.yaml文件,添加以下内容:
yaml复制registry:
pentest:
ref: ""
这个文件相当于PentestMCP的工具注册表,告诉系统有哪些工具可用。在实际使用中,你可以根据需要添加或删除工具条目。
4. Claude Desktop集成配置
4.1 配置文件修改
要与Claude Desktop集成,需要修改其配置文件。配置文件通常位于:
code复制%APPDATA%\Claude\claude_desktop_config.json
找到或添加mcpServers部分,配置如下:
json复制{
"mcpServers": {
"MCP_DOCKER": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "//var/run/docker.sock:/var/run/docker.sock",
"-v", "C:\\Users\\YOUR_USERNAME\\.docker\\mcp:/mcp",
"docker/mcp-gateway",
"--catalog=/mcp/catalogs/docker-mcp.yaml",
"--catalog=/mcp/catalogs/custom.yaml",
"--config=/mcp/config.yaml",
"--registry=/mcp/registry.yaml",
"--tools-config=/mcp/tools.yaml",
"--transport=stdio"
],
"env": {
"LOCALAPPDATA": "C:\\Users\\YOUR_USERNAME\\AppData\\Local",
"ProgramData": "C:\\ProgramData",
"ProgramFiles": "C:\\Program Files"
}
}
}
}
重要提示:务必将YOUR_USERNAME替换为你的实际Windows用户名,并且注意Windows路径的特殊处理。我在多个项目中看到过因为用户名未正确替换导致的配置失败。
4.2 环境变量配置
PentestMCP支持通过环境变量进行配置,特别是对于需要API密钥的工具如WPScan:
bash复制docker mcp secret set WPSCAN_API_TOKEN="your_token_here"
其他有用的环境变量包括:
CMD_TIMEOUT:命令执行超时时间(默认300秒)NMAP_TIMEOUT:nmap扫描超时时间(默认120秒)DIRB_WORDLIST:自定义目录爆破字典路径
在实际渗透测试中,合理设置这些参数可以显著提高工具的执行效率。
5. 工具使用与实战示例
5.1 基本工具验证
完成所有配置后,重启Claude Desktop,在新的聊天窗口中输入:
code复制list_tools
应该能看到所有10个渗透测试工具列表。如果看不到工具列表,可以按照以下步骤排查:
- 确认Docker镜像是否构建成功:
docker images | grep pentest - 测试网关是否正常工作:手动运行mcp-gateway容器
- 检查配置文件路径是否正确
5.2 常见渗透测试场景
以下是几个典型的使用示例:
-
端口扫描:
code复制Scan 192.168.56.101 for open ports Run a full service version scan on 192.168.56.101 -
Web应用扫描:
code复制Run Nikto on http://192.168.56.101 Check http://192.168.56.101/login.php?id=1 for SQL injection -
目录爆破:
code复制Brute-force directories on http://192.168.56.101 -
WordPress扫描:
code复制Scan the WordPress site at http://192.168.56.101/wp and enumerate plugins -
漏洞搜索:
code复制Search ExploitDB for Apache 2.4 exploits
在实际使用中,我发现通过Claude的自然语言接口调用这些工具,比直接使用命令行更加直观和高效,特别是对于不熟悉具体工具参数的用户。
6. 安全设计与注意事项
6.1 容器安全机制
PentestMCP采用了多重安全措施来确保容器环境的安全性:
- 非root运行:容器以普通用户(mcpuser, uid 1000)身份运行
- 输入验证:所有参数都经过正则表达式验证
- 标志白名单:每个工具只允许使用经过审核的参数
- 无shell执行:所有命令都通过subprocess.run()直接执行
- 日志安全:敏感信息(如API密钥)不会记录在日志中
这些安全措施在实际使用中非常重要,特别是在自动化环境中,可以有效防止命令注入等安全问题。
6.2 法律与合规要求
使用PentestMCP时必须严格遵守以下法律要求:
- 只扫描自己拥有或获得明确书面授权测试的系统
- 不要在未授权的情况下扫描互联网上的系统
- 遵守当地关于网络安全测试的法律法规
- 妥善保存扫描结果,防止敏感信息泄露
我在多个企业项目中看到,即使是在内部网络进行扫描,也需要事先获得正式的授权文件,这一点绝对不能忽视。
7. 常见问题与解决方案
7.1 工具不可见问题
如果工具没有出现在Claude的工具列表中,可以尝试以下解决方案:
-
检查Docker镜像:
bash复制
docker images | grep pentest确认pentest-mcp-server镜像存在
-
手动测试网关:
bash复制docker run --rm -i -v //var/run/docker.sock:/var/run/docker.sock -v %USERPROFILE%\.docker\mcp:/mcp docker/mcp-gateway --catalog=/mcp/catalogs/docker-mcp.yaml --catalog=/mcp/catalogs/custom.yaml --config=/mcp/config.yaml --registry=/mcp/registry.yaml --tools-config=/mcp/tools.yaml --transport=stdio在输出中查找
pentest: (10 tools)部分 -
检查配置文件路径:
确保所有配置文件都放在正确的位置,特别是Windows路径需要特别注意
7.2 权限相关问题
某些工具如nmap可能需要特殊权限:
bash复制docker build -t pentest-mcp-server .
重建镜像可以解决大多数权限问题,因为Dockerfile中已经包含了必要的setcap命令。
7.3 构建失败问题
如果构建过程中出现apt错误:
- 可能是Kali镜像源暂时不可用,等待10分钟后重试
- 可以尝试修改Dockerfile使用其他镜像源
- 对于特定工具安装失败,可以暂时注释掉相关部分,后续单独处理
7.4 Windows特有问题
在Windows上可能会遇到以下特殊问题:
- 路径格式问题:Windows路径需要使用双斜杠或反向斜杠
- 文件权限问题:确保Docker有权限访问配置文件目录
- 防火墙拦截:可能需要配置防火墙允许Docker网络通信
我在Windows平台上部署时,发现最常遇到的问题就是路径格式不正确,特别是在挂载卷时。一个实用的技巧是先在命令行中测试路径是否能正常访问,再应用到Docker配置中。
8. 性能优化与高级配置
8.1 资源分配调整
对于大型扫描任务,可能需要调整Docker资源分配:
- 在Docker Desktop设置中增加CPU和内存限制
- 对于特定工具,可以通过环境变量调整其资源使用
- 考虑将长时间运行的任务拆分为多个小任务
8.2 自定义工具集成
PentestMCP支持添加自定义工具:
- 在Dockerfile中添加新工具的安装命令
- 在custom.yaml中定义新工具的接口
- 在registry.yaml中注册新工具
这个功能非常有用,可以根据项目需求集成特定的安全工具。我曾经在一个项目中成功集成了内部开发的漏洞扫描工具,大大提高了工作效率。
8.3 扫描结果处理
PentestMCP默认将扫描结果输出到Claude聊天窗口。对于更复杂的处理需求:
- 可以修改工具配置将结果保存到文件
- 集成其他工具对结果进行自动化分析
- 设置定期扫描任务并生成报告
在实际工作中,我通常会结合其他工具对扫描结果进行进一步处理,比如将nmap结果导入漏洞管理系统,或者用脚本自动分析sqlmap的输出。
