nftables入门

nftables入门

_

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.100192.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

总结

  1. nftables 是新系统替代 iptables 的工具,核心是“表-链-规则”三层结构,语法更简洁;
  2. 限制 80 端口 IP 访问的核心逻辑:先放行允许的 IP,再拒绝其他 IP,规则顺序不能反;
  3. 手动添加的规则需写入 /etc/nftables.conf 并重启服务,才能实现开机持久化。
虚拟机部署dify 2026-01-08
halo 通过Injector 增加侧边栏轮播图效果 2026-01-08

评论区