NOPE-网络对象保护引擎
“当你的AI说NOPE时,你的防火墙会监听。”
NOPE是Palo Alto防火墙的启用MCP的外部动态列表(EDL)管理器。它提供了web UI、REST API和MCP工具,用于管理防火墙通过HTTPS使用的IP和域阻止列表。
截图
特性
- Web 界面 -用于管理列表和IOC的现代React接口
- REST API -列表和IOC的完整CRUD操作
- MCP集成 -LLM友好的工具,用于通过自然语言阻止威胁
- EDL服务 -NGINX提供与Palo Alto防火墙兼容的基于文本的列表
- 验证 -IP、CIDR和域的自动验证
- 除外条款 -内置防止阻止TLD、RFC1918和localhost的保护
- 去重 -IOC已通过多个来源的评论进行了重复数据消除
快速开始
先决条件
- Docker和Docker Compose
1.克隆并启动
git clone
cd nope-edl
./setup.shsetup.sh 将:
- 创建
.env从.env.example(如果不存在) - 自动生成所有必需的机密
- 启动Docker Compose堆栈
- 打印带有您凭据的启动横幅
首次启动时会自动生成自签名SSL证书。
要使用其他端口,请设置 NOPE_PORT 在 .env 跑步前 setup.sh,或:
NOPE_PORT=9443 docker compose up -d建筑
┌─────────────────────────────────────────────────────────────────┐
│ Docker Compose │
├─────────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ NGINX │ │ NOPE API │ │ PostgreSQL │ │
│ │ (HTTPS) │───▶│ (FastAPI) │───▶│ (Database) │ │
│ │ Port 8081 │ │ Port 8000 │ │ Port 5432 │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘API终点
列表
| 方法 | 端点 | 描述 |
|---|---|---|
| 得到 | /api/lists | 获取所有包含IOC计数的列表 |
| 职位 | /api/lists | 创建新列表 |
| 得到 | /api/lists/{slug} | 获取列表详细信息 |
| 补丁 | /api/lists/{slug} | 更新列表 |
| 删除 | /api/lists/{slug} | 删除列表 |
国际奥委会
| 方法 | 端点 | 描述 |
|---|---|---|
| 得到 | /api/iocs?q={query} | 搜索IOC |
| 职位 | /api/iocs | 将IOC添加到列表中 |
| 得到 | /api/iocs/{id} | 获取国际奥委会详细信息 |
| 删除 | /api/iocs/{id} | 从所有列表中删除IOC |
| 删除 | /api/iocs/{id}/lists/{slug} | 从特定列表中删除IOC |
EDL访问
| 方法 | 端点 | 描述 |
|---|---|---|
| 得到 | /edl/{slug} | 以文本形式获取列表(需要基本身份验证) |
MCP工具
NOPE公开了MCP工具 /mcp LLM集成。这些工具使AI助手能够通过自然语言管理块列表。
列表管理
| 工具 | 说明 |
|---|---|
list_lists | 获取所有包含IOC计数和描述的黑名单 |
get_list | 获取特定列表的详细信息 |
create_list | 创建一个包含名称、描述和标签的新块列表 |
update_list | 更新列表元数据(名称、描述、标签) |
delete_list | 删除列表并删除所有国际奥委会协会 |
list_iocs | 按页码列出特定列表中的所有IOC |
国际奥委会管理层
| 工具 | 说明 |
|---|---|
block_ioc | 将IOC(IP、CIDR、域、通配符或哈希)添加到块列表中 |
unblock_ioc | 从特定列表或所有列表中删除IOC |
search_ioc | 在所有列表中搜索IOC(支持部分匹配) |
update_ioc | 在现有的IOC中添加评论以获取审计历史记录 |
bulk_block_ioc | 在一次操作中添加多个IOC(最多500个) |
bulk_unblock_ioc | 在一次操作中删除多个IOC(最多500个) |
排除管理
排除阻止某些IOC被添加到阻止列表中(例如,RFC1918私有范围,TLD)。
| 工具 | 说明 |
|---|---|
list_exclusions | 列出所有活动排除规则(内置和用户定义) |
preview_exclusion | 预览添加排除的影响(显示冲突的IOC) |
add_exclusion | 添加具有可选冲突清除功能的自定义排除规则 |
remove_exclusion | 删除用户定义的排除规则 |
支持的IOC类型
NOPE自动检测IOC类型:
| 类型 | 示例 |
|---|---|
| IP地址 | 203.0.113.50 |
| CIDR范围 | 203.0.113.0/24 |
| 域名 | evil.com, malware.example.net |
| 通配符域 | *.badsite.com |
| SHA256哈希 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 |
| SHA1哈希 | da39a3ee5e6b4b0d3255bfef95601890afd80709 |
| MD5哈希 | d41d8cd98f00b204e9800998ecf8427e |
MCP身份验证
MCP端点需要API密钥身份验证。在中创建API密钥 设置>API密钥 并将其纳入 api-key 头球
通过mcp代理连接Claude Desktop
Claude Desktop仅支持stdio传输,因此您需要 mcp代理 连接到NOPE的基于HTTP的MCP服务器。
1.安装mcp代理
# Using pip
pip install mcp-proxy
# Or using pipx (recommended)
pipx install mcp-proxy2.创建API密钥
- 登录NOPEhttps://your-server
- 首选 设置>API密钥
- 点击 +添加API密钥
- 输入名称(例如“claude desktop”)
- 复制生成的密钥(以开头
nope_)
3.配置克劳德桌面
编辑您的Claude Desktop配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 视窗:
%APPDATA%\Claude\claude_desktop_config.json
添加NOPE服务器配置:
{
"mcpServers": {
"nope": {
"command": "mcp-proxy",
"args": [
"--transport=streamablehttp",
"--no-verify-ssl",
"--headers", "api-key", "nope_YOUR_API_KEY_HERE",
"https://your-nope-server/mcp"
]
}
}
}论点解释:
--transport=streamablehttp-使用HTTP传输(NOPE的MCP端点需要)--no-verify-ssl-跳过自签名证书的SSL验证--headers api-key ...-传递API密钥进行身份验证
备注:如果Claude Desktop找不到mcp代理,请使用完整路径。跑which mcp-proxy(macOS/Linux)或where.exe mcp-proxy(Windows)获取路径。
4.重新启动克劳德桌面
完全退出并重新启动Claude Desktop以加载新配置。
5.验证连接
在Claude Desktop中,您应该可以看到NOPE的可用工具。试着问:
“NOPE中有哪些可用的黑名单?”
连接克劳德代码
克劳德代码 支持stdio和HTTP传输。
选项1:使用mcp代理(HTTP传输)
通过CLI添加MCP服务器:
claude mcp add nope -- mcp-proxy \
--transport=streamablehttp \
--no-verify-ssl \
--headers api-key "nope_YOUR_API_KEY" \
https://your-nope-server/mcp移除 --no-verify-ssl 如果使用可信证书。
选项2:直接编辑settings.json
编辑您的Claude Code设置文件:
- macOS:
~/.claude/settings.json - Linux:
~/.claude/settings.json
添加MCP服务器配置:
{
"mcpServers": {
"nope": {
"command": "mcp-proxy",
"args": [
"--transport=streamablehttp",
"--no-verify-ssl",
"--headers", "api-key", "nope_YOUR_API_KEY_HERE",
"https://your-nope-server/mcp"
]
}
}
}验证连接
添加服务器后,重新启动Claude Code并使用以下命令进行验证:
/mcp你应该看看 nope 列出了17个可用工具。
MCP对话示例
阻止威胁:
User: "Block evil.com on the domain blocklist"
Agent: Uses block_ioc(value="evil.com", list_slug="domainblocklist")
→ "Successfully added evil.com (domain) to list 'domainblocklist'"调查国际奥委会:
User: "Why is that IP blocked?"
Agent: Uses search_ioc(value="1.2.3.4")
→ "Found 1 IOC(s):
- 1.2.3.4 (ip)
Lists: ipblocklist
Comments: Malicious C2 server"批量操作:
User: "Block these IPs from the threat feed: 198.51.100.1, 198.51.100.2, 198.51.100.3"
Agent: Uses bulk_block_ioc(values=["198.51.100.1", "198.51.100.2", "198.51.100.3"],
list_slug="ipblocklist", comment="Threat feed import")
→ "Bulk add complete: Added: 3, Skipped: 0, Failed: 0"排除处理:
User: "Block 192.168.1.1"
Agent: Uses block_ioc(value="192.168.1.1", list_slug="ipblocklist")
→ "Cannot block: RFC1918 private range (matches exclusion '192.168.0.0/16')"管理除外责任:
User: "Add an exclusion for our partner's domain"
Agent: Uses add_exclusion(value="*.partner.com", reason="Trusted partner domain")
→ "Added exclusion '*.partner.com' (wildcard). Reason: Trusted partner domain"审计跟踪
通过MCP执行的所有动作都记录有所使用的API密钥名称(例如。, mcp:claude-desktop),在国际奥委会审计历史中可见。
配置
所需的环境变量
NOPE需要这些环境变量才能启动。跑步 ./setup.sh 自动生成所有这些。要手动配置,请复制 .env.example 到 .env 并填写值:
| 变量 | 描述 |
|---|---|
SECRET_KEY | JWT签名密钥。生成方式 openssl rand -hex 32 |
DEFAULT_ADMIN_PASSWORD | 初始管理员密码(至少6个字符) |
DEFAULT_EDL_PASSWORD | EDL基本身份验证密码(至少6个字符) |
DB_PASSWORD | PostgreSQL密码 |
所有密码在启动时都经过验证。如果缺少任何必需的变量或密码不符合最低6个字符的长度要求,该应用程序将拒绝启动。
所有环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
NOPE_PORT | 8081 | 用于web UI和API的HTTPS端口 |
DB_USER | nope | PostgreSQL用户名 |
DB_PASSWORD | (必填) | PostgreSQL密码 |
SECRET_KEY | (必填) | JWT签名密钥 |
DEFAULT_ADMIN_USER | admin | 默认UI管理员用户名 |
DEFAULT_ADMIN_PASSWORD | (必填) | 默认UI管理员密码 |
DEFAULT_EDL_USER | edl | 默认edl基本身份验证用户名 |
DEFAULT_EDL_PASSWORD | (必填) | 默认EDL基本身份验证密码 |
自定义SSL证书
默认情况下,自动生成自签名证书。对于生产,请提供您自己的证书:
- 将您的证书放在
certs目录:
mkdir certs
cp your-cert.pem certs/cert.pem
cp your-key.pem certs/key.pem- 取消注释中的绑定挂载
docker-compose.yml:
nginx:
volumes:
- ./certs:/etc/nginx/certs:ro- 重新启动堆栈:
docker compose up -d
Palo Alto防火墙配置
- 在PAN-OS中,转到 对象>外部动态列表
- 创建新的EDL:
- 类型:IP列表或域列表 - 来源: https://your-nope-server/edl/{list-slug} - 证书配置文件:(配置为信任您的证书) - 用户名/密码:您的EDL证书
发展
本地开发(无Docker)
# Backend
cd backend
pip install -e ".[dev]"
uvicorn app.main:app --reload --port 8000
# Frontend
cd frontend
npm install
npm run dev运行测试
cd backend
pytest构建于
- 后端:Python、FastAPI、SQLAlchemy、Alembic、FastMCP
- 前端:React、TypeScript、Vite、TanStack查询
- 数据库:PostgreSQL
- 代理:NGINX
许可证
麻省理工学院
