将 http 服务添加到 public 区域并通过 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
修改 public
区域,添加 http
服务规则。更改会应用于运行时配置,这意味着它会立即生效。你应该会看到一条确认消息:
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 服务器。