一、命令简介firewall-cmd是 firewalld 防火墙服务的命令行管理工具。firewalld 是 CentOS/RHEL 7 及更高版本中引入的下一代防火墙解决方案相比传统的 iptables 具有以下主要优势动态规则管理规则修改后无需重启服务即可立即生效。区域Zone概念提供更灵活的网络安全策略管理。人性化配置无需深入理解 iptables 的复杂链式结构即可完成大部分配置。服务抽象通过预定义的服务配置文件简化端口管理。重要说明firewalld 本身不直接处理网络流量它通过内核的 netfilter 框架与 iptables 相同实现防火墙功能但提供了更高级、更易用的配置接口。二、语法格式bash运行firewall-cmd [选项] [命令参数]三、常用选项及说明3.1 通用选项表格选项说明-h, --help显示帮助信息-V, --version显示版本信息不能与其他选项组合使用-q, --quiet静默模式不打印状态消息--permanent永久性配置重启后生效需配合 --reload 使配置立即生效3.2 状态与配置选项表格选项说明--state显示 firewalld 运行状态--reload重新加载永久配置不中断现有连接--complete-reload完全重新加载中断所有连接--runtime-to-permanent将当前运行时规则保存为永久规则--check-config检查配置文件语法正确性3.3 区域管理选项表格选项说明--get-default-zone显示默认区域--set-default-zonezone设置默认区域--get-active-zones显示活动区域--get-zones显示所有可用区域--zonezone指定要操作的区域3.4 服务与端口管理表格选项说明--get-services显示所有预定义服务--list-services显示当前区域允许的服务--add-serviceservice添加服务到当前区域--remove-serviceservice从当前区域移除服务--list-ports显示当前区域开放的端口--add-portport/protocol添加端口到当前区域--remove-portport/protocol从当前区域移除端口3.5 接口管理表格选项说明--get-zone-of-interfaceinterface显示接口所属区域--change-interfaceinterface更改接口所属区域--add-interfaceinterface添加接口到指定区域3.6 高级功能表格选项说明--query-masquerade检查是否启用 IP 伪装--add-masquerade启用 IP 伪装--remove-masquerade禁用 IP 伪装--add-forward-port添加端口转发规则--remove-forward-port移除端口转发规则--list-forward-ports列出端口转发规则--panic-on启用紧急模式拒绝所有流量--panic-off禁用紧急模式--query-panic检查紧急模式状态四、示例用法4.1 基本状态管理bash运行# 查看 firewalld 状态 firewall-cmd --state # 查看版本信息 firewall-cmd --version # 启动/停止/启用/禁用/查看 firewalld 服务 systemctl start firewalld systemctl stop firewalld systemctl enable firewalld systemctl disable firewalld systemctl status firewalld4.2 区域管理bash运行# 查看所有可用区域 firewall-cmd --get-zones # 查看默认区域 firewall-cmd --get-default-zone # 设置默认区域为 home firewall-cmd --set-default-zonehome # 查看活动区域及绑定的接口 firewall-cmd --get-active-zones # 查看指定接口所属区域 firewall-cmd --get-zone-of-interfaceeth0 # 将接口 eth0 添加到 public 区域临时生效 firewall-cmd --zonepublic --add-interfaceeth0 # 永久修改接口区域 firewall-cmd --permanent --zoneinternal --change-interfaceeth0 firewall-cmd --reload4.3 服务管理bash运行# 查看所有预定义服务 firewall-cmd --get-services # 查看当前区域允许的服务 firewall-cmd --list-services # 临时允许 SSH 服务 firewall-cmd --add-servicessh # 永久允许 HTTP 服务到 internal 区域 firewall-cmd --permanent --zoneinternal --add-servicehttp firewall-cmd --reload # 移除服务 firewall-cmd --remove-serviceftp # 临时允许 Samba 服务 600 秒 firewall-cmd --add-servicesamba --timeout6004.4 端口管理bash运行# 查看当前区域开放的端口 firewall-cmd --list-ports # 临时开放 TCP 8080 端口 firewall-cmd --add-port8080/tcp # 永久开放 TCP 443 和 UDP 53 端口 firewall-cmd --permanent --add-port443/tcp firewall-cmd --permanent --add-port53/udp firewall-cmd --reload # 开放端口范围 firewall-cmd --add-port6000-6010/tcp # 移除端口 firewall-cmd --remove-port8080/tcp4.5 高级配置4.5.1 IP 伪装MASQUERADEbash运行# 检查是否启用 IP 伪装 firewall-cmd --query-masquerade # 为指定区域如 public启用 IP 伪装临时 firewall-cmd --zonepublic --add-masquerade # 永久启用并生效 firewall-cmd --permanent --zonepublic --add-masquerade firewall-cmd --reload4.5.2 端口转发bash运行# 将发往本机 80 端口的 TCP 流量转发到 192.168.1.10 的 8080 端口 firewall-cmd --add-forward-portport80:prototcp:toport8080:toaddr192.168.1.10 # 移除上述转发规则 firewall-cmd --remove-forward-portport80:prototcp:toport8080:toaddr192.168.1.104.5.3 紧急模式bash运行# 开启紧急模式立即阻断所有网络连接用于紧急情况 firewall-cmd --panic-on # 关闭紧急模式 firewall-cmd --panic-off # 查询当前是否处于紧急模式 firewall-cmd --query-panic五、注意事项服务状态任何firewall-cmd操作的前提是 firewalld 服务处于运行状态。请使用systemctl status firewalld确认。运行时 vs 永久配置默认情况下命令修改的是运行时配置重启服务或系统后会丢失。若需永久生效必须使用--permanent选项。重新加载配置使用--permanent选项进行修改后必须执行firewall-cmd --reload才能使永久配置在运行时生效。区域概念理解 “区域” 是使用 firewalld 的关键。每个接口必须属于一个区域该区域的规则决定了该接口的访问策略。规则冲突当同时通过服务如--add-servicehttp和端口如--add-port80/tcp两种方式开放同一访问时规则不会冲突两者都会生效。紧急模式--panic-on命令会立即切断所有网络连接可能导致远程管理中断请谨慎使用并确保有本地控制台访问权限。获取更多Linux学习资料请关注“阿成学长工具包”对话框中输入2647获取