firewalld 阻断外部访问时需检查服务状态、区域配置、端口/服务开放及富规则设置:一、用 firewall-cmd --state 和 systemctl 管理服务;二、通过 --get-active-zones 和 --change-interface 调整 zone;三、用 --add-service 或 --add-port 开放端口并 --reload 生效;四、用 --add-rich-rule 实现源ip、限速等精细控制;五、用 --list-all 等命令验证规则。

如果您在 Linux 系统中部署服务后无法从外部访问,很可能是 firewalld 防火墙默认策略阻断了入站流量。以下是针对 firewalld 规则管理的多种实操方法,覆盖状态控制、区域配置、端口与服务开放、富规则设置等核心场景:
一、确认并管理 firewalld 服务状态
firewalld 服务必须处于运行状态,所有规则配置才能生效;其运行时配置与永久配置分离,需明确区分操作类型。
1、检查当前服务是否运行:firewall-cmd --state
2、查看 systemd 服务详细状态:systemctl status firewalld
3、启动 firewalld(临时):systemctl start firewalld
4、设置开机自启(永久):systemctl enable firewalld
5、停止服务并禁用自启:systemctl stop firewalld && systemctl disable firewalld
二、识别并调整区域(zone)配置
firewalld 按信任等级划分网络环境,不同 zone 具有预设的安全策略;接口绑定到 zone 后即应用对应规则,修改 zone 是调整整体策略的基础。
1、列出所有可用区域:firewall-cmd --get-zones
2、查看当前激活的区域及绑定接口:firewall-cmd --get-active-zones
3、查询默认区域名称:firewall-cmd --get-default-zone
4、将网卡 ens33 临时切换至 home 区域:firewall-cmd --zone=home --change-interface=ens33
5、永久设置默认区域为 dmz:firewall-cmd --set-default-zone=dmz
6、将接口永久加入指定区域:firewall-cmd --permanent --zone=dmz --add-interface=ens33
三、永久开放服务或端口
推荐优先使用预定义 service(如 http、ssh),因其已封装协议、端口及辅助模块;仅当 service 不满足需求时,才直接操作 port。
1、永久开放 HTTP 和 HTTPS 服务:firewall-cmd --permanent --add-service=http && firewall-cmd --permanent --add-service=https
2、永久开放 MySQL 默认端口:firewall-cmd --permanent --add-port=3306/tcp
3、永久开放 DNS 服务(自动包含 TCP/UDP 53):firewall-cmd --permanent --add-service=dns
4、永久开放 FTP 及被动模式端口范围:firewall-cmd --permanent --add-service=ftp && firewall-cmd --permanent --add-port=30000-31000/tcp
5、重载配置使永久规则生效:firewall-cmd --reload
四、使用富规则(rich rule)实现精细化控制
富规则支持基于源地址、目标端口、协议、日志等条件组合的高级策略,适用于白名单访问、限速、审计等复杂场景。
1、仅允许 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'
2、拒绝来自 203.0.113.5 的所有连接并记录日志:firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.5" log prefix="blocked_ip" level="info" reject'
3、对特定 IP 的 HTTP 请求启用连接限制(每分钟最多 10 次):firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.5.100" service name="http" limit value="10/m" accept'
4、添加后必须执行重载:firewall-cmd --reload
五、验证与调试当前规则
配置完成后需立即验证实际生效策略,避免因未重载、区域错配或命令遗漏导致规则未应用。
1、查看默认区域全部配置(含服务、端口、富规则):firewall-cmd --list-all
2、仅列出当前区域已开放的服务:firewall-cmd --list-services
3、仅列出当前区域已开放的端口:firewall-cmd --list-ports
4、查看某接口所属区域:firewall-cmd --get-zone-of-interface=ens33
5、测试紧急模式快速封锁(失联时应急):firewall-cmd --panic-on
6、退出紧急模式:firewall-cmd --panic-off










