nftables(7)集合(SETS)

news2024/9/21 16:27:34

简介

 在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地址等,以便在规则中引用。集合的使用可以极大地简化防火墙规则的配置,提高管理效率。通过合理使用集合,可以简化规则配置、提高管理效率,并增强防火墙的灵活性。

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

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

相关文章

捷配总结的SMT工厂安全防静电规则

SMT工厂须熟记的安全防静电规则! 安全对于我们非常重要,特别是我们这种SMT加工厂,通常我们所讲的安全是指人身安全。 但这里我们须树立一个较为全面的安全常识就是在强调人身安全的同时亦必须注意设备、产品的安全。 电气: 怎样预…

【顺序表】算法题 --- 力扣

一、移除元素 移除元素 这个题让我们移除数组nums中值为val的元素,最后返回k(不是val的元素个数) 这样显然我们就不能再创建一个数组来解决这个问题了,只能另辟蹊径 思路:双指针 这里定义两个指针(l1&…

【Python】连接MySQL数据库:详细教程与示例代码

文章目录 1. 安装必要的库2. 建立与MySQL的连接3. 执行SQL查询4. 插入数据5. 更新数据6. 删除数据7. 错误处理8. 小结 在数据驱动的开发中,连接数据库是一个至关重要的技能。Python作为一门强大的编程语言,提供了多种方式连接并操作MySQL数据库。本文将详…

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-…

通讯的概念

通讯的概念 文章目录 通讯的概念1.通讯的基本概念2. 串行通讯与并行通讯2. 全双工、半双工及单工通讯3. 同步通讯与异步通讯4. 通讯速率 1.通讯的基本概念 通讯是指在嵌入式系统中实现数据交换的技术手段,它涉及到硬件与硬件、硬件与软件之间的信息传输。基本概念包…

OneForAll工具:安装指南、使用方法及常见问题解决(超全)

引言 在网络安全领域,子域名收集是信息收集过程中非常重要的一步。OneForAll 是一款功能强大的子域名收集工具,能够帮助我们高效地进行子域名收集。本文将详细介绍 OneForAll 的安装和使用方法,并解决在使用过程中可能遇到的问题。 1. OneFo…

手机找回删除的通讯录号码,2个方法,让你不再烦恼

在数字化的浪潮中,我们的手机通讯录如同一张张精心编织的社会网络图谱,每一串数字背后都蕴藏着一段故事或一个重要的联系。然而,生活总会面临小插曲,总有些时候会不慎将通讯录遗失。不用过多担心,本文将会提供一些方法…

Facebook:数字时代的社交瑰宝

在当今数字化飞速发展的时代,社交媒体已经成为人们日常生活中不可或缺的一部分,而Facebook作为其中的领军者,不仅连接了全球数十亿的用户,更深刻地改变了人们的社交方式和生活方式。本文将探讨Facebook如何成为数字时代的社交瑰宝…

Early Convolutions Help Transformers See Better(NeurIPS 2021, Meta)

paper:Early Convolutions Help Transformers See Better 出发点 本文的出发点是解决 ViT 模型在优化性方面的问题。作者假设问题主要出现在 ViT 的早期视觉处理部分,即 "patchify" 过程,这是通过一个大的步幅和大核卷积来实现的…

Linux入门攻坚——28、php、mysql基础

httpdphp:是在httpd中启用模块,不同的工作模式,使用的模块不同 modules httpd:prefork --> libphp5.so httpd:event or worker --> libphp5-zts.so php:引入zend engine后,分为…

算法实验3:贪心算法的应用

实验内容 &#xff08;1&#xff09;活动安排问题 设有n个活动的集合E{1, 2, …, n}&#xff0c;其中每个活动都要求使用同一资源&#xff0c;而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi&#xff0c;且si <f…

# Redis 入门到精通(五)-- redis 持久化(3)

Redis 入门到精通&#xff08;五&#xff09;-- redis 持久化&#xff08;3&#xff09; 一、redis 持久化–AOF 自动重写配置 1、AOF 自动重写方式–自动重写触发条件设置 auto-aof-rewrite-min-size size auto-aof-rewrite-percentage percent2、AOF 自动重写方式-- 自动重…

如何在Orcale首页定位到The Java® Virtual Machine Specification页面?

目标地址&#xff1a;https://docs.oracle.com/javase/specs/jls/se8/html/index.html 1. 在Orcale首页菜单栏中选择 Resources ⇒ Java Downloads 2. 往下滑&#xff0c;找到 Online Documentation 选项&#xff0c;点进去 3. 点击 Specifications 下的 Language VM 选项 5…

USB3.0接口——(5)Host数据传输模型

USB3.0接口系列&#xff1a; USB3.0接口——&#xff08;1&#xff09;基础知识 USB3.0接口——&#xff08;2&#xff09;数据结构 USB3.0接口——&#xff08;3&#xff09;协议层&#xff08;包格式&#xff09; USB3.0接口——&#xff08;4&#xff09;生产消费者模型…

IOC、DI<5> Unity、AOP

Unity.InterceptionExtension.ICallHandler实现一个操作日志记录功能 其它跟上一次一样 <?xml version"1.0" encoding"utf-8" ?> <configuration><configSections><section name"unity" type"Microsoft.Practice…

【Harmony】SCU暑期实训鸿蒙开发学习日记Day1

关于ArkTS和ArkUI&#xff0c;基础语法请看&#x1f449;官方开发手册 系统学习后&#xff0c;聊聊几个点&#xff0c;面向刚学习这门语言的小白&#xff0c;用于巩固和回顾&#x1f60b; 目录 类型推断应用 函数相关 布局方式 线性布局 堆叠布局 网格布局 弹性布局 …

C#进阶-基于.NET Framework 4.x框架实现ASP.NET WebForms项目IP拦截器

在这篇文章中&#xff0c;我们将探讨如何在 ASP.NET WebForms 中实现IP拦截器&#xff0c;以便在 ASMX Web 服务方法 和 HTTP 请求 中根据IP地址进行访问控制。我们将使用自定义的 SoapExtension 和 IHttpModule 来实现这一功能&#xff0c;并根据常用的两种文本传输协议&#…

jmeter之变量随机参数化以及解决多线程不会随机变化

参考链接&#xff1a; https://www.cnblogs.com/Testing1105/p/12743475.html jmeter 使用random函数多线程运行时数据不会随机变化&#xff1f;_jmeter 线程组循环执行时 变量不变-CSDN博客 1、如下图所示&#xff0c;需要对请求参数 autor 和phone进行随机参数化 2、目前有…

2024大模型十大趋势

2024大模型十大趋势 关键要点一、机器外脑时代的智慧探索二、机器外脑、创意生成和情感陪伴三、大模型驱动的新未来&#xff1a;AI带来创意转化与机遇四、人物-行为-场景一体化&#xff1a;未来人工智能的新范式五、未来数字内容生产的基础设施六、共创、共建、共享智能美好未来…

Linux - 冯-诺依曼体系结构、初始操作系统

目录 冯•诺依曼体系 结构推导 内存提高效率的方法 数据的流动过程 体系结构相关知识 初始操作系统 定位 设计目的 操作系统之上之下分别有什么 管理精髓&#xff1a;先描述&#xff0c;再组织 冯•诺依曼体系 结构推导 计算机基本工作流程图大致如下&#xff1a; 输入设备&a…