Linux 命令速查
网络 man nft

nft

nftables 防火墙的配置工具。

返回

补充说明

nft 是 nftables 的用户空间命令行工具,用于管理 Linux 内核的包过滤、NAT、流量整形等规则。nftables 取代了 iptables、ip6tables、arptables 和 ebtables,提供统一的规则语法和更高效的规则集表示。

规则按“表(table)→ 链(chain)→ 规则(rule)”组织。表需要指定协议族:ip、ip6、inet(同时处理 IPv4/IPv6)、arp、bridge、netdev。链分为常规链和基链(base chain),基链通过 hook 挂接到数据包处理路径。

规则集可以用 nft -f 文件 原子加载,适合写入 /etc/nftables.conf 并由 nftables.service 在开机时应用。iptables-nft 提供兼容层,但新配置建议直接使用 nft 语法。

语法

nft [选项] 命令...

选项

  • -f 文件:从文件读取并原子加载规则
  • -c:只检查语法,不应用
  • -a:显示规则句柄,便于删除
  • -n:纯数字输出,不做 DNS/服务名解析
  • -j:以 JSON 格式输出
  • -e:回显新增/替换的规则

实例

# 查看当前完整规则集
sudo nft list ruleset

# 新建 inet 表与输入基链(默认放行)
sudo nft add table inet filter
sudo nft add chain inet filter input '{ type filter hook input priority 0; policy accept; }'

# 允许已建立的连接与 SSH
sudo nft add rule inet filter input ct state established,related accept
sudo nft add rule inet filter input tcp dport 22 accept

# 拒绝其他入站流量
sudo nft add rule inet filter input drop

# 按句柄删除规则(先 -a 查看句柄)
sudo nft -a list chain inet filter input
sudo nft delete rule inet filter input handle 5

# 校验并原子加载配置文件
sudo nft -c -f /etc/nftables.conf
sudo nft -f /etc/nftables.conf

配置文件示例

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        ct state established,related accept
        iif lo accept
        tcp dport 22 accept
    }
}

注意事项

  • flush ruleset 会清空所有表和规则,远程操作时可能导致失联,先确认已有放行规则。
  • 规则顺序有意义,drop 放在允许规则之前会阻断后续匹配。
  • 修改前用 nft -c -f 校验语法,再用 -f 应用。

参考链接