firewalld核心是“先定区域、再配规则”,区域决定信任等级,端口或服务决定放行流量;必须明确当前区域(如public、dmz)并配合--permanent与--reload实现持久化生效。
Firewalld 的区域与端口管理,核心是“先定区域、再配规则”,不是直接操作端口,而是把端口放进某个区域的策略里。区域决定信任等级,端口(或服务)决定放行什么流量——两者结合才构成完整访问控制。
区域是策略容器,必须知道规则加在哪个区域才生效。常见误区是默认用 public,但实际网卡可能属于别的区域。
firewall-cmd --get-zones
firewall-cmd --get-active-zones
firewall-cmd --zone=public --list-all
firewall-cmd --zone=dmz --add-interface=eth0
firewall-cmd --permanent --set-default-zone=work,之后要 --reload
端口开放必须指定协议(tcp 或 udp),且区分临时和永久。不加 --permanent 的操作重启后失效。
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=53/udp --permanent
firewall-cmd --zone=public --add-port={80,443,8080}/tcp --permanent
firewall-cmd --zone=public --add-port=3000-3100/tcp --permanent
firewall-cmd --zone=public --query-port=8080/tcp(返回 yes 即成功)firewalld 预定义了 http、ssh、mysql 等服务,它们自带端口+协议+辅助规则(如连接跟踪),比手动开端口更安全、可维护性更强。
firewall-cmd --get-services
firewall-cmd --zone=public --add-service=http --permanent
/etc/firewalld/services/):firewall-cmd --reload 后再 --add-service=myservice
firewall-cmd --zone=public --remove-service=ftp --permanent
所有带 --permanent 的操作只是写入配置文件,不会立即生效;所有不带 --permanent 的操作即时生效但不持久。两者都要配合重载才能完成闭环。
firewall-cmd --reload
firewall-cmd --state(返回 running 表示正常)journalctl -u firewalld 查错误日志