Kali Linux MCP服务器-渗透测试桥
基于Docker的模型上下文协议(MCP)桥接服务器,提供对Kali Linux系统上渗透测试工具的受控、人工智能辅助访问。此设置通过容器化网桥架构在Kali Linux上实现了安全的远程命令执行。
概述
该项目由两个主要部分组成:
- MCP网桥服务器 -Node.js Express服务器,用于公开用于执行命令的HTTP API
- Kali MCP服务器 -通过SSH连接到Kali Linux机器的容器
桥接服务器允许AI助手和其他客户端通过安全的容器化接口在远程Kali Linux系统上执行授权的渗透测试命令。
建筑
Client (AI/API)
↓ HTTP POST
Bridge Server (Node.js on port 3001)
↓ Docker Exec
Kali MCP Server Container
↓ SSH
Kali Linux Machine (Remote/Local)法律声明
此工具用于 仅限授权渗透测试根据大多数司法管辖区的计算机欺诈和滥用法律,未经授权访问计算机系统是非法的。在进行任何安全测试之前,始终获得明确的书面授权。
先决条件
系统要求
- Docker引擎20.10或更高版本
- Docker Compose v2.0或更高版本
- Kali Linux机器(可以是远程或本地VM)
- Kali Linux机器的SSH访问
- 2GB+RAM可用于容器
- Linux主机(推荐)或带Docker桌面的macOS/Windows
网络要求
- 容器和Kali Linux机器之间的网络连接
- 主机上可用于网桥API的端口3001
- Kali Linux机器上可访问的SSH端口(默认22)
使用setup.sh快速入门
安装和管理Kali Pentest MCP服务器的最简单方法是使用自动设置脚本:
# Clone the repository
git clone https://github.com/taddiemason/Kali-Pentest-MCP
cd Kali-Pentest-MCP
# Run the setup script
chmod +x setup.sh
./setup.sh安装脚本将:
- 检查先决条件(Docker、Docker Compose)
- 创建配置文件(.env)
- 生成SSH密钥
- 引导您完成Kali Linux连接设置
- 提供菜单驱动界面来管理服务器
设置脚本功能
这 setup.sh 脚本提供了一个包含以下选项的综合菜单:
- 启动服务器 -构建并启动Docker容器
- 停止服务器 -停止所有正在运行的容器
- 重新启动服务器 -重新启动服务
- 查看日志 -实时日志流
- 检查状态 -查看容器状态、资源使用情况和连接
- 更新服务器 -提取最新更改并重建
- 运行初始设置 -重新配置服务器
- 测试SSH连接 -验证与Kali Linux机器的连接
- 清理 -移除容器和卷
- 退出 -退出脚本
手动安装
如果您更喜欢手动设置或需要更多控制,请按照以下步骤操作:
步骤1:克隆存储库
git clone https://github.com/taddiemason/Kali-Pentest-MCP
cd Kali-Pentest-MCP步骤2:验证Dockerfile
主要的 Dockerfile Kali MCP服务器应该存在。如果缺失,则应包含:
Dockerfile已包含在存储库中并已正确配置。
步骤3:设置SSH密钥
创建SSH密钥以对Kali Linux机器进行安全身份验证:
# Create ssh-keys directory
mkdir -p ssh-keys
# Generate SSH key pair (ED25519 recommended for security)
ssh-keygen -t ed25519 -f ssh-keys/id_ed25519 -N "" -C "kali-mcp-server"
# Set proper permissions
chmod 700 ssh-keys
chmod 600 ssh-keys/id_ed25519
chmod 644 ssh-keys/id_ed25519.pub步骤4:将SSH公钥复制到Kali Linux
将公钥复制到Kali Linux机器:
# Replace with your Kali Linux hostname and username
ssh-copy-id -i ssh-keys/id_ed25519.pub kali@kali.example.com
# Or manually:
cat ssh-keys/id_ed25519.pub
# Then on Kali Linux: echo "
" >> ~/.ssh/authorized_keys步骤5:配置环境变量
创建一个 .env 项目根目录中的文件:
cat > .env << 'EOF'
# Kali Linux Connection Details
KALI_HOST=kali.example.com
KALI_PORT=22
KALI_USERNAME=kali
# Command execution timeout (milliseconds)
COMMAND_TIMEOUT=900000
# Bridge Server Port
PORT=3001
EOF编辑 .env 文件中包含您实际的Kali Linux详细信息:
nano .env步骤6:创建日志目录
mkdir -p logs步骤7:构建并启动容器
# Build the containers
docker-compose build
# Start the services
docker-compose up -d步骤8:验证安装
检查两个容器是否都在运行:
docker-compose ps您应该看到:
NAME IMAGE STATUS
kali-mcp-server kali-pentest-mcp-kali-mcp-server Up
mcp-bridge kali-pentest-mcp-mcp-bridge Up检查网桥服务器运行状况:
curl http://localhost:3001/health预期响应:
{"status":"ok","service":"mcp-bridge"}配置
环境变量
| 变量 | 描述 | 默认值 | 必填 |
|---|---|---|---|
KALI_HOST | Kali Linux机器的主机名或FQDN | Kali.example.com | 是 |
KALI_PORT | Kali Linux机器上的SSH端口 | 22 | 否 |
KALI_USERNAME | Kali Linux的SSH用户名 | Kali | 是 |
COMMAND_TIMEOUT | 命令执行超时(毫秒) | 90000 | 否 |
PORT | 网桥服务器HTTP端口 | 3001 | 否 |
SSH配置
SSH连接使用:
- 基于密钥的身份验证(无密码)
- StrictHostKeyChecking已禁用(用于自动连接)
- UserKnownHostsFile=/dev/null(以避免主机密钥冲突)
安全说明:虽然这些设置简化了自动化,但降低了安全性。在生产中,考虑使用适当的known_hosts管理。
用法
API终点
健康检查
GET http://localhost:3001/health答复:
{
"status": "ok",
"service": "mcp-bridge"
}执行Kali命令
POST http://localhost:3001/v1/tools/execute
Content-Type: application/json
{
"tool_name": "execute_kali_command",
"arguments": {
"command": "nmap -version"
}
}响应(成功):
{
"success": true,
"result": "Nmap version 7.94 ( https://nmap.org )\n..."
}响应(错误):
{
"success": false,
"error": "Failed with code 1"
}使用curl的示例
# Test nmap version
curl -X POST http://localhost:3001/v1/tools/execute \
-H "Content-Type: application/json" \
-d '{
"tool_name": "execute_kali_command",
"arguments": {"command": "nmap -version"}
}'
# Run a simple ping scan (requires authorization!)
curl -X POST http://localhost:3001/v1/tools/execute \
-H "Content-Type: application/json" \
-d '{
"tool_name": "execute_kali_command",
"arguments": {"command": "nmap -sn target.example.com"}
}'
# Check available tools
curl -X POST http://localhost:3001/v1/tools/execute \
-H "Content-Type: application/json" \
-d '{
"tool_name": "execute_kali_command",
"arguments": {"command": "which nmap metasploit nikto sqlmap"}
}'与MCP客户端一起使用
要与Claude Desktop等MCP兼容客户端集成,您需要将客户端配置为指向:
http://localhost:3001/v1/tools/execute有关具体的集成步骤,请参阅MCP客户的文档。
维护
使用安装脚本(推荐)
管理服务器最简单的方法是使用安装脚本:
./setup.sh然后从菜单中选择:
- 选项4 -查看实时日志
- 选项3 -重新启动服务
- 选项2 -停止服务
- 选项1 -启动服务
- 选项5 -检查状态和连接
- 选项6 -更新和重建
- 选项8 -测试SSH连接
手动维护命令
查看日志
# View bridge server logs
docker-compose logs -f mcp-bridge
# View Kali MCP server logs
docker-compose logs -f kali-mcp-server
# View application logs (if configured)
tail -f logs/*.log重新启动服务
# Restart all services
docker-compose restart
# Restart specific service
docker-compose restart mcp-bridge停止服务
# Stop all services
docker-compose stop
# Stop and remove containers
docker-compose down更新中
# Pull latest changes
git pull
# Rebuild and restart
docker-compose down
docker-compose build
docker-compose up -d故障排除
问题:容器无法启动
检查日志:
docker-compose logs常见原因:
- 缺少Dockerfile
- 端口3001已在使用中
- Docker守护进程未运行
解决:
# Check if port is in use
sudo lsof -i :3001
# Restart Docker
sudo systemctl restart docker问题:SSH连接失败
手动测试SSH连接:
ssh -i ssh-keys/id_ed25519 kali@kali.example.com常见原因:
- .env中的KALI_HOST不正确
- Kali Linux上未授权SSH密钥
- 防火墙阻止端口22
- Kali上未运行SSH服务
解决:
# On Kali Linux, check SSH service
sudo systemctl status ssh
# Check authorized_keys
cat ~/.ssh/authorized_keys
# Check firewall
sudo ufw status问题:命令执行超时
增加超时时间:
编辑 .env:
COMMAND_TIMEOUT=1800000 # 30 minutes for long-running scans然后重新启动:
docker-compose restart问题:权限被拒绝错误
检查SSH密钥权限:
ls -la ssh-keys/
# Should show:
# -rw------- id_ed25519
# -rw-r--r-- id_ed25519.pub修复权限:
chmod 600 ssh-keys/id_ed25519
chmod 644 ssh-keys/id_ed25519.pub问题:Docker套接字权限被拒绝
网桥服务器需要访问Docker套接字。如果您看到权限错误:
# Add your user to docker group
sudo usermod -aG docker $USER
# Log out and back in, then verify
docker ps安全考虑
关键安全说明
- 需要授权:仅在您拥有或有明确书面许可进行测试的系统上使用此工具
- SSH密钥:保护您的私钥安全,永远不要将其提交给版本控制
- 网络暴露:网桥API(端口3001)没有身份验证-使用以下项限制访问:
- 防火墙规则 - Docker网络隔离 - 具有身份验证的反向代理
- 命令注入:输入验证最少-在生产使用前进行适当的消毒
- 特权访问:网桥容器以Docker套接字的特权访问运行
- 审计日志:考虑对执行的所有命令进行全面的日志记录
推荐的安全增强功能
- 添加API身份验证:
- 实现基于令牌的身份验证 - 使用API密钥或JWT令牌 - 添加速率限制
- 输入验证:
- 对命令输入进行消毒 - 白名单允许的命令 - 实施命令审批工作流程
- 网络安全:
- 对网桥API使用HTTPS/TLS - 实施IP白名单 - 使用VPN或SSH隧道进行远程访问
- 监控:
- 记录所有API请求 - 监控可疑活动 - 为未经授权的访问尝试设置警报
项目结构
Kali-Pentest-MCP/
├── setup.sh # Automated setup and management script
├── docker-compose.yml # Docker Compose configuration
├── Dockerfile # Main Kali MCP server container
├── Dockerfile.bridge # Bridge server container definition
├── bridge-server.js # Node.js bridge server implementation
├── .env.example # Example environment variables
├── .env # Environment variables (created by setup.sh)
├── ssh-keys/ # SSH keys directory (created by setup.sh)
│ ├── id_ed25519 # Private key (generated by setup.sh)
│ └── id_ed25519.pub # Public key (generated by setup.sh)
├── logs/ # Application logs directory (created by setup.sh)
└── README.md # This file贡献
欢迎投稿!拜托:
- 分叉存储库
- 创建要素分支
- 进行更改
- 如果适用,添加测试
- 提交拉取请求
开发环境设置
# Run in development mode with live logs
docker-compose up
# Rebuild after code changes
docker-compose build --no-cache
# Run bridge server locally for testing
cd /path/to/project
node bridge-server.js许可证
本项目按原样提供,用于教育和授权的安全测试目的。用户有责任确保遵守所有适用的法律法规。
支持
对于问题、疑问或贡献:
- 仔细检查此README
- 查看故障排除部分
- 检查容器日志:
docker-compose logs - 在GitHub上打开一个问题
致谢
- 使用Anthropic的模型上下文协议(MCP)构建
- 与Kali Linux渗透测试工具集成
- 用于桥接API的Node.js和Express.js
- Docker用于容器化
______________________________________________________________________
记住:权力越大,责任越大。在道德和法律上使用此工具。
