Skip to content

架构概览

本文档详细描述 rho-aias 的系统架构和各组件的协作方式。

整体架构

rho-aias 采用分层架构设计,主要分为三个核心层:

数据流

入站数据流(XDP)

出站数据流(TC eBPF)

SSH 防爆破数据流(eBPF Probes)

核心组件

eBPF XDP 程序(入站 - 内核态)

负责实际的数据包过滤,运行在内核空间:

  • 包解析器:解析 Ethernet/IP/TCP/UDP/ICMP 头部
  • 规则匹配器:基于 eBPF Map 存储的规则进行精确匹配和 CIDR 匹配
  • 白名单:优先检查白名单,确保受信流量不被拦截
  • 统计计数器:记录通过和丢弃的数据包数量
  • 异常检测采样:按配置的采样率上报包信息

TC TBPF 程序(出口 - 内核态)

负责出口流量限速,基于令牌桶算法:

  • 令牌桶引擎:per-flow 维度(按目标 IP)的速率控制
  • 丢包上报:被丢弃的数据包信息通过 RingBuf 上报
  • 动态配置:支持运行时调整速率和突发容量

FailGuard eBPF Probes(SSH 监控 - 内核态)

负责内核级 SSH 暴力破解检测:

  • TCP 连接探针 (inet_csk_accept):捕获新 SSH 连接
  • 进程生命周期探针 (sched_process_fork/exit):检测短连接行为
  • PAM 认证探针 (pam_authenticate):捕获认证结果

eBPF Manager(用户态)

负责用户态和内核态之间的通信:

  • 规则同步器:将用户态的规则变更同步到 eBPF Map
  • 状态收集器:从 eBPF Map 读取统计信息和运行状态
  • 程序加载器:编译和加载 eBPF 程序到内核
  • 事件监听器:接收内核上报的阻断事件和异常检测事件
  • TC 管理器:管理出口方向的 TC qdisc 和 TBPF 程序

规则引擎

管理所有防火墙规则的完整生命周期:

  • 规则的 CRUD 操作
  • 多源规则聚合(手动、威胁情报、WAF、异常检测、SSH 防爆破)
  • 规则冲突检测和位掩码管理
  • 规则过期清理

认证授权

基于 Casbin RBAC 的细粒度权限控制:

  • JWT 认证:用户登录获取 Token
  • API Key:服务间调用的简化认证
  • 验证码:防暴力破解
  • RBAC:基于角色的访问控制
  • SSH 防爆破:eBPF probes 实时监控,自动封禁暴力破解 IP

动态配置系统

支持运行时热更新各模块的核心配置:

  • 通过 REST API 修改配置
  • 配置持久化到数据库,启动时自动恢复
  • 支持 failguard、waf、rate_limit、anomaly_detection、geo_blocking、intel、egress_limit 等 8 个模块

eBPF Map 结构

Map 名称类型KeyValue用途
block_ipsBPF_MAP_TYPE_HASHIP 地址SourceMask + Expiry封禁 IP 列表
block_cidrsBPF_MAP_TYPE_LPM_TRIECIDR 前缀SourceMask封禁 CIDR 列表
allow_ipsBPF_MAP_TYPE_HASHIP 地址-白名单 IP 列表
allow_cidrsBPF_MAP_TYPE_LPM_TRIECIDR 前缀-白名单 CIDR 列表
statsBPF_MAP_TYPE_PERCPU_ARRAY索引计数器包计数统计
configBPF_MAP_TYPE_ARRAY索引配置值运行时配置(含 GeoBlocking)
anomaly_configBPF_MAP_TYPE_ARRAY索引配置值异常检测采样配置
egress_configBPF_MAP_TYPE_ARRAY索引EgressLimitConfig出口限速配置(速率/突发)
egress_drop_event_configBPF_MAP_TYPE_ARRAY索引EgressDropEventConfig出口丢包事件上报配置
egress_token_bucketBPF_MAP_TYPE_HASH目标 IPTokenBucketStateper-flow 令牌桶状态

模块交互


数据持久化

./data/
├── auth.db              # 认证数据库(用户、API Key、审计日志)
├── business.db          # 业务数据库(封禁记录、情报状态、动态配置)
├── intel/               # 威胁情报缓存
│   ├── ipsum.json
│   └── spamhaus.json
├── geo/                 # GeoIP 缓存
│   ├── maxmind.json
│   └── GeoLite2-Country.mmdb
├── manual/              # 手动规则缓存
│   ├── rules.json       # 黑名单规则
│   └── whitelist.json   # 白名单规则
├── waf_offset.json      # WAF 日志偏移量持久化
└── ratelimit_offset.json # Rate Limit 日志偏移量持久化
# 注意:FailGuard 不再需要偏移量文件(eBPF 模式无日志扫描)

./logs/
├── rho-aias.log         # 主日志
├── blocklog/            # 阻断日志
│   ├── 2026-03-28_10.jsonl
│   └── 2026-03-28_11.jsonl
└── egresslog/           # Egress 丢包日志
    ├── 2026-04-17.jsonl
    └── 2026-04-18.jsonl

数据库分离说明

rho-aias 使用两个 SQLite 数据库:

数据库路径存储内容
auth.db./data/auth.db用户账号、API Key、RBAC 策略、认证审计日志
business.db./data/business.db封禁记录、威胁情报状态、GeoIP 状态、动态配置

这种分离设计便于:

  • 安全隔离:认证数据和业务数据分开存储
  • 备份策略:可针对不同数据库采用不同的备份频率
  • 性能优化:高频繁写的 business.db 与低频读写的 auth.db 分离

性能特性

XDP 优势(入站)

特性说明
零拷贝数据包无需从内核拷贝到用户态
早期过滤在协议栈之前丢弃,节省 CPU
批量处理支持批量数据包处理
卸载能力部分网卡支持硬件卸载

TC eBPF 优势(出站)

特性说明
内核态决策令牌桶计算在内核完成,零上下文切换
Per-Flow 控制按目标 IP 独立计量,精确限速
低延迟无需经过用户态,亚微秒级决策

性能指标

  • 处理延迟(入站 XDP):亚微秒级
  • 处理延迟(出站 TC):亚微秒级
  • 吞吐量(XDP):单核 10M+ PPS
  • 内存占用:规则越多,Map 占用越大
  • CPU 开销:取决于规则数量和流量

安全考虑

最小权限

yaml
cap_drop:
  - ALL
cap_add:
  - CAP_BPF      # 加载 eBPF 程序(XDP + TC + FailGuard probes)
  - CAP_PERFMON  # 性能监控
  - CAP_NET_ADMIN # 网络管理(TC qdisc / XDP attach)
  - CAP_NET_RAW   # 原始套接字

资源隔离

  • WAF 日志只读挂载
  • 数据目录独立管理
  • 日志自动轮转

认证保护

  • JWT Token 有效期限制
  • 验证码防暴力破解
  • API Key 权限细粒度控制
  • 审计日志记录所有操作