Skip to main content
☘️ Septvean's Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

nftables

一、nftables 是什么(一句话)

nftables 是 Linux 内核中的统一防火墙与报文过滤框架,用来取代 iptables、ip6tables、ebtables、arptables。

它不是一个“新 iptables”,而是 全新架构


二、为什么要有 nftables(诞生背景)

iptables 的历史问题

  1. IPv4 / IPv6 / 二层规则割裂
  2. 表、链、规则重复严重
  3. 规则多时性能下降明显
  4. 用户态工具复杂、难维护
  5. 内核接口不统一

nftables 的目标

目标 说明
统一 IPv4 / IPv6 / 二层统一处理
高性能 使用字节码(bytecode)
简洁 语法更接近人类逻辑
原子性 规则批量提交
可扩展 原生支持 set、map

三、整体架构(非常重要)

用户空间
┌──────────────────────────┐
│ nft (命令行工具)           │
│ nftables.conf            │
└───────────┬──────────────┘
            │ netlink
┌───────────▼──────────────┐
│ 内核 nftables 引擎        │
│  - bytecode 虚拟机        │
│  - hooks                 │
└───────────┬──────────────┘
┌───────────▼──────────────┐
│ Netfilter 框架            │
└───────────┬──────────────┘
┌───────────▼──────────────┐
│ 网络协议栈(IP/TCP/UDP)   │
└──────────────────────────┘

四、核心对象模型(必须掌握)

1️⃣ Table(表)

  • 规则的顶级容器
  • 协议族 区分

常见协议族:

family 作用
ip IPv4
ip6 IPv6
inet IPv4 + IPv6(推荐)
bridge 二层
netdev 网卡入口

2️⃣ Chain(链)

  • 规则的执行路径
  • 绑定到 Netfilter hook

常见 hook

hook 作用
prerouting 路由前
input 本机接收
forward 转发
output 本机发出
postrouting 路由后

3️⃣ Rule(规则)

  • 匹配条件 + 动作
  • 顺序执行

示例:

ip saddr 192.168.1.0/24 tcp dport 22 accept

4️⃣ Set(集合,性能核心)

set 是 nftables 性能优于 iptables 的关键

  • 高效存储多个值
  • O(1) 或 O(log n) 查找
  • 支持动态更新

示例:

set trusted_ips {
    type ipv4_addr
    elements = { 192.168.1.10, 192.168.1.20 }
}

5️⃣ Map(映射)

  • Key -> Value
  • 常用于端口转发、策略选择

五、工作流程(报文路径)

本机接收流量 为例:

网卡
prerouting
路由判断
input
本地进程

nftables 在 各 hook 点执行规则


六、nftables 语法特点

对比 iptables

特性 iptables nftables
多协议 分工具 统一
批量加载
set 原生
原子更新
可读性

示例:基础防火墙

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
        tcp dport { 80, 443 } accept
    }
}

七、与 iptables 的关系(现实问题)

nftables ≠ iptables-nft

  • nftables:原生新体系
  • iptables-nft:iptables 语法 -> nftables 后端

现代系统(RHEL 8+、Debian 10+):

  • 默认使用 nftables 内核
  • iptables 命令只是兼容层

八、性能优势来源(原理)

  1. 规则编译为字节码
  2. set / map 数据结构
  3. 一次性加载规则
  4. 减少内核态规则遍历

九、生产环境最佳实践

推荐做法

  1. 使用 inet family
  2. 用 set 管理 IP / 端口
  3. 所有规则一次性加载
  4. 禁用 iptables 混用
  5. 使用配置文件而非命令堆叠

配置文件位置

  • 主配置:/etc/nftables.conf
  • systemd 服务:nftables.service

十、常见误区

  • ❌ 把 nftables 当 iptables 用
  • ❌ 规则一条条追加
  • ❌ 不使用 set
  • ❌ 同时启用 firewalld + nftables

十一、nftables 与 firewalld

  • firewalld:策略管理器
  • nftables:规则执行引擎

关系:

firewalld -> nftables -> 内核

十二、适合谁使用?

场景 推荐
生产服务器 强烈推荐
云主机 推荐
容器宿主机 必须
高并发网络 必须
学习防火墙原理 推荐

十三、一句话终极总结

nftables 是现代 Linux 防火墙的“统一内核语言”。