Firewalld 防火墙示例,完整的入门指南

本指南将教您开始使用 firewalld 以添加、更改和删除防火墙区域中的规则所需的所有知识。

如今,必须为服务器和网络配置和实现可靠的防火墙。没有它,问题不再是恶意攻击是否会伤害你,而是何时会伤害你。不幸的是,这些在互联网上很常见。

这就是 Firewalld 发挥作用的地方。Firewalld 是 Red Hat Enterprise Linux、Fedora、Oracle Linux、openSUSE、AlmaLinux、Rocky Linux 等 Linux 发行版中的默认防火墙,可提供保护服务器和网络所需的所有保护。但在我们进入如何使用它之前,让我们先解释一下它是什么。

什么是 Firewalld?

Firewalld 是一个基于区域的防火墙管理工具,它提供动态管理的防火墙,支持定义网络连接或接口的信任级别的网络区域。

此外,它还充当 Linux 内核的 Netfilter 框架的前端,提供防火墙功能。

与 iptables 链不同,它使用区域和服务管理防火墙规则。这些规则用于对传入流量进行排序并确定是否应该阻止或允许它。

如何使用 Firewalld 管理防火墙规则

管理 Firewalld 规则的主要工具是firewall-cmd. 它是一个命令行工具,为管理 Firewalld 的运行时和永久配置提供了一个界面。使用时,更改立即生效,无需重启服务。

检查 Firewalld 状态

运行以下命令以查看您的 Firewalld 是否处于活动状态:

[linuxmi@fedora www.linuxmi.com]$ sudo firewall-cmd --state

此外,要查看 Firewalld 服务的状态,请运行以下命令:

[linuxmi@fedora www.linuxmi.com]$ sudo systemctl status firewalld

如果服务由于某种原因没有启动,您可以启动它并将其设置为在系统启动时自动启动运行:

[linuxmi@fedora www.linuxmi.com]$ sudo systemctl start firewalld [linuxmi@fedora www.linuxmi.com]$ sudo systemctl enable firewalld

同样,您可以通过执行以下操作来停止和禁用 Firewalld 服务的自动启动:

[linuxmi@fedora www.linuxmi.com]$ sudo systemctl stop firewalld [linuxmi@fedora www.linuxmi.com]$ sudo systemctl disable firewalld

区域和接口

如前所述,Firewalld 是基于区域 zone 的防火墙。但这究竟是什么意思,什么是区域?

简而言之,它们是 Firewalld 组织的顶级组件。因此,区域可以为不同的连接区域提供不同级别的安全性。这个想法是为不同的网络区域制定单独的安全措施。

每个区域至少连接到一个网络接口——硬件或虚拟网络适配器。获取预配置 Firewalld 区域的列表很简单。键入命令:

[linuxmi@fedora www.linuxmi.com]$ sudo firewall-cmd --get-zones

如您所见,默认列出的区域是:

  • block:传入的网络连接被拒绝,并带有 icmp-host-prohibited 消息。仅允许由该系统发起的网络连接。
  • dmz:适用于非军事区内可公开访问的计算机,但对内部网络的访问受限。仅接受某些入站连接。
  • drop:任何传入的网络连接都被丢弃,并且不发送任何响应。只允许传出网络连接。
  • external:用于启用伪装的外部网络,主要是路由器。您不相信网络上的其他计算机不会伤害您的计算机。仅接受某些类型的入站连接。
  • home:用于在家中使用。您通常相信网络上的其他计算机不会损害您的计算机。仅接受某些类型的传入连接。
  • internal:用于内部网络。您通常相信网络上的其他计算机不会损害您的计算机。仅接受某些入站连接。
  • public:用于外部网络。您不相信网络上的其他计算机不会伤害您的计算机。仅接受某些类型的入站连接。
  • trusted:允许任何网络连接。
  • work:用于工作场所。您通常相信网络上的其他计算机不会损害您的计算机。仅接受某些入站连接。

如果您没有进行任何其他更改,Firewalld 的默认区域设置为“public”。检查默认区域:

sudo firewall-cmd --get-default-zone

要更改默认区域,例如“home”,请键入:

sudo firewall-cmd --set-default-zone=home

要列出活动区域和分配给它们的网络接口,请运行以下命令:

sudo firewall-cmd --get-active-zones

要将网络接口(在我们的示例中为 enp1s0)分配给另一个区域,例如“home”,请键入:

sudo firewall-cmd --zone=home --change-interface=enp1s0

请记住,如果您的系统上只有一个网络接口并将其分配给另一个区域,则默认情况下该区域将变为活动状态。

要获取特定区域的所有配置,例如“public”,请运行:

sudo firewall-cmd --zone=public --list-all

同样,要一次获取所有区域的配置:

sudo firewall-cmd --list-all-zones

按服务名称允许和拒绝

Firewalld 可以根据预定义的规则允许特定网络服务的流量。最简单的方法是将您需要允许的服务添加到您正在使用的区域。

当然,您首先应该知道服务的名称。但是很难记住所有服务的名称,即使它们符合预期。因此,使用以下命令,我们可以查看所有可用预定义的名称。

sudo firewall-cmd --get-services

您可以在services 目录中的相关.xml文件中找到有关这些服务的更多详细信息。/usr/lib/firewalld/例如 MySQL 服务定义如下:

cat /usr/lib/firewalld/services/mysql.xml

假设我们要启用 MySQL 服务。为此,我们--add-service=firewalld-cmd命令后添加服务名称,并使用--zone=选项指定分配服务的区域。

sudo firewall-cmd --zone=public --add-service=mysql

现在让我们重新检查“public”区域的详细信息。

sudo firewall-cmd --zone=public --list-all

OK。我们添加了一个防火墙规则,允许传入连接到 MySQL 服务器。然而,这个规则是暂时的。这意味着该规则在系统重新启动期间将无法生存。

为了确保规则的持久性,我们必须--permanent在命令中添加选项。这样,即使在重新启动后,Firewalld 也会自动加载它。

sudo firewall-cmd --zone=public --add-service=mysql --permanent

我们必须注意一个重要细节:添加不带--permanent选项的规则使其立即可用并生效。但是,--permanent在系统重新启动之前,使用将不起作用。

因此,为了使我们的新永久规则立即生效,我们需要重新加载 Firewalld,执行:

sudo firewall-cmd --reload

这样,我们在保留状态信息的同时重新加载防火墙规则。换句话说,当前的永久配置将成为新的运行时配置。

现在让我们看看如何从防火墙中删除规则。该过程几乎与添加相同,但这次--remove-service使用了该选项。

例如,要删除 MySQL 服务,我们必须发出以下命令:

sudo firewall-cmd --zone=public --remove-service=mysql

同样,要永久删除访问权限,我们需要添加--permanent选项,然后重新加载规则以使更改立即生效。

sudo firewall-cmd --zone=public --remove-service=mysql --permanent
sudo firewall-cmd --reload

按端口号允许和拒绝

但是,有时我们必须通过指定端口号来允许访问。例如,假设您有一个服务在非标准 TCP 端口 10069 上进行侦听。因此,我们需要的不是按名称预定义服务。

幸运的是,Firewalld 提供了一种允许通过端口和协议进行访问的方法,该方法与服务名称完全相同。例如,要允许流量到 TCP 上的端口 10069,请运行:

sudo firewall-cmd --zone=public --add-port=10069/tcp

我们检查允许的端口,执行:

sudo firewall-cmd --zone=public --list-ports

当然,我们也可以通过熟悉的方式对整个区域的大图进行概览:

sudo firewall-cmd --zone=public --list-all

与使用服务名称时相同的持久性规则在这里适用。因此,为了确保我们的防火墙规则在重新启动之间仍然存在,我们需要执行以下操作:

sudo firewall-cmd --zone=public --add-port=10069/tcp --permanent
sudo firewall-cmd --reload

此外,如果您要启用的端口使用 UDP 协议而不是 TCP,则必须在该行tcp替换为。udpfirewall-cmd

从规则列表中删除端口的方法是相同的,唯一的区别是替换为--add-port=选项--remove-port=

sudo firewall-cmd --zone=public --remove-port=10069/tcp --permanent
sudo firewall-cmd --reload

防火墙丰富的规则

熟悉 iptables 的人会轻松使用 firewalld 丰富的规则。顾名思义,它们使您能够构建具有多个标准的复杂规则,而这些标准是使用名称或基于端口的规则无法实现的。

换句话说,防火墙丰富的规则通过更自定义的粒度选项提供了更高级别的控制。此外,他们还可以配置日志记录、伪装、端口转发和速率限制。

它们的使用可以有无数种变化,所以如果你想了解更多关于它们的信息,你应该查阅官方文档。在这里,我们将提供一些简化的示例,让您了解如何使用 Firewalld 丰富的规则。

例如,假设我们要允许访问 MySQL 服务器,正如我们所知,该服务器从 IP 地址 192.168.1.69 侦听端口 3306。规则如下所示:

sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.69" port port=3306 protocol=tcp accept'

与基于名称和端口的规则一样,Firewalld 的丰富规则不是持久的,除非--permanent指定了标志。

删除此规则的命令与上述命令相同,只是该--add-rich-rule选项应替换为--remove-rich-rule.

sudo firewall-cmd --zone=public --remove-rich-rule 'rule family="ipv4" source address="192.168.1.69" port port="3306" protocol="tcp" accept'

如果我们想要做相反的事情并阻止从 IP 地址 192.168.1.69 访问 MySQL 服务器,我们的规则是:

sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.69" port port="3306" protocol="tcp" reject'

作为最后一个示例,我们希望将所有入站流量从端口 80 重定向到主机 192.168.1.200 上的端口 8080,我们已经安装了Tomcat 服务器。为了实现这一点,我们的 Firewalld 丰富规则应该是:

sudo firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=192.168.1.200'

您可以通过运行以下命令来查看丰富的规则:

sudo firewall-cmd --zone=public --list-rich-rules

结论

我们的指南到此结束。我希望你觉得它有帮助。您现在应该很好地了解 Firewalld 是什么以及如何使用它来保护您的计算机和网络。了解它将使您能够使用该工具的灵活性和功能。

有关 Firewalld 的更深入概述,请访问官方文档或查看Red Hat 网站上的这篇文章,他们是 Firewalld 的作者。

如果你喜欢这篇文章,请分享给你的朋友与同事。

The post Firewalld 防火墙示例,完整的入门指南 first appeared on Linux迷.

版权声明:
作者:siwei
链接:https://www.techfm.club/p/36913.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>