nftables 是 Linux 新一代防火墙工具,比传统 iptables 更高效、语法更简洁,也是 Ubuntu 20.04+、CentOS 8+ 等新系统的默认选择。
一、先搞懂 nftables 核心概念(新手极简版)
不用记复杂术语,核心就 3 个:
- 表(table):存放规则的容器,按功能分类型(如
ip对应 IPv4 规则); - 链(chain):规则的执行顺序(如
input处理进入本机的流量); - 规则(rule):具体的访问控制逻辑(如“允许 192.168.1.100 访问 80 端口,拒绝其他 IP”)。
二、基础操作:安装 & 启动 nftables
1. 安装(不同发行版)
# Ubuntu/Debian
sudo apt update && sudo apt install -y nftables
# CentOS/RHEL 8+
sudo dnf install -y nftables
2. 启动 & 开机自启
# 启动服务
sudo systemctl start nftables
# 开机自启
sudo systemctl enable nftables
# 检查状态(正常会显示 active (running))
sudo systemctl status nftables
三、核心实战:限制 80 端口的 IP 访问
以“只允许 192.168.1.100 和 192.168.1.0/24 网段访问 80 端口,拒绝其他所有 IP”为例,分步骤配置:
1. 清空默认规则(避免冲突)
# 清空所有现有规则(新手建议先执行)
sudo nft flush ruleset
2. 创建表和链(IPv4 流量)
# 创建 ip 类型的表(命名为 filter,对应传统 iptables 的 filter 表)
sudo nft add table ip filter
# 在 filter 表中创建 input 链(处理入站流量,设置默认策略为 accept)
sudo nft add chain ip filter input { type filter hook input priority 0 \; policy accept \; }
3. 添加 80 端口的 IP 限制规则
规则顺序很重要:先放行允许的 IP,再拒绝其他所有 IP!
# 1. 放行 192.168.1.100 访问 80 端口(TCP)
sudo nft add rule ip filter input ip saddr 192.168.1.100 tcp dport 80 accept
# 2. 放行 192.168.1.0/24 网段访问 80 端口(可选,按需添加)
sudo nft add rule ip filter input ip saddr 192.168.1.0/24 tcp dport 80 accept
# 3. 拒绝所有其他 IP 访问 80 端口
sudo nft add rule ip filter input tcp dport 80 drop
4. 查看已配置的规则(验证)
sudo nft list ruleset
正常输出会包含你添加的 80 端口规则,示例:
table ip filter {
chain input {
type filter hook input priority filter; policy accept;
ip saddr 192.168.1.100 tcp dport 80 accept
ip saddr 192.168.1.0/24 tcp dport 80 accept
tcp dport 80 drop
}
}
四、关键:持久化规则(重启不丢失)
手动添加的规则重启后会消失,需写入配置文件:
1. 导出当前规则到配置文件
# Ubuntu/Debian/CentOS 通用(配置文件路径:/etc/nftables.conf)
sudo nft list ruleset > /etc/nftables.conf
2. 验证持久化(重启服务后检查规则)
# 重启 nftables 服务
sudo systemctl restart nftables
# 重新查看规则,确认还在
sudo nft list ruleset
五、nftables 常用操作(日常管理)
# 1. 查看所有规则(简洁版)
sudo nft list ruleset
# 2. 查看指定表的规则(如 ip filter 表)
sudo nft list table ip filter
# 3. 删除某条规则(先查规则行号,再删除)
# 第一步:查 input 链的规则行号
sudo nft -a list chain ip filter input
# 第二步:删除指定行(比如 handle 为 123 的规则)
sudo nft delete rule ip filter input handle 123
# 4. 清空所有规则(重置)
sudo nft flush ruleset
总结
nftables是新系统替代iptables的工具,核心是“表-链-规则”三层结构,语法更简洁;- 限制 80 端口 IP 访问的核心逻辑:先放行允许的 IP,再拒绝其他 IP,规则顺序不能反;
- 手动添加的规则需写入
/etc/nftables.conf并重启服务,才能实现开机持久化。