分享最新优惠信息
购买主机更加划算

基于RHEL发行版配置FirewallD规则示例详解

众所周知,Net-filter是Linux中的防火墙。Firewalld是一个动态守护进程,用于管理支持网络区域的防火墙。在早期版本RHEL和CentOS中,一般使用iptables作为数据包过滤框架的守护进程。

在基于较新的RHEL的发行版(例如Fedora、Rocky Linux、CentOS Stream、AlmaLinux和openSUSE )当中,iptables已被firewalld取代。

小编建议大家使用Firewalld而不是iptables,因为iptables将来可能会停止使用。但是,iptables仍然受支持,可以使用yum命令安装。但是,不能将Firewalld和iptables同时放在同一个系统中,这可能会导致冲突。

在iptables中,我们习惯将其配置为INPUT、OUTPUT和FORWARD CHAINS ,但在Firewalld中,该概念使用Zones 。默认情况下, firewalld中有不同的区域可用,本文将对此进行简单介绍。

基本区域包括公共区域和私有区域。为了使这些区域正常工作,需要添加具有指定区域支持的接口,然后可以将服务添加到firewalld。

默认情况下,有许多可用的服务, firewalld的最佳功能之一是,它带有预定义的服务,我们可以以这些服务为示例,通过简单地复制它们来添加服务。

Firewalld也适用于IPv4、IPv6和以太网桥,能够在Firewalld中拥有单独的运行时配置和永久配置。接下来介绍如何使用区域并创建我们自己的服务以及在Linux中使用Firewalld的更多功能。

测试环境

操作系统:Red Hat Enterprise Linux 版本 9.0(Plow)
IP地址:192.168.0.159
主机名:tecmint-rhel9

RHEL 9测试系统

步骤1:在基于RHEL的系统中安装Firewalld

RHEL、Fedora、Rocky Linux、CentOS Stream、AlmaLinux和openSUSE默认安装了Firewalld包。如果没有的话,可以使用以下yum命令进行安装:

# yum install firewalld -y

安装firewalld包后,现在验证iptables服务是否正在运行,如果正在运行,则需要使用以下命令停止并屏蔽(不再使用) iptables服务。

# systemctl status iptables
# systemctl stop iptables
# systemctl mask iptables

步骤2:了解Firewalld组件(区域和规则)

在开始配置防火墙之前,首先介绍下各个区域(Zone)。默认情况下,有一些区域可用。我们需要将接口分配给区域。区域定义了接口可信任或拒绝连接的区域。区域可以包含服务和端口。在这里,将描述Firewalld中可用的每个区域。

  • Drop Zone :如果使用Drop Zone,则任何传入的数据包都将被丢弃。这与我们添加iptables -j drop相同。如果我们使用Drop规则,这意味着没有回复,只有出站网络连接可用。
  • Block Zone:Block Zone将使用icmp-host-prohibited拒绝传入网络连接,仅允许在服务器内建立的连接。
  • Public Zone:为了接受选定的连接,可以在Public Zone中定义规则。这将仅允许特定端口在我们的服务器上打开,其它连接将被丢弃。
  • External Zone:此区域将充当路由器选项,启用伪装后,其它连接将被丢弃且不会接受,并且只允许指定的连接。
  • DMZ Zone:如果我们需要允许公众访问某些服务,可以在DMZ Zone中定义它,这也具有仅接受选定传入连接的功能。
  • Work Zone:在这个区域中,只能定义内部网络,即允许私有网络流量。
  • Home Zone:此区域专门用于家庭区域,我们可以使用此区域来信任网络上的其它计算机,不会像在其他区域一样损害计算机。这也仅允许选定的传入连接。
  • Internal Zone:这个区域类似于工作区,允许选定的连接。
  • Trusted Zone:如果我们设置了Trusted Zone,那么所有流量都会被接受。

现在对区域有了更好的了解,接下来将找出可用区域和默认区域,并使用以下命令列出所有区域。

列出防火墙区域

# firewall-cmd --get-zones

列出可用的防火墙区域

列出防火墙默认区域

# firewall-cmd --get-default-zone

列出防火墙默认区域

列出所有防火墙区域

# firewall-cmd --list-all-zones

列出防火墙区域

注意:上述命令的输出不会放在一页中,因为它将列出每个区域,例如block、dmz、drop、external、home、internal、public、trusted和work。如果区域有任何rich规则,则启用的服务或端口也将与相应的区域信息一起列出。

步骤3:设置默认防火墙区域

如果想要将默认区域设置为内部、外部、drop、工作或任何其它区域,则可以使用以下命令设置默认区域。这里我们使用“内部”区域作为默认区域:

# firewall-cmd --set-default-zone=internal

设置区域后,使用以下命令验证默认区域:

# firewall-cmd --get-default-zone

设置默认防火墙区域

这里的接口是enp0s3,如果需要检查接口所处的区域,则可以使用以下命令:

# firewall-cmd --get-zone-of-interface=enp0s3

检查网络接口防火墙区域

firewalld的另一个有趣的特性是“ icmptype ”,它是firewalld支持的icmp类型之一。要获取支持的icmp类型的列表,可以使用以下命令:

# firewall-cmd --get-icmptypes

列出防火墙ICMP类型

步骤4:在Firewalld中创建自己的服务

服务是Firewalld使用的一组带有端口和选项的规则,已启用的服务将在Firewalld服务启动并运行时自动加载。默认情况下,有许多可用服务,要获取所有可用服务的列表,请使用以下命令:

# firewall-cmd --get-services

列出Firewalld服务

要获取所有默认可用服务的列表,请转到以下目录,在这里你将获得服务列表。

# cd /usr/lib/firewalld/services/

列出默认的Firewalld服务

要创建自己的服务,需要在以下位置定义它。例如,这里为RTMP端口1935添加一个服务,首先复制其中任何一个服务:

# cd /etc/firewalld/services/
# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/

然后,导航到服务文件被复制的位置,接下来将文件“ ssh.xml ”重命名为“ rtmp.xml ”,如下所示:

# cd /etc/firewalld/services/
# mv ssh.xml rtmp.xml
# ls -l rtmp.xml

在Firewalld中创建服务

接下来打开并编辑文件,包括标题、描述、协议和端口号,这里需要将其用于RTMP服务,如下图所示:

配置Firewalld服务

要使这些更改生效,请重新启动firewalld 服务,或重新加载设置,命令如下:

# firewall-cmd --reload

要确认是否添加了服务,请运行以下命令来获取可用服务列表:

# firewall-cmd --get-services

确认防火墙中添加的服务

步骤5:将服务分配给Firewalld区域

这里主要介绍如何使用firewall-cmd命令管理防火墙。要了解防火墙和所有活动区域的当前状态,请键入以下命令:

# firewall-cmd --state
# firewall-cmd --get-active-zones

检查防火墙状态

获取接口enp0s3的public zone,这是默认接口,在/etc/firewalld/firewalld.conf文件中定义为DefaultZone=public。列出此默认接口区域中的所有可用服务:

# firewall-cmd --get-service

列出Firewalld服务

步骤6:将服务添加到Firewalld区域

在上面的例子中,已经看到了如何通过创建rtmp服务来创建我们自己的服务,接下来将看到如何将rtmp服务添加到区域。

# firewall-cmd --add-service=rtmp

要删除添加的区域,请输入以下命令:

# firewall-cmd --zone=public --remove-service=rtmp

上述步骤只是暂时的,要使其成为永久的,需要运行以下命令并添加–permanent选项:

# firewall-cmd --add-service=rtmp --permanent
# firewall-cmd --reload

定义网络源范围的规则并打开任意一个端口。例如,如果你想打开网络范围(例如“ 192.168.0.0/24 ”)和端口“ 1935 ”,请使用以下命令:

# firewall-cmd --permanent --add-source=192.168.0.0/24
# firewall-cmd --permanent --add-port=1935/tcp

添加或删除任何服务或端口后,请确保重新加载firewalld服务:

# firewall-cmd --reload 
# firewall-cmd --list-all

将服务添加到Firewalld

步骤7:为网络范围添加Firewalld Rich规则

如果想允许http、https、vnc-server和PostgreSQL等服务,则会使用以下规则。首先,添加规则并使其永久生效,重新加载规则,然后检查状态:

# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" accept' 
# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" accept' --permanent

# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="https" accept'
# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="https" accept' --permanent

# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="vnc-server" accept'
# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="vnc-server" accept' --permanent

# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="postgresql" accept'
# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="postgresql" accept' --permanent

现在网络范围192.168.0.0/24可以使用我的服务器上的上述服务。选项–permanent可以在每条规则中使用,但需要先定义规则并与客户端访问进行检查,然后才能使其永久生效。

添加上述规则后,不要忘记重新加载防火墙规则并使用以下命令列出规则:

# firewall-cmd --reload
# firewall-cmd --list-all

列出所有FirewallD活动规则

了解有关Firewalld的更多信息:

# man firewalld

以上就是在基于RHEL的发行版(例如Fedora、Rocky Linux、CentOS Stream、AlmaLinux和openSUSE )中使用Firewalld设置网络过滤器的详细过程。

结论

Net-filter是每个Linux发行版的防火墙框架。在过去的每个RHEL和CentOS版本中,基本上都使用iptables,但在较新的版本中,它们引入了Firewalld,了解和使用Firewalld更易管理Linux服务器。

未经允许不得转载:惠主机 » 基于RHEL发行版配置FirewallD规则示例详解