firewalld 是现代 linux 默认动态防火墙工具,基于 d-bus 与 netfilter 协作,支持区域化策略、服务抽象和运行时/永久配置分离;核心操作包括状态管理、zone 切换、服务/端口开放及富规则控制。

firewalld 是 CentOS/RHEL 7+ 和多数现代 Linux 发行版默认的动态防火墙管理工具,它不直接操作内核规则,而是通过 D-Bus 与 netfilter 协同工作,支持运行时和永久配置分离、区域化策略、服务抽象等特性。掌握它的核心逻辑比死记命令更重要。
查状态、启停与开机自启
确认防火墙是否在运行是所有操作的前提:
- 查看服务状态:
systemctl status firewalld(看 Active 是否为 running) - 检查 firewalld 运行状态:
firewall-cmd --state(返回 running 或 not running) - 启动服务:
systemctl start firewalld - 停止服务:
systemctl stop firewalld - 设置开机自启:
systemctl enable firewalld;禁用:systemctl disable firewalld
理解 zone(区域)与默认行为
firewalld 按信任等级划分网络环境,默认区域是 public,它只放行 SSH、DHCP 客户端等极少数服务。其他常见区域按安全强度从高到低排列为:drop → block → public → external → dmz → work → home → trusted。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 查看当前激活的区域:
firewall-cmd --get-active-zones - 查看默认区域:
firewall-cmd --get-default-zone - 查看某接口(如 eth0)所属区域:
firewall-cmd --get-zone-of-interface=eth0 - 临时切换接口到指定区域:
firewall-cmd --zone=home --change-interface=eth0
开放服务或端口(最常用操作)
推荐优先使用预定义的 service(如 http、https、ssh),它们已内置协议、端口和辅助模块;只有 service 不满足时才用 port。
- 永久开放 HTTP 和 HTTPS:
firewall-cmd --permanent --add-service=http和--add-service=https - 永久开放 MySQL 端口:
firewall-cmd --permanent --add-port=3306/tcp - 开放 UDP 的 DNS:
firewall-cmd --permanent --add-service=dns(它已包含 tcp/udp 53) - 添加后必须重载生效:
firewall-cmd --reload - 查看当前区域开放了哪些服务:
firewall-cmd --list-services;端口:firewall-cmd --list-ports
高级控制:富规则与紧急模式
当需要基于源 IP、限速、日志或复杂条件时,用 rich rule;遇到误配导致失联,可用 panic 模式快速止损。
- 仅允许 192.168.10.0/24 访问 SSH:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" service name="ssh" accept' - 对某 IP 段启用连接速率限制(防爆破):
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" port port="22" protocol="tcp" limit value="3/m" accept' - 开启 panic 模式(丢弃所有入站):
firewall-cmd --panic-on;关闭:firewall-cmd --panic-off










