暴露在公网的 22 端口,平均多久被敲一次
把一台云主机开到公网,几分钟内就会收到第一批 SSH 登录尝试,来源遍布全球,字典里全是 root、admin、ubuntu 配常见弱口令。这不是针对你,是自动化扫描的日常。
下面这套收敛顺序,按「收益/成本」排,前三条做完,风险已经降了一个数量级。
一、只认密钥,不认密码
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
MaxAuthTries 3
AllowUsers deploy
密钥登录配好之后先别断开当前会话,另开一个窗口验证能进,再改配置重启。这是最容易把自己锁在门外的一步。
密钥本身也要管:一人一把、带口令、定期轮换;离职或换机器就删掉对应公钥。共用一把密钥,等于没有审计。
二、限制来源,而不是只改端口
改端口能减少噪音,但挡不住针对性扫描。真正有效的是白名单:只允许公司出口 IP、家庭 IP 或跳板机访问。
更进一步是用组网工具替代公网暴露——WireGuard、Tailscale 这类方案让 SSH 只监听内网地址,公网根本看不到 22 端口。对个人和小团队,这是性价比最高的做法。
三、接受「暴力破解是常态」
fail2ban 值得装,但要清楚它的局限:它基于日志,有延迟;攻击者换 IP 就能绕过;高频尝试还可能把你的日志刷爆。它降低噪音,不解决根本问题。
如果确实需要保留密码登录(比如给临时协作者),至少配上 TOTP 两步验证,并把并发会话数限死。
四、把审计做起来
知道谁在什么时候登录过,比事后猜测有用得多:
last -a | head -20
lastb | head -20
journalctl -u ssh --since "24 hours ago" | grep -i "accepted\|failed"
建议把 Accepted publickey 单独收集到日志系统,异常时间、异常来源 IP 都能触发告警。
五、主机侧的配套
- 关闭不用的服务,
ss -tulpn逐个确认; - 自动安全更新只开安全源,别全量自动升级内核;
- sudo 需要密码,别给所有人
NOPASSWD: ALL; - 把
/etc/ssh/sshd_config.d/下的配置也检查一遍,很多发行版会在这里覆盖主配置。
我的判断
SSH 加固的核心不是「把端口藏起来」,而是「让能登录的人变得可枚举」。密钥、白名单、审计三件事做完,剩下的扫描流量只是噪音。
还有一条经验:任何一次「临时开一下密码登录」,最后都可能变成永久。要么不开,要么开完立刻关。
延伸阅读
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END










暂无评论内容