InfraGuard

端口连接(PORT OVERVIEW)

端口监控的旗舰画面:按端口以卡片实时展示各服务器的 TCP 状态分布、主要来源 IP 与来源数量。

概述 —— 这个画面做什么

端口连接 是 基础设施 ▸ 连通性与流量 的旗舰画面,即 PORT OVERVIEW。它为运维策略中定义的每个 受监控端口(例如 80、443、22、3306 …)渲染一张卡片,并在卡片内把绑定到该端口的 TCP 会话 按服务器 拆解为按状态的 100% 堆叠条。目标是在一个视图里看清「此刻谁连到了这个端口、有多少条、处于什么状态」。

数据来源是旧版流量数据库(legacy_glory 连接)的 traffic_session_ct 表,由 check_ct.js 采集器定期写入。这里应用是 只读 的 —— 本画面不写入任何数据。

每个服务器磁贴显示:

何时使用

布局

顶部控件

元素 行为
计时器 1 分钟 / 5 分钟 / 1 小时 会话聚合窗口的宽度。所选项会保存到 localStorage(infr:timer:traffic-ports),跨次访问保持不变。
端口标签 受监控端口列表(运维策略)。点击标签可切换对应卡片的显示与隐藏。All 用于切换全选/全不选。筛选仅在本次会话内有效(不会保存)—— 每次新访问的默认状态始终是全部端口。
快照时间 锚定当前窗口的最新快照时间戳(已按显示时区校正)。
刷新/轮询 每 30 秒自动轮询 /infra/traffic/ports/live 以刷新卡片。

端口卡片(瀑布流)

卡片 可拖拽排序,顺序保存在 localStorage(infr:order:traffic-ports)。由于卡片高度不一,采用 行跨度瀑布流(sortable_masonry mixin)无缝排布。卡片内部,服务器磁贴按 不同来源 IP 数 → 会话总数 → 服务器索引 排序。

TCP 状态图例

堆叠条的颜色来自语义化 CSS 令牌(var(--infr-state-*))。图例把颜色对应到状态。

令牌 标签 含义
established ESTABLISHED 正常建立的连接
listen LISTEN 监听中(服务端套接字)
syn_sent SYN SENT 发起连接尝试(客户端)
syn_recv SYN RECV 已收到 SYN/半开 —— 激增提示 SYN 洪水
fin_wait FIN WAIT 正在关闭(合并 FIN_WAIT1/2)
close_wait CLOSE WAIT 对端已关闭而应用未关闭 —— 持续堆积意味着连接泄漏
time_wait TIME WAIT 关闭后的等待
other Other 上述七种之外的任何状态

使用方法

  1. 选择计时器 —— 想看最紧凑、最近的一批快照就用 1min;想看更平滑的趋势就用 5min/1hour。
  2. 用标签收窄到你关心的端口 —— 例如只保留 80·443 以观察 Web。
  3. 读懂堆叠条 —— ESTABLISHED 占比偏低而 SYN_RECV/TIME_WAIT 偏大,就是异常信号。
  4. 点击 SRC 圆圈 —— 打开该服务器·端口的 来源 IP 列表 弹窗(远端 IP、远端端口、会话数、首次/最近出现时间)。
  5. 点击某个 IP → 单 IP 调查 —— 拆解它命中的服务器·端口·状态、地理位置/ASN 以及历史(5 分钟 · 按小时 · 按天汇总)。从这里可以继续进行 信誉查询 或封禁。
  6. 重排卡片 —— 把常看的端口拖到最上面;顺序会被保存。

按天(1day)的历史受汇总设计所限,是按该 IP 的 /24 网段(256 个 IP) 聚合的,而不是单个 IP。当弹窗显示形如 by 211.224.128.0/24 的 CIDR 标签时,该数值是整个网段的合计。

数据来源

所有查询都在 legacy_glory 连接上执行,并以 参数绑定 的查询构建器调用隔离在 App\Repositories\TrafficRepository 中(不做字符串拼接)。

窗口锚定

显示窗口并非锚定在应用的 now(),而是锚定在 最新的数据快照(MAX(snapshot_ts))上。采集器的写入时钟可能比应用时钟落后数小时,因此若以 now() 为锚点,窗口就会落在数据范围之外,画面一片空白。

计时器 SQL 边界(snapshot_ts)
1min 最新快照所在分钟的 startOfMinute … endOfMinute
5min (最新 − 4 分钟)的 startOfMinute … 最新的 endOfMinute
1hour (最新 − 59 分钟)的 startOfMinute … 最新的 endOfMinute

snapshot_ts 的 WHERE 边界使用旧库中存储的原始时间。只有 画面上显示的快照时间 才会叠加运维策略的显示偏移(traffic_tz_offset_hours)。

核心查询 —— portOverview()

SELECT a.local_port, a.server_name, a.server_index, a.remote_ip,
       a.state_code, b.state_name,
       SUM(a.session_count) AS total_sessions
FROM traffic_session_ct AS a
LEFT JOIN protocol_state AS b ON a.state_code = b.state_code
WHERE a.snapshot_ts BETWEEN :min AND :max
  AND a.local_port IN (:ports)          -- 运维策略中的受监控端口
GROUP BY a.local_port, a.server_name, a.server_index,
         a.remote_ip, a.state_code, b.state_name;

相关表

表 连接 作用 写入方
traffic_session_ct legacy_glory 会话快照(主机/远端/状态/数量) check_ct.js
protocol_state legacy_glory TCP 状态码 → 名称的查找表 —
traffic_session_ct_5min/_1hour/_1day legacy_glory 供 IP 调查弹窗使用的时间段历史 aggregate.js
ip_info_loop legacy_glory IP 弹窗的地理位置/ASN/ISP 富化信息 —

服务端响应结构(节选)

{
  "ports": [80, 443, 22],
  "timer": 1,
  "snapshot": "2026-08-13 10:24:00",
  "ports_data": [
    { "port": 443, "server_data": [
      { "alias": "web1", "idx": 12, "host_count": 84,
        "top_req": [ { "remote_ip": "203.0.113.10", "session_count": 61 } ],
        "connections": [ { "state": "established", "count": 420, "pct": 78 } ],
        "total": 538 }
    ] }
  ]
}

portsData() 会缓存 20 秒(以计时器加端口列表的哈希为键),以减少远程往返。

访问权限

基础设施角色区域最低需要 user_level 1(查看者)即可浏览。端口连接是 只读 的,因此没有单独的写入门槛 —— 演示(1)、员工(5)和管理员(10)都可以查看。该路由只要求 infr.auth 会话认证。

操作 所需级别
查看端口连接、轮询、打开 IP 调查弹窗 1(任何已认证用户)
编辑受监控端口列表(运维策略) 10(管理) —— 运维策略

由 IP 调查弹窗延伸出的 封禁 操作会交接给 安全 ▸ 封禁列表,那里需要写入级别 user_level 2 及以上并记录审计日志。本画面自身不执行任何封禁。

故障排查与常见问题

卡片出现了,但服务器数据是空的。 该窗口内没有会话绑定到这个端口。把计时器放宽到 5min/1hour,或确认该端口确实开放且有流量。

所有卡片都是空的,并显示「暂无连接快照」。 legacy_glory 上的 traffic_session_ct 没有近期快照(check_ct.js 采集器已停止,或数据库连接失败)。如果连最新快照时间都没有显示,请检查采集器。

我想看的端口没有出现。 如果它不在受监控端口列表(infra_monitored_ports)里,就不会创建卡片。请在 管理 ▸ 运维策略 中以 CSV 形式添加(1–65535,最多 30 个,保留输入顺序)。默认值:

infra_monitored_ports = 80,443,22,3306,25,465,27017,21,53,3030,8080,6379,6001

快照时间差了好几个小时。 当旧库的存储时钟与你的显示时区不一致时,请在运维策略中设置 traffic_tz_offset_hours(±14 小时)来校正显示时间。它只作用于显示,绝不会作用于查询边界。

按天的历史是空的。 _1day 汇总可能滞后一天,并且按 /24 网段聚合。请改为查看 5 分钟或按小时的粒度。

相关内容

포트 연결 — PORT OVERVIEW
포트 연결 — PORT OVERVIEW