firewalld默认启用public区域防护,仅放行ssh等少数服务;需明确添加http、https、ssh等服务或指定端口,并确保firewalld开机自启且规则永久生效。

Firewalld 本身不是“开启防护过滤网”的开关,而是默认就启用面向外网的防护——它在 public 区域下默认只放行极少数服务(如 SSH),其余所有入站连接一律拒绝。你真正要做的,是明确告诉它:哪些端口或服务允许从外网访问。
确认当前处于 public 区域并绑定正确网卡
外网暴露的服务器绝大多数应使用 public 区域,这是为不可信网络设计的安全基线。
- 查看当前激活的区域和对应网卡:firewall-cmd --get-active-zones
- 若显示类似 public interfaces: eth0,说明已正确绑定;若为空或为其他 zone(如 trusted),需手动设置:
firewall-cmd --permanent --zone=public --add-interface=eth0
firewall-cmd --set-default-zone=public - 重载生效:firewall-cmd --reload
只开放真正需要的端口或服务
不要“关防火墙”或“设为 trusted”,而是精准放行。优先用 service 名称(更安全、自动适配协议与辅助端口):
- 开放 Web 服务:firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https - 开放远程管理:firewall-cmd --permanent --add-service=ssh
- 开放数据库(如 MySQL):firewall-cmd --permanent --add-port=3306/tcp
- 开放自定义应用端口(如 8080):firewall-cmd --permanent --add-port=8080/tcp
确保 firewalld 服务持续运行
防护生效的前提是服务本身在运行且开机自启:
- 启动服务(若未运行):systemctl start firewalld
- 设置开机自启:systemctl enable firewalld
- 验证状态:systemctl is-active firewalld 应返回 active
验证规则是否真正生效
别只看命令回显 success,要检查实际配置:
- 列出所有永久规则:firewall-cmd --list-all —— 确认 ports 或 services 下有你添加的内容
- 检查该端口是否监听且可被外网连通:ss -tlnp | grep :8080(确认服务在监听)
再从另一台机器执行:telnet your-server-ip 8080 或 curl -v http://your-server-ip:8080











