Linux放行指定端口需同时配置firewalld的运行时与永久规则,优先使用服务名、限制源IP,并重载生效。具体步骤:先启用firewalld并确认默认zone;永久添加端口或服务(如--add-port=8080/tcp或--add-service=https);执行--reload使规则生效;配合rich rule限定访问源,最后验证端口监听及云平台安全组。

Linux 放行指定端口,核心是让防火墙允许该端口的入站流量。当前主流发行版(如 CentOS/RHEL 7+、Fedora、Rocky、AlmaLinux)默认使用 firewalld,操作需兼顾“运行时生效”和“重启后仍有效”两个层面,同时推荐按服务名管理、限制访问来源以提升安全性。
确认 firewalld 正常运行并明确作用域
放行前先确保防火墙服务已启用,且知道规则应用在哪个 zone(区域),因为规则默认只对当前默认 zone 生效:
- 检查状态:
sudo systemctl status firewalld,若未运行则执行sudo systemctl start firewalld && sudo systemctl enable firewalld - 查看默认 zone:
sudo firewall-cmd --get-default-zone(常见为public) - 如需对特定 zone 操作(如
internal),后续命令需显式加--zone=xxx
永久开放 TCP 或 UDP 端口(最常用)
直接指定端口号适用于自定义服务(如 API 服务跑在 8080、数据库监听 3306),务必同时做永久配置与重载:
- 永久添加(写入配置文件):
sudo firewall-cmd --permanent --add-port=8080/tcp - 如需开放 UDP:
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 和服务信息)
优先用服务名代替端口号(更安全、易维护)
firewalld 内置了 http、https、ssh、mysql 等服务定义,它们自动关联标准端口+协议+辅助规则(如连接跟踪),比硬写端口更可靠:
- 查可用服务:
sudo firewall-cmd --get-services - 永久启用:
sudo firewall-cmd --permanent --add-service=https(即放行 443/tcp) - 重载生效:
sudo firewall-cmd --reload - 若服务监听非标端口(如 Nginx 跑在 8081),应创建自定义 service 文件,而非直接开 8081 端口
限制仅允许特定 IP 或网段访问(强烈建议)
不加来源限制的端口开放等于裸奔。使用 rich rule 可精确控制谁有权限连这个端口:
- 仅允许可信 IP 访问 22 端口:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.45" port port="22" protocol="tcp" accept' - 允许整个内网段访问 8080:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port="8080" protocol="tcp" accept' - 别忘了重载:
sudo firewall-cmd --reload - 查看富规则:
sudo firewall-cmd --list-rich-rules
完成配置后,还需确认服务本身已在监听对应端口(ss -tlnp | grep :8080),且云服务器厂商安全组/ACL 也已放行该端口——防火墙只是其中一环。


















