基于 eBPF/XDP 的高性能网络防火墙系统,在网络驱动层(L3)拦截和过滤数据包。
| 要求 | 说明 |
|---|---|
| Linux 内核 | 5.10+(需支持 XDP 与 BTF) |
| Docker | 24.0+ 及 Docker Compose v2 |
| 网络权限 | 需 host 网络模式 + 特定 Linux Capability |
| 网卡 | 需确认本机网卡名称(如 ens33、eth0) |
⚠️ 本项目依赖 eBPF XDP 技术,仅支持 Linux 系统,不支持 macOS / Windows。
WAF 模块通过监控 Caddy + Coraza WAF 日志和 Rate Limit 日志,自动触发 IP 封禁。封禁的完整生命周期如下:
日志触发 → banIP() 添加 XDP 封禁规则 → 封禁记录写入内存(带过期时间) ↓ cleanupExpiredBans() 每隔 5 分钟扫描 ↓ 过期 IP 移除 XDP 规则 + 清除内存记录
⚠️ 重要:清理间隔为固定 5 分钟
cleanupExpiredBans() 使用硬编码的 5 分钟清理间隔。当封禁到期后,XDP 规则不会立即移除,而是等待下一个清理周期才执行移除。
这意味着实际封禁时长 = BanDuration + 最多 5 分钟的清理延迟。
配置建议:
| BanDuration | 实际封禁时长范围 | 建议 |
|---|---|---|
| 30s | 30s ~ 5m30s | ❌ 不推荐,XDP 规则滞留过久 |
| 60s | 60s ~ 6m | ⚠️ 清理延迟占比过大 |
| 300s(5 分钟) | 5m ~ 10m | ✅ 可接受 |
| 600s(10 分钟) | 10m ~ 15m | ✅ 推荐 |
| 3600s(1 小时,默认) | 1h ~ 1h5m | ✅ 推荐 |
最佳实践: 建议将 ban_duration 设置为 300 秒(5 分钟)或更长,使清理延迟在整体封禁时长中的占比合理。
克隆代码后直接在项目目录下执行
# 直接启动(拉取预构建镜像)
docker compose up -d
# 查看日志
docker compose logs -f
# 从源码构建并启动
docker compose -f docker-compose-build-run.yml up -d --build
# 查看日志
docker compose -f docker-compose-build-run.yml logs -f
CAP_BPF、CAP_PERFMON、CAP_NET_ADMIN、CAP_NET_RAW),不使用 privileged 模式NET_BIND_SERVICE 能力,启用 no-new-privilegesnetwork_mode: host 以支持 XDP 驱动层拦截