Firewalld 基础与区域

LinuxBeginner
立即练习

简介

在本实验中,你将了解 Firewalld。它是一款现代化的防火墙管理工具,可用于许多 Linux 发行版。

防火墙控制系统允许哪些网络流量进入或离开。对于初学者来说,传统的数据包过滤规则可能显得过于死板。Firewalld 提供了更高层次的管理模型,使管理员能够更安全、更动态地调整策略。

Firewalld 的核心概念是 区域(zones)。区域可以为不同的网络接口或连接应用不同的信任级别。

  • Home 区域: 就像家里的客厅。你信任这里的人(设备),所以大门基本敞开。
  • Public 区域: 就像咖啡店。你不信任周围的其他人(设备),所以会锁好门,只允许非常特定的交互。

Firewalld 允许你将不同的网络连接(接口)分配到这些区域。

完成本实验后,你将能够:

  1. 安全地安装并启动 Firewalld 服务。
  2. 确定哪些安全「区域」处于活动状态。
  3. 查看某个区域中的规则。
  4. 将网络接口从一个区域移动到另一个区域。

安装并启动 Firewalld

在此步骤中,你将安装 Firewalld 软件,并确认它正在运行。

关键安全步骤: 在这个远程实验环境中,终端连接依赖网络保持开放。如果使用默认设置(通常为「Public」或「Drop」)启动防火墙,防火墙可能会立即阻断你的连接,使你无法登录。为避免这种情况,我们会明确将 Firewalld 配置为对当前连接使用 trusted 区域。

这是一个重要的运维经验:使用防火墙可以减少攻击面,但如果不谨慎地更改策略,也可能切断你自己的访问。优秀的管理员会在修改网络控制之前,先考虑恢复方式和当前的访问路径。

首先,安装软件包。

sudo apt-get update
sudo systemctl mask firewalld
sudo apt-get install firewalld -y

屏蔽(mask)服务可防止软件包安装过程自动启动 firewalld。在启动服务之前,使用 firewall-offline-cmd 将默认区域配置为 trusted,并将 eth0 绑定到该区域。此客户端可在 firewalld 停止时使用。只有在保存这些永久的管理访问设置后,才解除对服务的屏蔽。

sudo firewall-offline-cmd --set-default-zone=trusted
sudo firewall-offline-cmd --zone=trusted --add-interface=eth0
sudo systemctl unmask firewalld
sudo systemctl start firewalld
sudo firewall-cmd --reload

启用服务,使其在系统启动时自动运行。

sudo systemctl enable firewalld

最后,确认 Firewalld 正在运行。

sudo firewall-cmd --state

你应该会看到输出 running。

检查活动区域

在此步骤中,Firewalld 已经运行,我们来查看 区域(Zones)。

区域是 Firewalld 的主要抽象层。你不必记忆一长串扁平的数据包规则,而是可以按照信任级别对接口分组,再由区域表达该环境的基础策略。

运行以下命令,查看当前正在使用哪些区域。

sudo firewall-cmd --get-active-zones

由于上一步已经完成配置,你应该会看到:

trusted
  interfaces: eth0

这表示:

  • trusted 区域处于活动状态。
  • 网络接口 eth0(你的主要连接)已安全地位于该区域中。

如果你想了解系统中还存在哪些其他区域,可以列出所有可用区域。

sudo firewall-cmd --get-zones

输出中会显示 block、home、work、public 等名称。

列出区域配置

在此步骤中,你将检查活动区域的详细规则。

这一步会让 Firewalld 的概念变得更加具体。区域不只是 public 或 trusted 这样的标签,它还包含一组实际的策略决策,例如默认目标、允许的服务、端口和转发行为。

使用 --list-all 选项,查看当前默认区域(trusted)的完整配置。

sudo firewall-cmd --list-all

输出会显示该区域的配置。对于 trusted 区域,关键字段是:

  • target:ACCEPT。这表示「接受所有内容」。

这也说明了为什么你的连接是安全的。

如果你想查看其他区域的规则,例如 public 区域,可以指定区域名称。

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

你会看到,public 区域的限制要严格得多。

更改接口所属区域

在此步骤中,你将练习将接口移动到其他区域。

更改接口所属区域,实际上就是更改通过该接口进入的流量的信任分类。因此,同一台主机可以针对不同网络采取不同的行为,而不必从头重写每条规则。

警告: 如果将主要接口 eth0 移动到 work 区域,你会立即断开连接,因为 work 区域会阻止 Web 终端连接!

为了安全练习,我们会创建一个「虚拟」网络接口,并使用它进行实验。

首先,创建名为 dummy0 的虚拟接口。

sudo ip link add dummy0 type dummy
sudo ip link set dummy0 up

先将此接口添加到 public 区域,为它指定一个初始区域。

sudo firewall-cmd --zone=public --add-interface=dummy0

现在,假设 dummy0 是笔记本电脑的 Wi-Fi 网卡,而你刚走进办公室。你需要将它切换到 work 区域。

sudo firewall-cmd --zone=work --change-interface=dummy0

验证更改结果。

sudo firewall-cmd --get-active-zones

此时你应该会看到两个活动区域:

  • trusted:包含 eth0,因此你的连接仍然保持正常。
  • work:包含 dummy0,这是你的测试接口。
trusted
  interfaces: eth0
work
  interfaces: dummy0

你已经成功学会了如何更改区域,同时避免把自己锁在系统之外!

总结

在本实验中,你完成了使用 Firewalld 的第一步。你已经:

  1. 安装了该服务,并安全地完成配置,避免连接被锁定在系统之外。
  2. 了解到 区域(Zones) 类似于安全配置文件。
  3. 检查了区域中的规则。
  4. 创建了一个虚拟接口,并练习在不同区域之间切换它。

理解区域是学习 Firewalld 的基础。在后续实验中,你将学习如何通过开放特定端口来定制这些区域。