firewalld(6)自定义services、ipset

news2024/12/23 16:38:11

简介

在前面的文章中我们已经介绍了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,net

hash: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.coloradmin.cn/o/1888309.html

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

相关文章

短视频电商源码的优势及软件架构解析

短视频电商源码是目前电商行业中非常火热的一个新兴领域&#xff0c;它通过短视频内容和电商商品的结合&#xff0c;为用户提供了一种新的购物体验。下面将介绍短视频电商源码的优势以及软件架构。 首先&#xff0c;短视频电商源码具有以下几个优势&#xff1a; 1、创新的购物体…

WGAN(Wassertein GAN)

WGAN E x ∼ P g [ log ⁡ ( 1 − D ( x ) ) ] E x ∼ P g [ − log ⁡ D ( x ) ] \begin{aligned} & \mathbb{E}_{x \sim P_g}[\log (1-D(x))] \\ & \mathbb{E}_{x \sim P_g}[-\log D(x)] \end{aligned} ​Ex∼Pg​​[log(1−D(x))]Ex∼Pg​​[−logD(x)]​ 原始 GAN …

项目范围管理(信息系统项目管理师)

收集需求的输出是需求文件、需求跟踪矩阵定义范围是制定项目和产品详细描述的过程。本过程的主要作用是描述产品、服务或成果的边界和验收标准。本过程需要在整个项目期间多次反复开展项目范围说明书&#xff1a;是对项目范围、主要可交付成果、假设条件和制约因素的描述。明确…

思维导图插件--jsMind的使用

vue引入jsmind&#xff08;右键菜单&#xff09;_jsmind.menu.js-CSDN博客 第一版 vue-JsMind思维导图实现&#xff08;包含鼠标右键自定义菜单&#xff09;_jsmind 右键菜单-CSDN博客 // 新增节点addNode() {console.log(this.get_selected_nodeid());this.get_selected_…

Jenkins 创建流水线任务

Jenkins是一个流行的持续集成&#xff08;Continuous Integration&#xff0c;CI&#xff09;工具。 Jenkins 创建任务 选择“流水线”类型&#xff0c;该类型的优点是定制化程度非常高 &#xff08;可选&#xff09;添加“参数化构建” 配置仓库选项(ssh连接、分支)和凭据…

Element-UI - el-table中自定义图片悬浮弹框 - 位置优化

该篇为前一篇“Element-UI - 解决el-table中图片悬浮被遮挡问题”的优化升级部分&#xff0c;解决当图片位于页面底部时&#xff0c;显示不全问题优化。 Vue.directive钩子函数已在上一篇中详细介绍&#xff0c;不清楚的朋友可以翻看上一篇&#xff0c; “Element-UI - 解决el-…

【Python】字典练习

python期考练习 目录 1. 首都名​编辑 2. 摩斯电码 3. 登录 4. 学生的姓名和年龄​编辑 5. 电商 6. 学生基本信息 7. 字母数 1. 首都名 初始字典 (可复制) : d{"China":"Beijing","America":"Washington","Norway":…

企业如何管理安全生产工作?(附模板)

总结一下在企业内管理安全中遇到的一些问题&#xff1a; 1、 管理方式落后&#xff0c;还在使用纸质记录 2、 人员信息杂乱无章&#xff0c;无人整理 3、出现问题找不到源头和负责人 我做系统管理已经7年了&#xff0c;题主说的这些问题我之前也遇到过&#xff0c;相信也有…

Java学习高级一

修饰符 static 类变量的应用场景 成员方法的分类 成员变量的执行原理 成员方法的执行原理 Java之 main 方法 类方法的常见应用场景 代码块 设计模式 单例设计模式 饿汉式单例设计模式 懒汉式单例设计模式 继承 权限修饰符

【MindSpore学习打卡】应用实践-计算机视觉-FCN图像语义分割-基于MindSpore实现FCN-8s进行图像语义分割的教程

图像语义分割是计算机视觉领域中的一个重要任务&#xff0c;它旨在对图像中的每个像素进行分类&#xff0c;从而实现对图像内容的详细理解。在众多图像语义分割算法中&#xff0c;全卷积网络&#xff08;Fully Convolutional Networks, FCN&#xff09;因其端到端的训练方式和高…

Git使用中遇到的问题(随时更新)

问题1.先创建本地库&#xff0c;后拉取远程仓库时上传失败的问题怎么解决&#xff1f; 操作主要步骤&#xff1a; step1 设置远程仓库地址: $ git remote add origin gitgitee.com:yourAccount/reponamexxx.git step2 推送到远程仓库: $ git push -u origin "master&qu…

API接口测试/Swgger-ui未授权访问

目录 API接口 接口文档 接口测试的方法 单流程 多流程 Swgger-ui未授权访问 在之间的一次面试中面试官问到了API接口测试&#xff0c;我回答的不好&#xff0c;因为自己确实不太会&#xff0c;后面才下去学习了&#xff0c;这里复习和练习一下 API接口 API&#xff08;…

DevOps:开发与运维的无缝融合

目录 前言1. DevOps的起源与概念1.1 DevOps的起源1.2 DevOps的定义 2. DevOps的核心实践2.1 持续集成2.2 持续交付2.3 自动化 3. DevOps工具链3.1 版本控制系统3.2 持续集成工具3.3 配置管理工具3.4 容器化与编排工具3.5 监控和日志工具 4. DevOps的实际应用4.1 案例分析&#…

【技巧分享】对接多平台:高效接入淘宝、抖音、京东、拼多多等电商平台API的实战策略

当电商商家想要自研电商管理系统&#xff0c;或是线下ERP厂商想要开发电商业务管理功能&#xff0c;需要对接电商平台API&#xff0c;但电商平台众多&#xff0c;各类平台API接口也需要花费大量的时间和精力去对接&#xff0c;如何快速接入多个电商平台API呢&#xff1f;点三来…

FormMaking表单设计器V3.8发布,数据表格上线,支持多选、多级表头、列模板自定义、操作列、分页等设置

介绍 FormMaking 是基于Vue的可视化表单设计器&#xff0c;赋能企业实现可视化低代码开发模式&#xff1b;帮助开发者从传统枯燥的表单代码中解放出来&#xff0c;更多关注业务&#xff0c;快速提高效率&#xff0c;节省研发成本。 目前已经在OA系统、考试系统、报表系统、流程…

docker push 推送镜像到阿里云仓库

1.登陆阿里云 镜像服务&#xff0c;跟着指引操作就行 创建个人实例&#xff0c;创建命名空间、镜像仓库&#xff0c;绑定代码源头 2.将镜像推送到Registry $ docker login --username*** registry.cn-beijing.aliyuncs.com $ docker tag [ImageId] registry.cn-beijing.aliy…

AI商品图生成定制技术公司

AI绘画模型训练、定制服务公司案例分析— 触站AI&#xff0c;塑造智能设计新纪元 第一&#xff1a;触站AI的创新之路 触站AI的崛起标志着AI技术在艺术与设计领域应用的一个新高度。作为一家专注于企业AI图像领域的技术解决方案服务公司&#xff0c;触站AI以其前沿的技术和定制…

数字化精益生产系统--SRM供应商关系管理

SRM供应商关系管理&#xff0c;全称为Supplier Relationship Management&#xff08;供应商关系管理&#xff09;系统&#xff0c;是一种专门用于管理采购供应链和供应商关系的软件系统。该系统通过集成各个环节的采购活动&#xff0c;帮助企业实现采购流程的自动化、标准化和优…

AI智能体|AI打工我躺平!使用扣子Coze智能体自动生成和发布文章到微信公众号(一)

大家好&#xff0c;我是无界生长&#xff0c;国内最大AI付费社群“AI破局俱乐部”初创合伙人。这是我的第 44 篇原创文章——《AI智能体&#xff5c;AI打工我躺平&#xff01;使用扣子Coze智能体自动生成和发布文章到微信公众号&#xff08;一&#xff09;》 AI智能体&#xf…

课程设计——基于FPGA的双向移位寄存器

基于FPGA的双向移位寄存器 摘 要 本文使用verilog HDL语言设计双向移位寄存器&#xff0c;使电路受外部信号控制&#xff0c;实现数字信号的双向移位等功能&#xff0c;其电路设计模块主要分为三个部分&#xff0c;分别为接受判断控制信号的组合逻辑电路部分、实现存储、运算…