- SYN Cookie 代理恢复(降级式挑战):v0.4.2 因 eBPF verifier 兼容问题被临时禁用(
handle_syn/handle_ack空实现),现恢复为 Katran 式降级挑战——SYN Flood 超限源进入 Cookie 挑战模式(XDP_TX 回 SYN-ACK,伪造源无法通过验证,在 XDP 层被清洗),合法客户端响应 Cookie 后自动解除挑战、后续连接直通内核正常握手;未触发阈值的正常连接始终无感直通。「防护策略」页的 SYN Proxy 开关现在真实生效。 - eBPF verifier 兼容性修复(5 类问题,Ubuntu 6.8 kernel 实测验证):
- 组合栈超限(544 > 512):主帧瘦身(删除 dst_key,parse 直接写 pc 字段,省 ~72B)、syn cookie 链帧分离与内联优化(is_challenged 内联速率检测,复用 src_key 栈槽)
pointer arithmetic with <<=:深层函数不再接收 ctx 入参(LLVM 参数提升把 ctx 展开为 data/data_end 指针,callee prologue 对入参指针做 u32 零扩展被 verifier 拒绝);ctx 改从 pc 内存读取(verifier 栈追踪保持类型)- 标量内存访问(pc.data 丢失 PTR_TO_PACKET 类型):回退为 pc.ctx + ptr_at 模式
- for-range 循环的 u32 零扩展指令:全部改为 u64 while 循环(port_acl/l7_scan/log_packet_sample)
- MSS option 写入越界 1 字节:边界证明改用 ptr_at_mut 返回值传播(防 LLVM 删除存在性检查)
- 所有 eBPF 循环变量统一为 u64(避免 u32→u64 零扩展指令被 verifier 拒绝)
- Trust Score 分布同步由每秒降频为每 5 秒(TRUST_MAP 最多 10 万条,降低全局 Ebpf 锁占用)。
- 防护项目数据面落地:新增
PROJECT_POLICYmap,target_ips 的 CIDR 由控制面展开为精确 IP(下限 /24,eshield check阶段校验)后下发;PASS/DROP 在数据面真实生效(支持 any 端口/协议通配),DEFEND 复用全局防御模块;IPv6 目标暂不匹配(控制面跳过并记录日志)。 - 移除旧版单文件控制台:
/legacy路由、dashboard.html嵌入与tests/remote/console_verify.sh中对应检查。 - 删除未使用的 eBPF Map(
RULE_HITS、SYN_PROXY_CONN);清理sync_trust_scores中自存自读的danger_level残留代码。 port_acl.rs双重匹配去重(热路径少一次重复判断,统一由match_port_acl_entry判定)。
- Trust Score 分布同步由每秒降频为每 5 秒(TRUST_MAP 最多 10 万条,降低全局 Ebpf 锁占用)。
- 自适应引擎滑动窗口改用
CLOCK_MONOTONIC(原SystemTime,避免 NTP 校时导致窗口错乱)。 - GeoIP LPM Trie 容量预警:IPv4/IPv6 条目达到上限 80% 时输出告警日志。
- 按目的端口限速(
[port_rate_limit]):按 协议+目的端口 维度限速,防换源 IP 绕过 per-IP 限速;计数为固定滑动窗口(每 tick 重置,避免指数衰减在包间隔 < tick 时失效误伤低速率流量);超限仅 DROP 不加黑名单;默认关闭。 - 防护项目
enabled_modules数据面生效:DEFEND 项目命中后按模块位图过滤全局防御(SYN_FLOOD / UDP_FLOOD / ICMP_FLOOD / RATE_LIMIT / L7_SCAN / GEOIP);未配置模块视为全开(与旧版本行为一致)。 - 空表快速跳过:
RuntimeConfig增加port_acl_count/l7_pattern_count,空表时数据面跳过 PORT_ACL 128 次与 L7_PATTERNS 16 次循环查询,热路径瘦身。 - 修复
config.example.toml结构错误:whitelist/blacklist误置于[audit]表之后被 TOML 归入audit.whitelist,导致示例配置无法解析。 - 文档同步:ROADMAP 标注 WAF/Challenge 已于 v0.3.4 移除、SYN Cookie 与防护项目状态;修正
config.rs中 Hub 配置注释版本号。
- 控制台全面重写:新控制台位于
eshield/web/,原生 ES modules + 模块化 CSS,无前端构建链,仍全部嵌入单二进制。- 暗色优先 SOC 视觉体系(完整 design tokens,暗/亮双主题),统一 SVG 线性图标,替换 emoji。
- 九个页面:总览 / 攻击事件 / 包日志 / 审计日志 / 防护策略 / 规则中心 / 安全运营 / 集群节点 / 设置。
- 总览页:6 张 KPI 卡(sparkline + 模块状态点)、按防御模块分解的趋势图(折线/堆叠 + 15分钟~24小时四档)、实时拦截事件流、协议分布环图、TOP 端口、TOP 攻击源。
- 全局 IP 搜索(
/聚焦,Enter 直达 IP 情报抽屉);IP 情报抽屉展示信誉分、采样包、端口分布与攻击趋势,可直接封禁/解封。 - 审计日志页:服务端过滤 + 真分页 + SSE 实时插入 + CSV 导出。
- 防护策略页:模块开关即改即存,参数表单保存完整子对象;防护项目可视化管理。
- 骨架屏 / 空态 / 错误态三态统一;轮询随页面切换自动启停。
- 旧版单文件控制台保留在
/legacy,将于下个版本移除。 - 新增
tests/remote/console_verify.sh端到端验证(27 项检查)。
- TOP 攻击源趋势:攻击事件页新增 TOP5 攻击源趋势折叠卡片,调用既有
GET /api/metrics/attacker-series,按时间范围(与总览趋势联动)绘制逐间隔丢包数多线图,10s 轮询随页面卸载停止。
-
Ring Buffer 幻影事件(严重):
event_consumer与packet_log每批事件都重建 ayaRingBuf句柄,aya 的pos_cache初值为 0,consumer 位置越过 producer 后已消费事件被无限重读——空流量下持续读出 4096 条/批的旧事件,CPU 占满一个核,并拖慢 Hub 策略上报。现改为启动时take_map取出 map 所有权、RingBuf 句柄随消费任务常驻;packet_log消费不再需要 Ebpf 锁。 -
趋势图 X 轴标签重复:采样间隔 <60s 时标签降级为
HH:MM:SS;categoryAxis启用hideOverlap自动抽稀。 -
趋势图 legend 与 Y 轴刻度重叠:legend 改为单行滚动(
type: 'scroll'),grid top 从 34 提升到 40。 -
feed 卡片头部拥挤:
.card-head增加flex-wrap: wrap,窄宽度下工具区自动换行。 -
攻击事件 / 包日志时间戳错误:
/api/attack-events与/api/packets返回的 eBPF 单调时钟纳秒未转换为 wall-clock,前端显示为"1970 + 开机时长";后端现统一转换后返回。 -
reset-token 后 SSE 断流:
POST /api/auth/reset-token现在同步Set-Cookie,EventSource(仅可携带 cookie)不再因旧令牌失效而 401。 -
保存速率限制参数强制开启开关:新防护策略页以当前 config 快照为底叠上表单值提交完整子对象,不再硬编码
enabled: true。 -
审计页 SSE 状态标签失效:新版消除了重复的
id="sse-status",SSE 三态(已连接/连接中/重连中)全局可见。 -
清理旧控制台死代码:未使用的防护模块 modal、
attackerChart、未实现的"全局搜索"注释。
- 版本号显示改为读取后端
/api/config的version字段,不再使用硬编码 fallback。
- 分布式 Hub-Node 协同免疫:新增
eshield-hub二进制,作为策略聚合中心。- 节点通过
[hub]配置上报本地黑名单/Trust Score 到 Hub。 - 节点从 Hub 拉取其他节点策略与 Hub 威胁情报,实现跨节点共享免疫记忆。
- Hub 端点:
/api/v1/policies、/api/v1/policies/deleted、/api/v1/rules、/api/v1/nodes、/api/v1/stats。 - 节点端代理:
/api/hub/status、/api/hub/proxy/*。
- 节点通过
- 规则包统一下发:Hub 可统一下发端口 ACL、L7 指纹、防护项目到所有节点。
- tombstone 删除同步:Hub DELETE 策略后生成墓碑记录,节点拉取后自动解封。
- 多 Hub URL 故障转移:节点
urls支持配置多个 Hub 地址,失败自动轮询切换。 - Hub Dashboard:独立 Web 页面展示在线节点、聚合策略、全局统计。
- 节点集群页面:节点 Dashboard 新增「集群节点」卡片,展示本节点到 Hub 的连接状态与在线节点列表。
- Hub TLS 支持:Hub 可自带 rustls;节点侧 reqwest 支持 CA、客户端证书、跳过校验。
- Hub 威胁情报 feed:Hub 可统一拉取外部 feed 后分发给各节点。
- 集成测试:新增
tests/hub_node_test.sh,覆盖节点上线、心跳、策略上报、peer 策略拉取/封锁、Hub 删除解封、规则同步、Dashboard。
- 修复 BlacklistSync 覆盖 Hub 策略来源的问题,确保 Hub DELETE 后能正确解封。
- 修复节点应用 Hub 策略时回传本节点策略导致的永久封禁问题:现在会跳过
source_nodes包含本节点名的策略。 - 修复
tests/hub_node_test.sh跨测试 store 污染问题,启动时清理上次失败的持久化数据。
packaging/config.example.toml补充完整[hub]配置示例(含sync_rules_enabled、sync_rules_interval_s、tls)。- 文档更新:
README.md、README_EN.md、docs/distributed-architecture.md、docs/deployment.md、docs/operations.md、docs/api.md、docs/development-plan.md、ROADMAP.md同步反映 v0.4.2 分布式能力。
- 协议维度丢包统计与全局计数不一致:在 eBPF
GlobalStats中新增tcp_dropped/udp_dropped/icmp_dropped/other_dropped计数器,所有 DROP 路径按协议直接累加,用户态每秒从 Per-CPU map 同步,避免依赖 RingBuf 事件导致的tcp_dropped/top_ports与total_dropped量级不匹配。 - Ring Buffer stale 事件残留:将启动 drain 时机提前到 XDP 挂载之前,杜绝挂载瞬间产生的事件被误判为残留事件;同时确保
program_start_ns在数据面启动前已写入。
- eBPF 代码去重:提取
rate_counter.rs(共享速率衰减逻辑)和blacklist.rs::add_to_blacklist(共享黑名单插入),四个 flood 模块不再各自复制相同逻辑。 - 纯函数提取与单元测试:新增
eshield-common/src/pure.rs,将build_cookie、checksum、tcp_checksum、decay_counter、match_port_acl_entry、mix、mss_to_idx等无 eBPF 依赖的纯函数提取出来,并编写 20 个单元测试覆盖校验和、Cookie 构造、速率衰减、ACL 匹配逻辑。 - 优雅退出(XDP 卸载):保存
xdp_link_id,SIGTERM/SIGINT 时显式xdp.detach()卸载 XDP 程序,避免遗留悬空钩子。 - 时间函数统一:新增
eshield/src/time.rs,所有写入 eBPF map 的时间戳统一使用CLOCK_MONOTONIC;告警等 wall-clock 场景保留SystemTime并添加注释说明。 BLOCK_PERMANENT常量:消除blocked_until_ns == 0语义歧义。- 审计日志文件持久化:新增
FileAuditBackend,支持 JSON Lines 格式 + 自动轮转;新增[audit]配置段。 - API 错误格式统一:所有 API 端点错误统一返回
{"error":"..."}JSON 格式。 - install.sh 改进:版本号从
Cargo.toml自动解析;service 路径修正为packaging/eshield.service;默认白名单与config.example.toml对齐。 - Token 日志安全:自动生成的访问令牌仅打印前 8 位前缀且降级为
warn。 - Dashboard ECharts 离线化:ECharts 库嵌入二进制,不再依赖外部 CDN。
- Dashboard HTML 转义:所有用户/服务端数据在
innerHTML渲染前经过escHtml()转义,防止 XSS。 - 审计日志服务端过滤:
/api/audit新增filter查询参数,支持服务端全文过滤与分页。 - HTTP 请求日志中间件:记录 method、path、status、耗时、客户端 IP。
- 请求体大小限制:超过 1 MiB 的请求返回 413 Payload Too Large。
- TUI 异步化:
reqwest::blocking替换为异步reqwest::Client。 /ready端点:真实检查 eBPF 程序是否已加载,而非空返回。- Dashboard 导航优化:合并冗余页面,侧边栏从 6 页精简为 4 页分类(监控/防护/安全运营/系统)。
- 事件消费高 CPU / 统计不一致:SYN Flood / UDP Flood / ICMP Flood / rate_limit / blacklist 等高频率 DROP 路径不再写入 RingBuf,避免海量事件 backlog 占满单核并导致
total_dropped与top_attackers量级不一致。 - 黑名单拦截计数失真:新增
GlobalStats.blacklist_blocked,由 eBPF 数据面直接累加,不再依赖 RingBuf 事件。
- TOP 攻击源实时同步:用户态新增后台任务,每秒从 eBPF
BLACKLISTmap 读取BlockEntry.hit_count重建top_attackers,来源统计与全局丢包计数保持同步。
- Dashboard 登录后仍被重定向:登录接口现在写入
eshield-tokenCookie,认证中间件同时支持Authorization: Bearer <token>和Cookie: eshield-token=<token>,解决控制台输入 Token 后仍停留在登录页的问题。 - 事件消费高 CPU:SYN Flood / UDP Flood / ICMP Flood / L7 / BLACKLIST / GEOIP 事件不再进入自适应引擎,避免海量事件反复操作 DashMap 占满 CPU。
- 启动统计被旧事件污染:Ring Buffer 残留 stale 事件 drain 上限从 100 万提高到 5000 万,防止前一次测试的巨量事件污染新进程统计。
.sync_remote.py支持 SSH 私钥认证,优先使用~/.ssh/id_ed25519等常见私钥,不再强制依赖.remote_pass。
- 移除 WAF 与 Challenge 模块:项目重新聚焦网络层 DDoS 清洗,不再内置 HTTP WAF 与 JS Challenge 能力,以降低 eBPF verifier 压力和代码复杂度。
- TCP RST 回包:丢弃 TCP 连接时可选立即回复 RST,避免客户端持续重传。
- RST 诊断计数器:
tcp_rst_sent/tcp_rst_fail/tcp_rst_attempt统计并同步到/api/stats。 - eBPF 全局统计同步:
total_packets、total_dropped、total_passed以及各分类计数改由 eBPF Per-CPUGLOBAL_STATS每秒同步到用户态,避免 Ring Buffer 事件丢失/重复导致的统计失真。 - Ring Buffer 防污染:启动时 drain 残留事件,并基于
CLOCK_MONOTONIC时间戳过滤 stale 事件。 - 控制台侧边栏重组:分为“统计 / 防护项目 / 防护策略 / 攻击日志 / 系统”五个分组。
- 控制台动态卡片:总览页指标数字增加计数动画、涨跌箭头、实时呼吸灯和 30 点 Sparkline 趋势图。
- 认证与令牌管理:CLI 支持
reset-token,控制台登录页支持防暴力破解。 - 集成测试增强:新增
tests/full_attack_test.sh,覆盖 UDP/ICMP/SYN Flood 完整攻防场景。
- 优化事件消费器 CPU 占用:批量消费 + 批间 sleep,避免饿死 Web/API。
- 调整自适应引擎触发逻辑,仅在启用时处理事件并扩大消费批量。
- 隐藏控制台侧边栏滚动条,保持可滚动但视觉更干净。
- 同步重写中文/英文 README,移除 WAF/Challenge 描述,补充攻击者成本分析。
- 修复 Port ACL dport 字节序读取问题。
- 修复 WAF DROP 路径未回 RST 的问题(后续随 WAF 整体移除)。
- 修复
GLOBAL_STATS从 PerCpuArray 用户态读取丢失 CPU 值的问题。
- 初始完整功能版本:eBPF/XDP 数据面、Rust 控制面、Dashboard、CLI、TUI、审计日志、GeoIP、威胁情报、自适应阈值、防护项目分组等。