InfraGuard

封禁列表与信誉

讲述由 AI/IDS 自动防御填充的 blacklist_info(/24 网段封禁),并让运维人员直接封禁、解除和重新封禁网段。

概述 — 这个页面做什么

封禁列表与信誉(/security/blocklist)讲述 Kitsune ML 与 Suricata IDS 一直在自动封禁的威胁网段的来龙去脉,并为运维人员提供一个可以手动封禁(添加)· 解除 · 重新封禁网段的控制台。

一次“封禁”始终覆盖整个 /24 网段。即使你输入的是单个 IP,也只保留前三段,并规范化为 x.y.z.0/24。误报应通过白名单豁免,而不是缩小封禁范围。

何时使用

页面布局

顶部 KPI

由 summary() 计算,带 30 秒缓存(infr:sec:blocklist:summary)。

KPI 含义 计算方式
生效中的封禁 当前正在强制执行的 /24 网段 COUNT(*) WHERE is_use=1
受保护的地址数(副标题) 生效封禁覆盖的地址数 active × 256(/24 ≈ 256)
今日封禁 最近 24 小时的新增封禁 is_use=1 AND created_at >= today 00:00
自动防御比例 由 AI/IDS 自动处理的占比 (kitsune + suricata) / active × 100
关注的国家/地区 生效网段中不同国家/地区的数量 COUNT(DISTINCT country) WHERE is_use=1
已解除 当前已解除(等待重新封禁) COUNT(*) WHERE is_use=0

自动防御引擎的贡献

生效中的封禁按来源标签拆分为占比条和磁贴。分类依据是对 reason 的 LIKE 匹配。

引擎 匹配规则 含义
Kitsune ML reason LIKE '%Kitsune%' 集成自编码器异常检测
Suricata IDS reason LIKE '%Suricata%' 扫描 / 协议违规的自动封禁
手动 reason LIKE '%Manual%' 或 %수동% 运维人员指定的封禁
其他 上述均未匹配的部分 active − (kitsune+suricata+manual),下限为 0

威胁来源地

blockByCountry(12) 将生效网段聚合成前 12 个国家/地区(GROUP BY country ORDER BY COUNT DESC),以国旗表情符号加排名条展示。点击某个条形可将列表筛选到该国家/地区。

最近的防御活动信息流

blockFeed(16) 以 4×4 网格显示不分状态的最近 16 行(ORDER BY created_at DESC, id DESC)——让你实时感受刚刚抓到了什么。

可筛选的封禁列表

每页 40 张卡片(PER_PAGE=40,ORDER BY created_at DESC, id DESC)。每张卡片显示网段 · 国家/地区 · 来源徽章 · 证据标签(行为 + 关键数值)· 封禁时间 · 状态,行操作为 [信誉] · [详情] · [解除]/[重新封禁]。如果某网段属于已登记的内部网络,会获得 Internal 徽章,并隐藏其信誉按钮(internal_scope.js)。

筛选条件:

如何使用

读懂封禁依据

每张卡片的证据标签会从 reason 字符串中挑出权重最高的那一条规则集,并以标签加代表数值的形式呈现。在 srct 的启发式分类中,按下列权重顺序选出最高的一项:

分类标记 权重 behavior 键 标签 代表数值(详情)
[A2:...] 6 brute 后台暴力破解 hits=N → N hits
[A:...] 5 scanner 脆弱路径扫描 hits=N → N hits
[D:...] 4 ja3 JA3 僵尸网络指纹 ja3=N → ja3×N
[B:...] 3 bot_ua 恶意机器人访问 hits=N → N hits
[C:...] 2 err_flood 4xx 错误洪水 err_rate=NN%
[E:...] 1 short_scan TCP 端口扫描 port=N 或 N scan

如果来源是 Kitsune,或 reason 中含有 score=,则会优先于任何分类被归为 ml_anomaly(机器学习异常),并显示 top=(误差最大的分量)与 score。手动/其他则回退为 manual / auto。

从 reason 中额外提取的事实:score=、top=、port=、short_scan_sessions=、bytes=。reason 示例:

[Kitsune v2.2] anomaly top=TLS score=0.83
[Suricata Auto-Block] [A:URL] hits=42 port=443
[Manual] repeated login abuse (uid=5)

添加手动封禁

  1. 列表标题栏的 [手动封禁] 会打开添加弹窗。(从威胁/IP 调查跳转过来时,IP 会由 ?add=203.0.113.10 预填。)
  2. 输入 IP 或 CIDR。单个 IP 会扩展为 /24(203.0.113.10 → 203.0.113.0/24)。
  3. 可选填写原因(不超过 160 个字符),然后点击 [封禁]。
  4. 服务端行为:
    • 输入通过 cclassCidr() 规范化为 x.y.z.0/24(非 IPv4 会以 invalid_cidr 拒绝)。
    • 对于完整的 IPv4,国家/地区会从 ip_info_loop 补全(否则沿用已有值 / Unknown)。
    • 如果 (server_index=0, c_class) 已存在,则更新为 is_use=1(重新启用);否则插入一行新记录。原因为 "[Manual] <note> (uid=N)"。
    • 摘要缓存被清空,并返回刷新后的列表与摘要。

封禁会立即写入 blacklist_info,但真正的防火墙 DROP 要等到每台主机的 sync_black 守护进程下一次把它同步进 ipset/iptables 时才生效。如果那个批处理没有运行,防火墙层面就不会真正执行封禁。

解除 / 重新封禁

轮询

security-blocklist.js 每 30 秒调用一次 /security/blocklist/live,以刷新摘要和当前页。

数据来源

项目 来源 说明
封禁台账 blacklist_info(legacy_glory) id, server_index, c_class, country, reason, is_use, created_at, updated_at · UNIQUE(server_index, c_class)
国家/地区补全 ip_info_loop(legacy_glory) 添加时对完整 IPv4 的国家/地区查询
内网判定 SecurityScope::internalMatchers() 已登记实例的 IP + 运维策略白名单 → Internal 徽章
防火墙执行 sync_black 守护进程 blacklist_info → ipset/iptables DROP
自动封禁来源 kts_tx.js · srct_tx.js 写入 reason 的来源标签与证据字符串
审计日志 infr_audit_log sec.block_add · sec.block_release · sec.block_readd

读取骨干是 App\Repositories\SecurityRepository;叙述与写入由 App\Services\Security\BlocklistService 编排。凭据只来自 config('database.connections.legacy_glory')——绝不硬编码。

访问权限

由于这些属于破坏性的安全操作,界面会在执行前弹出确认(step-up)对话框。请仔细核对 CIDR,以免误封一大片网段。

排障与常见问题

相关内容

차단 목록 · 평판
차단 목록 · 평판