欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CentOS7 Firewalld笔记

程序员文章站 2024-03-09 12:04:41
...

初识firewalld

Firewalld是一种防火墙管理解决方案,充当Linux内核提供的iptables包过滤系统的前端。centos7版本对防火墙进行加强,不再使用原来的iptables命令进行管理,启用firewalld管理防火墙规则。

  • firewalld管理防火墙规则的模式(动态)的好处: iptables每一个更改都需要先清除所有旧有的规则,然后重新加载所有的规则;而firewalld任何规则的变更都不需要对整个防火墙规则重新加载,只需要将变更部分保存并更新到运行中的iptables即可。
  • firewalld默认出口是全放开的。
  • firewall daemon无法解析由iptables(针对IP层)和ebtables(针对数据链路层)命令行工具添加的防火墙规则。
  • firewalld有命令行和图形界面配置工具,它仅仅是替代了iptables service部分,其底层还是使用iptables作为防火墙规则管理入口。
  • firewalld和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter。

安装

CentOS7默认已自带,如需要自行安装,可直接用yum安装。

yum -y install firewalld
yum -y install firewall-config #图形界面使用

注意: firewalld跟iptables不能同时使用,所以在使用firewalld之前首先需要将iptables停用。

相关文件

  • firewalld配置文件**/etc/firewalld/**
    • /etc/firewalld/firewalld.conf 主配置文件,只有五个配置项
      • DefaultZone:默认使用的zone;
      • MinimalMark:使用标记mark的数量限制;
      • CleanuupOnExit:退出后是否清除防火墙规则;
      • Lockdown:是否限制别的程序通过D-BUS接口直接操作firewalld;
      • IPv6_rpfilter:判断所接受到的包是否是伪造的
    • /etc/firewalld/zones: 保存zone配置文件,可在文件中直接改动,改完后需要进行重启服务。
    • /etc/firewalld/services: 保存service配置文件,默认为空。
    • /etc/firewalld/icmptypes: 保存和icmp类型相关的配置文件,默认为空。
  • 模板配置文件在/usr/lib/firewalld/service/和/usr/lib/firewalld/zones/,注意这只是模块,与更改后的配置不一定相同。
  • firewall-config是图形化工具
  • firewall-cmd是命令行工具

基础概念

zone的概念

zone区域: 区域基本上是一组规则,规定应允许哪些流量,具体取决于您在计算机所连接的网络中的信任级别。为网络接口分配一个区域,以指示防火墙应允许的行为。在某一个Zone里,具体定义了service、prots、protocols、masquerading、port/packet forwarding、icmp filters和rich rules等细节。

简单来说,Zone是防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。这对于可能经常在网络之间移动的计算机(如笔记本电脑),这种灵活性提供了一种根据您的环境更改规则的好方法,例如在公共WiFi网络上运行时,您可能有严格的规则禁止大多数流量,而连接到家庭网络时允许更宽松的限制。对于服务器,这些区域不是那么重要,因为网络环境很少发生变化。

默认有9个Zone包括,其中默认的Zone是public:

  • drop(丢弃):最低级别的信任。删除所有传入连接而不进行回复,只能进行传出连接。

  • block(限制):与上面类似,但不是简单地删除连接,而是使用icmp-host-prohibited或icmp6-adm-prohibited消息拒绝传入的请求。

  • public(公共):代表公共的,不受信任的网络。您不信任其他计算机,但可能会根据具体情况允许选定的传入连接。

  • external(外部):如果您使用防火墙作为网关,则为外部网络。它配置为NAT伪装,以便您的内部网络保持私有但可访问。

  • internal(内部):外部区域的另一侧,用于网关的内部部分。计算机相当值得信赖,并提供一些额外的服务。

  • dmz(非军事区):用于位于DMZ中的计算机(无法访问网络其余部分的独立计算机)。仅允许某些传入连接。

  • work(工作):使用在公司环境,信任网络中的大多数计算机,可能会允许更多服务。

  • home(家庭):使用在家庭环境,它通常意味着您信任大多数其他计算机,并且将接受更多服务。

  • trusted(信任):信任网络中的所有计算机。最开放的可用选项,应谨慎使用。

    说明: 要使用防火墙,我们可以创建规则并更改区域的属性,然后将网络接口分配给最合适的区域。

查看Zone的模板文件:

[[email protected] ~]# cat /usr/lib/firewalld/zones/public.xml 
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
</zone>
[[email protected] ~]# 

zone的优先级

对于一个接受到的请求具体使用哪个zone,firewalld是通过三种方法来判断的:

  1. source,也就是源地址,相同的source节点只可以在一个zone中进行配置
  2. interface,接收请求的网卡
  3. firewalld.conf中配置的默认zone

这三个的优先级按顺序依次降低,也就是说如果按照source可以找到就不会再按interface去查找,如果前两个都找不到才会使用第三个。

interface接口

Interfaces (接口)是系统中的硬件和虚拟的网络适配器的名字。所有的活动的接口都将被分配到区域,要么是默认的区域,要么是用户指定的一个区域。但是,一个接口不能被分配给多于一个的区域。

除非您已经配置了网络接口,否则在引导防火墙时,每个接口都将被置于默认区域中。

在缺省配置中,firewalld 设置所有接口为 public 区域,并且不对任何区域设置源。其结果是,public 区域是唯一的活动区域。

source源

Sources (源)是入站 IP 地址的范围,它也可以被分配到区域。一个源(或重叠的源)不能被分配到多个区域。这样做的结果是产生一个未定义的行为,因为不清楚应该将哪些规则应用于该源。

因为指定一个源不是必需的,任何包都可以通过接口匹配而归属于一个区域,而不需要通过源匹配来归属一个区域。Firewalld通过使用优先级方式,优先到达多个指定的源区域,

常用命令

firewalld服务维护

systemctl start firewalld               #启动
systemctl status firewalld              #查状态
systemctl stop firewalld                #停止
systemctl enable firewalld              #设置开机时启用服务
systemctl disable firewalld             #设置开机时禁用服务
systemctl is-enabled firewalld          #查看服务是否开机启动
systemctl list-unit-files|grep enabled  #查看已启动的服务列表
systemctl --failed                      #查看启动失败的服务列表
firewall-cmd --version                  #查看版本
firewall-cmd --help                     #查看帮助
firewall-cmd --state                    #查看防火墙状态

firewalld临时或永久修改配置

下面的的临时修改将在下次重新加载时被覆盖:

firewall-cmd <some modification>

以下的改变在重加载后会永久保存:

firewall-cmd --permanent <some modification> #--permanent 存储到配置文件中,但不会立即生效
firewall-cmd --reload                   #更新防火墙规则
firewall-cmd --complete-reload          #重新加载防火墙,中断用户的连接

注意: 查询的命令中,不加–permanent选项时,只列出已生效的设置项。如果需要列出永久配置的设置项(不管是否生效),需要加上–permanent选项。

查看firewalld的信息

#整体的信息
firewall-cmd --get-zones                     #查看所有区域
firewall-cmd --get-services                  #查看当前区域支持的所有服务
firewall-cmd --get-icmptypes                 #查看支持的所有ICMP类型
#当前区域信息
firewall-cmd --list-all                      #查看此区域内的所有配置,类似与iptables -L -n
firewall-cmd --list-services                 #查看当前区域已启动的服务列表
firewall-cmd --list-rich-rules               #查看rich规则列表
firewall-cmd --query-masquerade              #查询SNAT的状态, yes/no
firewall-cmd --query-interface=ens33         #确定该网卡接口是否存在于此区域, yes/no

管理Zone

绑定Source和interface

##Source绑定
firewall-cmd --add-source=192.168.10.1/24 --zone=drop  #作用在指定区域
firewall-cmd --add-source=192.168.1.13  			#作用在默认区域
firewall-cmd --remove-source=192.168.1.13  			#取消源IP为192.168.1.12的包作用在drop区域
firewall-cmd --get-zone-of-source=192.168.10.1/24   #反向查询source所属的zone(不能网段里的单个ip查)
firewall-cmd --list-sources --zone=drop             #用于列出指定zone的所有绑定的source地址
firewall-cmd --get-active-zones                     #查看active zone信息
##Interface绑定
firewall-cmd --change-interface=ens33 [--zone=zone] #设置zone绑定的网卡,同时会使该zone**
firewall-cmd --zone=drop -add-interface=ens33   #作用在指定区域,和上面类似
firewall-cmd --add-interface=ens33   			#作用在默认区域
firewall-cmd --remove-interface=ens33  			#禁止ens33网卡作用在drop区域
firewall-cmd --get-zone-of-interface=interface  #反向查询interface所属的zone
##综合查询状态
firewall-cmd --get-active-zones                 #查看当前起作用的zone
firewall-cmd --list-all                         #查看此区域内的所有配置

注意:

  • 除非您已经配置了网络接口,否则在引导防火墙时,每个接口都将被置于默认区域中。
  • 对于双网卡,可能通过绑定到不同区域,使内网网卡不受防火墙限制,例如外网卡在public而内网卡在trusted区域。
  • 对于永久绑定网卡到Zone,有两个可以配置的位置:zone所对应的xml配置文件,或者网卡配置文件(也就是ifcfg-*文件)
    ifcfg-*文件加上如下配置,相当于firewall-cmd --zone=public --change-interface=ens33
ZONE=public

或使用nm-connection-editor工具:

nmcli connection modify conn_name connection.zone zone_name

切换区域

通过firewalld.conf配置文件的DefaultZone配置项来配置的,也可以使用firewall-cmd命令来配置

firewall-cmd --zone=public --change-interface=ens33  #把网卡切换到另一个Zone
firewall-cmd --get-zones                             #查看所有区域
firewall-cmd --get-active-zones                      #查看当前正在使用的区域及绑定的interface
firewall-cmd --get-default-zone                      #查看当前的默认区域
firewall-cmd --set-default-zone=home		         #设置默认区域

target

zone规则中首先最重要的是target的设置,target主要用于接受,拒绝或丢弃与任何规则不匹配的每个数据包,即该区域对每个数据包匹配不到的规则时的默认行为。
在xml文件中target是zone节点的一个属性,有四个取值: default、ACCEPT、%%REJECT%%、DROP。

firewall-cmd --permanent [--zone=zone] --get-target #获取该Zone的target值
firewall-cmd --permanent [--zone=zone] --set-target=<target> #设置该Zone的target值
firewall-cmd --reload                   #更新防火墙规则

panic模式

firewall-cmd --list-ports --zone=public #查看public区域所有打开的端口
firewall-cmd --panic-on                 #紧急模式,强制关闭所有网络连接
firewall-cmd --panic-off                #关闭紧急模式
firewall-cmd --query-panic              #查看是否在紧急模式

管理规则

端口或服务规则

iptables使用端口号来匹配规则,需要记住端口与服务的对应关系,当某一个服务的端口号改变了,同时要更改对应的iptable的规则,配置比较麻烦也不方便阅读理解。而使用服务则大大简化了配置。
服务的定义在/usr/lib/firewalld/services/***意修改模板文件并加载后就改变该服务的规则。模板如下例:

[[email protected] ~]# cat /usr/lib/firewalld/services/ssh.xml 
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="22"/>
</service>
[[email protected] ~]# 

service相应的配置命令:

firewall-cmd --get-services                 #列出所有services
firewall-cmd [--zone=zone] --list-services  #列出该Zone当前加载的service
firewall-cmd [--permanent] [--zone=zone] --add-service=service [--timeout=seconds]
firewall-cmd [--permanent] [--zone=zone] --remove-service=service
firewall-cmd [--permanent] [--zone=zone] --query-service=service

注意: --add-service中的–timeout的含义是这样的:添加一个服务,但是不是一直生效而是生效一段时间,过期之后自动删除。
另外,使用port可以不通过service而直接对端口进行设置

firewall-cmd [--permanent] [--zone=zone] --list-ports
firewall-cmd [--permanent] [--zone=zone] --add-port=portid[-portid]/protocol [--timeout=seconds]
firewall-cmd [--permanent] [--zone=zone] --remove-port=portid[-portid]/protocol
firewall-cmd [--permanent] [--zone=zone] --query-port=portid[-portid]/protocol

添加端口或服务规则

##服务
firewall-cmd --zone=public --add-service=https        #在区域开放https服务
firewall-cmd --zone=public --remove-service=https     #取消开放https服务,即禁止https服务
firewall-cmd --zone=public --query-service=https		#查询区域是否允许https服务的流量
##端口(本次)
firewall-cmd --zone=public --add-port=22/tcp          #开放22端口
firewall-cmd --zone=public --remove-port=22/tcp       #取消开放22端口
firewall-cmd --zone=public --add-port=8080-8081/tcp   #开放8080和8081端口
firewall-cmd --zone=public --list-ports               #查询区域开放了哪些端口
##端口(永久)
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload  # 重新加载后才能生效
firewall-cmd --zone=public --query-port=3306/tcp
firewall-cmd --zone=public --query-port=8080/tcp
##协议
firewall-cmd --zone=public --add-protocol=icmp        #允许icmp协议流量,即允许ping
firewall-cmd --zone=public --remove-protocol=icmp     #取消允许icmp协议的流量,即禁ping
firewall-cmd --zone=public --list-protocols           #查询区域开放了哪些协议
##查询状态
firewall-cmd --get-active-zones                       #查看当前起作用的zone
firewall-cmd --list-all                               #查看此区域内的所有配置,类似与iptables -L -n

端口转发forward-port

进行端口转发的,比如我们要将在80~82端口接收到tcp请求转发到本机8080端口可以使用下面的命令

firewall-cmd --add-forward-port=port=80-82:proto=tcp:toport=8080

相应的配置命令:

firewall-cmd [--permanent] [--zone=zone] --list-forward-ports
firewall-cmd [--permanent] [--zone=zone] --add-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]][--timeout=seconds]
firewall-cmd [--permanent] [--zone=zone] --remove-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]]
firewall-cmd [--permanent] [--zone=zone] --query-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]]

例子:

#将原本访问本机888端口的流量转发到本机22端口
firewall-cmd --zone=public --add-forward-port=port=888:proto=tcp:toport=22
#将原本访问本机888端口的流量转发到ip为192.168.2.208的主机的22端口,需要开启masquerade
firewall-cmd --zone=public --add-masquerade
firewall-cmd --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.2.208

伪装masquerade(SNAT)

ip地址伪装,也就是NAT转发中的一种,具体处理方式是将接收到的请求的源地址设置为转发请 求网卡的地址

firewall-cmd [--permanent] [--zone=zone] --add-masquerade [--timeout=seconds]
firewall-cmd [--permanent] [--zone=zone] --remove-masquerade
firewall-cmd [--permanent] [--zone=zone] --query-masquerade

例子:

##将来自局域网192.168.2.0/24网段访问外网的流量映射为网络出口公网IP,即修改源IP地址
firewall-cmd --zone=work --add-masquerade
firewall-cmd --zone=work --add-rich-rule="rule family=ipv4 source address=192.168.2.0/24 masquerade"
firewall-cmd --zone=work --query-masquerade 

报文阻塞icmp-block

icmp-block是按照icmp的类型进行设置阻塞,比如我们不想接受ping报文就可以使用下面的命令来设置

firewall-cmd --add-icmp-block=echo-request

相应的配置命令:

firewall-cmd [--permanent] [--zone=zone] --list-icmp-blocks
firewall-cmd [--permanent] [--zone=zone] --add-icmp-block=icmptype [--timeout=seconds]
firewall-cmd [--permanent] [--zone=zone] --remove-icmp-block=icmptype
firewall-cmd [--permanent] [--zone=zone] --query-icmp-block=icmptype

专家模式direct rules

对于熟悉iptables的专家,firewalld 提供了一个直接direct接口,通过 firewall-cmd 工具,可以使用 --direct 选项在运行时间里传递原始 iptables 命令。
如果不熟悉 iptables ,使用直接接口非常危险,因为您可能无意间导致防火墙被入侵。直接端口模式适用于服务或者程序,以便在运行时间内增加特定的防火墙规则。直接端口模式添加的规则优先应用。
注意: direct接口规则不是持久的,除非使用 --permanent。

##添加规则
firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow 0 -p tcp --dport 80 -j ACCEPT
##删除规则
firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow 10 -p tcp --dport 80 -j ACCEPT
##列出规则:
firewall-cmd --direct --get-all-rules
##列出所有chains
firewall-cmd --direct --get-all-chains

修改iptables中的链

##设置ip伪装
firewall-cmd --zone=internal --add-masquerade --permanent
firewall-cmd --reload
firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth1 -j MASQUERADE 
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i eth0 -o eth1 -j ACCEPT 
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
##将某个IP范围列入黑名单
firewall-cmd --direct --add-chain ipv4 raw blacklist
firewall-cmd --direct --add-rule ipv4 raw PREROUTING 0 -s 192.168.0.0/24 -j blacklist
firewall-cmd --direct --add-rule ipv4 raw blacklist 0 -m limit --limit 1/min -j LOG 00log-prefix "blacklisted"
firewall-cmd --direct --add-rule ipv4 raw blacklist 1 DROP

富规则rich rule

rich rule相当于iptables的一条规则,其中操作命令如下:

firewall-cmd [--permanent] [--zone=zone] --list-rich-rules
firewall-cmd [--permanent] [--zone=zone] --add-rich-rule='rule' [--timeout=seconds]
firewall-cmd [--permanent] [--zone=zone] --remove-rich-rule='rule'
firewall-cmd [--permanent] [--zone=zone] --query-rich-rule='rule'

说明: 结合–timeout参数,可以用于自动化脚本
其模板定义如下:

<zone>
    <rule [family="ipv4|ipv6"]>
               [ <source address="address[/mask]" [invert="bool"]/> ]
               [ <destination address="address[/mask]" [invert="bool"]/> ]
               [
                 <service name="string"/> |
                 <port port="portid[-portid]" protocol="tcp|udp"/> |
                 <protocol value="protocol"/> |
                 <icmp-block name="icmptype"/> |
                 <masquerade/> |
                 <forward-port port="portid[-portid]" protocol="tcp|udp" [to-port="portid[-portid]"] [to-addr="address"]/>
               ]
               [ <log [prefix="prefixtext"] [level="emerg|alert|crit|err|warn|notice|info|debug"]/> [<limit value="rate/duration"/>] </log> ]
               [ <audit> [<limit value="rate/duration"/>] </audit> ]
               [ <accept/> | <reject [type="rejecttype"]/> | <drop/> ]
     </rule>
</zone>

例子:

##把1.1.1.1的souce全部drop掉
firewall-cmd --add-rich-rule='rule family="ipv4" source address="1.1.1.1" drop'
##将源192.168.2.2地址加入白名单,以允许来自这个源地址的所有连接
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.2.2" accept'
##拒绝来自public区域中IP地址为192.168.0.11的所有流量
firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.11/32 reject'
##在192.168.1.0/24子网的dmz区域中,接收端口7900--1905的所有TCP包
firewall-cmd --zone=dmz --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=7900-1905 protocol=tcp accept'
##在接下来的5min内,拒绝从默认区域中的子网192.168.2.0/24到DNS的新连接,并且拒绝的连接将记录到audit系统,且每小时最多一条消息
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.2.0/24 service name=dns audit limit value="1/h" reject' --timeout=300
#查看规则
firewall-cmd --list-rich-rules #列出当前生效的(reload后)
firewall-cmd --permanent --list-rich-rules #列出生效与不生效的

IP封禁

使用rich rule进行封禁

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='222.222.222.222' drop"  #封禁单个IP
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='222.222.222.0/24' drop" #封禁IP段
firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.1.2 port port=80  protocol=tcp  drop" #封禁单个IP的某个端口
firewall-cmd --reload
firewall-cmd --list-rich-rules #列出当前生效的(reload后)

利用ipset进行封禁
注: ipset相当于iptable的扩展,它和iptable 处理方式,iptable通过链表线性存储然后遍历来实现匹配。而ipset通过通过索引的数据结构设计达到快速匹配。这种设计使得当set配置比较庞大的时候,也可以高效地进行匹配。

firewall-cmd --get-ipset-types 
#单IP
firewall-cmd --permanent --zone=public --new-ipset=blacklist --type=hash:ip
firewall-cmd --permanent --zone=public --ipset=blacklist --add-entry=222.222.222.222
firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset=blacklist drop'
#网段
firewall-cmd --permanent --zone=public --new-ipset=blacklistnet --type=hash:net
firewall-cmd --permanent --zone=public --ipset=blacklistnet --add-entry=222.222.222.0/24
firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset=blacklistnet drop'
#删除条目
firewall-cmd --permanent --ipset=blacklist --remove-entry=222.222.222.222
#查询
firewall-cmd --reload #生效
firewall-cmd --get-ipsets
firewall-cmd --info-ipset=blacklist
ls -l /etc/firewalld/ipsets
#删除ipset
firewall-cmd --permanent --delete-ipset=blacklist

其他

创建一个新的Zone

firewall-cmd --get-zones                   #查看所有区域
firewall-cmd --get-services                #查看当前区域支持的服务
#增加新的Zone
firewall-cmd --permanent --new-zone=test   #增加新Zone
firewall-cmd --reload					   #生效
#添加持久性的 HTTP 和 HTTPS 规则:
firewall-cmd --zone=test --add-service=ssh --permanent
firewall-cmd --list-all --zone=test 
#开启端口25(SMTP)和端口465 (SMTPS) :
firewall-cmd --zone=test --add-service=smtp  --permanent
firewall-cmd --zone=test --add-service=smtps --permanent
#开启 IMAP、IMAPS、POP3和POP3S端口:
firewall-cmd --zone=test --add-service=imap  --permanent
firewall-cmd --zone=test --add-service=imaps --permanent
firewall-cmd --zone=test --add-service=pop3  --permanent
firewall-cmd --zone=test --add-service=pop3s --permanent
#绑定source
firewall-cmd --zone=test --permanent --add-source=192.168.1.12  #作用在指定区域
#配置生效
firewall-cmd --reload	#生效
firewall-cmd --get-default-zone #默认区域为public
#网卡切换
firewall-cmd --change-interface=ens33 --zone=test   #把网卡切换到另一个区域
firewall-cmd --get-active-zones						#test区域已为活动状态
firewall-cmd --get-default-zone                     #查看当前的默认区域, 仍为public

定义一个新的服务

最简单的方法是将现有脚本(找到/usr/lib/firewalld/services)复制到/etc/firewalld/services防火墙查找非标准定义的目录。

cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/example.xml

然后,编辑该元数据文件,需要更改<short>标记内服务的短名称,这是一个可读的服务名称。您还应该添加说明,以便在需要审核服务时获得更多信息。实际影响服务功能所需的唯一配置可能是端口定义,您可以在其中标识要打开的端口号和协议。

cat /etc/firewalld/services/example.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Example Service</short>
  <description>This is just an example service.  It probably shouldn't be used on a real system.</description>
  <port protocol="tcp" port="7777"/>
  <port protocol="udp" port="8888"/>
</service>

最后,重载生效:

firewall-cmd --reload
firewall-cmd --get-services
相关标签: firewall linux