nftables 是什么
nftables 是新一代的包过滤框架,现代发行版正在用它替代 iptables。规则按「表—链—规则」三层组织:表把一组规则归拢起来,链声明自己挂在哪个 hook 与优先级上,规则写具体的匹配条件与动作。nft list ruleset 可以一次列出全部规则,这比 iptables 需要按表逐条查找方便得多。
基本信息
| 适用平台 | Linux,内核 3.13 起支持,发行版提供 nftables 包 |
|---|---|
| 查看规则 | nft list ruleset |
| 建表 | nft add table inet filter |
| 建链 | nft add chain inet filter input '{ type filter hook input priority 0; policy accept; }' |
| 持久化 | nft list ruleset > /etc/nftables.conf,由发行版服务加载 |
典型使用场景
- 新服务器基线加固:建表建链后按端口逐条放行
- 从 iptables 迁移:把规则集翻译为 nftables 语句并统一查看
- 排查规则不生效:先看 hook 与优先级,再看规则顺序
- 按服务维度组织规则:用不同的表或链隔离业务策略
- 临时封禁:追加单条 drop 规则,用 handle 定位与删除
常用操作
常用操作
nft list ruleset
nft add table inet filter
nft add chain inet filter input '{ type filter hook input priority 0; policy accept; }'
nft add rule inet filter input tcp dport 22 accept
nft -a list ruleset # 带 handle 输出,便于精确删除单条规则
nft delete rule inet filter input handle 5地址族的区别
| 地址族 | 覆盖范围 | 典型用途 |
|---|---|---|
| inet | 同时覆盖 IPv4 与 IPv6 | 通用防火墙表的首选 |
| ip / ip6 | 只覆盖单一协议族 | 需要分开管理 v4 与 v6 策略时 |
| bridge | 二层桥接流量 | 桥接过滤 |
| netdev | 入口最早阶段 | 需要极早过滤的场景 |
使用注意
- 命令行添加的规则只存在于运行态,重启即丢失
- 链的 hook 与 priority 决定规则在协议栈中的位置,写错顺序就不符合预期
- 用 nft -a 获取 handle,删除单条规则才不会误伤其他规则
- 改动前先导出当前规则集留档,便于回滚
nftables 与旧框架可以共存于同一内核,但两者的规则互不干涉。排查规则不生效时,先确认流量实际命中的是哪一个框架,避免在错误的地方找问题。
在远程主机上调整防火墙规则前,务必确认已有规则放行当前管理通道,并保留一个可用会话;否则一条默认拒绝就可能让自己失去访问入口。
常见错误
- 建链时未显式指定 policy,实际生效的策略与预期不一致
- 在 inet 表中写 IPv4 专用匹配条件,IPv6 流量不受该规则约束
- 删除规则时使用序号而非 handle,序号变化导致误删其他条目
- 改动前不导出规则集,出问题后无法快速恢复到原状