nftables 用户态操作依赖 nft 命令,需掌握其语法结构(sudo nft [add|delete|list] [table family] [object] [options])、链创建三步法、handle 精准管理规则及配置持久化(保存至 /etc/nftables.conf 并启用 nftables 服务)。

nftables 的用户态操作完全依赖 nft 命令,它不是配置文件编辑器,而是实时管理规则的核心工具。掌握它的结构、常用动作和关键细节,比死记命令更重要。
理解 nft 命令的基本结构
nft 命令遵循统一语法:nft [add|delete|list] [table family] [object] [options]。所有操作都需 root 权限,因此几乎总是以 sudo nft 开头。
-
family 指定协议族:最常用的是
inet(同时处理 IPv4 和 IPv6),也可用ip(仅 IPv4)、ip6(仅 IPv6)、arp或bridge -
object 是操作目标:可以是
table、chain、rule、set等 - 选项部分常含花括号
{},用于定义链的类型、hook、priority 等属性,注意空格和分号位置(如type filter hook input priority 0 \;)
快速创建基础防护链
一条能用的 INPUT 链需要三步:建表 → 建链 → 加规则。不建议跳过链的 policy 设置,否则默认行为不可控。
- 新建表:
sudo nft add table inet filter - 新建 INPUT 链并设默认策略为 drop:
sudo nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; } - 加允许规则时注意顺序:回环、已建立连接、服务端口,最后才是 drop —— 规则按从上到下匹配,先匹配到即执行动作
精准管理单条规则
nft 不支持按内容直接删规则,必须借助 handle 编号。这是调试时最易卡住的环节。
- 查看带 handle 的完整规则:
sudo nft -a list chain inet filter input(加-a参数才显示 handle) - 删除指定 handle 的规则:
sudo nft delete rule inet filter input handle 5 - 修改规则本质是“删旧 + 加新”,nft 本身不提供 edit 命令
让规则重启后依然有效
nft 命令只影响当前内核规则集,关机即失效。持久化靠配置文件驱动服务加载。
- 保存当前规则到标准配置路径:
sudo nft list ruleset > /etc/nftables.conf - 重载配置生效(不重启服务):
sudo nft -f /etc/nftables.conf - 确认服务已启用开机自启:
sudo systemctl enable nftables,否则即使配置存在也不会自动加载

















