使用说明
最重要的MCP服务器
基于Kali Linux的模型上下文协议(MCP)服务器,用于教育网络渗透测试,使用临时Docker容器直接与Claude Code集成。
概述
此服务器允许Claude Code与行业标准安全工具进行交互,以便在本地实验室环境中进行授权的安全测试。与典型的MCP实现不同,此服务器使用 临时容器架构 每次扫描都在一个具有完整功能的隔离的、短暂的Docker容器中运行,然后立即终止。
可用工具
- nmap_scan:支持SYN扫描的服务发现和端口扫描
- 展示:Web服务器配置错误和漏洞扫描
- sqlmap_scan:自动SQL注入检测
- dirb_scan:内容发现(目录暴力破解)
- searchsploit_query:本地漏洞数据库查找
⚠️ 安全与道德
重要:仅在您拥有或有明确书面许可进行测试的系统上使用这些工具。此服务器专为家庭实验室或沙箱环境中的教育目的而设计。
未经授权访问计算机系统是非法的。
建筑
Claude Code Session
↓
MCP Server (runs on host)
↓
For each command:
↓
Fresh Docker Container with Capabilities
↓
Execute Command (nmap, nikto, etc.)
↓
Return Results
↓
Container Auto-Terminates & Removes
证券收益
✅ 短暂隔离 -每次扫描都在一个新鲜的容器中运行 ✅ 无持久状态 -容器使用后立即销毁 ✅ 全功能 -NET_RAW、NET_ADMIN用于特权扫描 ✅ 自动清理 -无集装箱残留物 ✅ 最小攻击面 -无状态安全模型
先决条件
-
Docker 桌面版 (或Docker引擎)
- 下载:https://www.docker.com/products/docker-desktop
- 验证:
docker --version
-
Python 3.8+
- 验证:
python3 --version
- 验证:
-
Claude 代码命令行界面
- 安装:
curl -fsSL https://claude.ai/install.sh | sh - 验证:
claude --version(应显示2.0.5+)
- 安装:
-
MCP Python库
- 将在安装步骤中安装
安装指南
步骤1:克隆存储库
git clone https://github.com/MaorOhana/pentest-docker-mcp.git
cd pentest-docker-mcp
第二步:构建Docker镜像
此映像包含所有安全工具(Nmap、Nikto、Sqlmap、Dirb、Searchsploit):
docker build -t pentest-mcp-server:latest .
# Verify the image was created
docker images | grep pentest-mcp-server
构建时间:约10-15分钟(下载Kali Linux和安全工具)
步骤3:在主机上安装MCP依赖项
MCP服务器在您的主机上运行(不在Docker中),因此我们需要安装它的依赖项:
pip3 install "mcp[cli]>=1.2.0" --user
步骤4:配置Claude代码
将pentest服务器添加到您的Claude Code MCP配置中:
# Copy the .mcp.json to your project directory
cp .mcp.json /path/to/your/project/.mcp.json
# Or manually create .mcp.json with:
cat > .mcp.json << 'EOF'
{
"mcpServers": {
"pentest-server": {
"command": "/absolute/path/to/pentest-docker-mcp/run-pentest-server.sh",
"type": "stdio"
}
}
}
EOF
重要:替换 /absolute/path/to/pentest-docker-mcp 你的实际路径。
要获取绝对路径,请执行以下操作:
cd /path/to/pentest-docker-mcp
pwd
# Use this output in the command path above
步骤5:使包装脚本可执行
chmod +x run-pentest-server.sh
步骤6:测试安装
# Test that the server starts correctly
echo '{"jsonrpc":"2.0","id":1,"method":"ping"}' | ./run-pentest-server.sh
# You should see a JSON response like:
# {"jsonrpc":"2.0","id":1,"result":{}}
步骤7:启动Claude代码
cd /path/to/your/project
claude code
当系统提示有关新MCP服务器时,选择:
❯ 1. Use this and all future MCP servers in this project
步骤8:验证集成
在Claude Code会话中,键入:
/mcp
你应该看看 pentest-server 列出了5个可用工具。
使用示例
配置后,在Claude Code对话中自然地使用这些工具:
端口扫描(带SYN扫描)
Scan host.docker.internal with nmap using SYN scan on common ports
或者对于您的Mac本地主机:
Run an nmap SYN scan on host.docker.internal ports 80, 443, 22, 8080
Web漏洞扫描
Run a nikto scan against http://testsite.local to check for web vulnerabilities
目录发现
Use dirb to scan http://localhost:8080 for hidden directories
利用数据库搜索
Search exploitdb for "apache 2.4.49" vulnerabilities
SQL注入测试
Test http://localhost:8080/page?id=1 for SQL injection vulnerabilities with sqlmap
macOS注意:扫描本地计算机
在macOS上,Docker在VM中运行,因此要从容器内部扫描实际的Mac,请使用:
host.docker.internal而不是127.0.0.1或localhost
例子:
Scan host.docker.internal with nmap to see what services are running on my Mac
运作原理
传统方法(未使用)
MCP Server (in Docker) → Persistent Container → All scans run inside
❌ Container stays running
❌ State persists between scans
❌ Higher security risk
我们的方法(短暂容器)
MCP Server (on host) → Each scan:
1. Spawn fresh container with capabilities
2. Execute command (e.g., nmap)
3. Return results
4. Container terminates & removes
✅ No persistent containers
✅ Fresh environment per scan
✅ Automatic cleanup
验证短暂行为
您可以实时观察容器的创建和销毁:
# Terminal 1: Watch Docker events
docker events --filter 'image=pentest-mcp-server:latest'
# Terminal 2: Run a scan in Claude Code
# You'll see: create → start → die → destroy (all in < 1 second)
检查是否有剩余的容器:
docker ps -a | grep pentest
# Should show no results
结合Docker MCP网关
您可以使用这个pentest服务器 旁边 其他服务器的Docker MCP网关:
{
"mcpServers": {
"MCP_DOCKER": {
"command": "docker",
"args": ["mcp", "gateway", "run"],
"type": "stdio"
},
"pentest-server": {
"command": "/path/to/pentest-docker-mcp/run-pentest-server.sh",
"type": "stdio"
}
}
}
这为您提供了:
- MCP_DOCKER:对于标准服务器(黑曜石、GitHub等),通过网关
- pentest服务器:直接连接,功能齐全
故障排除
服务器未启动
-
检查Python路径:
which python3 # Update run-pentest-server.sh if needed -
检查MCP库:
python3 -c "import mcp; print('MCP installed')" -
检查Docker镜像:
docker images | grep pentest-mcp-server # Should show: pentest-mcp-server:latest
权限错误
如果出现“不允许操作”错误:
# Verify Docker is running
docker ps
# Rebuild the image (includes setcap for nmap)
docker build -t pentest-mcp-server:latest .
工具未出现在/mcp中
-
检查.mcp.json路径:
cat .mcp.json # Verify the command path is absolute, not relative -
测试包装器脚本:
./run-pentest-server.sh # Should start the server and wait for input -
检查克劳德代码日志:
claude doctor
扫描超时
如果扫描时间过长且超时:
- 命令有5分钟的超时时间(300秒)
- 要获得更快的扫描速度,请使用目标选项:
Scan host.docker.internal with nmap -F (fast scan, top 100 ports)
集装箱清理问题
如果容器没有被移除:
# Check for stuck containers
docker ps -a | grep pentest
# Force cleanup if needed
docker rm -f $(docker ps -aq --filter "ancestor=pentest-mcp-server:latest")
这 --rm Docker命令中的标志可确保自动清理。
更新服务器
当你对Python服务器代码进行更改时:
# No need to rebuild Docker image for server code changes
# Just restart your Claude Code session
# If you modify Dockerfile or add tools:
docker build -t pentest-mcp-server:latest .
高级配置
修改资源限制
编辑 pentest_server.py 要更改Docker资源限制:
docker_cmd = [
"docker", "run", "--rm",
# ... existing flags ...
"--memory=4g", # Increase from 2g
"--cpus=2.0", # Increase from 1.0
# ...
]
添加自定义安全工具
-
将工具添加到
Dockerfile:RUN apt-get install -y your-tool -
重建映像:
docker build -t pentest-mcp-server:latest . -
在中添加工具功能
pentest_server.py:@mcp.tool() async def your_tool_scan(target: str = "") -> str: """Description of your tool.""" if not target.strip(): return "❌ Error: Target is required." logger.info(f"Running your-tool on {target}") return run_command_in_container(["your-tool", target])
网络配置
服务器使用 --network=host 默认情况下为完全网络访问。要更改:
编辑 pentest_server.py 并修改 docker_cmd 使用不同的网络:
"--network=bridge", # Isolated network
# or
"--network=your-custom-network", # Custom Docker network
安全考虑
是什么让它安全
- 短命容器:每次扫描都在一个立即销毁的新鲜容器中运行
- 无持久状态:扫描之间没有数据持续存在
- 独立执行:每个容器都与主机和其他容器隔离
- 资源限制:CPU(1核)和内存(2GB)限制可防止资源耗尽
- 非root用户:命令以如下方式运行
mcpuser(UID 1000),不是root - 最小功能:仅授予必要的Linux功能(NET_RAW、NET_ADMIN、NET_BIND_SERVICE)
- 审计跟踪:所有工具执行都会记录到带有时间戳的stderr中
与Docker MCP网关的比较
| 功能 | Docker MCP网关 | 我们最重要的服务器 |
|---|---|---|
| 容器生命周期 | 短暂✓ | 短暂✓ |
| 能力支持 | ❌ 受限 | ✓ 完整(NET_RAW等) |
| 用例 | 通用MCP服务器 | 安全测试工具 |
| 安全模型 | 沙盒(最低权限) | 特权但隔离 |
Docker MCP网关根据一般安全性的设计限制了功能。我们的服务器授予功能,因为它们 必需的 用于渗透测试工具,但通过短暂的隔离来维护安全性。
卸载
从克劳德代码中删除
# Edit .mcp.json and remove the pentest-server entry
# Or delete the entire .mcp.json if it only contains pentest-server
rm .mcp.json
删除Docker镜像
docker rmi pentest-mcp-server:latest
删除存储库
cd ..
rm -rf pentest-docker-mcp
卸载MCP库(可选)
pip3 uninstall mcp -y
常见问题解答
Q: 为什么不使用Docker MCP网关? A: 网关出于安全考虑限制了Linux的功能。像nmap这样的渗透测试工具需要NET_RAW功能来进行SYN扫描和其他特权操作。
Q: 赋予容器这些功能安全吗? A: 是的,当与临时容器一起使用时。每个容器都是隔离的,作为非根运行,有资源限制,使用后立即销毁。没有持续的攻击面。
Q: 我可以在生产中使用这个吗? A: 这是为 仅限教育和授权的安全测试。切勿在非自有或未经明确许可的系统上使用。
Q: 为什么服务器在主机上运行,而不是在Docker中运行? A: 基于主机的MCP服务器为每个命令生成临时Docker容器。这为我们提供了两全其美的选择:轻量级的服务器管理和隔离的特权执行。
Q: 如何扫描我的Mac本地主机?
A: 使用 host.docker.internal 而不是 127.0.0.1macOS上的Docker在VM中运行,因此容器需要这个特殊的主机名才能到达您的Mac。
Q: 我可以同时运行多个扫描吗? A: 是的!每次扫描都有自己的容器,因此它们并行运行而不受干扰。
贡献
欢迎投稿!请确保:
- 新工具遵循临时容器模式
- 维护安全最佳实践
- 工具包括正确的错误处理
- 文档已更新
许可证
仅供教育使用。负责任和合乎道德地使用。
免责声明
此工具仅用于授权的安全测试和教育目的。用户有责任在执行任何安全测试之前确保他们有适当的授权。作者对误用或非法使用本软件不承担任何责任。
资源
- Claude代码文档: https://code.claude.com/docs/en/mcp
- 模型上下文协议: https://modelcontextprotocol.io
- Docker文档: https://docs.docker.com
- Kali Linux工具: https://www.kali.org/tools/
- 开放式Web应用程序安全项目: https://owasp.org
致谢
内置:
