Ubuntu 防火墙导致 Connection refused 的定位与修复
一、先快速判断错误类型
二、用这组命令按顺序排查并修复
sudo systemctl status ssh(或 sshd)sudo apt update && sudo apt install openssh-serversudo systemctl start ssh && sudo systemctl enable sshsudo ss -tlpn | grep sshsudo nano /etc/ssh/sshd_config,将 ListenAddress 设为 0.0.0.0 或注释该行,随后 sudo systemctl restart sshsudo ufw status;若 Status: active,确认是否有 22/tcp ALLOW 或 ssh ALLOW 规则sudo ufw allow 22/tcp(或 sudo ufw allow ssh)sudo ufw reloadsudo ufw disable 测试,确认后再重新开启并保留放行规则ip addr,并在客户端使用此 IP 连接Port 22、PermitRootLogin(按需)、PasswordAuthentication(按需)sudo systemctl restart sshssh localhosttelnet <服务器IP> 22 或 nc -vz <IP> 22sudo tail -f /var/log/auth.log(SSH 登录相关日志)三、常见场景与对应修复
| 场景 | 典型现象 | 快速修复 |
|---|---|---|
| SSH 未安装/未启动 | Connection refused | sudo apt install openssh-server;sudo systemctl start ssh && sudo systemctl enable ssh |
| 防火墙未放行 22 端口 | Connection refused | sudo ufw allow 22/tcp;sudo ufw reload |
| SSH 仅监听 127.0.0.1 | 本机能连,外部被拒 | /etc/ssh/sshd_config 设 ListenAddress 0.0.0.0;sudo systemctl restart ssh |
| 虚拟机 NAT 未做端口转发 | Connection refused/超时 | 配置端口转发(如 2222→22),客户端连 宿主机IP:2222 |
| 修改过端口但未放行新端口 | Connection refused | sudo ufw allow <新端口>/tcp;sudo ufw reload,并用新端口连接 |
四、安全建议
sudo ufw allow from 192.168.1.0/24 to any port 22sudo ufw status numbered 以便审计与回滚