在安装应用程序或允许外部设备访问内部服务时,经常需要配置网络端口。端口是软件定义的通信端点,用于标识特定的进程或服务类型。例如,我们熟知的 SSH 服务默认端口是 22,Apache Web 服务常用 80 或 443 端口。然而,在默认启用了防火墙的系统上,大多数端口是关闭的,需要我们手动打开才能建立通信。
假设你需要在 AlmaLinux 8 或 Rocky Linux 上管理 80、443 或其他端口,本指南将详细介绍使用 firewalld 进行操作的完整流程。
1. 安装并启动 firewalld
在管理端口之前,确保 firewalld 防火墙服务已安装并运行是首要步骤。
检查 firewalld 运行状态
运行以下命令查看服务状态:
sudo systemctl status firewalld
如果服务未运行,你需要启动它并设置为开机自启:
sudo systemctl start firewalld
sudo systemctl enable firewalld
如果系统尚未安装 firewalld,可以使用以下命令安装:
sudo dnf update
sudo dnf install firewalld
2. 列出所有已开放的端口和服务
在开放新端口前,最好先确认它是否已经开放,或者是否有其他服务占用了该端口。使用以下命令查看当前所有防火墙规则:
sudo firewall-cmd --list-all
这条命令会列出所有开放的端口、预定义服务以及当前的区域配置(如 public 区域)。如果某个端口或服务未出现在列表中,则意味着它当前被防火墙阻止。
3. 如何开放端口或服务
firewalld 内置了许多常见的服务定义,如 ssh、http、https,直接开放这些服务等同于开放其对应的端口。
查看所有预定义服务
你可以先查看系统支持哪些服务:
firewall-cmd --get-services
开放一个预定义的服务
若要开放一个服务(例如 http 或 openvpn),使用以下命令格式,将 service-name 替换为目标服务名:
sudo firewall-cmd --zone=public --permanent --add-service=service-name
例如,开放 HTTP 服务:
sudo firewall-cmd --zone=public --permanent --add-service=http
手动开放一个特定端口
如果端口不属于任何预定义服务,或者你需要自定义端口号,可以直接开放端口。将 port-number 替换为实际端口号,协议 tcp 也可根据需要换为 udp:
sudo firewall-cmd --zone=public --permanent --add-port=port-number/tcp
例如,开放 TCP 协议的 3602 端口:
sudo firewall-cmd --zone=public --permanent --add-port=3602/tcp
4. 重新加载防火墙配置
在添加了 --permanent 参数后,规则已写入永久配置。为了让更改在当前会话中立即生效,需要重新加载防火墙:
sudo firewall-cmd --reload
重新加载后,建议再次运行 sudo firewall-cmd --list-all 来确认端口或服务已成功加入允许列表。
5. 如何关闭或阻止端口/服务
当不再需要某个端口或服务对外开放时,及时关闭它是保证网络/系统安全的好习惯。关闭操作的命令与开放操作类似,只是将 --add- 参数改为 --remove-。
关闭一个特定端口
使用以下命令格式,将 port-number 替换为要关闭的端口号:
sudo firewall-cmd --zone=public --permanent --remove-port=port-number/tcp
例如,关闭 TCP 协议的 443 端口:
sudo firewall-cmd --zone=public --permanent --remove-port=443/tcp
阻止一个预定义的服务
使用以下命令格式,将 service-name 替换为要阻止的服务名:
sudo firewall-cmd --zone=public --permanent --remove-service=service-name
例如,阻止 SSH 服务(即关闭 22 端口):
sudo firewall-cmd --zone=public --permanent --remove-service=ssh
同样,执行关闭操作后,别忘了重新加载防火墙以使更改生效:
sudo firewall-cmd --reload
通过以上步骤,你可以在 AlmaLinux 8、Rocky Linux 及其同源发行版(如 RHEL 8、CentOS Stream)上,轻松管理防火墙端口。firewalld 提供了清晰且强大的规则管理能力,是保障服务器网络/系统安全的重要工具。如果在实践中遇到更复杂的场景,欢迎到云栈社区的运维板块与其他开发者交流探讨。