一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

ubuntu防火墙连接被拒绝如何办

时间:2026-08-05 08:26:48 编辑:袖梨 来源:一聚教程网

Ubuntu 防火墙导致 Connection refused 的定位与修复

ubuntu防火墙连接被拒绝怎么办

一、先快速判断是否为防火墙问题

  1. 在服务器本机检查 SSH 是否在监听:sudo ss -tulnp | grep :22(或 sudo netstat -tulnp | grep :22)。若没有输出,通常是 SSH 服务未安装或未启动,先处理服务再谈防火墙。
  2. 查看防火墙状态与规则:
    1. UFW:sudo ufw status(应看到 Status: active 且有 22/tcp ALLOW 规则)
    2. firewalld:sudo firewall-cmd --state(应为 running),sudo firewall-cmd --list-ports(应含 22/tcp)
  3. 从客户端做连通性验证:
    1. telnet 目标IP 22 或 nc -vz 目标IP 22,若提示 “Connection refused”,多为目标机端口未监听或被策略直接拒绝;若 “Connection timed out”,更可能是端口未放行或网络不通。
  4. 虚拟机场景请确认网络模式:桥接(与宿主机同网段直连)或 NAT+端口转发(如宿主机 2222 → 虚拟机 22)。

二、按防火墙类型放行端口

  1. 使用 UFW(Ubuntu 常见)
    1. 允许 SSH:sudo ufw allow 22/tcp 或 sudo ufw allow ssh
    2. 启用防火墙:sudo ufw enable
    3. 使规则生效:sudo ufw reload
    4. 核对规则:sudo ufw status(应看到 22/tcp 允许)
  2. 使用 firewalld
    1. 放行端口:sudo firewall-cmd --zone=public --add-port=22/tcp --permanent
    2. 重载:sudo firewall-cmd --reload
    3. 核对端口:sudo firewall-cmd --list-ports(应含 22/tcp)
  3. 如需临时排除防火墙干扰做 A/B 测试,可短时关闭后再开启:
    1. UFW:sudo ufw disable → 测试 → sudo ufw enable
    2. firewalld:sudo systemctl stop firewalld → 测试 → sudo systemctl start firewalld
  4. 若系统使用 iptables 直接管理,可查看规则:sudo iptables -L -n;放行示例:sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT(生产环境请谨慎变更并保存规则)。

三、若放行后仍被拒绝,排查 SSH 服务与配置

  1. 安装并启动 SSH:sudo apt-get update && sudo apt-get install openssh-server;sudo systemctl start ssh;sudo systemctl enable ssh;sudo systemctl status ssh(应为 active/running)。
  2. 确认监听地址与端口:sudo ss -tulnp | grep :22,正常应见 0.0.0.0:22 或 :::22 处于 LISTEN。
  3. 检查关键配置(/etc/ssh/sshd_config):确保 Port 22、ListenAddress 0.0.0.0(或注释掉以监听所有地址)、按需设置 PermitRootLogin、PasswordAuthentication yes;修改后重启:sudo systemctl restart ssh。
  4. 查看认证日志定位问题:sudo tail -f /var/log/auth.log(如 refused、invalid user、pam 等提示能指明方向)。

四、虚拟机与云主机的额外检查

  1. 获取正确 IP:ip addr;确保与客户端网络可达(同网段或路由可达)。
  2. 虚拟机网络模式:优先 桥接;若用 NAT,务必在虚拟化软件中配置端口转发(如 宿主机 2222 → 虚拟机 22),客户端连接时使用宿主机的 2222。
  3. 云服务器安全组/NACL:除系统防火墙外,还需在云平台控制台放行 TCP 22(入站),否则仍会被拒绝。

五、常用命令速查表

目的UFWfirewalld说明
查看状态sudo ufw statussudo firewall-cmd --state判断是否启用
放行 SSHsudo ufw allow 22/tcp 或 sudo ufw allow sshsudo firewall-cmd --zone=public --add-port=22/tcp --permanent && sudo firewall-cmd --reload放行端口并重载
核对规则sudo ufw status numberedsudo firewall-cmd --list-ports确认 22/tcp 是否在列
临时关闭sudo ufw disablesudo systemctl stop firewalld仅用于排查,用完请开启

以上步骤覆盖了最常见的 “被防火墙拦截导致 Connection refused” 的根因与处置路径;优先确保 SSH 服务在监听,再按所用防火墙放行 22/tcp,最后用日志与连通性测试闭环验证。

热门栏目