nftables 是做什么的
nftables 是较新内核提供的包过滤框架,用统一的 nft 命令替代 iptables、ip6tables、arptables 三套工具,配合 netfilter 内核子系统完成过滤、NAT 与转发。较新的 openEuler 与麒麟版本已用它承载 firewalld 的后端,规则以「表—链—规则」三层组织,规则顺序即匹配顺序。运行时用 nft 命令行管理,持久化配置写入 /etc/nftables.conf 并由 nftables 服务加载。
基本信息
| 适用平台 | 较新内核 openEuler、麒麟服务器与桌面版本 |
|---|---|
| 管理命令 | nft,支持交互模式与 -f 加载规则文件 |
| 持久化 | /etc/nftables.conf 配合 systemctl enable nftables |
| 语法校验 | nft -c -f /etc/nftables.conf |
| 兼容命令 | iptables-nft,把 iptables 规则映射到 nftables 后端 |
典型使用场景
- 替代老式 iptables 脚本编写新防火墙策略,用一套语法同时处理 IPv4 与 IPv6
- 排查 firewalld 放行不生效:直接查看底层 ruleset 确认规则是否真的下发
- 临时封禁异常来源地址,应急响应时快速阻断外联或横向访问
- 搭建 NAT 与端口转发,做内网出口或端口映射
- 审计现有防火墙策略,导出 ruleset 后纳入配置管理与变更评审
- 容器与虚拟化环境下核对宿主机规则,确认转发与伪装规则符合预期
查看与操作
查看与操作
nft list ruleset # 查看全部表链规则
nft list tables # 只列出所有表
nft list table inet filter # 查看指定表
nft add rule inet filter input tcp dport 22 accept # 追加放行规则到链尾
nft add rule inet filter input ct state established,related accept # 放行已建立连接
nft -c -f /etc/nftables.conf # 只做语法校验不加载
nft list ruleset > /etc/nftables.conf # 导出为持久配置
systemctl enable --now nftables # 开机加载配置表链规则读法
| 层级 | 含义 | 常见取值 |
|---|---|---|
| 表 table | 按协议族划分的规则容器 | inet 双栈、ip、ip6、arp |
| 链 chain | 表内的处理链,绑定钩子 | input、forward、output 与优先级 |
| 规则 rule | 匹配条件加动作 | tcp dport 22 accept、drop、reject |
| state | 连接跟踪状态 | established、related、new、invalid |
| handle | 规则编号 | 删除或插入指定规则时使用 |
nft 命令行里 add 出来的规则只存在于运行态,重启即丢失;要长期生效必须导出到 /etc/nftables.conf,或直接在配置文件中编写后重启 nftables 服务。
规则按位置顺序匹配,add 默认追加到链尾:如果链前部已有 drop,后面追加的 accept 不会生效;需要精确插位时用 add rule ... position 或 insert。导出覆盖配置文件前先备份,语法错误会导致服务启动失败。