补充说明
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应用。