向 public 区域添加 http 服务并使用 Web 服务器进行测试
在这一步中,你将向防火墙添加一条规则以允许 Web 流量,然后通过运行一个简单的 Web 服务器来演示其实际效果。默认情况下,firewalld 会阻止大多数入站流量以保护你的系统。要允许特定连接,你必须为你想要开放的服务添加规则。firewalld 使用预定义的「服务」,这些服务是标准网络端口的易记名称。例如,http 服务对应 TCP 端口 80,这是未加密 Web 流量的标准端口。
首先,让我们在进行更改之前检查 public 区域当前的防火墙状态:
sudo firewall-cmd --zone=public --list-services
你会注意到 http 最初不在列表中,这意味着到端口 80 的外部连接是被阻止的。
现在,让我们将 http 服务添加到 public 区域。你将使用带有 --add-service 选项的 firewall-cmd 命令,并指定你要修改的区域:
sudo firewall-cmd --zone=public --add-service=http
此命令告诉 firewalld 通过添加 http 服务规则来修改 public 区域。更改应用于运行时配置,这意味着它会立即生效。你应该会看到一条确认消息:
success
让我们通过再次检查服务列表来验证服务是否已添加:
sudo firewall-cmd --zone=public --list-services
你现在应该在允许的服务列表中看到 http。
为了演示实际影响,让我们启动一个简单的 Web 服务器。我们将使用 Python 内置的 HTTP 服务器,运行在端口 80 上:
cd /tmp
echo "<h1>Welcome to LabEx Firewall Demo</h1><p>This server is running on port 80</p>" > index.html
sudo python3 -m http.server 80
注意我们需要使用 sudo,因为端口 80 是一个特权端口(1024 以下)。请让此服务器在单独的终端中保持运行。
现在,从另一个终端测试连接:
curl http://localhost
连接成功,因为 http 服务现在已被允许通过防火墙。请注意,localhost 连接可能会绕过防火墙规则,但关键点在于,到端口 80 的外部连接现在将被防火墙允许。
为了进一步说明防火墙的管理能力,让我们临时移除 HTTP 服务:
sudo firewall-cmd --zone=public --remove-service=http
检查服务列表以确认它已被移除:
sudo firewall-cmd --zone=public --list-services
你应该注意到 http 不再在列表中。现在重新添加该服务:
sudo firewall-cmd --zone=public --add-service=http
再次验证它是否已添加:
sudo firewall-cmd --zone=public --list-services
你现在已成功学会了如何在防火墙中管理 HTTP 服务并演示了配置更改。核心概念是,如果没有 http 服务规则,即使 Web 服务器正在运行,到端口 80 的外部连接也会被防火墙阻止。演示完成后,你可以使用 Ctrl+C 停止 Web 服务器。