配置 firewalld 的 drop 策略后端口不通,核心原因是未显式放行所需服务或端口。若已经导致无法远程连接,需通过控制台紧急停止服务恢复;若正在配置,务必先放行管理通道。
先说结论:drop 策略会丢弃所有未明确允许的流量,配置前必须先放行关键端口,否则会导致无法远程连接。
- 适合:需要严格限制入站流量的安全加固场景
- 先准备:确保拥有服务器控制台权限,防止 SSH 被误锁
- 验收:配置完成后立即测试业务端口和管理端口连通性
- 应急:若已锁死,通过控制台执行 systemctl stop firewalld 恢复
命令速用版
# 查看防火墙状态
systemctl status firewalld
# 放行 SSH 服务(防止锁死)
firewall-cmd `--permanent` `--add-service`=ssh
# 放行业务端口(例如 80)
firewall-cmd `--permanent` `--add-port`=80/tcp
# 设置区域目标为 DROP
firewall-cmd `--permanent` `--set-target`=DROP
# 重载配置生效
firewall-cmd `--reload`为什么会这样
firewalld 基于区域(zone)管理流量,每个区域有一个默认目标(target)。当目标设置为 DROP 时,防火墙会 silently discard(静默丢弃)所有未在允许列表中的入站数据包。这与默认的 reject 不同,reject 会返回拒绝信号,而 drop 会让请求方一直等待直到超时。如果在设置 DROP 之前没有把 SSH 或业务端口加入允许列表,这些端口的流量也会被一并丢弃,导致外部无法访问。
分步处理(配置前预防)
第一步:确认当前状态
执行 firewall-cmd `--state` 确认服务运行中,使用 firewall-cmd `--get-default-zone` 查看默认区域,通常是 public。
第二步:添加允许规则
务必先添加管理端口和业务端口。使用 `--permanent` 参数确保重启后生效。例如:firewall-cmd `--permanent` `--add-service`=ssh。
第三步:设置 Drop 策略
确认规则添加无误后,执行 firewall-cmd `--permanent` `--set-target`=DROP。注意不要漏掉 `--permanent`,否则重启后策略会还原。
第四步:重载与回滚准备
执行 firewall-cmd `--reload`。在执行此命令前,请确保你拥有服务器的控制台(VNC/IPMI)访问权限,一旦 SSH 断开,可通过控制台登录修复。
紧急恢复方案(已锁死情况)
如果配置失误导致 SSH 无法连接,且没有提前保留其他访问通道,请按以下步骤操作:
1. 通过控制台登录
登录云厂商控制台或物理机 IPMI/VNC,使用 root 账号直接登录系统。此时不受防火墙网络限制。
2. 紧急停止防火墙
执行以下命令暂时关闭防火墙,恢复网络连接:
systemctl stop firewalld3. 修正配置
网络恢复后,检查并修正错误的防火墙规则,确认 SSH 端口已放行,再重新启动防火墙:
systemctl start firewalld
firewall-cmd `--reload`4. 重置配置(可选)
若配置混乱无法排查,可重置防火墙为默认状态(会清除所有自定义规则):
firewall-cmd `--panic-off`
firewall-cmd `--reload`云服务器特殊情况
1. 安全组优先级
云服务器(如阿里云、腾讯云、AWS)外层还有安全组(Security Group)。即使内部 firewalld 放行,若安全组未放行对应端口,外部依然无法访问。请优先检查云控制台的安全组规则。
2. 控制台救援模式
若无法通过 VNC 登录,部分云厂商提供“重置密码”或“救援模式”功能,可挂载系统盘修复配置文件 /etc/firewalld/zones/*.xml。
怎么验证是否生效
1. 查看配置列表
运行 firewall-cmd `--list-all`,检查 target 是否显示为 DROP,以及 services 和 ports 列表中是否包含你放行的项目。
2. 外部连通性测试
从另一台机器使用 telnet <IP> <端口> 或 curl -v http://<IP> 测试。放行的端口应能连接,未放行的端口应表现为连接超时(timeout)。
3. 日志检查
查看 /var/log/firewalld 或使用 dmesg 观察是否有相关的丢弃记录,但注意 drop 策略默认可能不记录日志,需开启日志记录功能才能看到。
常见坑
1. 运行时与永久配置混淆
不带 `--permanent` 的命令只在当前运行时生效,重启防火墙或系统后会丢失。建议先配永久规则,再重载。
2. SSH 被误锁
这是最危险的情况。如果在设置 DROP 前未添加 ssh 服务,或者默认区域绑定错了网卡,会导致立即断连。务必先加 SSH 规则。
3. 区域绑定错误
firewalld 可以针对不同网卡设置不同区域。确保你修改的是当前网络接口绑定的区域,而不是其他未使用的区域。