CentOS 7 防火墙开启后 SSH 连接报错 Connection timed out 怎么解决

文章导读
大多数情况下是因为防火墙默认策略未放行 SSH 端口,需要在 firewalld 中显式添加 ssh 服务或 22 端口,操作前务必确保拥有服务器控制台权限以防失联。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 紧急恢复:失联后如何通过云控制台修复
  6. F 常见坑
A A

大多数情况下是因为防火墙默认策略未放行 SSH 端口,需要在 firewalld 中显式添加 ssh 服务或 22 端口,操作前务必确保拥有服务器控制台权限以防失联。

先说结论:这是防火墙默认拦截策略导致的连通性问题,优先通过 firewall-cmd 放行服务,操作期间保持控制台连接可用。

  • 先确认:检查 firewalld 状态及当前放行规则
  • 先处理:添加 ssh 服务到永久规则并重载配置
  • 再验证:使用新终端测试连接并查看防火墙日志

命令速用版

如果你急需恢复连接且确认当前会话未断开,可依次执行以下命令。注意:一旦当前 SSH 会话断开,若规则未生效将无法再次连接,请务必保留控制台访问方式。

systemctl status firewalld
firewall-cmd `--permanent` `--add-service`=ssh
firewall-cmd `--reload`
firewall-cmd `--list-all`

为什么会这样

CentOS 7 默认使用 firewalld 作为动态防火墙管理器。开启防火墙后,默认区域(public)的策略通常是丢弃未明确允许的入站流量。SSH 服务监听 22 端口,如果该端口未被添加到允许列表中,外部发起的连接请求会被防火墙直接丢弃,客户端表现为 Connection timed out。

此外,有时虽然添加了规则,但未执行 reload 或未使用 `--permanent` 参数,导致重启后失效或当前会话未即时生效。

分步处理

步骤 1:确认防火墙状态

先查看防火墙是否正在运行,避免对未开启的服务做无效配置。

CentOS 7 防火墙开启后 SSH 连接报错 Connection timed out 怎么解决
systemctl is-active firewalld

若返回 active,则继续下一步。若返回 inactive,则超时问题可能源于其他网络配置或安全组。

步骤 2:放行 SSH 服务

使用 `--permanent` 参数确保规则写入配置文件,重启后依然有效。

firewall-cmd `--permanent` `--add-service`=ssh

如果自定义了 SSH 端口(非 22),请使用端口模式:

firewall-cmd `--permanent` `--add-port`=2222/tcp

步骤 3:重载防火墙配置

修改永久规则后必须重载才能生效,这一步会应用新规则。

CentOS 7 防火墙开启后 SSH 连接报错 Connection timed out 怎么解决
firewall-cmd `--reload`

步骤 4:检查区域设置

确认网卡绑定的区域是否正确,默认通常为 public。

firewall-cmd `--get-active-zones`

怎么验证是否生效

不要直接关闭当前 SSH 窗口。新开一个终端窗口尝试连接:

ssh -v user@your_server_ip

观察输出是否卡在 Connecting 还是进入 Authentication。同时可在服务器端查看防火墙日志确认是否有放行记录:

journalctl -u firewalld -f

也可使用以下命令确认端口是否在允许列表中:

CentOS 7 防火墙开启后 SSH 连接报错 Connection timed out 怎么解决
firewall-cmd `--list-services`

此外,建议使用 telnet 或 nc 从外部测试端口连通性:

nc -zv your_server_ip 22

紧急恢复:失联后如何通过云控制台修复

如果操作失误导致 SSH 无法连接,请立即使用云厂商提供的远程控制台(VNC/终端)登录服务器。

临时恢复连接:

systemctl stop firewalld

停止防火墙后通常可立即恢复 SSH 连接,随后再按上述步骤重新配置规则。

永久修复:

登录控制台后,重新执行放行命令并启动防火墙:

firewall-cmd `--permanent` `--add-service`=ssh
firewall-cmd `--reload`
systemctl start firewalld

常见坑

  • 失联风险:在远程 SSH 会话中操作防火墙,一旦规则错误且当前连接断开,将无法再次登录。务必先测试云厂商的控制台(VNC)是否能登录。
  • 临时与永久:不加 `--permanent` 参数规则仅在内存中生效,重启服务器或重载后会丢失。
  • 安全组冲突:云服务器(如阿里云、腾讯云)除了系统防火墙,还有外层安全组。若安全组未放行 22 端口,系统内配置正确也无法连接。
  • SELinux 干扰:虽然少见,但若修改了 SSH 默认端口,需同时调整 SELinux 策略,否则可能拒绝连接。