firewalld开放端口需先启用服务并确认区域,再用--permanent永久添加端口或服务(如--add-port=8080/tcp或--add-service=https),最后--reload生效;推荐优先使用服务名、结合rich rule限制源ip,确保安全可控。

在 Linux 系统中用 firewalld 开放对外服务端口,关键在于让入站流量能穿过防火墙抵达你的服务,同时确保规则重启后不丢失、来源可控、配置可维护。
确认 firewalld 已启用并明确作用区域
firewalld 默认按 zone(区域)管理规则,大多数云服务器或公网环境使用 public 区域。操作前先检查基础状态:
- 查看服务是否运行:
sudo systemctl status firewalld;未运行则执行sudo systemctl start firewalld && sudo systemctl enable firewalld - 查默认 zone:
sudo firewall-cmd --get-default-zone(常见输出为public) - 如需对特定 zone 操作(例如 internal),后续命令需显式加
--zone=internal
永久开放 TCP/UDP 端口(适用于自定义端口)
如果你的服务监听非标准端口(如 API 服务跑在 8080、数据库在 3306),直接按端口号添加:
- 永久写入配置:
sudo firewall-cmd --permanent --add-port=8080/tcp - 开放 UDP 端口(如 DNS):
sudo firewall-cmd --permanent --add-port=53/udp - 批量开放端口范围:
sudo firewall-cmd --permanent --add-port=8000-8010/tcp - 立即生效:
sudo firewall-cmd --reload
验证是否成功:sudo firewall-cmd --list-ports 或 sudo firewall-cmd --list-all(会显示当前 zone 下所有端口和服务)
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
优先使用服务名而非端口号(推荐做法)
firewalld 内置了 http、https、ssh、mysql 等服务定义,它们不仅映射标准端口(如 https → 443/tcp),还自动启用连接跟踪等辅助规则,更安全也更易维护:
- 列出所有可用服务:
sudo firewall-cmd --get-services - 永久启用 https:
sudo firewall-cmd --permanent --add-service=https - 重载生效:
sudo firewall-cmd --reload - 验证:
sudo firewall-cmd --list-services
若服务监听非标端口(如 Nginx 改为监听 8081),应创建自定义 service 文件,而不是直接开 8081 端口——这样既保持语义清晰,又避免端口冲突或误放行。
限制仅允许指定 IP 或网段访问(强烈建议)
无来源限制的端口开放等于暴露服务。使用 rich rule 可精准控制谁可以连:
- 只允许某 IP 访问 8080:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.42" port port="8080" protocol="tcp" accept' - 只允许某内网段访问 SSH:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" service name="ssh" accept' - 同样需要重载:
sudo firewall-cmd --reload
注意:rich rule 与 --add-port 是独立规则,若已开放全网 8080,再加 rich rule 不会自动屏蔽其他 IP,需先移除原端口规则或改用 rich rule 替代。










