fksvs/siper
GitHub: fksvs/siper
基于 XDP 的高性能 IP 黑名单防火墙,在网卡驱动层直接丢弃恶意流量,大幅降低 CPU 开销。
Stars: 51 | Forks: 6
# Siper (Shield)
Siper 是一个高性能、基于 XDP 的 IP 黑名单防火墙,采用 Go 和 C (eBPF) 构建。它允许你在 Linux 网络栈中尽可能早的阶段——即网络驱动程序级别——丢弃恶意流量。通过利用 XDP (Express Data Path),Siper 在数据包到达内核繁重的网络子系统之前就对其进行处理,即使在严重的 DDoS 攻击条件下也能提供极致的性能。
## 功能特性
- **XDP 驱动的性能**:数据包过滤使用 XDP_DROP 在 NIC 驱动程序级别进行,与 iptables 或 nftables 相比,显著降低了 CPU 开销。
- **LPM (最长前缀匹配)**:使用专门的 BPF LPM Trie map 支持基于 CIDR 的拦截(例如 192.168.1.0/24),以实现高效的 IP 范围查找。
- **持久化配置**:规则通过基于 JSON 的本地黑名单进行管理,便于对被拦截的地址进行审计和版本控制。
- **实时可观测性**:内置指标,用于追踪被丢弃和通过流量的数据包及字节计数器。
- **极简架构**:编译后的 BPF 对象负责处理数据平面,而基于 Go 的 CLI 负责管理控制平面。
## 架构
Siper 基于将控制平面与数据平面分离的原则运行。
### 管理流程 (用户空间)
1. **规则定义**:用户通过 CLI 添加/移除 CIDR。这些规则存储在 `blacklist.json` 文件中。
2. **加载**:当执行 `siper run` 时,Go 应用程序解析 JSON,编译/加载 eBPF 对象,并用 IP 前缀填充 BPF Map。
3. **监控**:CLI 通过 BPF syscall 与内核通信,以转储指标和当前 map 状态,而不会中断流量。
### 数据包流程 (内核空间)
1. **入口**:数据包到达网络接口。
2. **查找**:XDP 程序拦截数据包并在 `block_list` map 中执行查找。
3. **判定**:
- **匹配**:数据包立即被丢弃 (XDP_DROP)。
- **不匹配**:数据包被向上传递到标准的 Linux 网络栈 (XDP_PASS)。
## 安装与使用
**前置条件**
- **Linux Kernel**:5.4 或更新版本(需支持 XDP)。
- **Go**:已安装 1.21+。
- **Clang/LLVM**:用于将 eBPF C 程序编译为 .o 对象文件。
- **权限**:Root 访问权限或 CAP_NET_ADMIN / CAP_BPF capabilities。
### 1.构建项目
```
make
```
移动到 `build/` 目录
### 2.管理黑名单
从本地配置文件中添加或移除 IP 范围:
```
# 添加 CIDR 到列表
sudo ./siper add --cidr 1.2.3.0/24 --comment "Known botnet"
# 删除规则
sudo ./siper del --cidr 1.2.3.0/24
```
### 3.运行防火墙
将防火墙附加到特定的网络接口:
```
# 启动防火墙
sudo ./siper run --iface eth0 --path ./blacklist.json
# 停止并分离防火墙
sudo ./siper stop --iface eth0
```
### 4.监控指标和键
查看内核内部正在发生的事情:
```
# 查看 BPF map 中当前活跃的密钥
sudo ./siper dump-keys
# 监控 drop/pass 统计数据
sudo ./siper dump-metrics
```
## 贡献
欢迎提交 Pull Request。对于错误修复和小改进,请直接提交 Pull Request。对于重大更改,请先开启一个 issue 讨论您想要更改的内容。
## 许可证
本项目是自由软件;您可以根据 GPLv3 许可证的条款重新分发和/或修改它。有关详细信息,请参阅 LICENSE。
标签:C 语言, DDoS 防护, Docker镜像, EVTX分析, EVTX分析, Go 语言, IP 黑名单, LangChain, Linux 内核, LPM, Streamlit, XDP, 内核旁路, 包过滤, 子域名枚举, 安全渗透, 日志审计, 流量清洗, 系统安全, 网络安全, 网络驱动, 访问控制, 轻量级, 防火墙, 隐私保护