Linux之nftables详解

2026-03-11 11:16:21 96

Linux之nftables详解

欢迎来到8455线路检测中心技术小课堂,每天分享一个技术小知识。


NFTables(Netfilter Tables)是 Linux 内核中用于数据包过滤和分类的框架,它旨在取代传统的 iptables、ip6tables、arptables 和 ebtables 工具。NFTables 提供了更简洁的语法、更好的性能和更灵活的功能。

1. 核心概念 

表(Tables):用于区分不同类型的处理(如 filter、nat)。

链(Chains):包含规则的有序列表,可以是基链(base chain,处理网络流量)或常规链(regular chain,用于跳转)。

规则(Rules):由表达式和语句组成,决定数据包的处理方式。

集合(Sets):用于存储数据(如 IP 地址、端口),支持动态更新。

2. 基本语法 

创建表:nft add table

创建链:nft add chain { type hook priority ; }

添加规则:nft add rule

3. 常用命令示例 

查看规则:nft list ruleset

清空规则:nft flush ruleset

删除规则:nft delete rule handle

4. 优势 

统一性:支持 IPv4、IPv6 和 ARP 等协议,无需切换工具。

性能:基于内核的虚拟机(VM)执行规则,效率更高。

动态性:支持原子规则更新和集合的动态修改。

5. 迁移工具 

可使用 iptables-translate和 ip6tables-translate将现有 iptables 规则转换为 nftables 语法。

NFTables 是现代 Linux 系统推荐的防火墙管理工具,适用于复杂的网络策略管理。

nftables写篇技术分享文档

NFTables 技术分享:现代 Linux 防火墙架构 

摘要 

NFTables 是 Linux 内核 3.13 引入的数据包过滤框架,作为 iptables 的继任者。本次分享将介绍其架构设计、核心特性、实际应用及迁移策略。

1. 演进背景 

iptables 的局限性:

IPv4/IPv6 需要不同工具

规则膨胀时性能下降

语法复杂,难以维护

NFTables 设计目标:

统一过滤框架

基于虚拟机的高效执行

支持动态规则集

2. 架构解析 

2.1 核心组件 

+--------------------------------+

|         Application           |

+--------------------------------+

|       nft 命令行工具          |

+--------------------------------+

|      Netlink API 通信         |

+--------------------------------+

|    nftables 内核虚拟机       | ← 规则编译为字节码

+--------------------------------+

|      Netfilter 钩子点         |

+--------------------------------+

|       网络协议栈             |

+--------------------------------+

2.2 协议族支持 

image.png

3. 核心特性详解 

3.1 统一语法结构 

# 传统 iptables

iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT

# NFTables 等效规则

nft add rule ip filter input ip saddr 192.168.1.0/24 tcp dport 22 accept

3.2 集合与映射 

动态集合示例:

# 创建集合

nft add set ip filter blacklist { type ipv4_addr\\; }

# 动态添加

nft add element ip filter blacklist { 10.0.0.5, 10.0.0.7 }

# 使用集合

nft add rule ip filter input ip saddr @blacklist drop

映射示例:

# 创建端口映射

nft add map ip filter portmap { type inet_service : verdict\\; }

# 添加映射项

nft add element ip filter portmap { 80 : accept, 22 : drop }

# 使用映射

nft add rule ip filter input tcp dport vmap @portmap

3.3 链的类型 

# 基链(直接处理流量)

nft add chain ip filter input { 

    type filter hook input priority 0; 

    policy drop;

}

# 常规链(用于组织规则)

nft add chain ip filter http_chain

# 跳转到常规链

nft add rule ip filter input tcp dport {80,443} jump http_chain

4. 性能优势 

4.1 测试对比 

image.png

4.2 优化原理 

字节码编译:规则编译为虚拟机字节码执行

集合查找优化:哈希表存储,O(1) 查找

原子操作:批量更新避免锁竞争

5. 实战案例 

5.1 企业防火墙配置 

#!/bin/bash# 清空现有规则

nft flush ruleset

# 创建表和链

nft add table inet firewall

nft add chain inet firewall input { type filter hook input priority 0\\; }

nft add chain inet firewall forward { type filter hook forward priority 0\\; }

nft add chain inet firewall output { type filter hook output priority 0\\; }

# 默认策略

nft add rule inet firewall input ct state established,related accept

nft add rule inet firewall input iif lo accept

nft add rule inet firewall input ct state invalid drop

# 允许 SSH(限特定网段)

nft add set inet firewall admin_ips { type ipv4_addr\\; }

nft add element inet firewall admin_ips { 10.0.0.0/24, 192.168.1.100 }

nft add rule inet firewall input tcp dport 22 ip saddr @admin_ips accept

# 速率限制

nft add rule inet firewall input tcp dport 80 limit rate 10/second burst 20 accept

5.2 Docker 容器网络 

# 容器隔离规则

nft add table bridge docker

nft add chain bridge docker forward { type filter hook forward priority 0\\; }

# 允许容器间通信

nft add rule bridge docker forward iifname "docker0" oifname "docker0" accept

# 限制外部访问

nft add rule bridge docker forward iifname "eth0" oifname "docker0" ct state established,related accept

6. 迁移策略 

6.1 自动转换 

# 转换 iptables 规则

iptables-save > iptables.rules

iptables-restore-translate -f iptables.rules > nftables.rules

# 审查并加载

nft -f nftables.rules

6.2 混合部署 

+---------------------+

|  现有 iptables 规则  |

+---------------------+          |

          v

+---------------------+

|  nftables 新规则    |  ← 逐步迁移关键规则

+---------------------+

          |

          v

+---------------------+

|  统一 nftables 规则集 |

+---------------------+

7. 监控与调试 

7.1 状态查看 

# 查看完整规则集

nft list ruleset

# 监控流量计数

nft list chain inet filter input

# 追踪规则匹配

nft monitor trace

7.2 性能分析 

# 查看规则统计

nft -a list ruleset

# 检查规则复杂度

nft --debug=netlink list ruleset

8. 最佳实践 

命名规范:使用有意义的表名和链名

模块化设计:相关规则组织到同一链

版本控制:规则集纳入配置管理

测试验证:非生产环境验证规则

性能基线:记录关键性能指标

9. 未来展望 

BPF 集成:与 eBPF 深度结合

云原生支持:Kubernetes CNI 集成

AI 优化:智能规则编排

结论 

NFTables 代表了 Linux 防火墙技术的现代化演进,通过统一的语法、高效的执行引擎和灵活的数据结构,为复杂网络环境提供了强大支持。建议新项目直接采用 NFTables,现有系统可制定渐进式迁移计划。


8455线路检测中心官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,8455线路检测中心整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。

更多技术知识,8455线路检测中心期待与你一起探索。


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题:
XML 地图