非常好 👍
下面是一个完整的、系统化的笔记教程:

🔥 firewall-cmd —— Linux 防火墙规则管理工具详解(CentOS / RHEL / Fedora 通用)


📘 一、工具简介

firewall-cmdfirewalld 服务的命令行管理工具,用于在 Linux 系统中配置防火墙规则。

与传统的 iptables 相比,它具备以下优点:

✅ 动态管理规则(无需重启防火墙)
✅ 支持区域(Zone)概念,按信任级别分层管理
✅ 支持服务(service)和端口(port)两种方式定义访问规则
✅ 语法更清晰,易于脚本化配置


⚙️ 二、基本命令结构

firewall-cmd [选项] [参数]

常见选项:

选项含义
--state查看防火墙是否运行
--zone指定区域(如 public、internal、trusted 等)
--list-all显示当前区域的全部规则
--add-service添加放行服务(如 http、ssh)
--add-port添加放行端口(如 80/tcp)
--remove-service删除已放行服务
--remove-port删除已放行端口
--reload重新加载防火墙配置(不丢失运行状态)
--permanent永久生效(写入配置文件)

🚀 三、常用操作大全

1️⃣ 查看防火墙状态

firewall-cmd --state

返回结果:

  • running:防火墙正在运行
  • not running:未运行

2️⃣ 启动 / 停止 / 重启防火墙服务

systemctl start firewalld     # 启动
systemctl stop firewalld      # 停止
systemctl restart firewalld   # 重启
systemctl enable firewalld    # 设置开机自启


3️⃣ 查看当前区域和活动接口

firewall-cmd --get-active-zones

返回示例:

public
  interfaces: eth0


4️⃣ 查看当前区域的所有规则

firewall-cmd --list-all

输出示例:

public (active)
  target: default
  interfaces: eth0
  services: ssh dhcpv6-client
  ports: 80/tcp 443/tcp
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:


5️⃣ 添加放行端口

临时放行(立即生效,重启失效)

firewall-cmd --zone=public --add-port=8080/tcp

永久放行(需 reload 才生效)

firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --reload

删除放行端口

firewall-cmd --zone=public --remove-port=8080/tcp
firewall-cmd --reload


6️⃣ 放行指定服务

firewalld 预定义了一些常见服务(ssh、http、https、mysql 等)

查看所有可用服务:

firewall-cmd --get-services

放行服务(如 HTTP):

firewall-cmd --permanent --add-service=http
firewall-cmd --reload

删除服务:

firewall-cmd --permanent --remove-service=http
firewall-cmd --reload


7️⃣ 放行 IP 地址 / IP 段

允许特定 IP 访问:

firewall-cmd --permanent --add-source=192.168.1.100
firewall-cmd --reload

允许整个网段访问:

firewall-cmd --permanent --add-source=192.168.1.0/24


8️⃣ 拒绝特定 IP(阻止访问)

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.105" reject'
firewall-cmd --reload

删除规则:

firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.105" reject'
firewall-cmd --reload


9️⃣ 启用 NAT 转发(端口映射)

例如:把外部 8080 映射到内部 80 端口:

firewall-cmd --permanent --add-forward-port=port=8080:proto=tcp:toport=80
firewall-cmd --reload

启用 IP 伪装(常用于 NAT)

firewall-cmd --permanent --add-masquerade
firewall-cmd --reload


🔟 临时与永久规则的区别

类型是否立即生效是否重启后保留是否需要 reload
临时(默认)✅ 是❌ 否
永久(--permanent❌ 否✅ 是✅ 需 firewall-cmd --reload

最佳实践:
添加规则时使用:

firewall-cmd --permanent ...
firewall-cmd --reload


🧩 十一、Zones(区域)说明

每个网络接口都属于一个区域,区域定义了该网络的信任级别。

区域描述
drop丢弃所有传入包(无回应)
block拒绝所有连接(返回拒绝信息)
public默认区域,信任低,仅放行指定服务
external外网区域,常用于 NAT 网关
internal内网区域,信任较高
trusted完全信任,允许所有流量

查看所有区域:

firewall-cmd --get-zones

设置接口所属区域:

firewall-cmd --zone=internal --change-interface=eth0 --permanent
firewall-cmd --reload


🧱 十二、规则备份与恢复

导出当前配置:

firewall-cmd --runtime-to-permanent

备份配置文件:

cp -r /etc/firewalld /etc/firewalld.backup

恢复配置:

cp -r /etc/firewalld.backup/* /etc/firewalld/
firewall-cmd --reload


🧾 十三、实用命令速查表

功能命令
查看状态firewall-cmd --state
列出当前规则firewall-cmd --list-all
添加端口firewall-cmd --permanent --add-port=80/tcp
删除端口firewall-cmd --permanent --remove-port=80/tcp
添加服务firewall-cmd --permanent --add-service=http
添加 IP 白名单firewall-cmd --permanent --add-source=192.168.1.10
阻止 IPfirewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="x.x.x.x" reject'
查看区域接口firewall-cmd --get-active-zones
重载配置firewall-cmd --reload

🧠 十四、总结

特点firewalld (firewall-cmd)iptables
动态规则✅ 支持动态修改❌ 重载需中断连接
使用难度简单复杂
配置方式基于区域与服务基于链与表
常见于CentOS 7+ / RHEL 8+CentOS 6 / Ubuntu old

💡 建议:生产环境使用 firewalld,复杂场景(如容器编排)可结合 iptablesnftables