fgravato/web-lookoutthreatfeed

GitHub: fgravato/web-lookoutthreatfeed

一个 Flask Web 应用,为 Lookout Mobile Endpoint Security 的威胁源阻止列表提供可视化管理界面,替代直接调用 API 的操作方式。

Stars: 0 | Forks: 0

# Lookout Threat Feed Manager 一个 Flask Web 应用,用于通过 [Threat Feed Management API](https://api.lookout.com/mgmt/threat-feeds/api-docs/external) 管理 [Lookout Mobile Endpoint Security](https://www.lookout.com) 的威胁源阻止列表。 ## 功能 - **列表、创建、编辑和删除**威胁源 - **搜索**源内的域名(通过 DataTables 在客户端进行过滤) - **批量添加或删除**域名,只需粘贴列表即可(每次请求最多 15,000 个) - **文件上传** — 支持 CSV 或 JSON 格式,可选择增量或完全覆盖模式 - 显示 API 针对每个域名返回的部分成功错误 ## 要求 - Python 3.9+ - 拥有具备威胁源权限的 Lookout API key ## 快速开始 ``` # 1. Clone git clone https://github.com/fgravato/web-lookoutthreatfeed.git cd web-lookoutthreatfeed # 2. 创建并激活 virtual environment python3 -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate # 3. 安装依赖 pip install -r requirements.txt # 4. 添加您的 API key cp config.ini config.local.ini # 打开 config.local.ini,并将 YOUR_API_KEY_HERE 替换为您的 Lookout API key ``` ``` # 5. 运行 flask run ``` 打开 [http://localhost:5000](http://localhost:5000)。 ## 配置 API 凭证从 INI 文件中读取。`config.local.ini` 优先级更高,且已被 git 忽略——请将您的真实密钥放在该文件中。 | 文件 | 是否提交 | 用途 | |---|---|---| | `config.ini` | 是 | 占位符模板——可以安全提交 | | `config.local.ini` | **否** | 您的真实 API key——切勿提交此文件 | ``` [lookout] api_key = ``` API key 会在首次请求时交换为短期的 OAuth2 bearer token。该 token 缓存在 Flask session 中,并在过期时自动刷新。 ## 使用方法 ### 管理源 主页列出了您租户的所有源。在那里您可以: - **创建**新源(需要标题和描述,各 8–255 个字符) - **编辑**源的标题、描述或分析权限 - **删除**源(需确认提示) - **点击源**以打开其域名管理页面 ### 管理域名 在源详情页面上: | 操作 | 方法 | |---|---| | 搜索 | 在搜索框中输入——即时过滤域名列表 | | 添加域名 | 在 **Bulk Add** 中每行粘贴一个域名,点击 Add | | 删除域名 | 在 **Bulk Delete** 中每行粘贴一个域名,点击 Delete | | 删除单个域名 | 点击任何域名行旁边的 **×** 按钮 | | 上传文件 | 选择 CSV 或 JSON 文件,选择上传类型,点击 Upload | 批量添加/删除每次请求最多支持 **15,000 个域名**(API 限制)。 ### 文件上传格式 #### 增量 CSV — 添加或移除特定域名 ``` domain,action evil.com,add old-threat.net,delete ``` #### 覆盖 CSV — 替换整个源 ``` domain evil.com bad-actor.net ``` #### JSON — 仅限增量 ``` { "operations": [ {"domain": "evil.com", "action": "add"}, {"domain": "old-threat.net", "action": "delete"} ] } ``` API 强制执行的文件大小限制:文件上传为 **7 MB**,JSON 增量更新为 **2 MB**。 ## 运行测试 ``` source .venv/bin/activate python -m pytest test_app.py -v ``` 测试使用了一个 stub `requests` 模块——无需网络调用,也不需要 API key。 ## 生产部署 对于本地之外的任何用途,请在其后端运行 WSGI 服务器并设置一个固定的 secret key: ``` pip install gunicorn FLASK_SECRET_KEY= gunicorn app:app ``` 请从环境变量或 secrets manager 中设置 `app.secret_key`,而不是使用 `app.py` 中自动生成的值。 ## 故障排除 | 症状 | 可能原因 | 解决方法 | |---|---|---| | 主页显示 "Could not authenticate" | API key 缺失或错误 | 检查 `config.local.ini` 是否存在且 key 正确 | | 每次请求都返回 401 | Token 交换失败 | 在 Lookout 控制台中验证 key 是否具有 threat feed scopes | | 上传返回 413 | 文件超出 API 大小限制 | 拆分为较小的文件(7 MB / 2 MB 限制) | | 上传后出现 "Invalid Domain" 错误 | API 拒绝了域名格式 | 确保域名为裸主机名(`evil.com`,而不是 `https://evil.com`) | | 找不到源 (404) | 源 ID 已不存在 | 从主页刷新源列表 | ## 项目结构 ``` app.py # Flask application (~220 lines) templates/ base.html # Bootstrap 5 layout, flash messages feeds.html # Feed list + create modal feed_detail.html # Domain table, bulk ops, file upload, edit modal config.ini # API key template (commit-safe placeholder) requirements.txt # flask, requests test_app.py # 21 unit tests (no network) swagger.json # Lookout API OpenAPI 3.0 spec ``` ## API 参考 此应用封装了 Lookout Threat Feed Management API (`https://api.lookout.com/mgmt/threat-feeds`): | 方法 | 路径 | 用途 | |---|---|---| | GET | `/api/v1/threat-feeds` | 列出租户的源 GUID | | POST | `/api/v1/threat-feeds` | 创建新源 | | GET | `/api/v1/threat-feeds/{id}` | 获取源的元数据 | | PUT | `/api/v1/threat-feeds/{id}` | 更新标题/描述/分析标志 | | DELETE | `/api/v1/threat-feeds/{id}` | 删除源 | | GET | `/api/v1/threat-feeds/{id}/elements` | 下载所有域名 (CSV) | | POST | `/api/v1/threat-feeds/{id}/elements` | 通过 CSV 文件上传域名 | | POST | `/api/v1/threat-feeds/{id}/elements/incremental-updates` | 通过 JSON 批量添加/删除 | 完整规范:[`swagger.json`](swagger.json) 或 [在线 API 文档](https://api.lookout.com/mgmt/threat-feeds/api-docs/external)。 ## 贡献 1. Fork 该仓库并创建一个分支 2. 进行修改并添加测试 (`test_app.py`) 3. 运行 `python -m pytest test_app.py -v`——所有测试必须通过 4. 发起一个 pull request ## 许可证 MIT
标签:CSV上传, DataTables, Flask, JSON解析, Lookout, OAuth2, Python, RESTful API, 企业安全, 威胁情报, 威胁源管理, 开发者工具, 开源, 批量操作, 提示词优化, 无后门, 移动端点安全, 端点防护, 网络安全管理, 网络资产管理, 虚拟环境, 逆向工具, 阻止列表, 黑名单管理