网络对象保护引擎

NOPE是一个用于Palo Alto防火墙的MCP支持的外部动态列表(EDL)管理器,提供Web UI、REST API和MCP工具,用于管理防火墙通过HTTPS消费的IP和域名阻止列表。

  • by beauchompers
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 beauchompers/nope

使用说明

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 <repository-url>
cd nope-edl
./setup.sh

setup.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-proxy

2.创建API密钥

  1. 登录NOPEhttps://your-server
  2. 首选 设置>API密钥
  3. 点击 +添加API密钥
  4. 输入名称(例如“claude desktop”)
  5. 复制生成的密钥(以开头 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证书

默认情况下,自动生成自签名证书。对于生产,请提供您自己的证书:

  1. 将您的证书放在 certs 目录:

    mkdir certs
    cp your-cert.pem certs/cert.pem
    cp your-key.pem certs/key.pem
    
  2. 取消注释中的绑定挂载 docker-compose.yml:

    nginx:
      volumes:
        - ./certs:/etc/nginx/certs:ro
    
  3. 重新启动堆栈: docker compose up -d

Palo Alto防火墙配置

  1. 在PAN-OS中,转到 对象>外部动态列表
  2. 创建新的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

许可证

麻省理工学院