公司动态

firewalld 防火墙命令使用说明

📅 2026/8/25 15:18:08
firewalld 防火墙命令使用说明
一、基础概念zone区域firewalld 使用区域来定义不同信任级别的网络环境如public公共网络、internal内部网络、trusted完全信任等。service服务预定义的服务配置如http、ssh、mysql等包含相关端口和协议。runtime运行时立即生效但重启后丢失。permanent永久写入配置文件需重载才能生效。二、服务管理命令# 查看 firewalld 状态 systemctl status firewalld # 启动/停止/重启/重载 systemctl start firewalld systemctl stop firewalld systemctl restart firewalld firewall-cmd --reload # 重载规则不中断连接 firewall-cmd --complete-reload # 完全重载会中断连接 # 开机自启 systemctl enable firewalld三、查看与查询命令# 查看 firewalld 是否运行 firewall-cmd --state # 查看默认 zone firewall-cmd --get-default-zone # 查看当前生效的 zone firewall-cmd --get-active-zones # 查看所有 zone 列表 firewall-cmd --get-zones # 查看指定 zone 的详细信息 firewall-cmd --zonepublic --list-all # 查看所有 zone 的详细信息 firewall-cmd --list-all-zones # 查看支持的服务列表 firewall-cmd --get-services # 查看某个服务配置 firewall-cmd --info-servicessh四、Zone 管理# 设置默认 zone firewall-cmd --set-default-zonepublic # 将网卡绑定到指定 zone永久生效 firewall-cmd --permanent --zoneinternal --change-interfaceeth0 # 查看网卡所属 zone firewall-cmd --get-zone-of-interfaceeth0五、服务管理放行/拒绝服务# 临时放行服务仅当前生效 firewall-cmd --zonepublic --add-servicehttp # 永久放行服务 firewall-cmd --permanent --zonepublic --add-servicehttp # 移除服务 firewall-cmd --permanent --zonepublic --remove-servicehttp # 同时放行多个服务 firewall-cmd --permanent --zonepublic --add-servicehttp --add-servicehttps # 重载使永久配置生效 firewall-cmd --reload六、端口管理放行/拒绝端口# 临时放行端口 firewall-cmd --zonepublic --add-port8080/tcp # 永久放行端口 firewall-cmd --permanent --zonepublic --add-port8080/tcp # 放行端口范围 firewall-cmd --permanent --zonepublic --add-port10000-20000/tcp # 移除端口 firewall-cmd --permanent --zonepublic --remove-port8080/tcp # 查看已放行端口 firewall-cmd --zonepublic --list-ports七、富规则Rich Rules富规则支持更精细的控制如限制 IP、端口、协议等。# 允许特定 IP 访问所有端口 firewall-cmd --permanent --zonepublic --add-rich-rulerule familyipv4 source address192.168.1.100 accept # 拒绝特定 IP 访问 firewall-cmd --permanent --zonepublic --add-rich-rulerule familyipv4 source address10.0.0.50 reject # 允许特定 IP 访问特定端口 firewall-cmd --permanent --zonepublic --add-rich-rulerule familyipv4 source address192.168.1.0/24 port protocoltcp port3306 accept # 限制 SSH 访问速率防暴力破解 firewall-cmd --permanent --zonepublic --add-rich-rulerule service namessh accept limit value3/minute # 允许特定 IP 的 ping firewall-cmd --permanent --zonepublic --add-rich-rulerule protocol valueicmp source address192.168.1.0/24 accept # 查看所有富规则 firewall-cmd --zonepublic --list-rich-rules # 移除富规则需完整写出规则内容 firewall-cmd --permanent --zonepublic --remove-rich-rulerule familyipv4 source address10.0.0.50 reject示例只对172.16.0.128放行nginx拒绝其他ip访问。防火墙规则存在优先级问题。在firewalld中reject规则会覆盖accept规则因为规则是按顺序匹配的先添加了accept规则后添加了reject规则。# 拒绝所有其他IP访问nginx端口 firewall-cmd --permanent --add-rich-rulerule familyipv4 port protocoltcp port80 reject # 放行机房服务器访问nginx firewall-cmd --permanent --add-rich-rulerule familyipv4 source address172.16.0.128/32 port protocoltcp port80 accept # 重载生效 firewall-cmd --reload # 查看rich规则 firewall-cmd --list-rich-rules删除规则firewall-cmd --permanent --remove-rich-rulerule familyipv4 source address172.16.0.128/32 port protocoltcp port80 accept firewall-cmd --permanent --remove-rich-rulerule familyipv4 port protocoltcp port80 reject # 重载生效 firewall-cmd --reload八、NAT / 端口转发# 端口转发将外部 8080 转发到内部 80 firewall-cmd --permanent --zonepublic --add-forward-portport8080:prototcp:toport80 # 端口转发到另一台机器 firewall-cmd --permanent --zonepublic --add-forward-portport8080:prototcp:toaddr192.168.1.10:toport80 # 开启地址伪装MASQUERADE用于共享上网 firewall-cmd --permanent --zonepublic --add-masquerade # 关闭地址伪装 firewall-cmd --permanent --zonepublic --remove-masquerade九、常用 zone 说明Zone说明drop丢弃所有进入的数据包无响应block拒绝所有进入的数据包返回拒绝响应public默认仅允许选定的服务external用于外部网络开启 NAT 伪装internal用于内部网络信任度较高dmz用于隔离区DMZwork用于工作网络home用于家庭网络trusted允许所有流量十、常用场景示例场景 1放行 Web 服务firewall-cmd --permanent --zonepublic --add-servicehttp firewall-cmd --permanent --zonepublic --add-servicehttps firewall-cmd --reload场景 2放行自定义端口firewall-cmd --permanent --zonepublic --add-port3000/tcp firewall-cmd --reload场景 3仅允许内网访问 MySQLfirewall-cmd --permanent --zonepublic --add-rich-rulerule familyipv4 source address192.168.0.0/16 port protocoltcp port3306 accept firewall-cmd --reload场景 4临时放行端口测试用firewall-cmd --zonepublic --add-port8080/tcp # 测试完成后移除 firewall-cmd --zonepublic --remove-port8080/tcp十一、注意事项永久配置需重载使用--permanent参数后必须执行firewall-cmd --reload才能生效。运行时 vs 永久不带--permanent的命令立即生效但重启后失效适合临时测试。备份配置firewalld 配置文件位于/etc/firewalld/修改前建议备份。与 iptables 共存firewalld 和 iptables 服务不建议同时启用避免规则冲突。Docker 冲突使用 Docker 时firewalld 可能会影响容器网络需注意 zone 和规则配置。