起因

事情要从今天下午说起。

我像往常一样,打开终端,敲下那条闭着眼都能打出来的命令:

ssh ubuntu@我的服务器IP

然后——什么都没有。没有密码提示,没有报错,就是死一般的沉默。等了半分钟,终于弹出一行冷冰冰的字:

Connection timed out

我的第一反应是:网断了?

于是打开浏览器,随便点了个网页——秒开。网没问题。

那……服务器炸了?

排查

我慌了。赶紧登录UCloud控制台,用VNC远程连接——进去了。服务器活得好好的,CPU正常,内存正常,硬盘正常。
在这里插入图片描述
然后我又试了1Panel面板里的终端功能——也能连上。
在这里插入图片描述

这就诡异了。服务器明明活着,SSH服务也在跑,但就是从我本地连不上。

这就像你站在自家门口,钥匙插进锁眼,转不动。但你从窗户翻进去一看,门锁明明是好的。

疑犯一:安全组?

我的第一嫌疑人是UCloud的安全组。毕竟云服务器嘛,安全组就是那道大门。万一22端口没放行,或者被什么规则挡住了呢?

登上控制台一看——入站规则里,TCP 22端口,来源0.0.0.0/0,放行。没问题。

排除。
在这里插入图片描述

疑犯二:SSH配置?

SSH配置有没有可能只监听了内网?或者限制了登录用户?

在VNC里敲了一通命令:

sudo ss -tlnp | grep ssh

结果:

LISTEN 0 128 0.0.0.0:22 0.0.0.0:*

监听所有网卡,端口22,没毛病。
在这里插入图片描述

排除。

疑犯三:防火墙?

然后我翻开了iptables的规则表。这一看,场面可壮观了——

Chain INPUT (policy DROP)
1    f2b-sshd   tcp  --  0.0.0.0/0   0.0.0.0/0   multiport dports 22
2    ufw-before-logging-input ...
3    ufw-before-input ...
...

等等,f2b-sshd?这是什么?

展开一看,我惊了:

Chain f2b-sshd
1    REJECT  all -- 45.148.10.152   0.0.0.0/0  reject-with icmp-port-unreachable
2    REJECT  all -- 45.148.10.151   0.0.0.0/0  reject-with icmp-port-unreachable
...
42   REJECT  all -- 183.211.32.235  0.0.0.0/0  reject-with icmp-port-unreachable
...
(共60条REJECT规则)

第42条。183.211.32.235。

那是我的IP。

真凶:fail2ban

fail2ban,一个用来防暴力破解的安全软件。它的工作原理很简单:如果某个IP在短时间内多次SSH登录失败,就直接把这个IP拉黑。

我之前可能输错了几次密码,fail2ban就把我的IP给ban了。

它忠心耿耿地保护着服务器,一刀砍向了主人。

UCloud控制台和1Panel为什么不受影响?因为它们走的是内网通道和本地回环,根本不经过iptables的那道f2b规则。只有从外部公网来的SSH连接,才会被拦在门外。

就像小区的保安拦住了所有从大门进来的人,但你从地下车库的内部通道回家,保安根本看不到你。

解决

知道了原因,解决就简单了。一条命令:

sudo fail2ban-client set sshd unbanip 183.211.32.235

然后回到我的Windows终端,再次敲下:

ssh ubuntu@我的服务器IP

密码提示出现了。

输入密码。

Welcome to Ubuntu 22.04...
ubuntu@server:~$

那一刻,我仿佛听到了门锁弹开的声音。

教训

搞了一下午,总结几条经验:

  1. SSH连不上,先查fail2ban。 特别是当你能通过其他方式(控制台、面板)进入服务器的时候,大概率是被自己的安全软件误伤了。

  2. 给fail2ban加白名单。 如果你的IP是固定的,把它加入白名单:

    # /etc/fail2ban/jail.local
    [sshd]
    ignoreip = 127.0.0.1/8 你的公网IP
    
  3. 改用密钥登录。 既安全,又不会因为输错密码被ban:

    ssh-keygen -t ed25519
    ssh-copy-id ubuntu@服务器IP
    
  4. UCloud安全组和系统防火墙是两回事。 安全组放行了,不代表系统里的iptables/ufw/fail2ban也放行。两层都要查。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐