firewalld 的配置核心是“区域+服务/端口+永久性控制”,通过 zone 抽象信任等级,叠加服务模板或端口,不直接操作 iptables 链;需用 --permanent 持久化并 --reload 生效。

firewalld 的配置核心在于“区域(zone)+ 服务/端口 + 永久性控制”,不是写规则,而是选策略。它不直接操作 iptables 链,而是通过 zone 抽象网络信任等级,再叠加服务模板或自定义端口,适合大多数服务器场景。
确认当前状态和默认区域
先看清防火墙是否运行、用的哪个区域:
-
检查服务状态:
sudo systemctl status firewalld(若未运行,用sudo systemctl start firewalld启动) -
查看当前活动区域及接口绑定:
sudo firewall-cmd --get-active-zones -
查默认区域(多数是 public):
sudo firewall-cmd --get-default-zone -
看该区域全部规则:
sudo firewall-cmd --zone=public --list-all
开放 Web 服务(HTTP/HTTPS)
这是最常见需求,推荐用预定义服务名,比手动开端口更安全、可维护性更强:
- 永久添加 http 和 https 服务:
sudo firewall-cmd --permanent --add-service=http和sudo firewall-cmd --permanent --add-service=https - 立即生效(不重启服务):
sudo firewall-cmd --reload - 验证:执行
sudo firewall-cmd --list-services应看到http https ssh等(取决于当前区域)
注意:这些命令默认作用于 默认区域;如需指定区域(比如 internal),加 --zone=internal 参数即可。
开放自定义端口或端口范围
当没有现成服务模板(如私有 API、游戏端口、监控端口),就直接操作端口:
- 开放单个 TCP 端口(如 8080):
sudo firewall-cmd --permanent --add-port=8080/tcp - 开放 UDP 端口(如 DNS 查询):
sudo firewall-cmd --permanent --add-port=53/udp - 开放连续端口范围(如 FTP 被动模式):
sudo firewall-cmd --permanent --add-port=30000-31000/tcp - 移除某个端口:
sudo firewall-cmd --permanent --remove-port=8080/tcp
所有 --permanent 操作后必须执行 sudo firewall-cmd --reload 才真正落地。
绑定网卡到特定区域(双网卡典型场景)
例如外网卡走 public(只开 SSH),内网卡走 internal(信任局域网):
- 查网卡名:
ip -br a(常见如 ens33、eth0、enp0s3) - 将内网卡 enp0s8 绑定到 internal 区域:
sudo firewall-cmd --permanent --zone=internal --add-interface=enp0s8 - 将外网卡 enp0s3 绑定到 public 区域:
sudo firewall-cmd --permanent --zone=public --add-interface=enp0s3 - 设置默认区域为 public(避免新接口误入高信任区):
sudo firewall-cmd --set-default-zone=public - 重载生效:
sudo firewall-cmd --reload
绑定后,firewall-cmd --get-active-zones 会显示每个接口所属 zone,各 zone 规则独立生效。










