轻量 · 高性能 · 易扩展 基于 eBPF/XDP 的下一代 Linux 主机防火墙。
netxfw 是一款利用现代 Linux 内核 eBPF 技术构建的高性能防火墙。它在网络驱动层(XDP)直接处理数据包,能够以极低的 CPU 开销阻断大规模 DDoS 攻击、暴力破解和非法扫描。
从 Releases 页面下载:
- x86_64 (amd64):
wget https://github.com/netxfw/netxfw/releases/latest/download/netxfw_Linux_x86_64.tar.gz
- ARM64 (aarch64):
wget https://github.com/netxfw/netxfw/releases/latest/download/netxfw_Linux_arm64.tar.gz
安装:
tar -zxvf netxfw_Linux_*.tar.gz
sudo mv netxfw /usr/local/bin/使用的开发环境:
- Linux Kernel >= 6.x
- Go >= 1.24(仓库当前
go.mod为go 1.24.0,并声明toolchain go1.24.12)
安装编译工具:
# Debian/Ubuntu
sudo apt-get install -y clang llvm libelf-dev libbpf-dev make
# 可选:安装 Zig(用于交叉编译和更好的 glibc 兼容性)
# 参考官方文档:https://ziglang.org/learn/getting-started/编译:
git clone https://github.com/netxfw/netxfw.git
cd netxfw
make generate
make build构建命令说明:
| 命令 | 说明 |
|---|---|
make build |
构建二进制文件(已剥离符号,使用系统默认编译器) |
make build-dev |
构建开发版本(版本号为 dev) |
make build-zig-amd64 |
使用 Zig 构建 amd64 版本(glibc 2.17 兼容,适合发布) |
make build-zig-arm64 |
使用 Zig 构建 arm64 版本(glibc 2.17 兼容,适合发布) |
make build-compressed |
构建并使用 UPX 压缩(最小体积) |
make generate |
生成 BPF 代码(需要 Go 工具链) |
make plugins |
编译 BPF 插件(需要 clang) |
make install |
安装二进制和配置文件 |
make uninstall |
卸载二进制和配置文件 |
make clean |
清理构建产物 |
提示:推荐使用 Zig 构建(
make build-zig-amd64)用于生产发布,因为它提供更好的 glibc 兼容性(支持 glibc 2.17+),可在更多 Linux 发行版上运行。
可选构建参数:
# 禁用 IPv6 支持
make generate ipv6=no
make build
# 指定安装路径
make install PREFIX=/opt/netxfw ETCDIR=/etc/netxfw
# 指定 DESTDIR 用于打包
make install DESTDIR=/tmp/package PREFIX=/usr/local开发与测试命令:
| 命令 | 说明 |
|---|---|
make test |
运行单元测试 |
make lint |
运行静态代码检查 |
make check |
运行完整检查(架构 + lint + 构建 + 测试) |
make docs-check |
运行文档链接和 CLI 调用图检查 |
make bench |
运行性能基准测试 |
make bench-baseline |
创建性能基线 |
make bench-regression |
运行性能回归测试 |
netxfw 支持 XDP 的多种运行模式,并根据硬件驱动支持情况自动尝试加载,按性能排序:
- Offloaded (
xdp_hw): 硬件卸载模式,直接在网卡 SOC 上执行,不占用主机 CPU,性能最强。 - Native (
xdp_drv): 本地驱动模式,在驱动接收路径直接处理,性能极佳。 - Generic (
xdp_skb): 通用模式,由内核模拟(SKB 之后),无需驱动支持,兼容性最强(适用于云服务器/虚拟机)。
# 使用默认配置加载并执行自适应加载
sudo netxfw enable# 系统管理 (UFW 风格)
sudo netxfw enable # 启动防火墙并加载 XDP 程序
sudo netxfw disable # 停止防火墙并卸载 XDP 程序
sudo netxfw status # 查看防火墙运行状态
sudo netxfw reload # 热重载配置 (同步 BPF Map)
# 系统管理 (底层驱动)
sudo netxfw system load # 加载 XDP 驱动
sudo netxfw system unload # 卸载 XDP 驱动
sudo netxfw system status # 查看驱动与 Map 详细信息
# 监控与统计
sudo netxfw conntrack # 查看连接跟踪表 (Conntrack)
sudo netxfw perf show # 查看性能统计 (延迟/命中率/流量)
sudo netxfw status -v # 查看详细运行统计# 白名单管理 (Allow)
sudo netxfw allow 192.168.1.100 # 允许 IP
sudo netxfw allow 192.168.1.100:8080 # 允许特定 IP + 端口
sudo netxfw allow list # 列出所有白名单 IP
# 黑名单管理 (Deny)
sudo netxfw deny 1.2.3.4 # 永久封禁 IP
sudo netxfw deny 1.2.3.4:443 # 拒绝特定 IP + 端口
sudo netxfw deny 1.2.3.4 --ttl 1h # 临时封禁 1 小时 (自动过期)
sudo netxfw deny list # 列出所有黑名单
sudo netxfw deny list --dynamic # 仅列出动态黑名单
sudo netxfw deny port list # 列出 IP+Port 拒绝规则
# 动态黑名单管理(支持别名 dyn)
sudo netxfw dynamic add 192.168.1.100 --ttl 1h # 添加动态黑名单
sudo netxfw dyn del 192.168.1.100 # 删除动态黑名单(使用别名)
sudo netxfw dynamic list # 列出动态黑名单
# 规则管理
sudo netxfw rule add 192.168.1.0/24 deny # 添加规则
sudo netxfw rule list # 列出规则
sudo netxfw rule del 192.168.1.0/24 # 删除规则(支持 delete/remove 别名)
sudo netxfw rule export rules.toml # 导出规则
sudo netxfw rule import all rules.toml # 导入规则
# 端口规则管理(IP+Port 级别控制)
sudo netxfw allow 192.168.1.100:8080 # 允许特定 IP+端口
sudo netxfw deny 10.0.0.1:443 # 拒绝特定 IP+端口
sudo netxfw rule add 192.168.1.100:8080 allow # 添加 IP+Port 允许规则
sudo netxfw rule add 10.0.0.1:443 deny # 添加 IP+Port 拒绝规则
sudo netxfw rule del 192.168.1.100:8080 # 删除 IP+Port 规则
# 开放端口管理(全局端口白名单)
sudo netxfw port add 80 # 开放 80 端口
sudo netxfw port add 443 # 开放 443 端口
sudo netxfw port add 8080-8090 # 开放端口范围
sudo netxfw port del 8080 # 移除端口(支持 delete/remove 别名)
# 限速管理
sudo netxfw limit add 0.0.0.0/0 1000 2000 # 添加限速规则
sudo netxfw limit list # 列出限速规则# Bash
netxfw completion bash > /etc/bash_completion.d/netxfw
source ~/.bashrc
# Zsh
netxfw completion zsh > "${fpath[1]}/_netxfw"
# Fish
netxfw completion fish > ~/.config/fish/completions/netxfw.fish- 🚀 极致性能:在网卡驱动层(XDP)直接丢弃恶意包,绕过内核网络栈,CPU 占用极低。
- 🌍 全协议支持:原生支持 IPv4 和 IPv6,支持 CIDR 网段封禁。
- ⚡ 动态黑名单:引入基于
LRU_HASH的高速单 IP 匹配机制,专为拦截高频变化的恶意 IP 设计。 - 💾 内存优化:使用 sync.Pool 对象池技术,减少高频操作的 GC 压力,提升性能 30-50%。
- 🛡️ 细粒度规则:支持 IP+端口级别的 Allow/Deny 规则,满足复杂业务需求。
- 🤖 自动拦截 (Auto-Blocking):当 IP 触发限速阈值时,系统可自动将其加入动态黑名单,实现内核级的毫秒级封禁。支持配置拦截时长,利用 LRU 特性自动淘汰。
- 🛡️ 安全加固:
- Bogon 过滤:自动识别并丢弃来自保留/私有 IP 地址段的恶意流量。
- 严格 TCP 校验:校验 TCP 标志位组合,有效防御 Null Scan、Xmas Scan 等探测攻击。
- 分片保护:支持配置丢弃所有 IP 分片包,防御分片攻击。
- SYN 洪水防御:支持仅对 SYN 包应用限速,确保在遭遇 SYN Flood 时正常业务不受影响。
- ⚡ 无损热重载:支持运行时调整 Map 容量并热重载程序,通过状态迁移确保业务零中断。
- 增量更新 (Incremental): 当 Map 容量未变更时,直接更新现有 Map,避免全量迁移,实现毫秒级重载。
- 全量迁移 (Full Migration): 当容量变更时,自动迁移旧 Map 数据到新 Map,确保连接跟踪和规则不丢失。
- 🌊 流量整形:内置基于令牌桶算法的 IP 级别限速与 ICMP 限速,引入 O(1) 配置缓存 机制,避免每个数据包的复杂查找。
- 🧠 有状态检测 (Conntrack):内置高效的连接追踪引擎,自动放行已建立连接的回包。
- 🧩 插件化架构 (SDK):
- Plugin SDK: 提供标准化的 Go 接口(
sdk.Plugin),允许开发者轻松扩展防火墙功能。 - CEL 规则引擎: 集成 Google CEL 表达式语言,支持对日志进行复杂的 JSON/KV 解析和正则匹配(
JSON()、KV()、Match())。 - 动态加载: 支持通过 eBPF Tail Call 动态加载第三方插件。详情请参考 插件开发指南。
- 插件间通信 (IPC):
- EventBus: 基于发布/订阅模式的事件总线,实现插件解耦通信(如日志引擎 -> AI 分析)。
- KV Store: 共享的内存键值存储(
sdk.Store),用于插件间共享运行时上下文(如威胁情报、信任分)。
- Plugin SDK: 提供标准化的 Go 接口(
- 📊 可观测性:内置 Web 管理界面与 Prometheus Exporter,实时监控丢包速率与活跃连接。
- 🏗️ 模块化设计:BPF 代码采用模块化结构(Filter、Ratelimit、Conntrack、Protocols),逻辑清晰,易于维护。
- 🛠️ 命令行控制:极简 CLI 操作,支持动态加载规则和插件,无需重启服务。
- 🔄 手动更新:支持通过
netxfw system update一键检测并升级二进制文件。 - 💾 规则导入导出:支持多种格式(JSON、TOML、CSV、Binary)的规则导入导出,便于备份和迁移。
在配置文件(默认为 /etc/netxfw/config.toml)中启用自动拦截功能:
[rate_limit]
enabled = true
auto_block = true # 开启自动拦截
auto_block_expiry = "10m" # 自动拦截的时长,支持 s, m, h
rules = [
{ ip = "0.0.0.0/0", rate = 1000, burst = 2000 }, # rate: 每秒包数限制, burst: 允许的最大突发
]根据内存环境调整 Map 容量:
[capacity]
lock_list = 20000 # 静态黑名单容量
dyn_lock_list = 2000 # 动态黑名单容量
whitelist = 30 # 白名单容量
ip_port_rules = 30 # IP-端口规则容量
rate_limits = 1000 # 速率限制容量
drop_reason_stats = 1000000 # 丢弃统计容量
pass_reason_stats = 1000000 # 通过统计容量
[conntrack]
enabled = true
max_entries = 100000 # 连接跟踪表容量
tcp_timeout = "1h"
udp_timeout = "5m"日志引擎用于实时分析日志文件并自动执行防御动作:
[log_engine]
enabled = true # 启用日志引擎
workers = 4 # 并发处理协程数
files = [ # 监控的日志文件列表
"/var/log/nginx/access.log",
"/var/log/auth.log",
"/var/log/syslog",
]
rules = []
# SSH 爆破防御:60秒内失败5次则封禁
[[log_engine.rules]]
id = "ssh_bruteforce"
path = "/var/log/auth.log"
action = "dynblack" # 动态封禁(默认5分钟)
is = ["Failed password"]
threshold = 5
interval = 60
# 拦截恶意爬虫
[[log_engine.rules]]
id = "block_scrapers"
path = "/var/log/nginx/access.log"
action = "dynblack:1h" # 封禁1小时
or = ["Go-http-client", "python-requests", "curl/"]
# Nginx 404/500 高频扫描
[[log_engine.rules]]
id = "nginx_scan"
path = "/var/log/nginx/access.log"
action = "dynblack"
expression = '''
(Fields()[8] == "404" || Fields()[8] == "500") &&
Contains(Fields()[6], "admin") &&
Count(30) > 10
'''日志引擎动作说明:
| 动作值 | 字符串形式 | 说明 |
|---|---|---|
0 |
log |
仅记录告警,不执行拦截 |
1 |
dynblack |
动态封禁(默认过期时间) |
1 |
dynblack:1h |
动态封禁指定时长(如 10m, 1h, 30s) |
2 |
lock / deny |
永久封禁(需手动解封) |
提示: 动作支持数字形式(0/1/2)或字符串形式,两种写法等效。
更多配置请参考 日志引擎文档。
netxfw 采用控制面与数据面分离的架构:
- XDP:在网络驱动层进行极速包过滤(统一 IPv4/IPv6 LPM 匹配、连接追踪状态检查)。
- TC (Egress):在流量出站时更新连接追踪状态。
- 优化:使用
Per-CPU Map存储统计信息,降低多核竞争。
- Manager:负责 BPF 程序的加载、固定(Pinning)及生命周期管理。
- State Migrator:实现热重载期间的 BPF Map 数据无缝迁移。
- Web / CLI / API:提供用户交互接口。
- Metrics:暴露 Prometheus 监控指标。
更完整的现状、目标分层与迁移说明,请参考 附录架构文档。
为了系统稳定性,netxfw 默认不会自动更新。你可以通过以下命令随时检测并升级到最新版本:
sudo netxfw system update如果你作为实验性用途,希望系统每天自动检查并安装更新,可以使用安装脚本显式开启:
curl -sSL https://raw.githubusercontent.com/netxfw/netxfw/main/scripts/deploy.sh | sudo bash -s -- --enable-auto-update# 卸载防火墙并移除 BPF 程序
sudo netxfw system unload本项目采用混合许可证:
- Go 用户空间代码: Apache-2.0
- BPF 内核代码: Dual BSD/GPL (
BSD-2-Clause OR GPL-2.0-only)
详见 NOTICE 文件了解许可证结构。