简介
在本实验中,你将深入学习如何使用 firewalld 控制哪些流量可以进入系统。
把计算机想象成一栋建筑。默认情况下,防火墙会锁住所有入口。要让合法访客进入,例如允许 Web 流量或文件传输,你需要解锁指定的入口。在网络中,这些入口称为「端口」或「服务」。
你将学习两种修改这些规则的重要方式:
- 临时(运行时): 就像把内容写在白板上。现在立即生效,但清洁人员到来时(系统重启或重新加载),白板上的内容就会消失。
- 永久: 就像把标记刻在石头上。重新加载或重启后,设置仍然保留。
运行时配置与永久配置的区别,是 Firewalld 最重要的概念之一。它允许管理员先安全地测试更改,再决定是否长期保留。
完成本实验后,你将能够临时允许 Web 流量进行测试、永久开放指定的自定义端口,并了解如何保存更改。
临时允许服务
在本步骤中,你将允许 HTTP 服务的流量。
关于实验环境的说明: 在初始化过程中,我们将默认区域设置为 trusted,以保持终端连接正常,因此实际上所有端口都已经开放。不过,接下来我们仍将按照安全服务器上默认阻止所有流量的情况进行操作,这样你可以学习正确的端口开放命令。
我们将把 http 规则添加为运行时(临时)配置。
运行时配置与永久配置的区别,是 Firewalld 提供的重要安全功能之一。你可以先测试规则是否生效,再将其写入长期配置。
首先,检查当前区域中明确允许的服务。
sudo firewall-cmd --list-services
开始时可能看不到多少内容。现在,将 http 服务添加到允许列表中。
sudo firewall-cmd --add-service=http
如果操作成功,终端只会输出 success。
再次列出服务,验证该服务现在是否已被允许。
sudo firewall-cmd --list-services
现在,你应该能在列表中看到 http。请注意,由于我们没有要求防火墙将此规则设置为「永久」,所以它就像白板上的内容一样,目前只存在于内存中。
永久开放端口
在此步骤中,有时你需要直接开放一个特定编号的「入口」,而不是开放一个命名服务。例如,端口 8080 常用于测试 Web 服务器。
从概念上说,选择服务还是端口也很重要。服务是一个命名的规则集合,通常对应一个或多个常用端口;直接指定端口的规则则更具体,层级也更低。两种方式都有效,但服务名称通常更易于阅读和维护。
这次我们希望规则在服务器重启后仍然保留,因此将使用 --permanent 选项。
运行以下命令,永久开放 TCP 端口 8080。
sudo firewall-cmd --permanent --add-port=8080/tcp
输出应为 success。
重要概念: 使用 --permanent 时,你修改的是配置文件(也就是「石碑」),但不会立即更改正在运行的防火墙。
验证这一点。检查当前正在运行的防火墙(运行时)端口。
sudo firewall-cmd --list-ports
你会看到列表为空,或者其中没有 8080。由于防火墙尚未读取更新后的配置文件,它还不知道这条新规则。
现在,检查永久配置,确认规则已安全地保存到磁盘。
sudo firewall-cmd --permanent --list-ports
此时,你应该能看到 8080/tcp。这表示该规则已经排队,防火墙下次加载配置时会应用它。
重新加载防火墙
在此步骤中,你的防火墙处于以下状态:
- 你有一条允许
http的临时规则(来自步骤 1)。 - 你有一条允许
8080的永久规则。该规则已经保存,但尚未激活(来自步骤 2)。
要激活永久规则,必须重新加载防火墙。这样会让 Firewalld 重新读取配置文件并应用其中的设置。
从实际运行角度看,重新加载是运行时配置与永久配置汇合的地方。它会用磁盘上定义的规则集替换内存中的实时规则集,因此,除非你选择永久保存临时实验规则,否则这些规则都会消失。
警告: 重新加载会将防火墙重置为配置文件中描述的状态。由于 http 规则只是临时规则(不在配置文件中),它会丢失!
执行重新加载命令。
sudo firewall-cmd --reload
现在验证发生了什么。首先,检查端口 8080 是否已激活。
sudo firewall-cmd --list-ports
成功!你应该能看到 8080/tcp。永久规则已经加载到正在运行的系统中。
接着,检查 http 服务的状态。
sudo firewall-cmd --list-services
http 服务已经消失。这证明重新加载会删除所有仅存在于运行时的更改。对于初学者来说,这是一个常见的「易错点」——请始终记得将重要规则设置为永久规则!
验证完整配置
在此步骤中,你将使用日常管理防火墙时最有用的命令。你不必分别检查服务和端口,而是可以一次查看当前活动区域的完整配置。
这种「全局视图」很有价值,因为防火墙问题往往源于忽略了多种规则类型会共同决定主机的实际行为。查看整个区域可以降低这种风险。
使用 --list-all 选项查看完整配置。
sudo firewall-cmd --list-all
输出会提供当前活动区域的完整摘要。在本实验环境中,该区域是 trusted:
- target:
ACCEPT。 - interfaces: 当前活动的网络接口,例如
eth0。 - services: 列出允许的标准服务。请注意,
http已在重新加载后丢失,因此不再显示。 - ports: 列出开放的自定义端口,例如
8080/tcp。
该命令非常适合排查问题,因为它会准确显示防火墙当前正在执行的操作。
总结
在本实验中,你已经掌握了临时防火墙规则与永久防火墙规则之间的区别。你学会了:
- 运行时规则: 如何立即但临时地添加
http之类的服务。 - 永久规则: 如何使用
--permanent选项保存规则,例如永久开放端口 8080。 - 重新加载: 如何使用
--reload将永久更改应用到运行时环境,以及临时规则会因此被丢弃这一副作用。 - 验证配置: 如何使用
--list-all查看防火墙的完整状态。
现在,你已经开始扎实理解如何安全、持久地控制网络访问。



