A:增加防火墙大屏适配
This commit is contained in:
1 parent
ccd3e7906c
commit
5655644983
2 files changed
+148
-3
No files matched your search
@@ -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; }
|
||||
|
||||
Reference in new issue
Block a user