SSH 暴露面收敛:密钥、白名单与审计

暴露在公网的 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
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像/SUENCA
欢迎您留下宝贵的见解!
提交
头像/SUENCA

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容