清空nftables规则但保留长连接的关键是仅flush链内规则而不删除链或表。使用nft flush chain命令可清除规则、维持hook绑定与conntrack状态,避免执行flush ruleset、delete chain或delete table等破坏性操作。

直接清空表结构但保留长连接,关键在于只删除规则、不删链或表,且避免触发连接跟踪重置。nftables 默认不会主动干扰已建立的连接,只要不执行影响 conntrack 状态的操作(比如 flush ruleset 或删除 nat 表中的相关规则),现有 TCP/UDP 连接可继续通行。
确认当前表与链状态
先查看目标表的完整结构,明确哪些是规则、哪些是链:
- nft list table ip filter -a:显示 ip 地址族下 filter 表全部内容,带 handle 编号,便于精准操作
- nft list chain ip filter input:只看 input 链的规则,避免误删其他链
- 注意区分 base chain(如 input、output)和 regular chain(自定义跳转链),前者关联 netfilter hook,后者纯逻辑组织
安全清空规则(保留链和表结构)
使用 flush chain 命令,它仅清除链内所有规则,不触碰链本身、表定义或 conntrack 条目:
- nft flush chain ip filter input:清空 input 链所有规则,链仍存在,hook 绑定不变
- nft flush chain inet filter forward:同理适用于 inet 族双栈表
- 该操作不重置连接状态,已有 ESTABLISHED、RELATED 连接不受影响
避免误伤连接的禁忌操作
以下命令会破坏连接或导致策略中断,严禁在运行环境中直接使用:
- nft flush ruleset:全量清空所有表、链、规则,conntrack 不清但默认策略可能变为 drop,新包被拦,已有连接虽维持但无法建新流
- nft delete chain ip filter input:删除基链会断开 hook 关联,input 流量失去过滤入口,系统回退到默认策略(通常是 accept,但不可控)
- nft delete table ip filter:必须先 flush 所有链,否则报错;删除后整个表结构消失,需重建
- 修改含 ct state invalid / established 的规则前未测试,可能导致连接被意外 reject
验证连接是否持续活跃
清理后快速检查关键连接是否仍在工作:
- ss -tni | grep ESTAB:确认 TCP 连接状态仍是 ESTABLISHED
- conntrack -L | head -10:查看连接跟踪表条目是否依然存在(不需安装额外工具)
- 从远程机器 ping 或 curl 服务端口,验证业务连通性未中断











