nftables(7)集合(SETS)

简介

 在nftables中,集合(sets)是一个非常有用的特性,它允许你以集合的形式管理IP地址、端口号等网络元素,从而简化规则的配置和管理。

nftables提供了两种类型的集合:匿名集合和命名集合。

匿名集合(Anonymous Sets)

特点:匿名集合在规则中被直接定义,没有特定的名称。集合成员被包含在花括号{}中,元素之间用逗号,分隔。

使用场景:当你需要临时定义一个集合,且这个集合只在定义它的规则中使用时,匿名集合非常有用。

限制:一旦包含匿名集合的规则被删除,该匿名集合也会随之消失。此外,匿名集合一旦定义就无法更新,即不能添加或删除元素,除非修改或删除使用该匿名集合的规则。

命名集合(Named Sets)

特点:命名集合需要在规则中引用之前先定义。与匿名集合不同,命名集合的元素可以在任何时间被添加或删除。

使用场景:当你需要在一个或多个规则中频繁引用同一组网络元素时,命名集合非常有用。通过更新命名集合,你可以轻松地管理这些元素,而无需修改引用它们的规则。

引用方式:在规则中引用命名集合时,需要在集合名称前加上@符号。

集合操作

集合的行为可以通过在创建集合时指定的标志(flags)进行调整

操作行为

OperationDescription
add在指定表中添加一个新的集合。查看下面的集合规格表以获取更多关于如何指定集合属性的信息。
delete删除指定的集合。如果集合不存在,则可能会失败。
destroy删除指定的集合。如果集合不存在,则不会失败。
list显示指定集合中的元素。
flush从指定集合中移除所有元素。
reset重置所有包含元素的状态,例如计数器和配额语句的值。

集合规格(Set Specifications)

KeywordDescriptionType
type集合元素的数据类型string: ipv4_addr, ipv6_addr, ether_addr, inet_proto, inet_service, mark
typeof用于从表达式中推导集合元素的数据类型(较少见,可能特定于实现)expression
flags集合的标志,描述集合的属性string: constant, dynamic, interval, timeout
timeout元素在集合中保留的时间(如果集合用于数据包处理)string, decimal followed by unit (d, h, m, s)
gc-interval垃圾收集间隔(当使用timeout或flag timeout时)string, decimal followed by unit (d, h, m, s)
elements集合包含的元素(通常在添加时指定)set data type (depends on 'type')
size集合中元素的最大数量(如果集合用于数据包处理)unsigned integer (64 bit)
policy集合的策略,优化存储和访问性能string: performance (default), memory
auto-merge自动合并相邻/重叠的集合元素(仅适用于interval集合)boolean or specific parameters

配置集合

配置匿名集合

大家可以回顾一下,我们在iptables和firewalld中如何使用集合的功能的?当匹配一类信息的时候在iptables和firewalld中我们可以使用ipset来实现对应的功能,但是在nftables中,直接就可以使用集合来实现。

其实匿名集合在我们上篇文章配置比如端口范围的时候就已经使用过,例如允许来自源 IP地址为 192.168.140.10-192.168.140.20这个区间内的主机的流量

如图所示,该规则从192.168.140.10-192.168.140.20来的流量会被accept
允许来自IP范围192.168.140.25到192.168.140.35以及IP地址192.168.149.37,并且目的端口为10000、10005以及10010到10015的流量

配置命名集合

命名集合是在规则中引用之前需要首先定义集合。与匿名集合不同,元素可以随时添加到命名集合或从命名集合中删除。使用集名称前的@前缀从规则中引用集和。

创建集合

add set [family] table set { type type | typeof expression ; [flags flags ;] [timeout timeout ;] [gc-interval gc-interval ;] [elements = { element[, ...] } ;] [size size ;] [comment comment ;] [policy 'policy ;] [auto-merge ;] }
{delete | destroy | list | flush | reset } set [family] table set
list sets [family]
delete set [family] table handle handle
{add | delete | destroy } element [family] table set { element[, ...] }
具体参数含义在我们上面集合操作中有具体介绍

配置举例

例如,现在需要创建一个类型为Ipv4地址的集合

创建了一个名为allow-host的集合,类型为ipv4_addr,comment为该集合的描述信息。如果要删除该集合,可以通过nft delete set filter allow-host命令来删除

向集合中添加元素,即允许的地址信息

向集合中添加地址192.168.140.41,43,如果再次添加45只需要增加45就行,添加的信息都会在这个集合中。


引用集合

通过@来引用我们创建的集合

前面我们都是先创建集合,然后添加元素、引用集合,其实也可以一步到位,直接创建集合并添加元素信息。如下所示:

root@debian:~# nft add set ip filter allow-host2 { type ipv4_addr\; elements={ 192.168.142.1,192.168.142.2 }\;  comment \"accept all packets from these ip\"  \; }
直接通过elements={}添加对应的元素信息,此时就不需要再次通过元素添加命令添加元素

集合flags

我们前面创建的集合allow-host,我们都是添加的单个IP地址,如果要给此集合中添加连续的IP地址,或者网段会发生什么呢?

在使用 nftables(nft)时,如果你尝试向一个集合(set)中添加元素,需要确保该集合是以正确的方式声明的,以便它能够接受你想要添加的元素类型(如IP地址范围或CIDR块)。错误信息提示,试图向一个集合中添加IP地址范围或CIDR块,但集合没有被正确地声明为接受这种类型的元素。需要添加flags interval参数。

添加一个sets,名为iprange,设置flags参数为interval,然后添加IP地址范围和ip地址网段,那么此时如果给该集合中添加一个单独的IP地址可以吗?当然是可以的,因为这个已经包含了可以设置单个ip地址,我们试试看。
此时添加的192.168.140.50也已经添加成功了。

集合auto-merge

自动合并相邻/重叠的集合元素,这只对区间集和有效。如上图所示,如果我们在一个集合中创建了很多单独IP地址,但是这些IP地址是连续的,那么通过auto-merge就可以将连续的IP地址合并起来。

如上图所示,通过auto-merge就可以将单个的连续元素进行合并
通过nft get element命令可以查看该集合中是否包含该元素信息,这在集合中元素信息非常多的时候还是比较有用的。

上面都是ip地址,当然端口号也适用该配置,如下所示:

使用端口号指的是服务,所以type字段要修改为inet_service,通过auto-merge也可以将端口号进行合并。

查看集合信息

可以通过nft list sets命令查看所有集合,也可以通过nft list set _____后面跟上对应的表和集合名称进行查看。这个我们在上面都有演示,再次不在重新展示了。

那么我如果想要看某个元素有没有在集合中,该如何查看呢?

高级参数配置

集合timeout

它决定了元素在集合中停留的时间。时间字符串遵循如下格式:"dhms":

创建了一个名为 allow-ports 的集合,类型为 inet_service,表示存储网络服务(如端口号)的集合。该集合设置了超时时间为 10 小时 35 分钟 10 秒

Element timeouts 

集合元素有两个属性:
timeout:该时间值,以秒(s)、分(m)、小时(h)或它们的组合(hms)为单位。
expires:该值是一个倒计时时间计数器,从超时值开始,可以从数据包路径中重置,或者当达到0值时将删除该元素。

注意在elements设置timeout需要声明集合flgas 包含timeout,此时元素就包含了timeout,expires随着时间的推移,这个计时器会变化。
那么这个超时时间到期会怎么样?因为这个表示的是元素的有效时间,所以当超时时间到期后,该元素信息就会被自动删除

此时超时的元素信息已经被删除了。

那么在此集合中我如果要设置端口范围该如何操作呢?

我们前面在添加连续ip地址或端口的时候是需要interval参数的,现在我们这个set已经有了timeout参数,那么如何继续添加interval参数呢?参数之间通过,隔开就可以

总结

集合(sets)是一种非常重要的数据结构,用于存储一组元素,如IP地址、端口号、MAC地址等,以便在规则中引用。集合的使用可以极大地简化防火墙规则的配置,提高管理效率。通过合理使用集合,可以简化规则配置、提高管理效率,并增强防火墙的灵活性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高职院校人工智能人才培养成果导向系统构建、实施要点与评量方法

一、引言 近年来,人工智能技术在全球范围内迅速发展,对各行各业产生了深远的影响。高职院校作为培养高技能人才的重要基地,肩负着培养人工智能领域专业人才的重任。为了适应社会对人工智能人才的需求,高职院校需要构建一套科学、…

大模型产品琳琅满目,企业应该如何选择?

AI 和大模型方兴未艾,我们每天都在看到和尝试不同版本、不同品牌的大模型产品,它们的能力各不相同。无论是个人还是企业,都在思考如何尽早地参与进来到大模型的浪潮当中来。 目前,一些先锋企业已经将 AI 和大模型融入到他们的日常…

C#学习

C#学习 1.B站丑萌气质狗C#的循环-判断泛型错误处理面向对象static的使用定义showInfo类和Hero类 在这里插入图片描述 然后在该解决方案add新建一个类库,点击rebuild,会在bin文件夹下生成.dll文件 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direc…

无人机之图传距离的决定因素

一、发射功率:图传设备的发射功率越大,信号能够传播的距离就越远 二、工作频段:不同频段具有不同的传播特性,一些频段在相同条件下可能具有更远的传输距离。 三、天线性能:优质的天线可以增强信号的发送和接收能力&a…

php相关

php相关 ​ 借鉴了小迪安全以及各位大佬的博客,如果一切顺利,会不定期更新。 如果感觉不妥,可以私信删除。 默认有php基础。 文章目录 php相关1. php 缺陷函数1. 与2. MD53. intval()4. preg_match() 2. php特性1. php字符串解析特性2. 杂…

jdk22+maven环境配置教程+idea的maven环境配置(Windows系统)

前言 jdk是Java开发必要的编程环境,idea是常用的Java开发工具,这里着重解释一下maven。 maven就是我们经常看见的pom.xml文件,maven有以下三点功能: 1.项目构建(可以帮助我们更快速的打包、构建项目) 2.依…

<数据集>钢铁缺陷检测数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:1800张 标注数量(xml文件个数):1800 标注数量(txt文件个数):1800 标注类别数:6 标注类别名称:[crazing, patches, inclusion, pitted_surface, rolled-in_scale, scr…

Blender使用(二)点线面基本操作

Blender使用之点线面 1.编辑模式 tab键进行切换,为了方便菜单调出,可以设置键位映射为拖动时的饼菜单。 设置好后,按住tab键移动鼠标(注意不要点击鼠标),即可弹出编辑菜单。 默认是点模式,在左上角可进行点线面的切换…

C++从入门到精通(第2版) 中文电子版

前言 C(c plus plus)是一种计算机高级程序设计语言,由C语言扩展升级而产生,最早于1979年由本贾尼斯特劳斯特卢普在AT&T贝尔工作室研发。C既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对…

[C++] 由浅入深理解面向对象思想的组成模块

文章目录 (一) 类的默认成员函数(二) 构造函数构造函数的特征构造函数示例无参构造带参构造 冲突:全缺省参数的构造函数与无参构造函数 (三)析构函数特性析构函数的析构过程解析 (四)拷贝构造函数什么是拷贝构造?特性为…

H2数据库启动时,设置非“全零监听”

全零监听 全零监听(即将监听地址设置为全零地址,如IPv4中的0.0.0.0或IPv6中的::)在网络服务配置中确实存在一定的安全风险。以下是全零监听可能带来的安全风险: 1. 暴露服务到不安全网络 全网段监听:将监听地址设置…

nuitka 打包python程序成windows exe可执行文件

参考: https://www.zhihu.com/question/281858271/answer/2466245521 https://www.zhihu.com/question/281858271 https://zhuanlan.zhihu.com/p/689115995 https://blog.csdn.net/Pan_peter/article/details/136411229 下载: pydantic-2.6.1 pydantic-…

【linux高级IO(三)】初识epoll

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Linux从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多操作系统知识   🔝🔝 Linux高级IO 1. 前言2. 初识e…

微服务到底是个什么东东?

微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。 每个服务运行在其独立的进程中,服务和服务间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的…

在设计电气系统时,电气工程师需要考虑哪些关键因素?

在设计电气系统时,电气工程师需要考虑多个关键因素,以确保系统的安全性、可靠性、效率和经济性。我收集归类了一份plc学习包,对于新手而言简直不要太棒,里面包括了新手各个时期的学习方向编程教学、问题视频讲解、毕设800套和语言…

浅析stm32启动文件

浅析stm32启动文件 文章目录 浅析stm32启动文件1.什么是启动文件?2.启动文件的命名规则3.stm32芯片的命名规则 1.什么是启动文件? 我们来看gpt给出的答案: STM32的启动文件是一个关键的汇编语言源文件,它负责在微控制器上电或复位…

SpringBoot使用开发环境的application.properties

在Spring Boot项目中,application.properties 或 application.yml 文件是用于配置应用程序外部属性的重要文件。这些文件允许定制你的应用,而无需更改代码。根据不同的运行环境,可以通过创建以application-{profile}.properties格式命名的文件…

高效运转!便携式果汁机必备霍尔板

文章目录 文章目录 前言 一、 直流电机原理 二、 通过霍尔传感器控制无刷直流电机 三、 霍尔在霍尔板上的位置 前言 今天给大家带来一款运用在果汁机上的霍尔板,饮料再好,终归是饮料,果汁再好喝,也不如自己亲自榨得健康。 生活水…

『大模型笔记』什么是 AI 智能体?

『大模型笔记』什么是 AI 智能体? 文章目录 一. 什么是 AI 智能体?从单一模型向复合 AI 系统的转变示例:查询假期天数复合 AI 系统的模块化设计检索增强生成(RAG)AI 智能体的作用大语言模型智能体的组成部分推理能力行动能力访问记忆的能力ReACT 方法示例:度假计划复合 A…

dom4j 操作 xml 之按照顺序插入标签

最近学了一下 dom4j 操作 xml 文件,特此记录一下。 public class Dom4jNullTagFiller {public static void main(String[] args) throws DocumentException {SAXReader reader new SAXReader();//加载 xml 文件Document document reader.read("C:\\Users\\24…