nftables(1)基本原理

简介

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.confsystemctl restart nftables//也可通过该命令重启nftables

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

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

相关文章

【java计算机毕设】办公用品管理系统MySQL ssm JSP maven项目设计代码源码+文档 前后端一体

1项目功能 【java计算机毕设】办公用品管理系统MySQL ssm JSP maven项目设计代码源码文档 前后端一体 2项目介绍 系统功能: 办公用品管理系统包括管理员、用户俩种角色。 管理员功能包括个人中心模块用于修改个人信息和密码、用户管理、用品分类管理、用品信息管理…

springcloud+vue项目,controller层接口返回json数据,前端可以接收到数据,但浏览器“F12-->网络-->响应“显示为空的问题处理

1.显示为空的场景 SharetekR(access_tokeneyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJQQzoxODA1ODA4ODc1MjUwMTIyNzUyIiwicm5TdHIiOiJrZEoxV05CV3NBSUdYb05TbktSU3kzOGNuSnk3c3FRTSIsInVzZXJJZCI6MTgwNTgwODg3NTI1MDEyMjc1MiwidXNlck5h…

grpc-go客户端接口添加

【1】 proto相关文件同服务端,如已经生成,可以直接使用服务端的文件(包) 【2】新建一个目录“WHG_CLIENT”,目录下新建一个main.go文件 package mainimport ("context""log""grpc-go-maste…

STM32F1+HAL库+FreeTOTS学习5——内核中断管理及中断控制函数

STM32F1HAL库FreeTOTS学习5——中断管理和临界段代码保护 中断简介中断优先级寄存器拓展FreeRTOS中PendSV和Systick中断优先级配置三个中断屏蔽寄存器FreeRTOS中断管理函数代码验证 上一期我们学习了FreeRTOS中任务挂起与恢复,在中断服务程序中恢复任务过程中&#…

[Redis]哨兵机制

哨兵机制概念 在传统主从复制机制中,会存在一些问题: 1. 主节点发生故障时,进行主备切换的过程是复杂的,需要人工参与,导致故障恢复时间无法保障。 2. 主节点可以将读压力分散出去,但写压力/存储压力是无法…

印章谁在管、谁用了、用在哪?契约锁让您打开手机一看便知

“印章都交给谁在管”、“哪些人能用”、“都有哪些业务在用”…这些既是管理者最关心的印章问题也是影响印章安全的关键要素。但是公司旗下分子公司那么多,各类公章、法人章、财务章、合同章一大堆,想“问”明白很难。 契约锁电子签及印控平台推出“印章…

14-11 2024 年的 13 个 AI 趋势

2024 年的 13 个 AI 趋势 人工智能对环境的影响和平人工智能人工智能支持的问题解决和决策针对人工智能公司的诉讼2024 年美国总统大选与人工智能威胁人工智能、网络犯罪和社会工程威胁人工智能治疗孤独与对人工智能的情感依赖人工智能影响者中国争夺人工智能霸主地位人工智能…

YOLOv10全网最新创新点改进系列:融合GSConv+Slim Neck,双改进、双增强,替换特征融合层实现, 轻量化涨点改进策略,有效涨点神器!

YOLOv10全网最新创新点改进系列:融合GSConvSlim Neck,双改进、双增强,替换特征融合层实现, 轻量化涨点改进策略,有效涨点神器! 所有改进代码均经过实验测试跑通!截止发稿时YOLOv10已改进40&…

【数据结构】06.栈队列

一、栈 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈&#…

LangChain终极内幕指南,学会langchain就看它了

1.概述 在人工智能迅速演进的时代,诸如Open AI的ChatGPT和Google的Bard等大型语言模型(LLMs)正彻底改变我们与技术互动的方式。这些技术巨头和SaaS公司正在竞相利用LLMs的威力,创造更为智能和实用的应用程序。 然而,真正的变革并非仅仅停留…

Finding and exploting an unused API endpoint

Using 0$ account buy a piece of lether priced at $133 1、尝试访问api接口 大概率可能访问不到,但是可以尝试访问下 /api/swagger/v1 /openapi.json 2、页面功能点寻找 api send to Repeter 3、Find Supported HTTP请求 POST方法测试 通过测试得知支持GET方法和PATC…

系统管理(System Keeping):全新迭代,优化您的开发体验

随着科技的不断进步和用户需求的日益增长,系统管理(System Keeping)不断进行迭代更新,致力于为用户带来更加高效、便捷的开发体验。本次全新迭代,不仅在界面与交互上进行了革新,更在功能整合、个性化与安全…

Android --- Service

出自于此,写得很清楚。关于Android Service真正的完全详解,你需要知道的一切_android service-CSDN博客 出自【zejian的博客】 什么是Service? Service(服务)是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件。 服务可由其他应用组件…

万字长文|关于 OpenAI 接口开发你应该知道的一切

这篇文章中个人结合自己的实践经验把 OpenAI 官方文档解读一遍。但是原文档涉及内容众多,包括微调,嵌入(Embeddings)等众多主题,我这里重点挑选自己开发高频使用到的,需要详细了解的可以自行前往官网阅读。…

2024科技文化节程序设计竞赛

补题链接 https://www.luogu.com.cn/contest/178895#problems A. 签到题 忽略掉大小为1的环&#xff0c;答案是剩下环的大小和减环的数量 #include<bits/stdc.h> #include<iostream> #include<cstdio> #include<vector> #include<map> #incl…

c进阶篇(四):内存函数

内存函数以字节为单位更改 1.memcpy memcpy 是 C/C 中的一个标准库函数&#xff0c;用于内存拷贝操作。它的原型通常定义在 <cstring> 头文件中&#xff0c;其作用是将一块内存中的数据复制到另一块内存中。 函数原型&#xff1a;void *memcpy(void *dest, const void…

多模态融合算法应用:CT + 临床文本数据 + pyradiomics提取到的图像特征

多模态融合算法应用 CT 临床文本数据 pyradiomics提取图像特征 单模态建模临床数据建模pyradiomics提取图像特征建模CT建模 多模态建模前融合为什么能直接合并在一起&#xff1f; 后融合Med-CLIP&#xff1a;深度学习 可解释性 单模态建模 临床数据建模 临床文本数据&…

WPF Menu实现快捷键操作

很多小伙伴说&#xff0c;在Menu中&#xff0c;实现单个快捷键操作很简单&#xff0c;怎么实现多个快捷键操作和&#xff0c;组合快捷键呢&#xff0c;今天他来了。 上代码和效果图 一、Ctrl Shift 任意子母键实现快捷键组合 <Window x:Class"XH.TemplateLesson.M…

【测试开发】【postman】按顺序循环执行接口

postman按顺序循环执行接口 新建接口接口排序执行请求集合 新建接口 Request 001 Request 002 Request 003 接口排序 在Request 001的Tests中添加代码 postman.setNextRequest("Request 002");在Request 002的Tests中添加代码 postman.setNextRequest("Requ…

Redis 7.x 系列【17】四种持久化策略

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 案例演示2.1 无持久化2.2 RDB2.3 AOF2.4 混合模式2.4.1 方式一&#xff1a;…