RockyLinux防火墙开放端口
RockyLinux 默认使用 firewalld 管理防火墙,开放端口时需要同时考虑当前生效和永久生效。
本文从零基础出发,带你完成端口放行、验证和常见报错处理,确保重启后规则依然有效。
先确认防火墙状态和区域
登录服务器后,先查看 firewalld 是否运行:
systemctl status firewalld
如果显示 active (running) 说明防火墙已开启。
若未启动,执行:
systemctl start firewalld
systemctl enable firewalld
查看当前默认区域和已放行端口:
firewall-cmd --get-default-zone
firewall-cmd --list-ports
firewall-cmd --list-services
默认区域通常是 public。
后续命令如果不指定 --zone,就作用于默认区域。
永久放行端口的正确命令
假设要开放 TCP 8080 端口,推荐使用一条命令同时完成当前生效和永久保存:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
--permanent 表示写入永久配置,--reload 让规则立即生效。
只执行第一条不 reload,当前会话不会生效;
只执行 reload 前没加 permanent,重启后规则会丢失。
开放端口范围(例如 8000-8100):
firewall-cmd --zone=public --add-port=8000-8100/tcp --permanent
firewall-cmd --reload
如果需要同时放行 UDP,把 tcp 换成 udp 即可。
验证端口是否真正放行
查看已放行端口列表:
firewall-cmd --list-ports
查看指定端口是否在列表中:
firewall-cmd --zone=public --query-port=8080/tcp
返回 yes 表示已放行。
还可以从另一台机器测试连通性:
telnet 服务器IP 8080
如果本机有服务监听,也可以执行 ss -tlnp | grep 8080 确认服务本身在运行。
防火墙放行不等于服务已启动,两者要分别检查。
容易踩坑的几个地方
- 忘记加
--permanent:规则只在当前运行时有效,重启后失效。 - 只 reload 没 add:以为 reload 会加载新端口,其实不会。
- 区域写错:网卡绑定在
public,却往trusted区域加端口,自然不生效。可以用firewall-cmd --get-active-zones查看活动区域。 - 服务没监听:端口放行了但服务没启动,外部仍然连不上。
- 云服务器安全组:部分云厂商还有独立安全组,需要同时在控制台放行对应端口。
删除端口和恢复默认
删除已放行端口:
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
firewall-cmd --reload
如果配置混乱,可以备份后重建:
cp /etc/firewalld/zones/public.xml /root/public.xml.bak
然后按需编辑 /etc/firewalld/zones/public.xml,再执行 firewall-cmd --reload。
不建议直接关闭防火墙来“解决问题”,那会带来安全风险。
常见疑问
放行后外部还是连不上,先查什么? 先确认服务监听地址是 0.0.0.0 而不是 127.0.0.1,再检查云安全组和本机防火墙区域。
firewall-cmd --reload 和 --complete-reload 有什么区别? 普通 reload 不中断现有连接,
complete-reload 会重置连接状态,
生产环境优先用普通 reload。
可以同时放行多个端口吗? 可以,重复执行 --add-port 命令,每次加完统一 reload 即可。
RockyLinux 8 和 9 命令一样吗? firewalld 命令基本一致,建议以 man firewall-cmd 和系统实际版本为准。
按以上步骤操作后,可以用 firewall-cmd --list-ports 复查,再重启 firewalld 或服务器验证规则是否保留。
遇到异常时,优先回看区域、permanent 和云安全组这三处。