Files
wecom_it_smart_desk/docs/联软终端安全系统集成分析.md

798 lines
36 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 联软LV7000终端安全管理系统集成分析
> 基于联软LV7000系列LeagView5版本API接口说明文档(202210SP v1.1
> 分析日期:2026-06-11
> 分析人:IT智能服务台项目组
---
## 一、联软API全景概览
### 1.1 认证机制
联软提供**三层认证**,灵活度高于火绒:
| 认证模式 | 说明 | 适用场景 |
|---------|------|---------|
| **白名单IP验证**(默认启用) | 配置`WhiteListServerIp`允许的调用方IP | 内网系统间调用 |
| **用户名密码验证** | 配置`ApiAccount`+`ApiPassword`,调用时传`apiAccount`+`apiPassword`+`validatekey` | 跨网段调用 |
| **一次性Token验证** | 先调`/token?act=getToken`获取token(默认30分钟有效),业务接口带`token`参数 | 安全要求高的场景 |
**端口**`30098`(所有API统一端口)
**响应格式统一**
```json
{
"status": "SUCCESS | ERROR | INVALID | Exceed",
"msg": "描述信息",
"rows": [...], // 数据列表(部分接口用"row"
"total": 100 // 总记录数
}
```
- `SUCCESS`:成功
- `ERROR`:参数错误/业务失败
- `INVALID`:无权限(IP不在白名单)
- `Exceed`:数据量超限(仅仿冒设备接口)
### 1.2 API端点分类总览(68个)
| 大类 | 数量 | 核心端点 | 对IT服务台价值 |
|------|------|---------|--------------|
| **终端设备** | 8 | `queryDevByParams`, `getDevAllInfo`, `querysoftwarebydev` | ⭐⭐⭐⭐⭐ 极高 |
| **准入控制** | 7 | `existOnlineUser`, `onlineUserList`, `forcedOffline`, `queryAccessLog` | ⭐⭐⭐⭐ 高 |
| **组织架构/用户** | 8 | `getUserInfo`, `getUserInfoByAccount`, `getAllOrgInfo`, `getDeptInfo` | ⭐⭐⭐⭐⭐ 极高(映射) |
| **审计查询** | 4 | `queryCommonAuditInfo`, `queryClientPatchAuditInfo` | ⭐⭐⭐ 中 |
| **安全策略** | 5 | `getSecScopeByName`, `addSecpolicyScope` 等 | ⭐⭐ 低 |
| **审批流程** | 12 | `queryapprovallist`, `doapproval`, `endapproval` 等 | ⭐⭐ 低 |
| **免检设备** | 6 | `addByMac`, `delByMac`, `queryCheckDevList` | ⭐⭐ 低 |
| **访客/外协** | 8 | `getGuestAccount`, `create`, `find`, `applyOutsource` | ⭐⭐ 低 |
| **其他** | 10 | `noticeAgentMsg`, `remoteWakeUp`, `queryCounterfeitList` 等 | ⭐⭐⭐ 中 |
### 1.3 核心API详解(对IT服务台有价值的端点)
#### 1.3.1 🔴 P0级 — 终端设备查询
**查询指定终端设备** `queryDevByParams`
- URL: `http://{IP}:30098/terminal?act=queryDevByParams`
- **这是最核心的接口**!返回字段包含:
```
istatus // 终端状态(在线/离线)
strdevname // 计算机名
strdevip // IP地址
strmac // MAC地址
strdeptname // 所属部门名
strusername // ⭐ 使用该终端的用户账号
struserdes // ⭐ 用户姓名/描述
strswitchname // 接入交换机名
strifname // 交换机接口名
strmail // 用户邮箱
strphone // 用户电话
```
> **关键发现**`strusername` + `struserdes` 字段**直接提供员工账号→终端的映射**!无需通过IP交叉匹配,这是联软相比火绒的最大优势。
**设备概要详细信息** `getDevAllInfo`
- URL: `http://{IP}:30098/devallinfoshowwithpaging?act=getDevAllInfo`
- 返回**极其详细**的设备信息:
```
equipment:
strdevname, strip1, strmac, strnatip, macverdor, strdevtype
strdeptname, strusername, struserdes
dtdevuptime, dtdevdowntime, dtdevfirstfoundtime
stros, strdomain, strserialnumber, strmainboardtype
equipmentdetail:
devdetail:
strverofuaagent // 安全助手版本
istatus // 在线状态
uniaccessagentstatus // UniAccess助手状态
devassetno // 设备资产号
devgroup // 设备所属设备组
mainboardInformation[] // 主板(厂商/型号/序列号)
CPUInformation[] // CPU(型号/核心/频率/缓存)
MemoryInformation[] // 内存(最大/当前/插槽数)
HardDiskInformation[] // 硬盘(类型/容量/型号/序列号)
LogicalDiskInformation[] // 逻辑盘(卷标/文件系统/总量/可用/使用率)
GraphicsCardInformation[] // 显卡
NetworkCardInformation[] // 网卡(名称/是否无线/厂商/MAC)
DisplayInformation[] // 显示器(厂商/型号/序列号/尺寸)
PCIInformation[] // PCI设备
MemoryModuleDetails[] // 内存条详情
SoundCardInformation[] // 声卡
OperatingSystemInformation[] // 操作系统详情(语言/补丁/安装时间)
```
> 比火绒的`_info2`更详细!尤其是**逻辑磁盘使用率**(可直接判断磁盘满导致卡慢)和**显示器信息**(多屏配置排查)。
**设备安装软件信息** `querysoftwarebydev`
- URL: `http://{IP}:30098/software?act=querysoftwarebydev`
- 返回:
```
strdevname, strdevip, strmac, strdomain, strusername
softwares: [
{ strsoftware, strversion, strvendor, installdate }
]
```
#### 1.3.2 🔴 P0级 — 组织架构/用户
**查询用户信息** `getUserInfo`
- URL: `http://{IP}:30098/querydeptuser?act=getUserInfo`
- 返回:`deptid, userid, useraccount, username`
**用户账号查询** `getUserInfoByAccount`
- URL: `http://{IP}:30098/querydeptuser?act=getUserInfoByAccount`
- **直接通过账号查用户**,映射核心接口!
**查询部门和用户信息** `getAllOrgInfo`
- URL: `http://{IP}:30098/querydeptuser?act=getAllOrgInfo`
- 一次性获取所有部门+用户,可做全量同步
**查询部门信息** `getDeptInfo`
- URL: `http://{IP}:30098/querydeptuser?act=getDeptInfo`
- 返回所有部门(含父子关系)
#### 1.3.3 🟡 P1级 — 准入控制
**查询终端用户是否在线** `existOnlineUser`
- URL: `http://{IP}:30098/access/onlineUser?act=existOnlineUser`
- 参数:`username` + `strdevip`
- 返回:`data: 0`(不在线)/ `1`(在线)
- **可精确判断某员工在某IP是否当前在线**
**查询用户在线列表** `onlineUserList`
- URL: `http://{IP}:30098/onlineUser?act=onlineUserList`
- 按时间范围查在线用户(间隔不超过3个月)
**强制下线** `forcedOffline`
- URL: `http://{IP}:30098/nac?act=forcedOffline`
- ⚠️ 高危操作!将终端从网络强制断开
- 与火绒的`netctrl`隔离功能类似但机制不同
**终端入网日志** `queryAccessLog`
- URL: `http://{IP}:30098/access/queryInfo?act=queryAccessLog`
- 可查看终端入网历史
#### 1.3.4 🟡 P1级 — 终端操作
**通知助手弹出消息** `noticeAgentMsg`
- URL: `http://{IP}:30098/terminal?act=noticeAgentMsg`
- 向终端安全助手推送弹窗消息
**设备远程唤醒** `remoteWakeUp`
- URL: `http://{IP}:30098/terminal?act=remoteWakeUp`
- 通过IP+MAC唤醒关机/休眠的终端
**补丁安装审计** `queryClientPatchAuditInfo`
- URL: `http://{IP}:30098/terminalaudit?act=queryClientPatchAuditInfo`
- 查看终端补丁安装状态(补丁名/KB号/安装时间/是否成功)
**查询助手安装率** `queryAgentInstallRate`
- URL: `http://{IP}:30098/terminal?act=queryAgentInstallRate`
- 返回Windows/macOS分别的安装率
**查询终端补丁安装率** `queryAllMspatchInstallRate`
- URL: `http://{IP}:30098/terminal?act=queryAllMspatchInstallRate`
- 返回全公司补丁安装率
#### 1.3.5 🟢 P2级 — 审计与安全
**通用审计信息查询** `queryCommonAuditInfo`
- URL: `http://{IP}:30098/auditinfo?act=queryCommonAuditInfo`
- 支持所有通用审计类型(文件操作/进程控制等)
**仿冒设备查询** `queryCounterfeitList`
- URL: `http://{IP}:30098/access/queryInfo?act=queryCounterfeitList`
- 查询准入仿冒信息(发现仿冒设备告警)
**屏幕录像审计** `listScreenAuditInfo`
- URL: `http://{IP}:30098/auditinfo?act=listScreenAuditInfo`
- 获取终端屏幕录像审计信息
**Syslog推送**
- 联软支持将审计日志通过Syslog推送到第三方平台(UDP 514
- 吞吐量:约100条/秒
- 支持:文件读写审计、非授权外联审计、打印审计、漏洞审计、进程检测审计、安全U盘审计
---
## 二、与火绒的能力对比
### 2.1 功能矩阵对比
| 能力维度 | 火绒 | 联软 | 对IT服务台价值 |
|---------|------|------|--------------|
| **员工↔终端映射** | ❌ 只有computer_name | ✅ **strusername+struserdes** | 🔴 **最关键差异** |
| **终端基本信息** | ✅ `_list`client_id/name/ip/mac/在线) | ✅ `queryDevByParams`(更丰富) | 相当 |
| **终端详细信息** | ✅ `_info2`(硬件+软件+资产+网络) | ✅ `getDevAllInfo`(**更详细**:含磁盘使用率/显示器/内存条详情) | 联软胜 |
| **病毒事件** | ✅ `_virus_events`(病毒统计+处理状态) | ❌ 无专门接口 | **火绒独有** |
| **高危漏洞** | ✅ `_leak`(漏洞等级+详情) | ✅ `queryClientPatchAuditInfo`(补丁审计) | 火绒更直观 |
| **终端隔离** | ✅ `netctrl`(网络隔离/解除) | ✅ `forcedOffline`(强制下线) | 火绒更精细(可隔离+解除) |
| **远程扫描** | ✅ `_create`(快速/全盘/自定义扫描) | ❌ 无 | **火绒独有** |
| **远程唤醒** | ❌ 无 | ✅ `remoteWakeUp` | **联软独有** |
| **消息推送** | ✅ `_create`(message) | ✅ `noticeAgentMsg` | 相当 |
| **准入控制** | ❌ 无 | ✅ `existOnlineUser`+`forcedOffline`+`queryAccessLog` | **联软独有** |
| **软件管理** | ✅ `_search`(软件安装率/版本分布) | ✅ `querysoftwarebydev`(按设备查软件) | 联软更实用 |
| **组织架构** | ❌ 无 | ✅ SCIM同步+部门/用户查询 | **联软独有** |
| **审计日志** | ❌ 无 | ✅ Syslog推送+通用审计查询 | **联软独有** |
| **仿冒设备** | ❌ 无 | ✅ `queryCounterfeitList` | **联软独有** |
| **审批流程** | ❌ 无 | ✅ 完整审批流程API | 低价值 |
| **屏幕录像** | ❌ 无 | ✅ 审计信息+图片导出 | 低价值 |
### 2.2 核心结论
> **火绒 = 安全防护**(杀毒+漏洞+隔离+扫描)
> **联软 = 终端管理**(准入+硬件+软件+映射+审计)
>
> **两者高度互补,不存在替代关系,应双系统集成!**
---
## 三、产品维度分析
### 3.1 联软独有高价值场景
| 场景 | 联软API | 用户体验 |
|------|---------|---------|
| **员工报修「电脑卡/慢」** | `getDevAllInfo` | 坐席直接看到磁盘使用率34%→11%、内存16GB/32GB、CPU负载,一秒定位瓶颈 |
| **员工报修「网络连不上」** | `existOnlineUser` + `queryAccessLog` | 坐席查看该员工终端当前是否准入在线、最近入网记录、是否被策略阻断 |
| **员工报修「电脑开不了机」** | `remoteWakeUp` | 坐席远程唤醒终端(WOL),员工无需等待IT到现场 |
| **员工问「我装了什么软件」** | `querysoftwarebydev` | 输入员工账号→自动列出已安装软件+版本+安装日期 |
| **IT查「谁用了这个IP」** | `queryDevByParams` | 按IP反查使用人、部门、MAC,网络冲突排查利器 |
| **安全巡检「补丁安装率」** | `queryAllMspatchInstallRate` + `queryClientPatchAuditInfo` | 管理后台展示补丁合规率 |
### 3.2 联软+火绒联合场景
| 场景 | 联软提供 | 火绒提供 | 联合效果 |
|------|---------|---------|---------|
| **坐席打开会话** | 员工→终端映射(strusername) | 终端安全画像(漏洞+病毒) | 一键获知「谁的电脑+什么安全状态」 |
| **安全事件响应** | `forcedOffline`快速断网 | `netctrl`精细隔离 | 双重保障:先联软断网→火绒隔离 |
| **磁盘满排查** | `getDevAllInfo`磁盘使用率 | `_info2`软件列表 | 联软看磁盘空间→火绒查大文件软件 |
| **补丁管理** | `queryClientPatchAuditInfo`安装审计 | `_leak`高危漏洞列表 | 联软看补丁安装结果→火绒看漏洞风险 |
| **终端画像** | 硬件详情+准入状态+资产号 | 安全评分+病毒事件 | 360°终端全景 |
### 3.3 集成功能规划(按优先级)
#### P0 — 核心查询+映射(阶段三 3A-3B)
| 功能 | 用户侧效果 | 涉及API |
|------|-----------|---------|
| **员工→终端映射服务** | 输入员工账号→返回终端列表(IP/MAC/计算机名/部门/在线状态) | `queryDevByParams` + `getUserInfoByAccount` |
| **终端详细信息卡片** | 坐席打开会话→自动展示该员工终端的完整硬件+软件信息 | `getDevAllInfo` + `querysoftwarebydev` |
| **终端在线状态查询** | AI Wingman自动检测→提示终端是否在线 | `existOnlineUser` |
#### P1 — 操作+控制(阶段三 3C + 阶段四)
| 功能 | 用户侧效果 | 涉及API |
|------|-----------|---------|
| **远程唤醒终端** | 坐席一键唤醒休眠/关机的终端 | `remoteWakeUp` |
| **推送助手消息** | 向员工终端弹窗通知(如「请重启电脑安装补丁」) | `noticeAgentMsg` |
| **强制下线** | 安全事件→坐席一键断网(与火绒隔离互为补充) | `forcedOffline` |
| **补丁审计查询** | 查看某终端补丁安装状态 | `queryClientPatchAuditInfo` |
| **入网日志查询** | 排查网络问题时查看终端入网历史 | `queryAccessLog` |
#### P2 — 管理与运营(阶段四 4B)
| 功能 | 用户侧效果 | 涉及API |
|------|-----------|---------|
| **助手安装率看板** | 管理后台展示公司安全助手安装率 | `queryAgentInstallRate` |
| **补丁合规率看板** | 管理后台展示补丁安装率 | `queryAllMspatchInstallRate` |
| **仿冒设备告警** | 发现仿冒设备自动推送告警 | `queryCounterfeitList` |
| **Syslog审计日志** | 联软审计事件实时推送到IT服务台 | Syslog接口 |
---
## 四、开发维度分析
### 4.1 后端模块设计
```
backend/app/
├── integrations/
│ ├── __init__.py
│ ├── base.py # 集成基类
│ ├── huorong/ # 火绒集成(已有设计)
│ │ ├── client.py
│ │ ├── config.py
│ │ ├── models.py
│ │ ├── cache.py
│ │ └── exceptions.py
│ ├── leagsoft/ # 联软集成模块
│ │ ├── __init__.py
│ │ ├── client.py # 联软API客户端(认证+请求)
│ │ ├── config.py # 配置(BaseUrl/账号密码/Token
│ │ ├── models.py # 数据模型(Pydantic
│ │ ├── cache.py # 缓存策略
│ │ └── exceptions.py # 自定义异常
│ └── mapping/ # 🆕 统一映射服务
│ ├── __init__.py
│ ├── service.py # 员工→终端映射核心逻辑
│ └── models.py # 映射数据模型
├── api/
│ └── integrations.py # 集成API路由
└── services/
└── integration_service.py # 集成业务逻辑
```
### 4.2 认证实现
联软推荐使用**一次性Token模式**(安全性最高):
```python
import httpx
from datetime import datetime, timedelta
class LeagsoftClient:
"""联软API客户端"""
def __init__(self, base_url: str, api_account: str, api_password: str):
self.base_url = base_url # 如 http://leagsoft.oa.servyou-it.com:30098
self.api_account = api_account
self.api_password = api_password
self._token: str | None = None
self._token_expire: datetime | None = None
async def _ensure_token(self) -> str:
"""
确保token有效,过期则重新获取
- 联软token默认30分钟有效
- 提前5分钟刷新,避免临界过期
"""
if self._token and self._token_expire and datetime.now() < self._token_expire - timedelta(minutes=5):
return self._token
async with httpx.AsyncClient(timeout=10) as client:
resp = await client.get(f"{self.base_url}/token", params={"act": "getToken"})
data = resp.json()
# 解析token(具体字段需根据实际返回确认)
self._token = data.get("token", "")
self._token_expire = datetime.now() + timedelta(minutes=25) # 保守25分钟
return self._token
async def query_dev_by_params(self, username: str = None, devip: str = None,
mac: str = None, devname: str = None) -> list[dict]:
"""
查询终端设备
- username: 员工账号(映射核心参数)
- devip: 终端IP
- mac: MAC地址
- devname: 计算机名
- 支持多条件组合查询
"""
token = await self._ensure_token()
params = {"act": "queryDevByParams", "token": token}
form_data = {}
if username:
form_data["strusername"] = username
if devip:
form_data["strdevip"] = devip
if mac:
form_data["strmac"] = mac
if devname:
form_data["strdevname"] = devname
async with httpx.AsyncClient(timeout=10) as client:
resp = await client.post(
f"{self.base_url}/terminal",
params=params,
data=form_data
)
result = resp.json()
if result.get("status") != "SUCCESS":
raise LeagsoftAPIError(result.get("msg", "未知错误"))
return result.get("rows", [])
```
### 4.3 缓存策略
| 数据类型 | 缓存时间 | 理由 |
|---------|---------|------|
| 终端基本信息 (`queryDevByParams`) | 5分钟 | 终端上下线变化较频繁 |
| 终端详细信息 (`getDevAllInfo`) | 30分钟 | 硬件信息极少变化 |
| 软件安装信息 (`querysoftwarebydev`) | 1小时 | 软件安装变化慢 |
| 在线状态 (`existOnlineUser`) | 1分钟 | 需较实时 |
| 组织架构 (`getAllOrgInfo`) | 24小时 | 组织变更极少 |
| 用户信息 (`getUserInfoByAccount`) | 24小时 | 用户信息变更少 |
| 补丁审计 (`queryClientPatchAuditInfo`) | 1小时 | 补丁安装周期为天级 |
### 4.4 员工→终端映射方案(重大升级)
#### 原方案回顾
之前火绒集成分析中,因火绒API只有`computer_name`无员工账号,提出了三种映射方案:
| 方案 | 原理 | 缺点 |
|------|------|------|
| A. computer_name匹配 | 依赖命名规范 | 不稳定 |
| B. eHR+火绒IP交叉匹配 | eHR取IP→火绒查终端 | 需eHR接口,IP可能变化 |
| C. 手动绑定 | 坐席手动关联 | 运营成本高 |
#### 新方案:联软直接映射(方案D)⭐推荐
**核心发现**:联软 `queryDevByParams` 接口直接返回 `strusername`(员工账号)和 `struserdes`(员工姓名),且总部员工必须安装联软安全助手,因此**联软拥有最准确的员工↔终端映射数据**。
```
联软 queryDevByParams(strusername="songxian")
↓ 返回
[
{strdevname: "DESKTOP-SX001", strdevip: "10.8.11.21", strmac: "0C:C4:7A:0C:75:B5",
strusername: "songxian", struserdes: "宋献", strdeptname: "IT部", istatus: "在线"},
{strdevname: "DESKTOP-SX002", strdevip: "10.8.11.22", strmac: "0C:C4:7A:0C:75:B6",
strusername: "songxian", struserdes: "宋献", strdeptname: "IT部", istatus: "离线"}
]
```
#### 映射架构(多源融合)
```
┌──────────────────────────────────────────┐
│ IT服务台 统一映射服务 │
│ (mapping/service.py) │
└───────┬──────────┬──────────┬────────────┘
│ │ │
┌────────▼──┐ ┌────▼─────┐ ┌─▼──────────┐
│ 联软 │ │ aTrust │ │ eHR │
│ (主源) │ │ (VPN源) │ │ (辅助源) │
└───────────┘ └──────────┘ └────────────┘
│ │ │
▼ ▼ ▼
总部终端映射 远程办公映射 人员基础信息
(最准确) (VPN连接时准确) (无终端信息)
```
**映射优先级策略**
| 场景 | 数据源 | 匹配键 | 准确度 | 说明 |
|------|--------|--------|--------|------|
| 总部办公终端 | **联软** | `strusername` = 员工账号 | ⭐⭐⭐⭐⭐ | 最准确,安全助手必装 |
| 外网VPN终端 | **aTrust** | VPN登录账号 = 员工账号 | ⭐⭐⭐⭐⭐ | 远程办公时最准确 |
| eHR补充 | eHR | 员工工号 = 员工账号 | ⭐⭐⭐ | 无终端映射,仅人员信息 |
| 火绒安全数据 | 火绒 | 通过联软映射获得`client_id`→查安全 | ⭐⭐⭐⭐ | 依赖联软映射做桥梁 |
**映射实现**
```python
class TerminalMappingService:
"""
统一员工→终端映射服务
优先级: 联软(主) > aTrust(VPN) > 手动绑定
"""
async def get_employee_terminals(self, employee_id: str) -> list[TerminalInfo]:
"""
根据员工ID获取关联的终端列表
策略:
1. 先查联软(最准确,覆盖总部终端)
2. 联软无结果 → 查aTrust(覆盖VPN终端)
3. 都无结果 → 返回空,标记为「未发现终端」
"""
# Step 1: 联软查询
leagsoft_terminals = await self.leagsoft_client.query_dev_by_params(
username=employee_id
)
if leagsoft_terminals:
return [self._parse_leagsoft_terminal(t) for t in leagsoft_terminals]
# Step 2: aTrust查询(后续实现)
# atrust_terminals = await self.atrust_client.query_user_devices(employee_id)
# if atrust_terminals:
# return atrust_terminals
# Step 3: 无结果
return []
async def get_terminal_security(self, employee_id: str) -> TerminalSecurityInfo:
"""
获取员工终端的安全信息(跨系统聚合)
流程:
1. 联软获取终端列表 → 得到strdevip/strmac
2. 用strdevip去火绒查安全状态
3. 聚合联软硬件+火绒安全 → 完整画像
"""
# Step 1: 联软获取终端
terminals = await self.get_employee_terminals(employee_id)
if not terminals:
return TerminalSecurityInfo(available=False, reason="未发现关联终端")
terminal = terminals[0] # 取主终端
# Step 2: 火绒查安全(用IP或computer_name匹配)
huorong_info = await self.huorong_client.query_by_ip(terminal.ip)
# Step 3: 聚合
return TerminalSecurityInfo(
terminal=terminal, # 联软硬件信息
security=huorong_info, # 火绒安全信息
available=True
)
```
### 4.5 前端集成设计
#### 坐席端新增
```
坐席工作台
└── 右侧面板
└── 「终端信息」标签页(替代原「终端安全」,合并联软+火绒)
├── 终端概要卡片(联软数据)
│ ├── 在线状态 🟢/🔴 + IP地址
│ ├── 计算机名 + 员工账号
│ ├── 操作系统版本
│ ├── 硬件概要(CPU/内存/磁盘使用率)
│ ├── 设备资产号
│ └── 安全助手版本
├── 安全状态卡片(火绒数据)
│ ├── 安全评分
│ ├── 🔴 高危漏洞 (N个)
│ ├── 🟡 未处理病毒事件 (N个)
│ └── 🟢 安全状态正常
├── 软件列表(联软数据)
│ └── 已安装软件 + 版本 + 安装日期
└── 快速操作
├── 📡 远程唤醒 (联软)
├── 📢 推送消息 (联软/火绒)
├── 🛡️ 快速扫描 (火绒)
├── 🔒 强制下线 (联软) / 隔离终端 (火绒)
└── 🔓 解除隔离 (火绒)
```
### 4.6 开发风险与应对
| 风险 | 影响 | 概率 | 应对措施 |
|------|------|------|---------|
| 联软API账户/密码未申请 | 无法调用任何接口 | 中 | 提前联系信息安全/终端安全团队 |
| 内网地址不通 | 开发环境无法调试 | 中 | 需VPN或开发机部署在内网 |
| Token过期处理 | 长时间运行后API调用失败 | 中 | 实现自动刷新token,提前5分钟续期 |
| IP白名单未配置 | 返回INVALID | 中 | 确认部署服务器IP加入白名单 |
| API字段名不一致 | 部分接口返回字段与文档不符 | 低 | 先用Postman验证,编写适配层 |
| 联软版本差异 | API端点可能不存在 | 低 | 确认当前版本是否为202210SP |
| 查询数据量过大 | 部分接口有数据量限制(仿冒设备默认1万条) | 低 | 分页查询+限制时间范围 |
---
## 五、安全维度分析
### 5.1 认证安全
| 风险项 | 等级 | 说明 | 建议 |
|--------|------|------|------|
| API账户密码泄露 | **严重** | 泄露后可调用所有联软API,包括强制下线 | 密码存环境变量,**禁止**写入代码 |
| Token泄露 | 高 | Token有效期内可被冒用 | 使用HTTPS(如有);Token存储在内存不落盘 |
| IP白名单过宽 | 中 | 白名单IP范围过大增加攻击面 | 仅添加必要的服务器IP |
**认证方式建议**
| 场景 | 推荐认证方式 | 理由 |
|------|------------|------|
| 内网服务器间调用 | IP白名单 + 一次性Token | 安全性最高 |
| 开发调试 | IP白名单 + 用户名密码 | 方便调试 |
| 生产环境 | **三种全部启用** | 纵深防御 |
### 5.2 操作安全
| 操作 | 风险等级 | 安全要求 |
|------|---------|---------|
| 查询终端设备 (`queryDevByParams`) | 🟢 低 | 无特殊要求 |
| 查询终端详情 (`getDevAllInfo`) | 🟢 低 | 无特殊要求 |
| 查询在线状态 (`existOnlineUser`) | 🟢 低 | 无特殊要求 |
| 推送助手消息 (`noticeAgentMsg`) | 🟡 中 | 记录审计日志;限制频率(同终端5分钟1条) |
| 远程唤醒 (`remoteWakeUp`) | 🟡 中 | 记录审计日志;仅坐席可操作 |
| **强制下线** (`forcedOffline`) | 🔴 **高** | **必须**二次确认 + 审计日志 + 仅admin角色 |
| Syslog推送 | 🟢 低 | 只读,无风险 |
**强制下线 vs 火绒隔离的区别**
| 维度 | 联软强制下线 | 火绒网络隔离 |
|------|-----------|-----------|
| 机制 | 准入控制断网(802.1X) | 终端agent执行隔离 |
| 彻底性 | ⭐⭐⭐⭐⭐ 非常彻底(交换机层面断网) | ⭐⭐⭐⭐ 较彻底(终端层面断网) |
| 恢复 | 需重新认证入网 | 调用API即可解除 |
| 影响范围 | 该终端所有网络 | 可配置例外(如仅隔离外网) |
| 推荐场景 | 确认中毒/仿冒,紧急切断 | 可疑行为,需隔离观察 |
### 5.3 数据安全
| 风险项 | 说明 | 建议 |
|--------|------|------|
| 员工账号信息 | 联软返回员工账号/姓名/邮箱/电话 | H5用户端不展示;坐席端仅展示必要信息 |
| 终端敏感信息 | MAC/IP/序列号等 | 同火绒策略:坐席端可见,用户端不可见 |
| 硬件详情 | 包含主板序列号等资产信息 | 后端过滤后再传前端,不暴露内部序列号 |
| 组织架构 | 全量部门+用户数据 | 仅同步必要字段,不存储完整组织架构 |
---
## 六、aTrust集成方案
> ✅ aTrust OpenAPI V3文档已获取并完成分析(2026-06-11),详见 `docs/aTrust零信任系统集成分析.md`
### 6.1 系统信息
| 项目 | 说明 |
|------|------|
| 产品 | 深信服aTrust零信任访问控制系统 |
| API版本 | OpenAPI V3(适用于≥2.4.10版本) |
| 端点数 | **104个**10大类) |
| 认证方式 | HMAC-SHA256签名(4个必填Header: x-ca-sign/key/timestamp/nonce |
| 默认端口 | 4433HTTPS |
| IP白名单 | 支持 |
### 6.2 核心P0接口
| 接口 | 路径 | 方法 | 核心价值 |
|------|------|------|---------|
| **查询在线用户** | /api/v1/monitor/getUserStatus | GET | VPN在线状态+remoteIp+vips(虚拟IP)+os+browser |
| **查询全量终端** | /api/v1/device/queryAll | POST | 按绑定用户查询终端(bindUserList过滤) |
| **查询单个终端** | /api/v1/device/query | GET | 终端详情+bindUsers(绑定用户列表)+macList |
### 6.3 核心P1接口
| 接口 | 路径 | 方法 | 安全等级 |
|------|------|------|---------|
| **踢出在线用户** | /api/v1/monitor/kickoutUsers | POST | 🔴 高危(需二次确认+审计) |
| **终端绑定用户** | /api/v1/device/assignUser | POST | 🟡 中 |
| **查询用户详情** | /api/v3/user/queryByName | GET | 🟢 低 |
### 6.4 aTrust映射字段
| 映射路径 | 字段 | 说明 |
|---------|------|------|
| **在线用户→员工** | `name`(用户名) | 如果与公司域账号一致,直接映射employee_id |
| **在线用户→虚拟IP** | `vips[].ip` | VPN分配的内网IP,可用于火绒交叉匹配 |
| **终端→绑定用户** | `bindUsers[].bindUser` | 终端绑定的用户名 |
| **用户→外部ID** | `externalId` | **可设置为工号,实现直接映射** |
| **终端→MAC** | `macList` | MAC地址列表,与联软交叉匹配 |
### 6.5 与联软的互补关系
| 能力 | 联软(内网主源) | aTrust(VPN源) | 互补效果 |
|------|---------------|---------------|---------|
| 内网终端映射 | ⭐⭐⭐⭐⭐ strusername | ⭐⭐⭐ 部分覆盖 | 联软主导 |
| 远程/VPN终端 | ⚠️ 可能未覆盖 | ⭐⭐⭐⭐⭐ 核心覆盖 | aTrust补全 |
| VPN会话数据 | ❌ 无 | ✅ 唯一数据源 | 不可替代 |
| 踢出能力 | forcedOffline(准入下线) | kickoutUsers(VPN踢出) | 双通道 |
| 终端授信 | ❌ 无 | ✅ trusted字段 | aTrust独有 |
### 6.6 集成优先级
aTrust集成为**P1优先级**(联软P0之后),因为:
1. VPN连接问题是IT服务台高频场景
2. aTrust的`vips`虚拟IP可用于火绒交叉匹配,补全远程终端安全画像
3. aTrust API文档已获取,可直接开发
4. 104个端点中仅需3-5个P0接口,开发量可控
---
## 七、三系统集成总览
### 7.1 系统定位
```
┌──────────────────────────────────────────────────────────────┐
│ IT智能服务台 │
│ (统一集成层) │
│ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ 联软 │ │ 火绒 │ │ aTrust │ │
│ │ 终端管理 │ │ 终端安全 │ │ 远程接入 │ │
│ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘ │
│ │ │ │ │
│ 员工↔终端映射 安全态势+隔离 VPN状态+远程IP │
│ 硬件+软件详情 病毒+漏洞+扫描 VPN连接审计 │
│ 准入+远程唤醒 网络隔离/解除 认证状态 │
│ 补丁+审计日志 软件合规统计 虚拟IP分配 │
└──────────────────────────────────────────────────────────────┘
```
### 7.2 集成优先级与排程
| 阶段 | 系统 | 功能 | 预计周期 | 前置条件 |
|------|------|------|---------|---------|
| **P0** | 联软 | 员工→终端映射 + 终端详情查询 | ~2周 | 联软API账户+白名单 |
| **P0** | 火绒 | 终端安全画像 + 漏洞/病毒查询 | ~2周 | 火绒AccessKey |
| **P1** | 联软 | 远程唤醒 + 消息推送 + 准入查询 | ~1周 | P0已完成 |
| **P1** | 火绒 | 远程扫描 + 隔离/解除 | ~1周 | P0已完成 |
| **P1** | aTrust | VPN状态 + 远程终端映射 | ~2周 | aTrust API文档 |
| **P2** | 联软+火绒 | 管理后台安全态势看板 | ~1周 | P0+P1已完成 |
| **P2** | 联软 | Syslog审计日志对接 | ~1周 | 联软Syslog配置 |
### 7.3 统一数据模型
```python
class UnifiedTerminalInfo:
"""统一终端信息模型(聚合联软+火绒+aTrust)"""
# 基础标识(联软提供)
computer_name: str # 计算机名
ip: str # IP地址
mac: str # MAC地址
employee_id: str # 使用人账号
employee_name: str # 使用人姓名
department: str # 所属部门
# 在线状态(联软+aTrust
is_online: bool # 是否在线
online_source: str # "leagsoft" | "atrust" | "offline"
last_online_time: str # 最后在线时间
# 硬件信息(联软 getDevAllInfo
os_version: str # 操作系统版本
cpu: str # CPU型号
memory_gb: int # 内存(GB)
disk_total_gb: float # 磁盘总量(GB)
disk_usage_pct: float # 磁盘使用率(%)
# 安全信息(火绒提供)
security_score: int | None # 安全评分
high_risk_leaks: int | None # 高危漏洞数
uncleaned_virus: int | None # 未处理病毒数
last_scan_time: str | None # 最近扫描时间
# 准入信息(联软提供)
agent_version: str | None # 安全助手版本
patch_install_rate: float | None # 补丁安装率
# VPN信息(aTrust提供)
vpn_online: bool | None # VPN是否在线
vpn_virtual_ip: str | None # VPN虚拟IP
vpn_last_connect: str | None # 最近VPN连接时间
```
---
## 八、对接前准备清单
### 联软
#### 必须完成(阻塞性)
- [ ] **申请API账户**:联系终端安全团队,获取`ApiAccount` + `ApiPassword`
- [ ] **配置IP白名单**:将IT服务台服务器IP加入联软白名单
- [ ] **确认网络可达**:确认开发/部署服务器可访问联软系统(端口30098)
- [ ] **确认联软版本**:确认当前版本是否为202210SP,API文档是否匹配
#### 建议完成(非阻塞)
- [ ] **确认员工账号映射**:验证联软中`strusername`字段是否为公司企微/域账号
- [ ] **确认数据量级**:了解联软管理的终端数量,评估查询性能
- [ ] **确认安全助手安装率**:了解公司终端安全助手安装覆盖率
- [ ] **准备测试终端**:准备1-2台测试终端用于开发调试
### aTrust
- [ ] **获取API文档**:联系网络/信息安全团队获取aTrust API文档
- [ ] **确认认证方式**:了解aTrust API认证机制
- [ ] **确认映射数据格式**:了解aTrust中员工↔终端的映射字段
---
## 九、总结
### 9.1 核心结论
1. **联软是终端映射的金钥匙**`strusername`字段直接打通员工→终端的映射,这是火绒和eHR都无法提供的关键能力
2. **联软+火绒高度互补**:联软管「终端画像+准入」,火绒管「安全态势+隔离」,无替代关系
3. **aTrust补全远程办公**:联软覆盖内网终端,aTrust覆盖VPN终端,两者结合实现100%覆盖
4. **三系统联合映射是最佳方案**:联软(主)+aTrust(VPN)+eHR(辅助),取代之前推荐的IP交叉匹配方案
5. **实现成本低**:联软API为标准HTTP+JSON,认证简单,无需安装agent
### 9.2 映射策略升级总结
| 维度 | 旧方案(仅火绒) | 新方案(三系统) |
|------|----------------|----------------|
| 映射准确度 | ⭐⭐⭐(IP交叉匹配) | ⭐⭐⭐⭐⭐(联软直接映射) |
| 覆盖范围 | 仅内网在线终端 | 内网+VPN全覆盖 |
| 实现复杂度 | 需eHR+火绒双接口 | 仅联软单接口 |
| 维护成本 | 高(IP变化需定期校验) | 低(联软实时更新) |
| 前置依赖 | eHR接口+火绒接口 | 联软接口 |
### 9.3 一句话总结
> 联软是IT智能服务台打通「员工↔终端」映射的关键系统,与火绒形成「管理+安全」双引擎,加上aTrust补全远程办公,三系统集成将实现终端问题排查的360°全景视角。