hondo78/Warroom
GitHub: hondo78/Warroom
面向中小型 Sophos 环境的安全运营仪表盘,聚合多源日志与威胁情报,提供 AI 辅助的事件响应和防火墙 IOC 源自动分发能力。
Stars: 0 | Forks: 0
# Warroom
适用于中小型 Sophos 环境的安全运营仪表盘。
聚合来自 **Sophos Central**(告警、事件、端点、防火墙)、
**Sophos Firewall (SFOS) syslog**(IPS、WAF、身份验证、流量)以及 **NetFlow
v5/v9/IPFIX** 的数据,并通过 **GeoIP + AbuseIPDB / VirusTotal / Shodan /
Sophos Intelix / GreyNoise** 来丰富 IP 信息。被封锁的 IP、域名和 URL 会作为
**IOC 源**(TXT)发布,供防火墙通过 URL 拉取。
```
┌──────────────────┐ Syslog 5514 ┌──────────┐
│ Sophos Firewall │ ───────────────► │ syslog │──┐
└──────────────────┘ NetFlow 2055 └──────────┘ │
│ ▼
│ ┌──────────┐ ┌────────────────────┐
│ │ netflow │ ──►│ PostgreSQL │◄──┐
│ └──────────┘ └────────────────────┘ │
▼ ▲ │
┌──────────────────┐ REST API │ │
│ Sophos Central │ ◄─────────────────── ┌─────────┐ │
└──────────────────┘ │ backend │ ──► Redis │
└─────────┘ (Cache) │
▲ │
│ /ioc_IP │
▼ │
┌─────────┐ │
Browser ◄───► │ nginx │ │
└─────────┘ │
▲ │
│ HTTP-Pull │
│ (X-API-Key) │
┌────┴────┐ │
│Firewall │──────────┘
└─────────┘ Blocklist
```
## 目录
- [Warroom 能做什么?(用户视角)](#what-can-warroom-do-user-view)
- [环境要求](#requirements)
- [6 步设置](#setup-in-6-steps)
- [我需要获取什么?(清单)](#what-do-i-need-to-obtain-checklist)
- [连接数据源](#connecting-data-sources)
- [用于防火墙的 IOC 源](#ioc-feeds-for-firewalls)
- [Block API (Web UI)](#block-api-web-ui)
- [AI agent (可选)](#ai-agent-optional)
- [Microsoft 365 审计日志 (可选)](#microsoft-365-audit-logs-optional)
- [Entra ID 登录封锁 (可选)](#entra-id-login-blocking-optional)
- [Telegram 审批 (可选)](#telegram-approvals-optional)
- [AI 聊天与 Teams 命令](#ai-chat--teams-commands)
- [安全与加固](#security--hardening)
- [技术栈与服务](#stack--services)
- [故障排除](#troubleshooting)
## Warroom 能做什么?(用户视角)
登录后(仪表盘位于 `http://:8448`),可以使用以下页面:
| 页面 | URL | 功能描述 |
|-------|-----|------------------------|
| **Dashboard** | `/` | 来自 Sophos Central 的告警、事件和检测;带有攻击者地理位置的实时地图;防火墙日志(IPS / WAF / 身份验证 / 登录失败);AI agent 建议;端点概览。只需点击即可直接封锁 IP、确认告警、隔离端点。 |
| **AI Chat** | `/chat.html` | 自然语言命令:封锁 IP/域名/FQDN/URL、隔离端点、查询隔离区、OSINT 查询、统计报告。同一引擎也可通过 **Microsoft Teams** 访问。 |
| **Blocklist** | `/blocked.html` | 手动封锁/解封 IP、域名和 URL;维护白名单;检查最终的 IOC 源。 |
| **NetFlow** | `/netflow.html` | 流量分析:Top talkers、目标地址、端口、协议分布、接口吞吐量。 |
| **Firewalls** | `/firewalls.html` | 地图上的防火墙位置、接口统计信息、白名单管理。 |
| **Endpoints** | `/endpoints.html` | Sophos Endpoint Management API:设备**清单**(健康状态/隔离/防篡改/操作系统)及详细视图、隔离/解除隔离、按需扫描、注销 · **分组**(创建/删除) · **策略**(列表 + 详情) · **设置**(全局防篡改保护、允许/阻止列表、扫描排除项、Web 控制本地站点 —— 均可添加/删除) · 各平台的**安装包下载**。 |
| **Agent** | `/agent.html` | AI agent 的决策日志;批准/拒绝建议;LLM 统计数据。它可以检测(除其他事项外)**分布式暴力破解攻击**(来自多个 /24 网络的大量源 IP 针对同一账户 → `block_ips`)并接受**分类输入**。 |
| **Agent Workflow** | `/agent-workflow.html` | 可视化决策流水线,并可实时编辑**每个阶段**(触发器、阈值、间隔、允许的操作、系统提示词、自动执行)。LLM 使用**结构化输出**(通过 `response_format` 定义 Pydantic schema)进行寻址,并以类型化方式进行验证。 |
| **Email** | `/email.html` | Sophos Email Management API:管理邮箱(创建/修改/删除)、搜索隔离区和送达后隔离区、释放/删除邮件(可选允许/阻止发件人)。 |
| **Microsoft 365** | `/o365.html` | M365 登录审计(Management Activity API):成功和失败的登录记录,包含应用、**设备**(名称/操作系统/浏览器/合规性)、源 IP、位置。列**可排序和过滤**;每个 IP 都可进行 OSINT 下钻;失败的登录可直接封锁(受白名单保护的 IP 除外)。 |
| **OSINT** | `/osint.html` | 手动检查 IP、域名或 URL —— 并行使用 Sophos Intelix、AbuseIPDB、VirusTotal、GreyNoise、ipinfo 和 DNS;支持绕过缓存。**Shodan** 是节省额度的可选功能:仅通过“🛰️ Query Shodan”按钮使用。检查到的值可以**立即封锁**或交给 **AI 分类**。每次查询都会存储在可搜索的**持久化历史记录**(`osint_results`)中(超出 1 小时的 Redis 缓存限制);开放端口和 CVE 还可作为地图图层展示。 |
| **Stats** | `/stats.html` | OSINT 提供商的使用情况(每日/每月限制)、LLM 调用和 token、缓存命中率。 |
| **Admin** | `/admin.html` | 实时编辑所有 API 密钥、时间间隔、日志级别和 agent 设置**在线进行** —— 无需重启容器。 |
| **Grafana** | `:3030` | 直接在 PostgreSQL 数据库上预置的仪表盘(Warroom、NetFlow、Blocklist)。 |
## 环境要求
在宿主机上,您只需要:
- **Docker** 和 **Docker Compose v2**(`docker compose version` ≥ 2.x)
- **Git**
- 宿主机上的空闲端口:**8448**(仪表盘)、**3030**(Grafana)、
**5514/udp+tcp**(syslog)、**2055/udp**(NetFlow)
- 可选但建议:第二台发送 syslog/NetFlow 的设备
(Sophos Firewall 或类似设备)
前端无需任何**构建步骤**(原生 JS),也不需要本地
安装 Python —— 一切都在容器中运行。
## 6 步设置
```
# 1) Clone
git clone https://github.com/hondo78/Warroom.git
cd Warroom
# 2) 创建配置
cp .env.example .env
# 3) 填写 .env – 至少包含:
# - POSTGRES_PASSWORD + DATABASE_URL(相同的密码!)
# - WARROOM_API_KEY (openssl rand -hex 32) [强烈建议]
# - GRAFANA_ADMIN_PASSWORD
# - SOPHOS_CLIENT_ID / SOPHOS_CLIENT_SECRET [用于 Sophos Central 数据]
$EDITOR .env
# 4)(可选)提供 GeoIP 数据库 – 请参阅下面的检查清单。
# 如果没有它们,Warroom 将使用 ip-api.com 回退运行。
# 将 GeoLite2-City.mmdb 和 GeoLite2-ASN.mmdb 放入 ./geoip/。
# 5) 启动
docker compose up -d
# 6) 检查状态
docker compose ps
docker compose logs -f backend
```
然后可以通过以下地址访问:
- **仪表盘:**
- **管理界面:**
- **Grafana:** (使用 `GRAFANA_ADMIN_*` 登录)
其余配置(OSINT 密钥、agent、时间间隔)可以方便地
在 **管理界面** 中添加 —— 无需重启。
## 我需要获取什么?(清单)
| # | 项目 | 是否必须? | 获取来源 | 存放位置 |
|---|-----|----------|-------|-------|
| 1 | **数据库密码** | ✅ | 自己设定一个 | `.env` 中的 `POSTGRES_PASSWORD` **和** `DATABASE_URL` |
| 2 | **WARROOM_API_KEY** | ⭐ 强烈建议 | `openssl rand -hex 32` | `.env` 中的 `WARROOM_API_KEY` |
| 3 | **Grafana 密码** | ⭐ 建议 | 自己设定一个 | `.env` 中的 `GRAFANA_ADMIN_PASSWORD` |
| 4 | **Sophos Central 凭据** | 用于获取 Central 数据 | Sophos Central → Global Settings → API Credentials Management → *Add Credential* | `SOPHOS_CLIENT_ID` / `SOPHOS_CLIENT_SECRET` |
| 5 | **GeoLite2-City.mmdb + GeoLite2-ASN.mmdb** | 可选 | [MaxMind GeoLite2](https://www.maxmind.com/en/geolite2/signup) (免费) | 存放在 `./geoip/` 中的文件 |
| 6 | **AbuseIPDB 密钥** | 可选 | | `ABUSEIPDB_API_KEY` |
| 7 | **VirusTotal 密钥** | 可选 | | `VIRUSTOTAL_API_KEY` |
| 8 | **Shodan 密钥** | 可选 | | `SHODAN_API_KEY` |
| 9 | **Sophos Intelix 凭据** | 可选 | | `SOPHOS_INTELIX_CLIENT_ID/SECRET` |
| 10 | **LLM endpoint** (用于 AI agent) | 可选 | LMStudio / Ollama / vLLM / OpenAI | `.env` 中的 `AGENT_*` |
## 连接数据源
### Sophos Firewall Syslog
*System → Administration → Notification settings → Syslog Server:*
- **Host:** Warroom 宿主机的 IP
- **Port:** 5514 (UDP 或 TCP)
- **Format:** Standard / Device-Syslog
- 启用的类别:**Firewall**(流量)、**IPS**、**WAF**、
**Authentication**、**Admin**、**System**
### NetFlow
将防火墙/路由器的 NetFlow 导出 (v5/v9/IPFIX) 指向
**`:2055/udp`**。数据桶按分钟进行聚合,
默认保留 30 天(在 `netflow` 服务中配置 `RETENTION_DAYS`)。
### Sophos Central
一旦设置了 `SOPHOS_CLIENT_ID`/`SECRET`,`collector` 就会
每隔 `COLLECTOR_INTERVAL` 秒(默认 300)获取一次
告警、事件、端点和防火墙状态。
## 用于防火墙的 IOC 源
这些列表在 维护。每个
封锁/解封操作都会**立即**在数据源中可见(直接从数据库实时读取,无需
推送、无需核对、无缓存)。
| 源 | Endpoint | 格式 |
|------|----------|--------|
| IPs | `GET /ioc_IP` | 每行一个 IPv4/IPv6,已排序 |
| Domains | `GET /ioc_domain` | 主机名,允许使用通配符 `*.evil.tld` |
| URLs | `GET /ioc_url` | 包含 `http(s)://` 和路径的完整 URL |
所有源都需要请求头 `X-API-Key: `(除非在
开放模式下)。
```
GET https://:8448/ioc_IP
Header: X-API-Key:
```
### 防火墙集成
**Sophos XG / XGS** — *Hosts and Service → IP List → Add* → 输入 URL,
为 `X-API-Key` 使用 "Custom HTTP Headers",更新间隔例如 5 分钟。
**Fortinet FortiGate** — *Security Fabric → External Connectors → Threat Feeds
→ IP Address* → 输入 URL,设置 HTTP 请求头 `X-API-Key`。
**pfSense / OPNsense (pfBlockerNG)** — 将 URL 添加为 IPv4 源。
pfBlockerNG 不会发送自定义请求头 → 需要通过代理配合 IP 白名单放置该端点,
或者通过 nginx 配置仅为防火墙 IP 开启开放模式(`WARROOM_API_KEY` 留空)。
## Block API (Web UI)
仪表盘和黑名单页面中的封锁按钮会调用以下
endpoints:
| 方法 | 路由 | Body |
|---------|-------|------|
| POST | `/api/firewall/block-ip` | `{"ip": "1.2.3.4", "comment": "..."}` |
| POST | `/api/firewall/block-ips` | `{"ips": ["1.2.3.4", ...]}` |
| POST | `/api/firewall/unblock-ip` | `{"ip": "1.2.3.4"}` |
| GET | `/api/firewall/blocked-ips` | – |
| POST | `/api/firewall/block-domain` | `{"domain": "evil.tld", "comment": "..."}` |
| POST | `/api/firewall/block-domains` | `{"domains": ["evil.tld", "*.adsrv.tld"]}` |
| POST | `/api/firewall/unblock-domain` | `{"domain": "evil.tld"}` |
| GET | `/api/firewall/blocked-domains` | – |
| POST | `/api/firewall/block-url` | `{"url": "https://evil.tld/x", "comment":""}` |
| POST | `/api/firewall/block-urls` | `{"urls": ["https://a/b", "http://c/d"]}` |
| POST | `/api/firewall/unblock-url` | `{"url": "https://evil.tld/x"}` |
| GET | `/api/firewall/blocked-urls` | – |
IP 最终存入 `blocked_ips`,主机名存入 `blocked_domains`,URL 存入
`blocked_urls`。数据源实时读取这些 → 无需同步逻辑。
## AI agent (可选)
agent 通过 LLM 分析防火墙日志(WAF/IPS/登录失败)并提出
封锁建议 —— 或自动执行。默认**关闭**。
1. 提供一个 LLM endpoint(本地的 LMStudio/Ollama/vLLM 或 OpenAI)。
`host.docker.internal` 将从容器指向 Docker 宿主机。
2. 在管理界面或 `.env` 中:设置 `AGENT_ENABLED=true`、`AGENT_BASE_URL`、
`AGENT_MODEL`。
3. 默认情况下,建议保持**待处理**状态,必须在
`/agent.html` 进行批准。`AGENT_AUTO_EXECUTE=true` 或置信度快速通道
(`AGENT_AUTO_EXECUTE_THRESHOLD`)会自动执行它们。
## Microsoft 365 审计日志 (可选)
从 Microsoft 365 Management Activity API 拉取**登录事件**
(UserLoggedIn / UserLoginFailed),并使用 GeoIP 丰富数据。登录失败
还会作为告警显示在攻击地图上,并由
AI agent 进行评估。显示页面位于 `/o365.html`,配置位于
**Admin → Microsoft 365**。
**Azure 应用注册(一次性):**
1. [entra.microsoft.com](https://entra.microsoft.com) → **App registrations →
New registration**(单租户)。
2. **API permissions → Office 365 Management APIs → Application permissions →
`ActivityFeed.Read`** → **Grant admin consent**。
3. **Certificates & secrets → New client secret** → 复制该值。
4. 在 Warroom **Admin → Microsoft 365** 中:输入租户 ID、客户端 ID、客户端密钥
→ **Test connection**。收集器会自动启动
(审计事件会有约 5–30 分钟的延迟到达)。
## Entra ID 登录封锁 (可选)
额外将 Warroom 黑名单同步到绑定在**条件访问策略**的 Entra **Named Location** 中 —— 这样来自被封锁 IP 的 M365 登录
就会直接在微软被拒绝(作为防火墙 IOC 源的补充)。
配置位于 **Admin → Entra ID**。
- **使用与** M365 收集器**相同的应用注册**,但还需要
Graph 应用权限
`Policy.ReadWrite.ConditionalAccess` + `Policy.Read.All`(管理员同意)以及
**Entra ID P1** 许可证(包含在 Microsoft 365 E3/E5 中)。
- **Named Location 和策略会自动创建**(自我修复:如果
策略被外部删除,下一次同步会重新创建它)。策略名称:
*"Warroom — Block IPs (managed)"*。
- **安全默认仅报告:** 该策略最初不会强制执行任何操作。通过
管理员开关 *"Enforcement ON/OFF"* 启用它 —— 此时
强制要求提供一个**紧急访问账号**(UPN 或对象 ID),该账号永远不会被
封锁(防止将您自己锁定在外)。UPN 会从 M365 审计日志中免权限解析为对象 ID。
## Telegram 审批 (可选)
将**每个待处理的 agent 决策**作为 Telegram 消息发送,并带有
**✅ 批准 / ❌ 拒绝** 按钮;决策可直接从 Telegram 执行
(长轮询,无需公开的 webhook)。配置位于
**Admin → Telegram**。
1. 通过 [@BotFather](https://t.me/BotFather) 创建机器人 → 复制 bot token。
2. 确定 `chat_id`(例如通过 `@userinfobot`),并**先给机器人发送一条
消息**或将其添加到群组中。
3. 在 Warroom **Admin → Telegram** 中:输入 token 和 chat ID,启用,
**发送测试消息**。
## AI 聊天与 Teams 命令
一个**自然语言命令接口** —— 可通过应用内的
**AI 聊天** (`/chat.html`) 和 **Microsoft Teams** 访问。通过它,可以执行以下
消息命令:
- **Blocklist:** 设置 IP / 域名 / FQDN / URL
("block 1.2.3.4", "block boese.example")
- **隔离端点** ("isolate PC-12345")
- **查询隔离区** ("show the quarantine")
- 针对IP/域名的 **OSINT** ("OSINT for 8.8.8.8") — 低成本提供商;Shodan 仍然
仅限按钮使用
- **统计报告** ("statistics report for the last 7 days")
意图检测首先通过**关键词解析器**运行(对明确的
命令立即响应),对于不明确的表述,则回退到
**LLM agent** —— 因此即使没有 agent,核心命令也能工作。
**与 LLM 自由聊天:** 任何未被识别为命令的内容,都会由
**安全分析师角色** (LLM) 回答 —— 分类威胁、解释 CVE、
评估指标、解释日志。适用于**所有三个
渠道**(AI 聊天、Teams、Telegram)。该角色的系统提示词
可在 **Admin → AI Analyst — Persona** 中编辑(带有 "Load default")。需要
启用 agent(LLM endpoint)。
**设置 Microsoft Teams** (Admin → Microsoft Teams):
1. 在团队中 → **… → Manage → Outgoing Webhooks → Create**。
2. 回调 URL:`https:///api/teams/command`(必须可以通过
HTTPS 访问 Warroom)。
3. 将 Teams 生成的 **HMAC 密钥** 存储在管理区域中 —— 每个 Teams
请求都会使用它进行签名验证。
4. 在团队中输入 `@Botname `。
## Shodan 主机情报 (可选)
提供每个 IP 的**开放端口**和**已知 CVE**。这些内容会长期存储在
`shodan_hosts` 中,并作为可选的地图图层显示
(标记按 CVE 数量着色,弹窗包含端口 + CVE 链接)。需要
**Shodan API 密钥** (Admin → OSINT)。
**Shodan 额度很稀缺 —— 这就是为什么永远不会自动查询 Shodan 的原因:**
- **人工:** 仅通过 OSINT 面板中的
**"🛰️ Query Shodan"** 按钮 (`POST /api/osint/shodan/{ip}`)。常规 OSINT 面板**不会**触发
Shodan 查询。
- **自动:** 基于规则的 agent 循环只有在
廉价的提供商已经将该 IP 分类为**明确的恶意**时
(AbuseIPDB ≥ 阈值 / VirusTotal ≥ 3 / GreyNoise = 恶意),才会查询 Shodan。可通过
*Shodan: auto-query on malicious IP* + *阈值* (Admin → OSINT) 进行控制;
将其关闭 ⇒ Shodan 变为纯手动。
您可以在**攻击地图图例**中的 "LAYER →
Shodan Hosts" 下找到该图层(在 OSIRIS 仪表盘中作为单独的图层)。
## 安全与加固
Warroom 旨在作为**位于 VPN/防火墙后的内部工具**。在
使用真实数据之前,请务必注意:
- **设置 `WARROOM_API_KEY`。** 如果没有它,后端将在*开放模式*下运行 —— 任何
具有网络访问权限的人都可以操作仪表盘、封锁/解封 IP 并
隔离端点。这里**没有用户登录**;API 密钥是
唯一的访问控制。
- **`.env` 包含明文密钥**(数据库密码、Sophos 密钥、API 密钥)。
该文件在 `.gitignore` 中,**绝对不能**被提交。在
数据库 (`app_settings`) 中,密钥也是未加密存储的 → 请保护好数据库访问权限。
- **Grafana** 预设为 `admin/admin` 并允许**匿名
查看者访问**(无需登录即可看到所有日志/地图)。如果不希望如此,请更改密码并
设置 `GF_AUTH_ANONYMOUS_ENABLED=false`。
- **开箱即用不支持 HTTPS** —— nginx 监听 80 端口(映射到 8448)。
对于生产环境,请在前面放置 TLS 反向代理。
- **暴露的端口**(5514、2055、3030、5051、5540、8448)应仅在
受信任的网络中暴露。**RedisInsight (5540)** 运行时没有身份验证,并
允许对缓存进行完全的读/写访问,**pgAdmin (5051)** 需要
登录(`PGADMIN_EMAIL`/`PGADMIN_PASSWORD`),但授予完整的数据库访问权限 →
请将两者都保护在防火墙/代理之后,并更改默认密码。
- **M365/Telegram 密钥**(客户端密钥、bot token)与所有其他密钥一样,
未加密存储在 `app_settings` 中。Entra 应用应仅具有最低限度的
必需 Graph 权限。
包括改进路线图在内的详细评估位于
[`docs/REVIEW.md`](docs/REVIEW.md)。
## 技术栈与服务
| 组件 | 技术 |
|------------|------|
| Backend | FastAPI 0.115, SQLAlchemy 2 async, APScheduler |
| Database | PostgreSQL 16 |
| Cache | Redis 7 |
| Frontend | 原生 JS + Nginx(无构建步骤) |
| Syslog | 自定义 Python 接收器 (UDP/TCP 5514) |
| NetFlow | 自定义 Python 收集器 (UDP 2055) |
| GeoIP | MaxMind GeoLite2 (后备: ip-api.com) |
| Dashboards | Grafana 11 |
| Redis GUI | RedisInsight (缓存检查) |
| DB GUI | pgAdmin 4 (PostgreSQL 管理) |
| Cloud APIs | Sophos Central/Email, Microsoft 365 (Management Activity + Graph), Telegram |
| 容器 | 端口 (宿主机) | 描述 |
|-----------|-------------|--------------|
| `frontend` | `8448` | Nginx,静态文件 + 反向代理 |
| `backend` | (内部 8000) | FastAPI,REST + IOC 源 |
| `syslog` | `5514/udp+tcp` | Sophos Firewall syslog 接收器 |
| `netflow` | `2055/udp` | NetFlow v5/v9/IPFIX 收集器 |
| `postgres` | (内部 5432) | 数据持久化 |
| `redis` | (内部 6379) | 缓存(摘要、OSINT 查询) |
| `redisinsight` | `5540` | RedisInsight — Redis 图形界面(预配置缓存) |
| `pgadmin` | `5051` | pgAdmin 4 — PostgreSQL 图形界面(预配置 "Warroom DB" 服务器) |
| `grafana` | `3030` | 仪表盘 |
### 数据流
1. **Sophos Central API** → `collector.py`(默认每 300 秒) → 数据库
2. **Sophos Firewall syslog** → `syslog` 服务 → 数据库 (`firewall_logs`)
3. **NetFlow** → `netflow` 服务 → 数据库 (`netflow_buckets`)
4. **Microsoft 365 Activity API** → `o365_client.py` → 数据库 (`o365_audit_logs`)
5. **仪表盘** → 后端从数据库读取 → 前端渲染
6. **封锁操作 (UI/agent/Telegram)** → `blocked_ips` / `_domains` / `_urls`
7. **防火墙拉取** `/ioc_*` → 后端实时读取表
8. **可选:Entra 同步** → 黑名单 → Named Location + Conditional Access 策略
## 故障排除
| 症状 | 原因 / 解决方案 |
|---------|------------------|
| 仪表盘为空,没有告警 | Sophos 凭据缺失/错误 → `docker compose logs backend`。如果没有 Sophos,则只有 syslog/NetFlow/blocklist 会有数据。 |
| 获取源时出现 `401 invalid or missing X-API-Key` | 防火墙未发送 `X-API-Key` 请求头或发送错误。 |
| 地图未显示位置 | 缺少 GeoIP 数据库并且 ip-api.com 受到速率限制 → 将 mmdb 文件放入 `./geoip/`。 |
| Syslog/NetFlow 未到达 | 宿主机上的端口 5514/2055 是否打开?防火墙是否发送到了正确的 IP? |
| Postgres 无法启动 | `POSTGRES_PASSWORD` ≠ `DATABASE_URL` 中的密码。两者必须相同。 |
| `.env` 中的更改无效 | `.env` 值仅用作初始值。请通过 `/admin.html` 应用运行中的更改,或者使用 `docker compose up -d` 重新应用。 |
| M365 页面为空 / "not configured" | Admin → Microsoft 365 下缺少 Entra 应用凭据,或者未授予 `ActivityFeed.Read` 同意。审计事件也会有延迟到达的情况。 |
| Entra 同步 `403 not licensed` | 租户没有 Entra ID P1(包含在 M365 E3/E5 中) —— 向用户分配许可证。没有 P1 则无法创建/激活 CA 策略。| Entra 策略无法激活 | 未设置紧急访问账号(微软的 "BlockEveryonePolicy" 保护)或 UPN 无法解析 → 输入对象 ID。 |
| Telegram 审批未到达 | 未启用机器人、`chat_id` 错误,或者从未给机器人发过消息/不在群组中。通过 "send test message" 进行检查。 |
## 许可证
私人项目 —— 不提供官方支持。
## 商标
Sophos、Sophos Central、Sophos Firewall 和 Sophos Intelix 是 Sophos Ltd. 的注册
商标。本项目与 Sophos 无关。
标签:HTTP/HTTPS抓包, IOC, Sophos, 威胁情报, 安全运营, 开发者工具, 态势感知, 扫描框架, 搜索引擎查询, 数据可视化, 测试用例, 版权保护, 请求拦截, 逆向工具