如何在 RHEL、Rocky 和 AlmaLinux 中配置 FirewallD
Net-filter 众所周知,它是 Linux 中的防火墙。 Firewalld 是一个动态守护进程,用于管理防火墙并支持网络区域。在早期版本中,RHEL 和 CentOS 我们一直使用 iptables 作为数据包过滤框架的守护进程。
在基于 RHEL 的较新版本中,例如 Fedora、Rocky Linux、CentOS Stream、AlmaLinux 和 openSUSE – iptables 接口正在被 firewalld 取代。
建议开始使用 Firewalld 而不是 iptables,因为这将来可能会停止。不过,iptables 仍然受支持,并且可以使用 yum 命令安装。我们不能将 Firewalld 和 iptables 都放在同一个系统中,这可能会导致冲突。
在iptables中,我们曾经配置为输入、输出和转发链,但在Firewalld<,这个概念使用区域。默认情况下,firewalld 中有不同的可用区域,本文将对此进行讨论。
基本区域,类似于公共区域和私有区域。为了使这些区域正常工作,我们需要添加具有指定区域支持的接口,然后我们可以将服务添加到 firewalld。
默认情况下,有很多可用的服务,firewalld的最佳功能之一是,它带有预定义的服务,我们可以以这些服务为例,通过简单地复制它们来添加我们的服务。
Firewalld 也可以与 IPv4、IPv6 和 以太网桥 配合使用。我们可以在firewalld中进行单独的运行时和永久配置。
让我们开始了解如何在 Linux 中使用区域并创建我们自己的服务以及 firewalld 的更多令人兴奋的用法。
我们的测试环境
Operating System : Red Hat Enterprise Linux release 9.0 (Plow)
IP Address : 192.168.0.159
Host-name : tecmint-rhel9
步骤 1:在基于 RHEL 的系统中安装 Firewalld
1. Firewalld 软件包默认安装在 RHEL、Fedora、Rocky Linux 中、CentOS Stream、AlmaLinux 和 openSUSE。如果没有,您可以使用以下 yum 命令安装它。
yum install firewalld -y
2.firewalld软件包安装完成后,需要验证iptables服务是否正在运行,如果正在运行,则需要使用以下命令停止并屏蔽(不再使用)iptables 服务。
systemctl status iptables
systemctl stop iptables
systemctl mask iptables
步骤 2:了解 Firewalld 组件(区域和规则)
3. 在进行 firewalld 配置之前,我想讨论一下每个区域。默认情况下,有一些可用区域。我们需要将接口分配给区域。区域定义了接口获取连接的信任或拒绝级别的区域。区域可以包含服务和端口。
在这里,我们将描述 Firewalld 中可用的每个区域。
- 丢弃区域:如果我们使用丢弃区域,所有传入的数据包都会被丢弃。这与我们用来添加 iptables -j drop 的效果相同。如果我们使用丢弃规则,则意味着没有回复,只有传出网络连接可用。
- 阻止区域:阻止区域将拒绝传入的网络连接被 icmp-host-prohibited 拒绝。仅允许在服务器内建立的连接。
- 公共区域:要接受选定的连接,我们可以在公共区域中定义规则。这将只允许在我们的服务器中打开特定端口,其他连接将被丢弃。
- 外部区域:此区域将充当路由器选项,启用伪装后其他连接将被丢弃且不接受,并且仅允许指定的连接。
- DMZ区域:如果我们需要允许公众访问某些服务,可以在DMZ区域中定义。这也具有仅接受选定的传入连接的功能。
- 工作区:在此区域中,我们只能定义内部网络,即允许专用网络流量。
- 家庭区域:此区域专门用于家庭区域,我们可以使用此区域来信任网络上的其他计算机,不会像在每个区域中一样损害您的计算机。这也只允许选定的传入连接。
- 内部区域:这与具有选定允许连接的工作区域类似。
- 信任区域:如果我们设置信任区域,所有流量都会被接受。
现在您对区域有了更好的了解,现在让我们找出可用区域和默认区域,并使用以下命令列出所有区域。
列出 Firewalld 区域
firewall-cmd --get-zones
列出 Firewalld 默认区域
firewall-cmd --get-default-zone
列出所有 Firewalld 区域
firewall-cmd --list-all-zones
注意:上述命令的输出不适合单个页面,因为这将列出每个区域,如 block、dmz、drop、external、home、internal、公开、可信和工作。如果区域有任何丰富的规则,启用的服务或端口也将与相应的区域信息一起列出。
步骤 3:设置默认 Firewalld 区域
4. 如果您想将默认区域设置为内部、外部、drop、工作或任何其他区域,您可以使用以下命令来设置默认区域。这里我们默认使用“内部”区域。
firewall-cmd --set-default-zone=internal
5. 设置区域后,使用以下命令验证默认区域。
firewall-cmd --get-default-zone
6.这里,我们的接口是enp0s3,如果我们需要检查接口所绑定的区域,我们可以使用以下命令。
firewall-cmd --get-zone-of-interface=enp0s3
7.firewalld的另一个有趣的功能是“icmptype”,它是firewalld支持的icmp类型之一。要获取支持的 icmp 类型列表,我们可以使用以下命令。
firewall-cmd --get-icmptypes
步骤 4:在 Firewalld 中创建自己的服务
8.服务是Firewalld使用的一组带有端口和选项的规则。当 Firewalld 服务启动并运行时,将自动加载已启用的服务。
默认情况下,许多服务可用,要获取所有可用服务的列表,请使用以下命令。
firewall-cmd --get-services
9. 要获取所有默认可用服务的列表,请转到以下目录,在这里您将获取服务列表。
cd /usr/lib/firewalld/services/
10. 要创建您自己的服务,您需要在以下位置定义它。例如,这里我想为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
11. 接下来打开文件并将其编辑为标题、说明、协议和端口号码,我们需要将其用于RTMP服务,如下图所示。
12.要激活这些更改,请重新启动firewalld服务,或重新加载设置。
firewall-cmd --reload
13. 要确认是否添加了服务,请运行以下命令以获取可用服务的列表。
firewall-cmd --get-services
第 5 步:将服务分配给 Firewalld 区域
14.这里我们将了解如何使用firewall-cmd命令来管理防火墙。要了解防火墙和所有活动区域的当前状态,请键入以下命令。
firewall-cmd --state
firewall-cmd --get-active-zones
15.获取接口enp0s3的公共区域,这是默认接口,在/etc/firewalld/firewalld.conf中定义文件为 DefaultZone=public。
列出此默认接口区域中的所有可用服务。
firewall-cmd --get-service
第 6 步:将服务添加到 Firewalld 区域
16.在上面的例子中,我们已经看到了如何通过创建rtmp服务来创建自己的服务,这里我们将看到如何添加rtmp
firewall-cmd --add-service=rtmp
17. 要删除添加的区域,请键入。
firewall-cmd --zone=public --remove-service=rtmp
上述步骤只是暂时的。为了使其永久化,我们需要使用选项 -permanent 运行以下命令。
firewall-cmd --add-service=rtmp --permanent
firewall-cmd --reload
18.定义网络源范围规则并开放任意一个端口。例如,如果您想打开网络范围“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
第7步:为网络范围添加Firewalld丰富规则
19. 如果我想允许 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可以在每个规则中使用,但是我们必须定义规则并检查客户端访问权限,然后我们必须使其永久。
20. 添加上述规则后,不要忘记重新加载防火墙规则并使用以下命令列出规则:
firewall-cmd --reload
firewall-cmd --list-all
了解有关 Firewalld 的更多信息。
man firewalld
就是这样,我们已经了解了如何在基于 RHEL 的发行版(例如 Fedora、Rocky)中使用 Firewalld 设置网络过滤器 Linux、CentOS Stream、AlmaLinux 和 openSUSE。
结论
Net-filter 是每个 Linux 发行版的防火墙框架。在每个 RHEL 和 CentOS 版本中,我们都使用 iptables,但在较新的版本中,他们引入了 Firewalld。更容易理解和使用firewalld。希望您喜欢这篇文章。