firewalld(6)自定义services、ipset

简介

在前面的文章中我们已经介绍了zone、rich rule 、--direct等功能和基本配置。在前面文章中,我们提到过firewalld内置了很多服务,可以通过firewall-cmd --get-services来查看服务,也可以通过配置文件查看这些服务/var/lib/firewalld/services/目录下。这些都是系统内置的服务,那么我们该如何自定义属于自己的服务呢?我们有很多IP地址信息,我们如何将同一类IP地址信息整合统一设置策略进行管理?这些就是我们这篇文章所介绍的内容。

自定义services

自定义服务配置文件:通常位于/etc/firewalld/services/目录下,文件名以.xml结尾。这些文件允许用户定义自己的服务,包括其使用的端口、协议、模块(如内核模块)以及目标地址等。

系统级服务配置文件:位于/usr/lib/firewalld/services/目录下,这些文件包含预定义的服务配置,这些服务通常是众所周知的网络服务(如HTTP、SSH等)。

参考/usr/lib/firewalld/services/ssh.xml,在/usr/lib/firewalld/services/下面新建你需要的服务名以.xml结尾,内容格式参照如ssh.xml、rdp.xml等文件中的内容即可。

服务配置参数介绍

<?xml version="1.0" encoding="utf-8"?>
<service><short>My Service</short><description>description</description><port port="137" protocol="tcp"/><protocol value="igmp"/><module name="nf_conntrack_netbios_ns"/><destination ipv4="224.0.0.251" ipv6="ff02::fb"/><include service="ssdp"/><helper name="ftp"/>
</service>以上选项其中一些是必需的,其他是可选的。service:必需的开始和结束标签,定义了服务。在服务配置文件中只能使用一次该标签。服务有一些可选属性:version="string":为服务指定版本。short:可选的开始和结束标签,用于向服务提供更易读的名称。description:可选的开始和结束标签,为服务提供描述信息。port:可选的空元素标签,可以多次使用以添加多个端口条目。端口条目的所有属性都是必需的:port="string":端口字符串可以是单个端口号,端口范围(portid-portid),也可以为空以仅匹配协议。protocol="string":协议值可以是 tcp、udp、sctp 或 dccp。protocol:可选的空元素标签,可以多次使用以添加多个协议条目。一个协议条目仅有一个属性:value="string":协议可以是系统支持的任何协议。查看 /etc/protocols 获取支持的协议列表。source-port:可选的空元素标签,可以多次使用以添加多个源端口条目。源端口条目的所有属性都是必需的:port="string":端口字符串可以是单个端口号或端口范围(portid-portid)。protocol="string":协议值可以是 tcp、udp、sctp 或 dccp。module:此元素已废弃。请使用下面“helper”部分中描述的 helper。destination:可选的空元素标签,仅可使用一次。目标指定目标网络作为网络 IP 地址(可选带 /mask),或者纯粹的 IP 地址。ipv4="address[/mask]":IPv4 目标地址及可选掩码。ipv6="address[/mask]":IPv6 目标地址及可选掩码。include:include是一个可选的空元素标签,可以多次使用以包含多个服务。这允许将多个服务的配置组合在一起,而不是在每个服务中重复相同的配置。service="string":可以是 firewalld 支持的任何服务。
注意:Firewalld 只会在应用到区域时检查包含的服务是否是有效的服务。helper:helper是一个可选的空元素标签,可以多次使用以指定多个辅助程序(helper)。辅助程序是firewalld用于处理特定类型网络流量的程序,一个 helper 条目仅有一个属性,例如FTP或DHCP。name="string":可以是 firewalld 支持的任何辅助程序。

helper

在上面服务的定义中有一个参数为helper,helper 是 firewalld 防火墙服务中用于配置辅助程序(helper)的XML文件。这些辅助程序通常用于增强 firewalld 对特定网络协议或应用服务的识别和处理能力。通过配置这些辅助程序,firewalld 可以更智能地管理网络流量,比如自动跟踪和管理特定的端口和协议。

配置示例

<?xml version="1.0" encoding="utf-8"?>
<helper module="nf_conntrack_module" [family="ipv4|ipv6"]><short>short</short><description>description</description><port portid[-portid]" protocol="tcp|udp|sctp|dccp"/>
</helper>ports: 指定辅助程序需要关注的端口号或端口范围,以及这些端口所使用的协议(如TCP、UDP、SCTP、DCCP)。
family: 指定辅助程序适用的IP协议版本,可以是IPv4或IPv6。如果不指定,则辅助程序同时适用于IPv4和IPv6。
module: 指定辅助程序所使用的Netfilter连接跟踪(conntrack)模块。这些模块以nf_conntrack_开头,用于跟踪和识别网络流量。

辅助程序的配置文件可以放在两个位置之一:

  • /etc/firewalld/helpers/:这个目录下的配置文件用于自定义或覆盖系统默认的辅助程序配置。
  • /usr/lib/firewalld/helpers/:这个目录包含了firewalld默认提供的辅助程序配置。通常不建议直接修改这些文件,而是通过创建自定义配置文件来覆盖默认设置。

配置自定义服务

例如,我系统提供了一套服务,这套服务同时需要使用tcp 5000、5500、4500和udp 22000端口,且需要外部可以访问这些端口。

32760911c2894f23bcff73496c3c098a.png

在/etc/firewalld/services/目录下创建一个test1.xml服务,服务内容就是我们上面所定义的那么多端口

6c057c022a1940a4bbd8525680015c8d.png

重新加载防火墙,此时我们可以看到了刚才所创建的test1服务

d7e10efdbf264f6f893892f1c2a084d6.png

b69ba94aba7447828ec2a54d6ba9400b.png

此时我们将public应用到public zone。

4f076b69bd54445bbcb8c2c1a815b338.png

此时我们在后端的iptables中也可以看到我们刚才设置的策略

IPSET

firewalld.ipset 是指 firewalld 防火墙服务中用于配置 IP 集(ipset)的 XML 文件。IP 集是 iptables 的一个扩展,允许你将多个 IP 地址或网络组合成一个集合,然后在防火墙规则中引用这个集合,从而简化规则的管理和维护。

IP 集的配置文件可以放在两个位置之一:

  • /etc/firewalld/ipsets/:这个目录下的配置文件用于自定义 IP 集。当你需要为防火墙规则添加自定义的 IP 地址或网络集合时,应该在这个目录下创建配置文件。
  • /usr/lib/firewalld/ipsets/:这个目录包含了 firewalld 默认提供的 IP 集配置。通常不建议直接修改这些文件,因为它们是系统级的默认配置。

配置文件结构

<?xml version="1.0" encoding="utf-8"?>
<ipset type="hash:ip"><short>My Ipset</short><description>description</description><entry>1.2.3.4</entry><entry>1.2.3.5</entry><entry>1.2.3.6</entry>
</ipset>ipset:必需的开始和结束标签,定义了 ipset。在 ipset 配置文件中只能使用一次该标签。ipset 有一个必需且可选的属性:type="string":ipset 的类型是必需的。要获取支持的类型列表,使用 firewall-cmd --get-ipset-types。version="string":为 ipset 指定一个版本。short:可选的开始和结束标签,用于向 ipset 提供一个更易读的名称。description:可选的开始和结束标签,用于为 ipset 添加描述信息。entry:可选的开始和结束标签,可以多次使用以添加多个条目。一个条目条目没有属性。<option>可选:<option>是一个空元素标签,可以多次使用以设置多个选项。大多数选项的属性都是必需的:name="string":必需的,指定选项的名称。value="string":可选的,指定选项的值。支持的选项包括:family(值为"inet"或"inet6",指定IP地址族)、timeout(整数,指定超时时间)、hashsize(整数,指定哈希表的大小)、maxelem(整数,指定IP集可以包含的最大元素数量)。

配置ipset

        配置ipsec可以通过直接创建ipset配置文件或者通过命令firewall-cmd --permanent --new-ipset=来创建ipset。

firewall-cmd --get-ipset-types
hash:ip hash:ip,mark hash:ip,port hash:ip,port,ip hash:ip,port,net hash:mac hash:net hash:net,iface hash:net,net hash:net,port hash:net,port,nethash:ip
这个类型用于存储 IPv4 或 IPv6 地址。它是基于哈希表的,因此查找和插入操作都非常快。hash:ip,mark
除了存储 IPv4 或 IPv6 地址外,这个类型还允许为每个地址关联一个标记(mark)。这可以用于基于地址和标记的组合进行更复杂的规则匹配。hash:ip,port
这个类型用于存储 IP 地址和端口的组合。它允许你同时根据 IP 地址和端口号来过滤流量。hash:ip,port,ip
这个类型存储的是源 IP 地址、源端口和目标 IP 地址的组合。这可以用于更精确地控制哪些源 IP 地址和端口可以与哪些目标 IP 地址通信。hash:ip,port,net
类似于 hash:ip,port,ip,但这个类型允许目标 IP 地址是一个网络(即一个 IP 地址范围),而不仅仅是单个 IP 地址。hash:mac
这个类型用于存储 MAC 地址。它允许你根据网络接口的 MAC 地址来过滤流量,这在某些情况下(如基于物理设备的访问控制)非常有用。hash:net
这个类型用于存储 IP 网络(即 IP 地址范围)。它允许你根据 IP 地址范围来过滤流量,而不是单个 IP 地址。hash:net,iface
除了存储 IP 网络外,这个类型还允许你为每个网络关联一个网络接口名称。这可以用于基于网络接口和 IP 地址范围的组合来过滤流量。hash:net,net
这个类型允许你存储两个 IP 网络(源网络和目标网络)的组合。它可能用于定义哪些源网络可以与哪些目标网络通信。hash:net,port
类似于 hash:ip,port,但这个类型允许源或目标 IP 地址是一个网络范围,而不仅仅是单个 IP 地址。hash:net,port,net
它允许你存储源网络、源端口和目标网络的组合。这可以用于定义非常具体的流量过滤规则。

创建配置ipset

97f7aa6b585244db96bba1b012d441f8.png

创建一个名为托尔test2的ipset,类型为hash:ip

52dfe5eaf34d47c68864fb599727957a.png

我这里直接编辑test2.xml文件来配置ip地址,因为我的firewalld不支持通过firewall-cmd --permanent --ipset=myipset --add-entry=100.1.1.1  该命令来添加IP地址进入ipset

引用ipset

62d419fd064146ec9cef70deb85a93dc.png

通过rich rule来引用ipset

e9944ca1f6984083a32ebbebe3d0f331.png

此时在iptables中已经可以看到引用了ipset

总结

        自定义服务和ipset都是可以将我们自己需要的一类服务或者地址端口信息形成一个统一的整体,在复杂环境使用中可以极大的简化我们的操作方式。可以将两者结合使用形成自己独有的防火墙规则模式。

 

 

 

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

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

相关文章

【Unity 角色控制器组件】

【Unity 角色控制器组件】 Character Controller&#xff1a; Unity 内置的一个组件&#xff0c;用于提供高级的物理控制&#xff0c;允许开发者控制角色的移动、跳跃和碰撞。 csharp csharp // 假设你已经有了一个带有Character Controller组件的游戏对象// 获取Character Co…

In Ictu Oculi: Exposing AI Created Fake Videos by Detecting Eye Blinking

文章目录 In Ictu Oculi: Exposing AI Created Fake Videos by Detecting Eye Blinking背景关键点内容预处理Long-Term Recurrent CNNsLSTM-RNN模型训练实验data启示In Ictu Oculi: Exposing AI Created Fake Videos by Detecting Eye Blinking 会议:2018 IEEE International…

容嬷嬷给紫薇过生日:鬼畜搭台,AI带货

刚入7月&#xff0c;短视频平台已被AI视频续写占领。 类似于紫薇在地牢里被容嬷嬷喂西瓜、喂鸡翅、喂蛋糕。张学友在《旺角卡门》的经典镜头突然给你微笑、嘟嘴、甚至祝你生日快乐。甚至&#xff0c;还有吴京从打斗戏变成亲吻戏。 在AI续写的短视频里&#xff0c;你永远也想象…

【最新综述】医学图像分割深度半监督学习(上)

摘要&#xff1a; 最近&#xff0c;深度学习在各种计算机视觉任务中展现出了巨大的前景。然而&#xff0c;在许多实际应用中&#xff0c;没有大规模的标记数据集&#xff0c;这限制了深度学习的应用。为了解决这个问题&#xff0c;半监督学习引起了计算机视觉界的广泛关注&…

二叉树的前中后序遍历(递归法、迭代法)leetcode144、94/145

leetcode144、二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a; 输…

CesiumJS【Basic】- #057 绘制纹理填充多边形(Primitive方式)

文章目录 绘制纹理填充多边形(Primitive方式)1 目标2 代码2.1 main.ts绘制纹理填充多边形(Primitive方式) 1 目标 使用Primitive方式绘制绘制纹理填充多边形 2 代码 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium.Viewer

测试Andrew NG的语言翻译Agent

我正在测试 Andrew Ng 的语言翻译 A​​I 代理系统及其在逆变换下的稳定性。 给定源语言的文本&#xff0c;我们应用翻译函数 f&#xff0c;然后应用 f 的逆。它应该是不变的&#xff1a; 但是&#xff0c;数学与语言翻译有什么关系&#xff1f; 在完美的系统中&#xff0c;从…

springboot异常产生原因

DataIntegrityViolationException Cause: java.sql.SQLException: Field ‘id’ doesn’t have a default value org.springframework.dao.DataIntegrityViolationException: ### Error updating database. Cause: java.sql.SQLException: Field id doesnt have a default …

[译]全栈Redux实战

本文乱译自一篇英文博文&#xff08;Full-Stack Redux Tutorial&#xff09;&#xff0c;本人英语能力不足&#xff0c;技术能力有限&#xff0c;如有错误&#xff0c;多多包涵。 #关于ReduxReactImmutable的测试先行开发综合指南 Redux是最近发生在js界令人兴奋的事儿。它把…

提升Unity WebGL游戏启动速度

一、查看启动耗时 通过修改unity-namespace.js中hideTimeLogModal为false&#xff0c;显示timelog开发者可以看到小游戏目前的启动首屏时长&#xff1a; 将其设置为false后&#xff0c;启动小程序后就会显示启动耗时 要知道各个阶段的含义&#xff0c;我们必要理解启动流程。 …

springboot 整合 mybatis-plus

一.前言 1. mybatis-plus是什么 mybatis-plus是一个对mybati框架的拓展框架&#xff0c;它在mybatis框架基础上做了许多的增强&#xff0c;帮助我们快速的进行代码开发。目前企业开发中&#xff0c;使用mybati的项目基本会选择使用mybatis-plus来提升开发效率。 2.官网地址&…

LT8668SXC 、LT8668SX-D 、LT8668SX三种芯片的相似与不同

一、LT8668SXC(支持eDP输出&#xff09; 定义:LT8668SXC配置在HDMI2.1标准下工作&#xff0c;最大数据速率为8Gbps。 LT8668SXC还可以配置为在Type-C输入或DP1.4a下工作&#xff0c;数据速率高达8.1Gbps。 eDP1.4b输出由8个数据通道组成&#xff0c;支持RBR (1.62Gbps)、HBR (2…

比较多种msvcr110.dll丢失的解决方法,哪一种更加方便?

当遇到“msvcr110.dll丢失”这种问题时&#xff0c;这通常意味着你的系统中缺少了Microsoft Visual C 2012 Redistributable的组件。下面我将详细介绍五种解决方法&#xff0c;并对比它们的优点。 一.多种msvcr110.dll丢失的解决方法 方法 1: 重新安装Microsoft Visual C 2012…

Redis持久化的三种方式(RDB、AOF和混合)

Redis持久化的三种方式(RDB、AOF和混合) 目录 Redis持久化的三种方式(RDB、AOF和混合)介绍RDB示例1.配置文件2.触发 RDB 快照保存3.验证 AOF示例1.配置文件2.校验 混合型持久化存储配置文件 介绍 Redis数据主要存储与内存中&#xff0c;因此如果服务器意外重启、宕机、崩溃&am…

乘积最大子数组

代码实现&#xff1a; 方法一&#xff1a;暴力法 方法二&#xff1a;动态规划 int maxProduct(int *nums, int numsSize) {long imax nums[0], imin nums[0], res nums[0];for (int i 1; i < numsSize; i) {if (nums[i] < 0) {int temp imax;imax imin;imin temp;…

学会python——用python编写一个电子时钟(python实例十七)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.电子时钟程序 3.1 代码构思 3.2代码实例 3.3运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性…

今天的A股,让人惊愕了,2个耐人寻味的重要信号,有望迎来下一个超级风口!

今天的A股&#xff0c;让人惊愕了&#xff0c;你知道是为什么吗&#xff1f;盘面上出现2个耐人寻味的重要信号&#xff0c;有望迎来下一个超级风口&#xff01; 1、今天两市低开低走&#xff0c;但大消费劲头十足&#xff0c;连中免这样的大体量都涨停了&#xff0c;另外消费茅…

爬虫-网页基础

HTML 基本语法 HTML&#xff1a;Hyper Text Markup Language, 超文本标记语言&#xff0c;是计算机语言的一种&#xff0c;由元素构成。 p元素 <p>Web 真好玩&#xff01;</p> 由三大部分组成 开始标签&#xff1a;一对尖括号中间包裹这元素名称元素内容&#x…

SaaS运营:如何根据“客户漏斗”定制合作伙伴营销策略?

将你的合作伙伴营销策略与你的客户漏斗模型相结合&#xff0c;可以显著提升你的营销效果。通过瞄准客户旅程中的每一个阶段&#xff0c;你可以增加客户参与度并推动转化&#xff0c;从而将你的促销活动提升到新的高度——这仅仅是一个以数据为支撑的方法。 为了探讨如何在漏斗…

数据结构 - C/C++ - 树

公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 树的概念 结构特性 树的样式 树的存储 树的遍历 节点增删 二叉搜索树 平衡二叉树 树的概念 二叉树是树形结构&#xff0c;是一种非线性结构。 非线性结构&#xff1a;在二叉树中&#x…