A:增加防火墙大屏适配

This commit is contained in:
jimmy committed 2025-07-28 20:31:03 +08:00
1 parent ccd3e7906c
commit 5655644983
2 files changed
+148 -3

No files matched your search

+104
View File
@@ -66,3 +66,107 @@ npm run lint
所连接服务器的地理位置
我在做一个专业的网络信息管理工具,主要能做到对于网络信息的监控,比如网速,当前网速,以及每个软件的网速,我想的是把这些收集到的信息保存起来,然后可以增加一个历史数据分析页面。这是我们的前景提要。现在,对于C#来说我想用Sqlite进行数据保存,因为我的软件是要离线运行,并且单机可用的,所以不能用Mysql或者其他繁重的数据库。
我目前的整体想法如下:
关于网速的情况的分析分为两个表:一个是全局网速占用、一个是每个软件的网速占用。对于全局网速占用每1分钟写入一次,一天大概有1440条数据,一个月大概4万条数据
对于每分钟的数据记录只记录一个月,超过一个月的将对应范围内的数据压缩为天进行报错,删除最原始的每分钟数据。
对于单个软件网速占用,每5秒进行统计,该数据只保存在内存中,不保存数据库,并且内存中的网速记录只周期记录最近6个小时。于此同时,写入数据库的依然是按照分钟进行记录,
一个软件一周大概1万条数据,如果用户有100个软件,那么一周就是100万个,为了防止数据库崩溃,只记录一周的数据,超过的一周的数据按照全局信息的管理方式,将其压缩为天进行存储,
删除原始每分钟数据。
对于单个软件网速的记录采用 可执行文件的路径作为ID进行数据存储,第二个字段为时间,其他的分别为:上传总量、下载总量、网卡、时间戳、
于此同时也可以记录网络连接的信息:时间戳 本地IP 本地端口 远程IP 远程端口 协议 上传字节 下载字节 可执行文件路径。这些连接信息每分钟只保存流量最多的100条(后期开放用户可定义数量,
但是不能超过100)。该信息最多只保存1天,超过1天就合并删除。超过1周的数据再次聚会删除。超过1个月再次处理。
你帮我估算一个,如果按照这样的策略,数据库需要考虑分库分表嘛?它的健壮性如何?还有什么问题需要考虑。
软件信息的记录:
名字、路径、版本、公司、ICON等
归档与清理任务的调度
使用 BackgroundWorker / Timer / Task 定期执行:
按月归档
删除旧数据
合并压缩历史数据(比如求平均/最大/最小)
异常崩溃后的恢复
建议使用 WAL 模式 + 定期备份数据库文件。
常见的异常事件类型:
连接异常
连接失败(如 TCP 三次握手失败)
连接超时、断开异常
流量异常
突然流量暴增或骤降
单个 IP/端口流量异常(过高或过低)
安全告警
访问黑名单 IP 或域名
非法端口访问(比如非标准端口被访问)
端口扫描行为检测
异常登录/连接尝试
软件异常
某进程网络异常终止
网络接口断开或重连
系统网络错误(如 DNS 解析失败)
事件日志的记录结构建议
| 字段 | 说明 |
| -------- | --------------------------- |
| 事件ID | 唯一标识 |
| 时间戳 | 事件发生时间 |
| 事件类型 | 如“连接失败”、“异常流量”、“黑名单访问”等 |
| 相关进程/应用 | 关联的进程路径或名称(如果有) |
| 本地 IP/端口 | 事件关联的本地地址 |
| 远程 IP/端口 | 事件关联的远程地址 |
| 事件描述 | 详细描述,如“连接 8.8.8.8:443 超过阈值” |
| 严重等级 | Info/Warning/Error/Critical |
| 额外数据 | 可 JSON 格式存储其他细节信息 |
CREATE TABLE event_log (
event_id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME NOT NULL,
event_type TEXT NOT NULL,
process_path TEXT,
local_ip TEXT,
local_port INTEGER,
remote_ip TEXT,
remote_port INTEGER,
severity TEXT NOT NULL,
description TEXT,
extra_data TEXT -- JSON 格式可选
);
端口扫描行为如何检测?
检测思路
短时间内对多个端口发起连接尝试:
同一源 IP 在短时间内向同一目标 IP 扫描多个端口。
大量连接失败:
多个端口连接失败,说明可能是扫描。
连接速率异常:
短时间内连接速率远高于正常业务连接。
实现方法
滑动时间窗口统计:记录单位时间内访问某目标IP的端口次数。
阈值判断:超过阈值触发告警。
结合连接失败率:如果大部分端口连接失败,更可能是扫描。
黑名单过滤:过滤已知安全扫描器IP。
@@ -565,7 +565,7 @@ const handleSaveRule = (rule: unknown) => {
.firewall-container {
padding: 24px;
max-width: 1500px;
max-width: 2000px;
margin: 0 auto;
height: 100%;
display: flex;
@@ -817,9 +817,50 @@ const handleSaveRule = (rule: unknown) => {
text-overflow: ellipsis;
white-space: nowrap;
}
/* 超超大屏幕 1801px-2000px */
@media (min-width: 1801px) and (max-width: 2000px) {
.checkbox-cell { width: 60px; }
.name-cell { width: 250px; }
.status-cell { width: 100px; }
.direction-cell { width: 100px; }
.action-cell { width: 100px; }
.program-cell { width: 320px; flex-shrink: 1; }
.protocol-cell { width: 100px; }
.port-cell { width: 120px; }
.profiles-cell { width: 180px; flex-shrink: 1; }
.actions-cell { width: 120px; }
}
/* 基础列宽 - 针对超大屏幕(>1400px) */
@media (min-width: 1401px) {
/* 极大屏幕 >2000px */
@media (min-width: 2001px) {
.checkbox-cell { width: 70px; }
.name-cell { width: 280px; }
.status-cell { width: 110px; }
.direction-cell { width: 110px; }
.action-cell { width: 110px; }
.program-cell { width: 380px; flex-shrink: 1; }
.protocol-cell { width: 110px; }
.port-cell { width: 140px; }
.profiles-cell { width: 200px; flex-shrink: 1; }
.actions-cell { width: 140px; }
}
/* 超大屏幕 1601px-1800px */
@media (min-width: 1601px) and (max-width: 1800px) {
.checkbox-cell { width: 55px; }
.name-cell { width: 230px; }
.status-cell { width: 90px; }
.direction-cell { width: 90px; }
.action-cell { width: 90px; }
.program-cell { width: 280px; flex-shrink: 1; }
.protocol-cell { width: 90px; }
.port-cell { width: 110px; }
.profiles-cell { width: 160px; flex-shrink: 1; }
.actions-cell { width: 110px; }
}
/* 基础列宽 - 针对超大屏幕(1401px-1600px) */
@media (min-width: 1401px) and (max-width: 1600px) {
.checkbox-cell { width: 50px; }
.name-cell { width: 200px; }
.status-cell { width: 80px; }