nftables
nftables 是 Linux 内核中的统一防火墙与报文过滤框架,用来取代 iptables、ip6tables、ebtables、arptables。
它不是一个“新 iptables”,而是 全新架构。
- IPv4 / IPv6 / 二层规则割裂
- 表、链、规则重复严重
- 规则多时性能下降明显
- 用户态工具复杂、难维护
- 内核接口不统一
| 目标 | 说明 |
|---|---|
| 统一 | IPv4 / IPv6 / 二层统一处理 |
| 高性能 | 使用字节码(bytecode) |
| 简洁 | 语法更接近人类逻辑 |
| 原子性 | 规则批量提交 |
| 可扩展 | 原生支持 set、map |
用户空间
┌──────────────────────────┐
│ nft (命令行工具) │
│ nftables.conf │
└───────────┬──────────────┘
│ netlink
┌───────────▼──────────────┐
│ 内核 nftables 引擎 │
│ - bytecode 虚拟机 │
│ - hooks │
└───────────┬──────────────┘
│
┌───────────▼──────────────┐
│ Netfilter 框架 │
└───────────┬──────────────┘
│
┌───────────▼──────────────┐
│ 网络协议栈(IP/TCP/UDP) │
└──────────────────────────┘
- 规则的顶级容器
- 按 协议族 区分
常见协议族:
| family | 作用 |
|---|---|
| ip | IPv4 |
| ip6 | IPv6 |
| inet | IPv4 + IPv6(推荐) |
| bridge | 二层 |
| netdev | 网卡入口 |
- 规则的执行路径
- 绑定到 Netfilter hook
| hook | 作用 |
|---|---|
| prerouting | 路由前 |
| input | 本机接收 |
| forward | 转发 |
| output | 本机发出 |
| postrouting | 路由后 |
- 匹配条件 + 动作
- 顺序执行
示例:
ip saddr 192.168.1.0/24 tcp dport 22 accept
set 是 nftables 性能优于 iptables 的关键
- 高效存储多个值
- O(1) 或 O(log n) 查找
- 支持动态更新
示例:
set trusted_ips {
type ipv4_addr
elements = { 192.168.1.10, 192.168.1.20 }
}
- Key -> Value
- 常用于端口转发、策略选择
以 本机接收流量 为例:
网卡
↓
prerouting
↓
路由判断
↓
input
↓
本地进程
nftables 在 各 hook 点执行规则。
| 特性 | iptables | nftables |
|---|---|---|
| 多协议 | 分工具 | 统一 |
| 批量加载 | 否 | 是 |
| set 原生 | 否 | 是 |
| 原子更新 | 否 | 是 |
| 可读性 | 差 | 高 |
table inet filter {
chain input {
type filter hook input priority 0;
policy drop;
ct state established,related accept
iif lo accept
tcp dport 22 accept
tcp dport { 80, 443 } accept
}
}
- nftables:原生新体系
- iptables-nft:iptables 语法 -> nftables 后端
现代系统(RHEL 8+、Debian 10+):
- 默认使用 nftables 内核
- iptables 命令只是兼容层
- 规则编译为字节码
- set / map 数据结构
- 一次性加载规则
- 减少内核态规则遍历
- 使用
inetfamily - 用 set 管理 IP / 端口
- 所有规则一次性加载
- 禁用 iptables 混用
- 使用配置文件而非命令堆叠
- 主配置:
/etc/nftables.conf - systemd 服务:
nftables.service
- ❌ 把 nftables 当 iptables 用
- ❌ 规则一条条追加
- ❌ 不使用 set
- ❌ 同时启用 firewalld + nftables
- firewalld:策略管理器
- nftables:规则执行引擎
关系:
firewalld -> nftables -> 内核
| 场景 | 推荐 |
|---|---|
| 生产服务器 | 强烈推荐 |
| 云主机 | 推荐 |
| 容器宿主机 | 必须 |
| 高并发网络 | 必须 |
| 学习防火墙原理 | 推荐 |
nftables 是现代 Linux 防火墙的“统一内核语言”。