Siper 是一款高性能、基于 XDP 的 IP 黑名单防火墙,使用 Go 和 C(eBPF)构建。它允许你在 Linux 网络栈的最早阶段——网络驱动程序级别——丢弃恶意流量。通过利用 XDP(快速数据路径),Siper 在数据包甚至到达内核繁重的网络子系统之前就对其进行处理,从而在重 DDoS 条件下提供极致性能。
XDP 驱动性能:使用 XDP_DROP 在 NIC 驱动级别进行数据包过滤,相比 iptables 或 nftables,CPU 开销显著降低。
LPM(最长前缀匹配):通过专用的 BPF LPM Trie 映射支持基于 CIDR 的阻止(例如 192.168.1.0/24),实现高效的 IP 范围查找。
持久化配置:通过本地基于 JSON 的黑名单管理规则,便于对阻止地址进行审计和版本控制。
实时可观测性:内置指标,跟踪丢弃和通过流量的数据包及字节计数。
极简架构:编译后的 BPF 对象处理数据平面,基于 Go 的 CLI 管理控制平面。
Siper 基于控制平面(用户空间)与数据平面(内核空间)分离的原则运作。
siper run 时,Go 应用程序解析 JSON、编译/加载 eBPF 对象,并将 IP 前缀填充到 BPF 映射中。入站:数据包到达网络接口。
查找:XDP 程序拦截数据包,并在 block_list 映射中执行查找。
判决:
前提条件
make
移动到 build/ 目录
从本地配置文件添加或删除 IP 范围:
# 将 CIDR 添加到列表
sudo ./siper add --cidr 1.2.3.0/24 --comment "已知僵尸网络"
# 删除规则
sudo ./siper del --cidr 1.2.3.0/24
将防火墙附加到特定网络接口:
# 启动防火墙
sudo ./siper run --iface eth0 --path ./blacklist.json
# 停止并分离防火墙
sudo ./siper stop --iface eth0
查看内核内部情况:
# 查看 BPF 映射中当前活跃的键
sudo ./siper dump-keys
# 监控丢弃/通过统计信息
sudo ./siper dump-metrics
欢迎提交拉取请求。对于错误修复和小改进,请提交拉取请求。对于重大更改,请先开启一个问题讨论您想要更改的内容。
本项目为自由软件;你可以根据 GPLv3 许可证的条款重新分发和/或修改它。详情请参阅 LICENSE。