概述 — 这个画面做什么
安全概览(/security)是安全角色区域的 核心画面。它把 InfraGuard 早已采集、判定并自动处置、却从未被可视化过的「隐藏遥测」,以一条 防御漏斗叙事 的形式呈现出来。
核心信息只有一句话:「此时此刻,AI 与 IDS 自动防御正在封禁敌对网络。」 为了让这句话可信,画面一眼就能给出:
- 4 段防御漏斗 — 威胁(原始事件)→ 检测(标记)→ 自动响应规则集(目录规则 + JA3 规则集)→ 响应(封禁)。每一段都带有 实测计数。
- 威胁强度仪表 — 由安全评分推导出的锥形渐变环(数值越大越危险)。
- 自动响应卡片 — 每小时威胁数 · 24 小时威胁数 · 生效封禁 /24 · 24 小时封禁数。
- JA3 攻击者面板 — 最近 6 小时 JA3 指纹的头部攻击者(自动化/僵尸网络候选)。
- 头部威胁 IP 与 最近自动处置动态(「为什么封禁」的叙事)。
- 威胁趋势 — 所选时间窗内的迷你折线图。
全部内容 只读 — 这个画面不会封禁或修改任何东西。实际操作在 威胁、封禁列表与信誉 和 检测 中进行。
这里没有「域名」的概念 — 安全概览是按 角色区域(安全运营) 汇总的,而不是按 Web TLD。
何时使用
- 交接班开始时,用 30 秒掌握整体安全态势。
- 向 管理层/审计人员可信地说明 封禁确实在起作用(漏斗计数 + 自动化比例)。
- 在趋势迷你折线图上发现 威胁激增,然后挑出可疑 IP,深入 威胁 / 检测。
- 快速浏览 JA3 僵尸网络/扫描器,并跳转到详细规则集。
布局
顶部 — 威胁强度仪表 + 防御漏斗
| 区域 | 内容 |
|---|---|
威胁强度(t.ov.score) |
以锥形渐变环绘制的安全评分。显示值为 100 − score(越大越糟)。副标题:「越大越危险,以未处置的残留为准」。 |
防御漏斗(t.ov.funnel_title) |
自上而下逐段收窄的四条阶段条,每条都带有实测计数和说明文字。 |
中部 — 自动响应 + 威胁趋势
| 卡片 | 内容 |
|---|---|
自动响应(t.ov.resp_title) |
四块指标磁贴:每小时威胁数 · 24 小时威胁数 · 生效封禁 /24 · 24 小时封禁数。 |
威胁趋势(t.ov.tseries_title) |
将 IDS 告警降采样为 30 个分桶的 SVG 迷你折线图,附带 Σ total · ▲ max/bucket-min 元信息与采集延迟(⏱ Nm)徽标。 |
底部 — JA3 攻击者 · 头部威胁 IP · 最近自动处置
- JA3 序列分析(
t.ov.ai_title) — 以 3×3 网格(最多 9 张卡片)展示最近 6 小时的头部攻击者。每张卡片显示 JA3 多样性 · TLS 连接数 · SNI 多样性 · 国家/ASN/ISP · 「已封禁」徽标,以及轮换比例条和由浏览器从t.ov.ai_behavior中选取的行为标签(跟随读者的语言)。点击 IP 会打开信誉弹窗,规则集本身位于 检测。 - 头部威胁 IP(
t.ov.top_title) — 告警数 · 严重度 · 去重后的特征数 · 最后出现时间 · 封禁标记 · 国家。 - 最近自动处置(
t.ov.feed_title) — 最近被封禁的 /24 网段,附国家 · 来源标签(Kitsune/Suricata/手动) · 简短原因 · 时间戳。
页头控件
- 时间窗切换:
1h / 6h / 24h(默认 24h)。 - LIVE / PAUSED 开关:打开或关闭 30 秒自动轮询。
- 全屏 按钮:隐藏顶部导航进入看板模式(ESC 退出)。
- stamp:最后一次计算的时间。
使用方法
- 阅读顶部的 威胁强度 仪表,了解当前风险等级(越大越糟)。
- 自上而下阅读 防御漏斗,跟随这条故事线:「进来了多少(威胁)→ 有多少被标记(检测)→ 触发了多少规则集(自动响应)→ 封禁了多少(响应)」。
- 查看 威胁趋势 迷你折线图上的尖峰。
⏱ Nm徽标数值很大意味着采集滞后,因此应把计数理解为截至该锚点时间的数据。 - 从 JA3 攻击者 / 头部威胁 IP 中挑出可疑 IP,再转到 威胁 / 检测 做深入调查、信誉查询 和封禁。
- 用 最近自动处置动态 查看自动防御刚刚封禁了什么、原因是什么。
漏斗各阶段的精确定义
每一项计数都限定在所选时间窗(1h/6h/24h)内,由 SecurityOverviewService::compute() 产出。
| 阶段 | 键 | 公式 | 来源 |
|---|---|---|---|
| 威胁 | threats |
alertCount + nginxSuspiciousCount |
suricata_alert_ct + nginx_meta_ct(is_suspicious=1) |
| 检测 | detections |
distinctAlertIps + kitsuneBlockedCount |
去重后的 src_ip(suricata_alert_ct)+ kitsune_detail_log(is_blocked=1) |
| 自动响应规则集 | rulesets |
active rulesets + firing rulesets |
infr_sec_ruleset(status=active)+ 44 条规则集目录中正在触发的部分 |
| 响应 | response |
blockedCount |
blacklist_info(created_at ≥ 时间窗) |
「自动响应规则集」的计数 不是 原始特征(sid)的数量。它与 规则集库 采用 同一个「规则集」计量单位(复用了 RulebookService),因此永远不会超过 44 条目录,也与规则集画面保持一致。
自动响应卡片的指标定义
| 指标 | 含义 | 计算方式 |
|---|---|---|
| 每小时威胁数 | threats_hr |
基于锚点的 24 小时告警数 ÷ 24 |
| 24 小时威胁数 | threats_24h |
基于锚点的 24 小时 alertCount |
| 生效封禁 /24 | active |
blacklist_info 中 is_use=1 的条数 |
| 24 小时封禁数 | blocks_24h |
最近 24 小时的 blockedCount |
自动响应区块中还有「隔离(自动)」和「国际协作(手动)」的文案(
resp.isolate/resp.coop),但这两项属于 后续阶段 ——要等响应工具部署之后才会统计。目前真正被计算的只有上述四个指标。
威胁强度(安全评分)公式
公式由 Services\Security\PostureService 拥有(2026-09-04 修订)。它与 Overview「安全依据」卡片显示的是 同一个数值:
score = weighted mean of ids, ai, web, rep, tls, fw # each metric 0..100
metric = 100 − 45 × open / (total + floor) # open = 0 -> metric = 100
displayed threat intensity = 100 − score # 0..45, higher = worse
open= 本应拦住却没拦住的残留,total= 同类观测到的全部(含已封禁),floor = 平滑常数,避免样本很小时比例失真。- 残留为零时该指标即为 100 — 无论遭受多少攻击,只要全部拦下就没有扣分的理由。
- 处置判定同时查看
blacklist_info(已执行)与blacklist(暂存)。自有网段会同时从分子和分母中剔除。 - 旧公式按
kitsune_detail_log的封禁数与nginx_meta_ct的可疑请求数扣分,因此 自动防御越成功,分数反而越低。 - 评分被钳制在下限 55(即威胁强度最大为 45)。
数据来源
所有威胁/检测/封禁计数都以 只读 方式读取遗留 legacy_glory 连接上的大容量遥测表。凭据只来自 config('database.connections.legacy_glory')(= .env),绝不硬编码。
| 表 | 连接 | 用途 |
|---|---|---|
suricata_alert_ct |
legacy_glory | IDS 告警(威胁、检测、头部威胁 IP、趋势)。alert_ts 索引 |
nginx_meta_ct |
legacy_glory | 可疑 Web 请求(is_suspicious)。idx_suspicious |
kitsune_detail_log |
legacy_glory | ML 异常封禁(is_blocked) |
suricata_tls_ct |
legacy_glory | JA3 指纹序列(JA3 攻击者) |
blacklist_info |
legacy_glory | 自动/手动封禁(/24 CIDR)。响应、生效封禁、动态 |
ip_info_loop |
legacy_glory | geo/ASN/ISP 富化(ipEnrichment) |
infr_sec_ruleset |
应用(MAIN) | JA3 序列规则集(生效规则集数量 + 摘要) |
性能与新鲜度纪律
- 查询只使用 窄时间窗 + 索引 + LIMIT(以避免在超大表上产生慢查询)。
SecurityRepository用查询构造器和参数绑定将它们隔离。 - 锚点 = 最新告警时间(
latestAlertTs()=MAX(alert_ts))。当 eve_ingest 滞后、now()跑在数据前面时,时间序列和 24 小时统计都以此为锚,从而去掉「空尾巴」。超过 5 分钟的延迟会显示为⏱ Nm徽标。 - 30 秒缓存:结果以键
infr:sec:ov:{range}缓存 30 秒,与 30 秒轮询相匹配。单项读取失败由safe()吸收,因此一处故障不会拖住整条漏斗。
SecurityScope — 自动排除自有网络
头部威胁 IP 与 JA3 攻击者列表会自动排除你自己的网络,避免自家服务器被列为攻击者(无需硬编码)。
SecurityScope::excludePrefixes()会把 已登记的实例(infr_instance的公网/内网/NIC IP → /24 前缀)与 运维策略白名单(internal_networks— IP、前缀、CIDR)合并为一个前缀数组。- 这些前缀在查询中以
src_ip NOT LIKE 'prefix%'的形式应用(参数绑定)。 - 匹配器缓存 60 秒,并在保存 运维策略 时失效。
e.g. register 203.0.113.10 in infr_instance → prefix "203.0.113." auto-excluded
add 10.0.0.0/8 to OpsPolicy internal_networks → CIDR → "10." coarse prefix excluded
如果自家服务器持续出现在威胁/攻击者列表中,请把这些 IP 登记到 资产 ▸ 实例,或加入 运维策略 的
internal_networks白名单。它们会自动从列表中消失。
访问权限
- 包括本画面在内的整个
/security/*区域都由infr.level:2中间件保护 — 需要user_level ≥ 2才能进入。 - 因此 demo(1) 账号无法访问安全数据,而 staff(5) 与 admin(10) 可以查看。
- 安全概览 完全只读 — 没有写入/封禁/编辑操作,因此不需要二次校验闸门或审计日志。实际的封禁与解封在 封禁列表与信誉 中进行(写入需等级 ≥ 2 + 审计)。
故障排查与常见问题
Q. 漏斗的所有计数都是 0。
所选时间窗(1h/6h/24h)可能没有数据,或者 legacy_glory 连接已中断。请放宽到 24h;如果 ⏱ 延迟徽标非常大,说明某个采集器(eve_ingest / kts_tx / srct_tx)已经停滞,数据已经过期。
Q. 我们自己的服务器 IP 出现在头部威胁/攻击者里。
自有网络排除没有覆盖到它。请把该 IP 登记到 实例,或加入 运维策略 的 internal_networks(SecurityScope 按 /24 前缀排除)。
Q. 「自动响应规则集」的数字与 规则集库 不一致。
规则集阶段的公式是 active rulesets + firing rulesets。生效的 JA3 序列规则集(infr_sec_ruleset 为 active)会被加上,所以它可能超过纯目录触发数。
Q. 规则集写着 action=block,但并没有封禁。
该字段是建议而非指令。自动封禁直接从 suricata_tls_ct 计算 JA3 轮换,并不读取 infr_sec_ruleset。真正的封禁请在 封禁列表 中执行,或由自动封禁调度器完成。参见 检测。
Q. 威胁强度总是很低(≤45)。
这是预期行为。显示值为 100 − score,而 score 被钳制在下限 55,所以威胁强度的范围是 0..45。
Q. 数字每 30 秒会轻微抖动。 这是 30 秒轮询与 30 秒缓存共同作用的结果:每次轮询都会基于最新时间窗重新计算。关闭 LIVE 即可停止自动刷新。
相关内容
- 威胁 — IDS 威胁实体分诊、IP 下钻、封禁联动。
- 检测 + JA3 — 检测算法叙事与 JA3 序列规则集(按需分析)。
- 规则集库 — 44 条检测规则集目录(触发计数的权威来源)。
- 封禁列表与信誉 — blacklist_info 自动防御叙事 + 封禁/解封控制。
- 运维策略 —
internal_networks白名单(SecurityScope 自有网络排除)。 - IP 信誉查询 — AbuseIPDB 应用内弹窗。

