网络栈调优98 条

nftables 规则速查

现代发行版默认包过滤框架; 用 nft 检查与追加规则, 规则经 nft list ruleset 统一查看。

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,序号变化导致误删其他条目
  • 改动前不导出规则集,出问题后无法快速恢复到原状

易错点

  • 规则只写在运行态,忘记持久化,重启后策略全部失效
  • hook 与 priority 写错,规则位置不符合预期导致不生效
  • 用序号删除规则,删掉后其余规则序号变化,误删了其他条目
  • 远程调整防火墙时未保留现有管理通道,把自己关在门外

数据来源与参考

  • nft(8) 手册
  • nftables 官方 wiki
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌