pfSense MCP服务器
](https://github.com/gensecaihq/pfsense-mcp-server/releases/tag/v1.0.0)     
使用自然语言管理pfSense防火墙。327工具。9层安全。一个启动命令。
You: "Block all traffic from 203.0.113.5 on WAN"
Claude: Creates block rule → applies changes → confirms with rollback instructions为什么存在
管理pfSense防火墙意味着点击web UI选项卡,记住字段名称,并希望您不要错过一条将您拒之门外的规则。有了这个MCP服务器,你可以用简明的英语描述你想要什么,AI处理REST API调用,验证输入,并在任何破坏性的事情发生之前警告你。
是什么让它与众不同:
- 每一次破坏性操作都需要明确的确认,并向您准确显示会发生什么
- 每次删除/重新启动之前自动进行配置备份——使用一行回滚命令
- 速率限制可防止失控的AI循环用规则淹没防火墙
- 输入净化会阻止每个参数中的命令注入、路径遍历和XSS
快速开始
先决条件: Python 3.10+,pfSense REST API v2软件包 安装
git clone https://github.com/gensecaihq/pfsense-mcp-server.git
cd pfsense-mcp-server
pip install -r requirements.txt
cp .env.example .env
# Edit .env: set PFSENSE_URL, AUTH_METHOD, and credentials连接到克劳德桌面 --添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"pfsense": {
"command": "python3",
"args": ["-m", "src.main"],
"cwd": "/path/to/pfsense-mcp-server",
"env": {
"PFSENSE_URL": "https://192.168.1.1",
"AUTH_METHOD": "basic",
"PFSENSE_USERNAME": "admin",
"PFSENSE_PASSWORD": "your-password",
"PFSENSE_VERSION": "CE_2_8_0",
"VERIFY_SSL": "false"
}
}
}
}开始与防火墙对话。 打开克劳德桌面并询问:
- *“显示过去一小时内所有堵塞的交通”*
- *“正在运行哪些服务?”*
- *“为端口443创建一个端口转发到192.168.1.50”*
- *“运行完整的系统健康检查”*
你能做什么
每个主要pfSense子系统都有327个工具:
| 领域 | 工具 | 你能做什么 |
|---|---|---|
| 防火墙规则 | 9 | 创建、更新、删除、重新排序规则。批量阻止IP。查看已编译的规则集。 |
| 别名 | 5 | 管理主机/网络/端口/URL别名。添加和删除地址。 |
| 网络地址转换 | 16 | 端口转发、出站NAT、1:1 NAT——全生命周期管理。 |
| 虚拟专用网络 | 51 | OpenVPN服务器和客户端、IPsec隧道、WireGuard对等端——CRUD、状态、应用。 |
| 路由 | 16 | 网关、网关组、静态路由、默认网关管理。 |
| 域名系统 | 24 | 未绑定的解析器和dnsmasq转发器:主机覆盖、域覆盖、访问列表。 |
| 动态主机配置协议 | 17 | 租约、静态映射、地址池、自定义选项、服务器配置。 |
| 证书 | 15 | 证书、CA、CRL——生成、续订、导出PKCS12。 |
| 用户 | 12 | 用户帐户、组、LDAP/RADIUS身份验证服务器配置。 |
| 接口 | 14 | 接口配置、VLAN、网桥、组。 |
| 系统 | 44 | 状态、设置、诊断、配置历史、重新启动、ping。 |
| 服务 | 14 | 启动/停止/重新启动服务。NTP、cron、SSH、服务监视器。 |
| 日志 | 3 | 使用解析的IPv4/IPv6过滤日志数据进行防火墙日志分析。 |
| 流量整形 | 12 | 用于带宽管理的整形器、队列和限制器。 |
| 日程表 | 8 | 基于时间的防火墙规则调度。 |
| 虚拟IPS | 5 | CARP、ProxyARP和IP别名管理。 |
| 故障排除 | 10 | 诊断连接、阻塞流量、VPN、DHCP、DNS、HA。完整的健康报告。 |
| 包裹 | 43 | HAProxy、ACME/Let’s Encrypt、BIND DNS、FreeRADIUS。 |
| 效用 | 9 | HATEOAS导航、对象ID管理、护栏状态。 |
安全第一
人工智能管理生产防火墙需要护栏。此服务器有9层:
"Delete firewall rule 5"
1. CLASSIFY → HIGH risk (destructive)
2. ALLOWLIST → tool is permitted
3. SANITIZE → parameters clean (no injection)
4. RATE LIMIT → under 10 deletes/minute
5. DRY RUN? → user can preview first
6. CONFIRM → blocked until confirm=True
7. BACKUP → config revision captured
8. EXECUTE → API call made
9. AUDIT LOG → action recorded with redacted params
Response includes:
"config_backup": {
"pre_change_revision_id": 42,
"rollback_instruction": "restore_config_backup(revision_id=42, confirm=True)"
}每 破坏性操作(52个删除/重新启动/停止工具)需要 confirm=True. 每 创建和更新操作(112个工具)受到速率限制和净化。 每 敏感参数(密码、密钥、令牌)在日志和输出中被编辑。
您还可以:
- 通过
dry_run=True预览任何破坏性操作而不执行 - 通过
verify_descr="Allow HTTPS"验证您是否删除了正确的规则(防止ID转换) - 集
MCP_READ_ONLY=true仅公开118个只读工具(搜索、获取、诊断) - 集
MCP_ALLOWED_TOOLS=search_firewall_rules,get_firewall_log仅限于特定工具
支持的pfSense版本
| 版本 | REST API | 状态 |
|---|---|---|
| pfSense CE 2.8.1 | v2.7.3 | 已验证 |
| pfSense Plus 25.11 | v2.7.3 | 已验证 |
| pfSense CE 2.8.0 | v2.6.0+ | 支持 |
| pfSense Plus 24.11 | v2.6.0+ | 支持 |
认证
支持三种方法(在中配置 .env):
| 方法 | 配置 | 最适合 |
|---|---|---|
| 基本认证 | AUTH_METHOD=basic +用户名/密码 | 快速设置,本地用户 |
| API密钥 | AUTH_METHOD=api_key +系统中的密钥>REST API>密钥 | 自动化,服务帐户 |
| JWT | AUTH_METHOD=jwt +用户名/密码 | 短期令牌,自动刷新 |
部署选项
标准 (默认)--对于克劳德桌面和克劳德代码:
python3 -m src.main超文本传输协议 --对于远程访问和多客户端设置:
python3 -m src.main -t streamable-http --port 3000码头工人 --具有只读文件系统的强化容器:
docker compose up容器安全:非root用户(mcp:1000)只读文件系统,所有功能均已删除, noexec tmpfs, no-new-privileges.
配置
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
PFSENSE_URL | 是 | -- | pfSense URL(例如。, https://192.168.1.1) |
AUTH_METHOD | api_key | api_key, basic,或 jwt | |
PFSENSE_API_KEY | \* | - | REST API密钥 |
PFSENSE_USERNAME | \* | -- | pfSense用户名(用于基本/jwt) |
PFSENSE_PASSWORD | \* | -- | pfSense密码(用于基本/jwt) |
PFSENSE_VERSION | CE_2_8_0 | CE_2_8_0, CE_2_8_1, CE_26_03, PLUS_24_11, PLUS_25_11 | |
VERIFY_SSL | true | false 用于自签名证书 | |
API_TIMEOUT | 30 | 请求超时(秒) | |
MCP_READ_ONLY | false | 仅公开只读工具 |
All configuration options
| 变量 | 默认值 | 描述 |
|---|---|---|
ENABLE_HATEOAS | false | 在API响应中启用HAEOAS链接 |
LOG_LEVEL | INFO | DEBUG, INFO, WARNING, ERROR |
MCP_TRANSPORT | stdio | stdio 或 streamable-http |
MCP_HOST | 127.0.0.1 | HTTP模式的绑定地址 |
MCP_PORT | 3000 | HTTP模式端口 |
MCP_API_KEY | -- | HTTP传输的承载令牌(必需) |
MCP_ALLOWED_ORIGINS | localhost | 允许使用逗号分隔的源 |
MCP_AUDIT_LOG | -- | 审计日志文件的路径(JSON行) |
MCP_RATE_LIMIT_DELETE | 10 | 每60秒的最大删除次数 |
MCP_RATE_LIMIT_CREATE | 20 | 每60秒的最大创建次数 |
MCP_RATE_LIMIT_CRITICAL | 2 | 每300秒的最大关键操作数 |
MCP_ALLOWED_TOOLS | all | 逗号分隔的工具列表 |
MCP_ROLLBACK_BUFFER | 50 | 回滚条目保存在内存中 |
测试
python3 -m pytest tests/ -v # 308 tests
python3 -m pytest tests/ --cov=src # with coverageMCP规范合规性
符合 MCP 2025-11-25 (最新):
ToolAnnotations在所有327个工具上(readOnlyHint、destructiveHint、幂等Hint)serverInfo.version和instructions提供- 源标头验证(必须要求)
- 带有定时安全比较的承载令牌认证
- 根据规范,应默认绑定到localhost
- stdio和流式HTTP传输
项目结构
src/
main.py Entry point
server.py FastMCP instance + API client
client.py pfSense REST API v2 HTTP client
guardrails.py 9-layer defense-in-depth system
helpers.py Validation, parsing, safety guards
models.py Data models
middleware.py HTTP auth + Origin validation
tools/ 34 tool modules (327 tools)
tests/ 308 tests贡献
我们需要在不同的pfSense环境中进行真实世界的测试。看 贡献 或者:
- 分叉并创建特征分支
- 跑
python3 -m pytest tests/ -v - 提交PR
思想: 针对真实pfSense的集成测试、额外的包支持(Snort、Suricata)、Ollama本地LLM桥、多实例管理。
