最近翻服务器日志的时候吓了一跳 —— 每天都有一堆来历不明的IP在疯狂敲门,试图暴力破解登录!😱 一开始我天真地想:“要不换个冷门端口,让他们找不到?“结果研究了一下才发现,这招基本没用,人家用扫描工具分分钟就能找到你真实的SSH端口。
不信?看看黑客们是怎么用 nmap 获取SSH服务指纹的:
原理很简单:当客户端连接SSH端口时,服务器会热情地发送一个"自我介绍"字符串,格式通常是:SSH-2.0-<软件名称和版本>。这就像是服务器主动亮出了身份证 🪪
| |
输出结果可能如下:
| |
看到没?人家一扫就能看到:
- 端口:22(藏都藏不住)
- 服务:ssh(实锤了)
- 版本:OpenSSH 8.2p1(连版本号都暴露了)
- 操作系统:Ubuntu Linux(甚至系统信息都泄露了)
所以啊,指望换个端口就能躲开攻击,基本上是掩耳盗铃 🙈 得想点别的招!
向AI大佬请教 🤖
既然换端口不靠谱,那咱就问问AI大模型有什么好办法。它给我列了一份"SSH防护作战清单”:
| 措施 | 描述 | 效果 |
|---|---|---|
| 1. 使用密钥认证 | 完全禁用密码登录,只允许使用SSH密钥对进行认证。 | 极高,彻底消除暴力破解的可能。 |
| 2. 禁用root登录 | 禁止直接以root用户身份登录,强制使用普通用户登录后再su或sudo。 | 高,增加攻击者提权的步骤。 |
| 3. 使用强密码 | 如果必须使用密码,确保密码足够复杂。 | 中,但仍可能被暴力破解。 |
| 4. Fail2ban | 自动封禁在短时间内多次尝试失败IP地址。 | 高,有效对抗暴力破解。 |
| 5. 防火墙限制 | 只允许特定的、可信的IP地址或IP段访问SSH端口。 | 极高,是最有效的访问控制。 |
| 6. 保持更新 | 及时更新SSH服务端软件,修复已知漏洞。 | 极高,防止被已知漏洞利用。 |
| 7. 使用TCP Wrappers | 通过 /etc/hosts.allow 和 /etc/hosts.deny 进行额外访问控制。 | 中高,另一层访问控制。 |
看完这份清单,我决定组合拳出击:1+2+3+4 应该够用了!
为什么选这几个?
- 措施1(密钥认证):我所有电脑都配好了SSH密钥,直接禁用密码登录最省心,还能让日志清净不少
- 措施2(禁用root):万一真被黑了,至少不会一步到位拿到root权限
- 措施3(强密码):虽然用密钥了,但备用账户还是得设个强密码,有备无患
- 措施4(Fail2ban):这个是重点!就算用密钥了,也怕有人暴力猜用户名,装个"自动拉黑器"让那些扫描器去吃灰 🚫
第一步:生成SSH密钥对 🔑
虽然我的电脑都配好了,但还是记录一下完整流程,给自己留个备忘录(也方便你参考):
| |
生成过程中会问你几个问题:
- 💾 保存位置(直接回车用默认位置
~/.ssh/id_ed25519就行) - 🔐 是否设置密钥密码(建议设置!虽然麻烦点,但双重保险更安全)
把公钥传到服务器上
方法一:一键上传(推荐,省事!)
| |
一行命令搞定,简单粗暴!✨
方法二:手动复制(适合没有 ssh-copy-id 的场景)
| |
💡 小技巧:如果嫌麻烦,也可以直接在服务器上生成一次SSH密钥(
ssh-keygen),这样目录和权限就自动创建好了!
第二步:关闭密码登录的大门 🚪🔒
配置好密钥后,就可以把密码登录这条后路给堵上了!编辑SSH配置文件:
| |
在打开的文件中添加这些设置:
| |
重启SSH服务让配置生效
| |
⚠️ 重要警告(血的教训!)
千万别把自己锁在门外! 在修改配置前,请严格按照下面的步骤操作:
✅ 安全操作流程:
- ✔️ 确认公钥已经成功上传到服务器
- ✔️ 保持当前SSH连接窗口不关闭(这是你的救命稻草)
- ✔️ 新开一个终端窗口,测试密钥登录是否正常
- ✔️ 确认新窗口能用密钥登录后,再重启SSH服务
- ✔️ 重启后再开个新窗口测试一次
💡 保守策略:如果你不太确定,可以先不加
PermitRootLogin no这一行,等确认普通用户能正常登录后再禁用root。这样万一出问题,还能用root救场。
第三步:部署自动拉黑神器 Fail2ban 🛡️
这玩意儿就像给服务器装了个"智能保安”,谁敲门太频繁就自动把谁拉黑,省心又有效!
安装Fail2ban
| |
配置Fail2ban保护SSH
重要提示:不要直接改默认配置文件,要创建自己的 jail.local,这样以后更新也不会被覆盖:
| |
把下面的配置粘贴进去:
| |
💡 参数说明:
bantime = 3600:封禁1小时(3600秒),可以改成86400封一整天maxretry = 3:失败3次就封,可以改成5给点宽容findtime = 600:10分钟内的失败计数,可以改成300(5分钟)更严格
启动Fail2ban并设置开机自启
| |
常用管理命令
| |
实战效果:装好之后,可以看看有多少IP已经被拉黑了 👇

看着这些被拦截的IP,瞬间有种"哼,想攻击我?没门!“的成就感 😎
最后一步:全面测试 ✅
配置完了可不能直接收工,得确保一切都按预期工作!跑一遍下面的测试:
| |
写在最后 📝
设置完这一套组合拳,服务器的SSH安全性已经大大提升了!现在翻日志看到那些扫描IP被拦截,心里别提多踏实了 🎉
不过还有个小遗憾:我发现那些直接尝试密码登录的IP并没有被Fail2ban封禁,因为它们在SSH协议层就被拒绝了(根本到不了密码验证那一步),所以默认的过滤规则抓不到。不过问题不大,反正他们也登不进来,日志里留个记录而已。以后有空再研究怎么把这些IP也自动拉黑 💪
安全无小事,防范于未然! 如果你的服务器还没配置这些,赶紧动手吧~
P.S. 本文部分技术方案咨询了AI大佬,文字也经过AI小助手润色,感谢它们在背后默默支持!🤖✨ 人机协作,效率翻倍~
