conatus11/ramshield
GitHub: conatus11/ramshield
RamShield 是一个基于 Rust 的高性能实时限流与威胁检测引擎,通过内存级拦截管道保护 Web 应用与 API 免受 DDoS、暴力破解和恶意爬虫攻击。
Stars: 0 | Forks: 0
# RamShield - 高性能基于 Rust 的限流与威胁检测
RamShield 是一个使用 Rust 编写的稳健、并发且高度优化的安全服务,旨在保护 Web 应用程序和 API 免受各种形式的恶意流量攻击,包括 DDoS 攻击、暴力破解和数据抓取。它作为一个实时的内存检测与拦截引擎,利用先进的数据结构和异步编程来维持高吞吐量和低延迟。
## 核心功能
- **高性能架构**:基于 Tokio 的多线程 runtime 构建,使用 DashMap 进行并发存储,并使用 `crossbeam_channel` 进行高效的线程间通信,确保在高负载下保持最佳性能。
- **可配置的检测引擎**:采用批处理优先的 pipeline,聚合连接事件,应用指数加权移动平均(EWMA)进行速率跟踪,并利用 Bloom filter 进行概率性 IP 追踪。
- **自适应威胁情报**:结合 Holt-Winters 时间序列预测和香农熵分析来检测异常并识别新出现的威胁。
- **基于 WAL 的持久化**:预写式日志确保在重启后能恢复已拦截 IP 的状态,防止丢失关键的安全决策。
- **感知资源的存储**:一个内存存储器,具有可配置的 RAM 限制(`ram_limit_mb`)和一个用于高效清除过期条目的生存时间轮。支持对 IP 记录进行有界历史记录,以防止内存无限制增长。
- **用于集成的 IPC**:一个基于 TCP 的 JSON 进程间通信服务器允许外部系统与 RamShield 交互,以报告事件、查询统计信息和管理拦截。
- **实时仪表板**:一个基于 `Axum` 的 HTTP 服务器提供实时仪表板(`/api/snapshot`、`/api/stream`),用于监控系统健康状况、流量指标和活跃拦截。该仪表板在专用线程上运行,以确保即使在峰值负载下也能保持响应能力。
- **CLI 工具**:提供命令行界面(`ramshield-cli`),便于与正在运行的 RamShield 实例进行交互,包括检查 IP 状态、手动拦截/解除拦截以及检索全局统计数据。
- **全面的测试**:包含大量的单元测试、集成测试以及基于 Python 的攻击模拟器(`attack_nexus.py`、`stress_test.py`),用于在各种攻击场景下验证功能和性能。
## 技术细节
- **Rust 2021 Edition**:利用现代 Rust 特性实现安全性和高性能。
- **并发模型**:通过谨慎使用 `Arc`、`RwLock`、`Mutex` 和 `Atomic` 类型实现无畏并发,严格遵守 Rust 的所有权和借用规则。
- **错误处理**:使用 `thiserror` 进行库级别的错误定义,使用 `anyhow` 进行应用级别的错误处理,确保稳健且明确的错误传播。
- **可配置性**:所有主要参数均可通过 TOML 文件(`config.toml`、`config.stress.toml`)进行配置,并支持使用环境变量(例如 `RAMSHIELD_ENGINE__RAM_LIMIT_MB`)进行覆盖。
## 项目结构
```
rs/
├── src/
│ ├── main.rs # Server entry point (binary)
│ ├── cli.rs # CLI admin tool (binary)
│ ├── lib.rs # Library root
│ ├── config.rs # TOML config with validation
│ ├── error.rs # RsError enum (thiserror)
│ ├── engine/ # Core orchestrator (Engine struct)
│ ├── detection/ # Batch-first detection pipeline
│ │ ├── batch.rs # IP aggregation logic
│ │ └── rate_tracker.rs # EWMA + threshold checks
│ ├── storage/ # DashMap store + WAL + TTL wheel
│ │ ├── blob_store.rs
│ │ ├── ttl_wheel.rs
│ │ └── wal.rs
│ ├── metrics/ # Atomic counters + dashboard snapshot
│ ├── forecasting/ # Holt-Winters + Shannon entropy
│ ├── dns/ # DNS monitoring + forecaster
│ │ └── forecasting/
│ ├── learning/ # Pattern learner
│ ├── prediction/ # Prediction engine
│ ├── dashboard/ # Axum HTTP server + SSE
│ ├── ipc/ # TCP JSON protocol
│ └── util/ # BoundedVecDeque, DataProcessor
├── scripts/ # Python attack simulators
│ ├── attack_sim_100k.py
│ ├── attack_nexus.py
│ ├── attack_extreme.py
│ └── stress_test.py
├── config.toml # Default configuration (512 MB, 256 shards)
├── config.stress.toml # Production-tuned configuration (8 GB, 1024 shards)
└── Cargo.toml # Project dependencies and metadata
```
## 入门指南
### 前置条件
- Rustup:请按照 [rustup.rs](https://rustup.rs/) 上的说明进行操作
- Python 3:用于运行攻击模拟脚本。
### 构建
导航到 `rs` 目录并构建项目:
```
cd rs
cargo build --release
```
这将在 `target/release/` 目录下生成主要的 `ramshield` 二进制文件和 `ramshield-cli`。
### 运行
使用默认配置运行 RamShield:
```
cd rs
./target/release/ramshield ./config.toml
```
使用生产环境调优的配置:
```
cd rs
./target/release/ramshield ./config.stress.toml
```
使用环境变量覆盖配置值:
```
RAMSHIELD_DETECTION__RPS_THRESHOLD=500 RAMSHIELD_ENGINE__RAM_LIMIT_MB=4096 ./target/release/ramshield ./config.stress.toml
```
### 仪表板
在浏览器中访问实时仪表板:`http://127.0.0.1:7891`
检查服务健康状况:
```
curl http://127.0.0.1:7891/healthz
```
### CLI 用法
获取当前系统统计信息:
```
./rs/target/release/ramshield-cli stats
```
检查 IP 状态:
```
./rs/target/release/ramshield-cli check 192.168.1.100
```
手动拦截 IP:
```
./rs/target/release/ramshield-cli block 192.168.1.100 --reason "manual override" --ttl 3600
```
### 攻击模拟
使用提供的 Python 脚本来模拟流量并测试 RamShield 的性能:
```
# 运行 1 百万事件攻击
python3 rs/scripts/attack_sim_100k.py --events 1000000 --workers 64
```
## 贡献
欢迎贡献代码!请确保您的代码符合惯用的 Rust 编码标准,并通过 `AGENTS.md` 中定义的自愈协议。
## 许可证
该项目采用 MIT 许可证授权。
标签:AMSI绕过, DDoS防护, Python安全, Rust, WAF, 可视化界面, 威胁检测, 网络安全, 网络流量审计, 逆向工具, 通知系统, 配置错误, 限流, 隐私保护