Firewalld规则生效需明确区域绑定与永久配置:先查网卡所属区域,再用--permanent加服务/端口并执行--reload;临时操作重启后失效,仅--list-all等命令可验证实际生效规则。
Firewalld 管理区域和开放端口,核心是搞清“区域决定策略范围,服务/端口决定放行内容”,并且必须区分临时配置与永久生效——漏掉 --permanent 或忘记 firewall-cmd --reload,规则就只是“看起来开了”。
firewalld 按网卡(接口)应用规则,不是全局统一设置。得先知道你的网卡绑在哪个 zone 上:
firewall-cmd --get-active-zones
firewall-cmd --get-default-zone
firewall-cmd --get-zone-of-interface=eth0
如果返回为空,说明这块网卡还没绑定到任何区域,后面开的端口很可能不生效。
区域切换分临时和永久两种,用途完全不同:
firewall-cmd --zone=home --change-interface=eth0
firewall-cmd --permanent --zone=dmz --add-interface=eth0
firewall-cmd --permanent --set-default-zone=dmz
⚠️ 所有带 --permanent 的命令,都必须执行 firewall-cmd --reload 才真正落地。
firewalld 内置了 http、ssh、dns 等 service 定义,比直接开 TCP/UDP 端口更安全、更规范:
firewall-cmd --permanent --add-service=http 和 --add-service=https
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-service=dns
firewall-cmd --permanent --zone=public --add-service=ssh
别靠猜,用命令直接看结果:
firewall-cmd --list-all
firewall-cmd --zone=trusted --list-all
firewall-cmd --list-services
firewall-cmd --list-ports
如果刚加的 service 或 port 不在列表里,八成是没加 --permanent,或者加了但没 --reload。