nftables(1)基本原理

news2025/1/4 18:38:36

简介

nftables 是 Linux 内核中用于数据包分类的现代框架,用来替代旧的 iptables(包括 ip6tablesarptablesebtables 等,统称为 xtables)架构。nftables 提供了更强大、更灵活以及更易于管理的规则集配置方式,使得网络过滤和路由决策变得更加高效

适用范围:nftables 可在 Linux 内核版本 >= 3.13 上使用。
新的命令行实用程序:nftables 提供了一个名为 nft 的新命令行实用程序,其语法与 iptables 不同。
兼容性层:nftables还提供了一个兼容性层,允许在新的 nftables 内核框架上运行 iptables 命令。
通用集合基础设施:nftables 提供了一种通用的集合基础设施,允许构建映射和串联结构。可以利用这些新结构来将规则集安排在多维树中,从而大幅减少需要检查的规则数量,直到达到对数据包的最终操作。

nftables特点

nftables 的开发是为了解决 iptables 框架存在的一些限制,并提供增强功能来进行数据包过滤和分类。

以下是选择 nftables 而非 iptables 的一些原因:

  1. 避免代码重复: iptables中的许多扩展都是特定于协议的,这意味着没有一种统一的方式来匹配数据包字段。相反,每种支持的协议都有自己的扩展。这导致代码库中充斥着执行类似任务的非常相似的代码,使得代码库变得庞大且难以维护。nftables通过更通用和一致的框架来整合这些功能。

  2. 更快的数据包分类: nftables 提供增强的通用集合和映射基础设施,相比 iptables,可以实现更快的数据包分类。

  3. 简化的双栈 IPv4/IPv6 支持: nftables 引入了 inet 家族,使得在同一条链内管理 IPv4 和 IPv6 流量变得更加简单。

  4. 更好的动态规则集更新支持: nftables 提供了改进的动态规则集更新支持,使得更容易管理和修改防火墙规则。

  5. Netlink API 支持: nftables 为第三方应用程序提供了 Netlink API,类似于其他 Linux 网络和 Netfilter 子系统。这样可以更轻松地将外部工具和应用程序集成到 nftables 中。

  6. 语法改进: nftables 解决了 iptables 中存在的语法不一致问题,提供了更干净、更紧凑的语法来定义规则和配置。

nftables和iptables的主要区别

语法不同

  • iptables 使用基于 getopt_long() 的解析器,其中关键字总是以双破折号(--)开头,例如 --key,或者单个破折号(-)后跟一个字母,例如 -p tcp。
  • nftables 则使用了一种受 tcpdump 启发的紧凑语法。这种语法更加直观和灵活,让用户能够更轻松地编写和理解规则。

表和链的完全可配置性

  • iptables 预设了多个表和基础链,即使你只需要其中的一个,所有的表和链都会被注册。这可能导致性能问题,即使未使用的基础链也可能对性能产生负面影响。
  • nftables 没有预设的表和链。你需要显式地定义每个表,并且只向其中添加你明确需要的对象(链、集合、映射、流表和状态对象)。这样,你就可以只注册你需要的基础链,并根据你的特定数据包处理管道选择表和链的名称以及 netfilter 钩子优先级。

单个规则可以执行多个操作

  • iptables 的规则由匹配条件和单个目标动作组成。一旦匹配条件满足,就会执行目标动作(如接受、拒绝或跳转到另一个链)。
  • nftables 的规则由零个或多个表达式后跟一个或多个语句组成。每个表达式测试数据包是否与特定的负载字段或数据包/流元数据匹配。多个表达式从左到右线性评估:如果第一个表达式匹配,则评估下一个表达式,依此类推。如果所有表达式都匹配,则执行该规则的语句。每个语句执行一个操作,如设置 netfilter 标记、计数数据包、记录数据包或做出裁决(如接受、丢弃数据包或跳转到另一个链)。与表达式一样,多个语句也是从左到右线性评估的:单个规则可以通过使用多个语句来执行多个操作。但请注意,裁决语句会自然结束规则的执行。

没有内置的每链和每规则计数器

  • 在 iptables 中,计数器是内置的,用于跟踪每个链和规则的匹配次数。但在 nftables 中,计数器是可选的,可以根据需要启用它们。这种灵活性允许用户只在需要时跟踪特定规则或链的性能指标,从而节省系统资源。

更好的动态规则集更新支持

  • iptables 使用一个整体的数据块(monolithic blob)来存储其规则集,这意呀着在添加或删除规则时,可能需要重新加载整个规则集,这可能会影响系统的性能。而 nftables 的规则集在内部以链表的形式表示,这使得添加或删除规则时只影响相关的部分,而不会影响整个规则集的其余部分,从而简化了内部状态信息的维护。

简化的双栈 IPv4/IPv6 管理

  • nftables 的 inet 家族允许注册能够同时查看 IPv4 和 IPv6 流量的基础链。这意味着不再需要依赖脚本来复制你的规则集以同时支持 IPv4 和 IPv6,从而简化了配置和管理过程。

新的通用集合基础设施

  • nftables 引入了与核心紧密集成的新的通用集合基础设施,它允许高级配置,如映射(maps)、决策映射(verdict maps)和间隔(intervals),以实现面向性能的包分类。最重要的是,可以使用任何受支持的选择器来对流量进行分类,这为复杂的网络场景提供了更多的灵活性和控制力。

支持拼接

  • 自 Linux 内核 4.1 版本以来,nftables 支持将多个关键字拼接起来,并将它们与映射和裁决映射组合使用。

无需内核升级即可支持新协议

  • 在传统的防火墙配置中,支持新协议通常需要升级内核。而 nftables 采用了新的虚拟机方法,使得支持新协议通常不需要新的内核版本,而只需要相对简单的 nft 用户空间软件更新。这降低了维护成本,并提高了系统的灵活性和可扩展性。

nftables概念

表链的含义和我们前面所介绍的iptables是类似的,更多表与链相关的内容可以参考iptables基本概念

表(Tables):Nftables配置由表组成,表是规则的容器。有四种类型的表:filter、nat、mangle、和raw。

链(Chains):表包含多个链,链是规则的集合。Nftables中有五种默认链:input、output、forward、prerouting和postrouting。这些链用于不同的网络包处理阶段。

规则(Rules):规则是定义如何处理网络包的指令。规则由条件(匹配条件)和操作(对匹配的包执行的操作)组成。

集合(sets):集合是一种数据结构,用于存储IP地址、端口号等信息,以便在规则中引用。
当涉及到Nftables时,理解其基本概念和语法是非常重要的。

iptables表

表包含链,与 iptables 中的表不同,nftables 中没有内置表。表的数量及其名称由用户决定。不过,每个表只有一个地址族,并且仅适用于该族的数据包。

表可以指定五个族之一:

nftables 族iptables 实用程序
ipiptables
ip6ip6tables
inetiptables 和 ip6tables
arparptables
bridgeebtables

ip(即 IPv4)是默认族,如果未指定族,则将使用该族。

要创建同时适用于 IPv4 和 IPv6 的规则,请使用 inetinet 允许统一 ip 和 ip6 族,从而使同时定义两者的规则更加容易。

安装nftables

我目前使用的系统是debian 12,以下直接使用apt install nftables安装。

启动nftables

配置文件

nftables包附带了一个简单而安全的防火墙配置,存储在 /etc/nftables.conf 文件中。

nftables.service 将在启动或启用时从该文件加载规则。

-f选项即-f/--file 文件名,表示要从该文件读取输入配置信息

保存配置

查看当前的 nftables 配置规则:

nft list ruleset

将输出重定向到 /etc/nftables.conf 文件中:

nft list ruleset > /etc/nftables.conf

重新加载配置文件

nft -f /etc/nftables.conf

systemctl restart nftables//也可通过该命令重启nftables

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1896754.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中国1km高分辨率高质量逐年近地表CO数据集(2013-2022年)

该数据为中国高分辨率高质量逐年CO数据集,该数据集主要的空间范围覆盖整个中国,其中内容包括中国1km高分辨率高质量逐年CO数据集(2013-2022年)。时间分辨率为年,单位为mg/m3,数据以(.nc/.tif)格式进行存储。

Vscode快捷键崩溃

Vscode快捷键崩溃 Linux虚拟机下使用vscode写代码【ctrlA,CtrlC,CtrlV】等快捷键都不能使用,还会出现“NO text insert“等抽象的指令,问题就是不知道什么时候装了一个VIM插件,让他滚出电脑》》》

快速傅里叶变换(Fast Fourier Transform)

快速算法(FFT),即快速傅里叶变换(Fast Fourier Transform),是一种用于计算离散傅里叶变换(DFT)及其逆变换的高效算法。FFT算法由J.W.库利和T.W.图基于1965年提出,显著减少…

T100-XG查询报表的开发

制作XG报表 1、注册程序 azzi900 首先现将程序注册一下,在内部构建基础代码档。 2、注册作业 azzi910 也是直接新增一个,作业跟程序绑定一下。 3、T100签出规格程序 这个时候应该是没签出的,首先将规格迁出。 4、T100画面产生器 规格迁出之后,这个时候还需要生成一个画…

【探索Linux】P.37(传输层 —— TCP协议通信机制 | 确认应答(ACK)机制 | 超时重传机制)

阅读导航 引言一、确认应答(ACK)机制1. 成功接收2. 过程中存在丢包3. 引入序列号(1)序列号的定义(2)序列号的作用(3)序列号的工作原理(4)序列号和确认应答号 二、超时重传机制1. 超时…

Linux/Ubuntu访问局域网共享文件夹

文件夹中找到“Other Location”,输入“smb:IP地址/共享文件夹名称”,然后点击connect后者直接回车即可! End!

【毛发教程】使用 Maya、XGen 和虚幻引擎创建马尾辫发型

Malte Resenberger-Loosmann是国外一名首席艺术家,他负责指导整个艺术部门来制作独立游戏项目中的3D建模。在本文中,Loosmann展示了马尾辫发型背后的工作流程,分享了 Maya 和虚幻引擎中的场景设置,并解释了 GS CurveTools 如何帮助…

RTL8211FSI PHY电路设计

文章目录 硬件设计引脚功能框图说明PHYADDRPageLED 模式自动协商/速度/全半双工模式Soft Reset上电顺序 原理图设计参考 软件控制(FPGA)硬件调试 硬件设计 引脚 笔者前代数字采集板采用的 PHY 芯片是博通 Boardcom 的 B50610,其仅支持 0 ∼…

从零到一:eBay自养号测评全流程解析与实操建议

eBay自养号测评是一种通过模拟真实买家行为,为卖家提供市场反馈并提升店铺权重和排名的技术手段。以下是进行eBay自养号测评的具体步骤和注意事项: 一、准备阶段 1. 技术配置:搭建境外服务器:选择稳定的境外服务器,模…

【解码现代 C++】:实现自己的智能 【String 类】

目录 1. 经典的String类问题 1.1 构造函数 小李的理解 1.2 析构函数 小李的理解 1.3 测试函数 小李的理解 1.4 需要记住的知识点 2. 浅拷贝 2.1 什么是浅拷贝 小李的理解 2.2 需要记住的知识点 3. 深拷贝 3.1 传统版写法的String类 3.1.1 拷贝构造函数 小李的理…

go zero入门

一、goctl安装 goctl 是 go-zero 的内置脚手架,可以一键生成代码、文档、部署 k8s yaml、dockerfile 等。 # Go 1.16 及以后版本 go install github.com/zeromicro/go-zero/tools/goctllatest检查是否安装成功 $ goctl -v goctl version 1.6.6 darwin/amd64vscod…

0/1背包问题总结

文章目录 🍇什么是0/1背包问题?🍈例题🍉1.分割等和子集🍉2.目标和🍉3.最后一块石头的重量Ⅱ 🍊总结 博客主页:lyyyyrics 🍇什么是0/1背包问题? 0/1背包问题是…

html三级菜单

示例 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Menu Example</title> <link re…

加速度传感器信号处理注意事项

1 传感器分类 对于压电式压力传感器而言&#xff0c;输出信号是最重要的选择标准之一。压电式压力传感器与电子电路相连&#xff0c;电子电路将传感器产生的电荷成比例转换为电压。 如果选用外部设备&#xff08;电荷放大器&#xff09;充当电子元件&#xff0c;则称其为电…

MYSQL篇二:数据库的操作

文章目录 1. 创建数据库1.1 查看数据库列表1.2 创建与删除数据库 2. 数据的编码问题3. 字符集和校验规则3.1 查看系统默认字符集以及校验规则3.2 查看数据库支持的字符集3.3 查看数据库支持的字符集校验规则3.4 校验规则对数据库的影响 4. 操纵数据库4.1 查看当前是哪一个数据库…

力扣热100 滑动窗口

这里写目录标题 3. 无重复字符的最长子串438. 找到字符串中所有字母异位词 3. 无重复字符的最长子串 左右指针left和right里面的字符串一直是没有重复的 class Solution:def lengthOfLongestSubstring(self, s: str) -> int:# 左右指针leftright0ans0#初始化结果tablecolle…

LMT加仿真,十一届大唐杯全国总决赛

这次省赛带了太多个省一了&#xff0c;并且很多都进入了国赛总决赛&#xff0c;具体可看下面的图片&#xff0c;只放了一部分。目前只有B组是只有一个商用设备赛也就是LMT&#xff0c;A组和高职组都是仿真实践赛加上商用设备赛。 针对商用设备赛有对应的资料&#xff…

基于IIS的Windows系统Django项目本地部署

参考&#xff1a; 1. 基于Windows平台的Django本地部署和腾讯云服务器上部署&#xff08;1&#xff09;_如何在服务器上发布部署django程序 csdn-CSDN博客 2.Windows server iis部署Django详细操作 - Django中文 - 博客园 (cnblogs.com) 3.在IIS中部署pythonDjango项目时出…

大模型范式下的知识检索增强实践(非常详细)零基础入门到精通,收藏这一篇就够了

导读 OpenKG新开设“TOC专家谈”栏目&#xff0c;推送OpenKG TOC&#xff08;技术监督委员会&#xff09;专家成员的观点文章。本期邀请到阿里巴巴通义实验室自然语言处理方向负责人黄非研究员介绍通义大模型在知识检索增强方面的一些实践。 随着人工智能技术的飞速发展&…

AI绘画 Stable Diffusion图像的脸部细节控制——采样器全解析

大家好&#xff0c;我是画画的小强 我们在运用AI绘画 Stable Diffusion 这一功能强大的AI绘图工具时&#xff0c;我们往往会发现自己对提示词的使用还不够充分。在这种情形下&#xff0c;我们应当如何调整自己的策略&#xff0c;以便更加精确、全面地塑造出理想的人物形象呢&a…