一个全面的模型上下文协议(MCP)服务器套件,通过统一的API接口管理Palo Alto Networks防火墙和服务。
Palo Alto Networks MCP 服务器套件通过专用服务器提供模块化的防火墙管理方法:
┌─────────────────┐ ┌──────────────────┐
│ 核心服务器 │◄────┤ 策略服务器 │
│ │ └──────────────────┘
│ (基础服务)│ ┌──────────────────┐
│ │◄────┤ 配置服务器 │
│ │ └──────────────────┘
│ │ ┌──────────────────┐
│ │◄────┤ 对象服务器 │
│ │ └──────────────────┘
│ │ ┌──────────────────┐
│ │◄────┤ 设备服务器 │
└────────┬────────┘ └──────────────────┘
│
▼
┌─────────────────┐
│ Palo Alto API │
└─────────────────┘
要通过 Smithery 自动安装Palo Alto Networks MCP 服务器套件到Claude Desktop:
npx -y @smithery/cli install @DynamicEndpoints/paloalto-mcp-server --client claude
git clone https://github.com/your-org/paloalto-mcp-servers.git
cd paloalto-mcp-servers
# 安装核心服务器
cd paloalto-server
npm install
# 安装策略服务器
cd ../paloalto-policy-server
npm install
# 安装配置服务器
cd ../p_aloalto-config-server
npm install
# 安装对象服务器
cd ../paloalto-objects-server
npm install
# 安装设备服务器
cd ../paloalto-device-server
npm install
# 在每个服务器目录中创建 .env 文件
PANOS_API_KEY=your-api-key
PANOS_API_BASE_URL=https://your-firewall.example.com/api
# 可选配置
PANOS_VERIFY_SSL=true
PANOS_TIMEOUT=30000
PANOS_DEBUG=false
提供共享功能和核心操作的基础服务器。
const result = await useMcpTool("paloalto-server", "verify_credentials", {
api_key: process.env.PANOS_API_KEY
});
console.log(result.content[0].text); // 身份验证状态
全面的安全策略和规则管理。
// 获取所有安全规则
const rules = await useMcpTool("paloalto-policy", "get_security_rules", {});
// 使用过滤器获取规则
const webRules = await useMcpTool("paloalto-policy", "get_security_rules", {
filter: {
service: ["http", "https"],
action: "allow"
}
});
// 创建基本安全规则
await useMcpTool("paloalto-policy", "create_rule", {
rule_type: "security",
rule_data: {
name: "allow-internal-web",
source: ["internal-network"],
destination: ["web-servers"],
service: ["http", "https"],
action: "allow",
log_setting: "default",
profile_setting: {
group: ["default-protection"]
}
}
});
// 创建更复杂的规则,包括区域和应用程序
await useMcpTool("paloalto-policy", "create_rule", {
rule_type: "security",
rule_data: {
name: "restrict-social-media",
source_zone: ["trust"],
destination_zone: ["untrust"],
source: ["internal-users"],
destination: ["any"],
application: ["facebook-base", "twitter-base"],
service: ["application-default"],
action: "deny",
log_setting: "detailed-logging",
description: "阻止社交媒体访问"
}
});
// 更新现有规则
await useMcpTool("paloalto-policy", "update_rule", {
rule_type: "security",
rule_name: "allow-internal-web",
rule_data: {
service: ["http", "https", "ssh"],
description: "更新以允许SSH访问"
}
});
系统配置和设置管理。
// 更新DNS设置
await useMcpTool("paloalto-config", "update_network_settings", {
dns_primary: "8.8.8.8",
dns_secondary: "8.8.4.4",
dns_search_domain: "example.com"
});
// 配置接口
await useMcpTool("paloalto-config", "configure_interface", {
name: "ethernet1/1",
config: {
mode: "layer3",
ip: ["10.0.1.1/24"],
zone: "trust",
enable: true
}
});
网络对象和地址管理。
// 创建地址对象
await useMcpTool("paloalto-objects", "create_address_object", {
name: "web-server-1",
type: "ip-netmask",
value: "10.0.1.100/32",
description: "主要Web服务器",
tags: ["production", "web"]
});
// 创建地址组
await useMcpTool("paloalto-objects", "create_address_group", {
name: "web-servers",
description: "所有Web服务器",
members: ["web-server-1", "web-server-2"],
tags: ["production", "web"]
});
// 创建动态地址组
await useMcpTool("paloalto-objects", "create_dynamic_address_group", {
name: "active-web-servers",
description: "当前正在使用的Web服务器",
filter: "tag.production and tag.web and state.up"
});
设备操作和监控。
// 获取设备状态
const status = await useMcpTool("paloalto-device", "get_device_status", {});
// 提交更改
await useMcpTool("paloalto-device", "commit_changes", {
description: "更新了安全策略",
admins: ["admin1"], // 可选:指定提交哪些管理员的更改
});
// 备份配置
await useMcpTool("paloalto-device", "backup_config", {
filename: "backup-2024-01-20.xml",
include_shared: true
});
async function deploySecurityPolicy() {
// 1. 创建地址对象
await useMcpTool("paloalto-objects", "create_address_object", {
name: "internal-subnet",
type: "ip-netmask",
value: "192.168.1.0/24"
});
// 2. 创建安全规则
await useMcpTool("paloalto-policy", "create_rule", {
rule_type: "security",
rule_data: {
name: "allow-outbound",
source: ["internal-subnet"],
destination: ["any"],
service: ["web-browsing"],
action: "allow"
}
});
// 3. 验证配置
const rules = await useMcpTool("paloalto-policy", "get_security_rules", {});
// 4. 提交更改
await useMcpTool("paloalto-device", "commit_changes", {
description: "部署了新的安全策略"
});
}
async function configureHA() {
// 1. 配置HA接口
await useMcpTool("paloalto-config", "configure_ha", {
mode: "active-passive",
group: {
id: 1,
description: "主HA组"
},
interfaces: {
ha1: {
port: "ethernet1/3",
ip: "10.0.0.1/24"
},
ha2: {
port: "ethernet1/4",
ip: "10.0.1.1/24"
}
}
});
// 2. 配置HA策略
await useMcpTool("paloalto-config", "configure_ha_policy", {
preemptive: true,
heartbeat_interval: 2000,
heartbeat_threshold: 3
});
// 3. 提交更改
await useMcpTool("paloalto-device", "commit_changes", {
description: "配置了HA设置"
});
}
const ruleTemplate = {
base: {
log_setting: "default",
profile_setting: {
group: ["default-protection"]
}
},
web: {
service: ["web-browsing"],
application: ["web-browsing"],
profile_setting: {
group: ["strict-web-protection"]
}
}
};
async function createRuleFromTemplate(type, customData) {
const template = {...ruleTemplate.base, ...ruleTemplate[type]};
await useMcpTool("paloalto-policy", "create_rule", {
rule_type: "security",
rule_data: {...template, ...customData}
});
}
async function batchCreateObjects(objects) {
const results = [];
for (const obj of objects) {
try {
const result = await useMcpTool("paloalto-objects", "create_address_object", obj);
results.push({status: "success", name: obj.name});
} catch (error) {
results.push({status: "error", name: obj.name, error: error.message});
}
}
return results;
}
// 测试API连通性
const status = await useMcpTool("paloalto-server", "test_connection", {
timeout: 5000,
verify_ssl: true
});
if (!status.success) {
console.error(`连接失败: ${status.error}`);
// 检查防火墙可达性
// 验证API密钥权限
// 验证SSL证书
}
// 分析规则冲突
const analysis = await useMcpTool("paloalto-policy", "analyze_rules", {
rule_type: "security",
checks: ["shadowing", "redundancy", "conflicts"]
});
if (analysis.issues.length > 0) {
console.log("发现规则问题:", analysis.issues);
}
try {
await useMcpTool("paloalto-device", "commit_changes", {
description: "策略更新"
});
} catch (error) {
if (error.code === "ConfigurationLocked") {
// 处理锁定的配置
await useMcpTool("paloalto-device", "release_config_lock", {});
} else if (error.code === "ValidationError") {
// 处理验证错误
console.error("配置验证失败:", error.details);
}
}
git checkout -b feature/new-feature
git commit -m "添加新功能"
git push origin feature/new-feature
MIT 许可证 - 详情见 LICENSE 文件