使用说明
mcp防火墙
WAF风格的反向代理/侧车,为MCP流量执行安全策略。
它的作用
mcp-firewall 位于MCP客户端/代理和MCP服务器之间,然后在请求到达工具之前执行策略。它支持按工具和路径允许/拒绝、源代码检查、可选的Ed25519签名验证、速率限制和JSONL输出的审计日志记录。
给谁的
- 平台/安全工程师在生产中部署MCP
- 需要策略边界的代理基础架构团队
- 需要可审计MCP流量控制的DevOps/SRE团队
- OSS维护人员安全运送MCP服务器
特性
- MCP JSON-RPC的反向代理端点(
/mcp) - 工具允许/拒绝执行
- 请求参数中的路径前缀限制
- 原产地歧视执法
- 可选Ed25519请求签名验证
- 可选Ed25519响应签名
- 每个来源/IP+方法的速率限制
- 仅附加JSONL审核日志
doctor和demoCLI命令可操作性
快速入门
安装
git clone https://github.com/OWNER/mcp-firewall.git
cd mcp-firewall
make setup
跑步2-5分钟
cp .env.example .env
cat > examples/minimal/upstream-mock.sh <<'SH'
#!/usr/bin/env bash
python3 -m http.server 3001 >/dev/null 2>&1
SH
chmod +x examples/minimal/upstream-mock.sh
./examples/minimal/upstream-mock.sh &
cargo run -p mcp-firewall -- run \
--config examples/minimal/policy.yml \
--upstream http://127.0.0.1:3001 \
--listen 127.0.0.1:8787
示例输出/屏幕截图
make demo 在以下位置产生真实的工件 examples/output/demo-result.json:
{
"project": "mcp-firewall",
"version": "0.1.0",
"checks": [
{"name": "tool_allowlist", "result": "pass"},
{"name": "path_restriction", "result": "pass"},
{"name": "origin_auth", "result": "pass"},
{"name": "signature_verification", "result": "pass"},
{"name": "rate_limit", "result": "pass"}
]
}
运作原理
flowchart LR
A[Agent] -->|MCP request| B[mcp-firewall]
B --> C[policy checks]
C -->|allow| D[upstream MCP server]
C -->|deny| E[blocked]
B --> F[audit jsonl]
D --> B
防火墙在以下位置接收MCP JSON-RPC请求 /mcp,解析方法+参数,并应用策略检查。
策略包括允许/拒绝工具、允许的路径前缀、最大正文大小、源分配列表、签名验证和速率限制。
被拒绝的流量会返回明显的4xx错误,并且仍然会被审核。
允许的流量被转发到上游,并记录响应状态。
启用后,响应将使用Ed25519签名并返回 x-mcp-firewall-signature.
完整架构: docs/ARCHITECTURE.md.
配置
- 策略文件格式:
examples/minimal/policy.yml,examples/advanced/policy.yml - CLI标志:
--config,--upstream,--listen,--audit-log--verify-key-hex,--sign-key-hex
- Env示例
.env.example - 完整矩阵: docs/CONFIG.md
故障排除
blocked_by_policy:检查allowlist/denylist和allowed_paths在政策方面。origin_not_allowed:对齐Origin标题与allowed_origins.signature_missing_or_invalid:通过有效的Ed25519签名x-mcp-signature.upstream_unreachable:验证上游URL和网络可达性。- 速率限制错误:增加
rate_limit_per_minute或减少请求突发。
贡献
看 贡献.md.
安全
将密钥保存在git(env/secretmanager)之外,永远不要提交私钥,并进行审查 安全.md 在生产推出之前。
