SSH安全加固完全指南:阻止99%的暴力破解

每当你把一台VPS暴露在公网上,它就会立刻成为全球自动化攻击机器人的目标。根据Cloudflare的最新数据,所有暴露在互联网的SSH服务平均在13分钟内就会收到第一次暴力破解尝试。弱密码、默认端口、Root直接登录,这些看似无所谓的配置选择,实际上是在给攻击者留后门。本文用实战案例告诉你,如何用五步法把SSH被入侵的风险降到接近零。

一、更换默认端口:一秒减少90%的噪音

SSH默认监听22端口,这个常识攻击者当然知道。所有的自动化扫描工具第一件事就是扫22端口,然后启动字典攻击。把它改成一个高位端口,比如22022或38223,效果是立竿见影的。修改方法:编辑 /etc/ssh/sshd_config,找到Port 22这行,改为Port 22022,然后systemctl restart sshd。需要注意的是,修改后一定要先开一个新的SSH连接测试,确认新端口能连上再断开旧会话,否则可能把自己锁在外面。改端口后,日志里的认证失败记录会从每天几千条降到几十条,fail2ban的工作负载也大幅降低。

### 对比表格

措施
实施难度
防护效果
副作用
推荐指数
------
------
------
------
------
改SSH端口
★☆☆☆☆
减少90%扫描噪音
需记新端口
★★★★★
禁用密码登录
★★☆☆☆
防止全部暴力破解
需配SSH Key
★★★★★
Fail2Ban
★★☆☆☆
自动封禁攻击IP
需调阈值
★★★★☆
2FA双重认证
★★★☆☆
密码泄露仍安全
首次登录繁琐
★★★★☆
IP白名单
★★★☆☆
完全阻止未授权访问
换网络需改规则
★★★☆☆

### 要点列表

  • 改端口只是基础措施,不能替代其他安全手段,攻击者扫全端口仍能找到它
  • 新端口建议选49152-65535范围内的高位端口,避免与系统服务冲突
  • 修改后顺手更新防火墙规则,否则新端口可能还被堵着
  • 建议同时记录旧端口和新端口,以防需要回退
  • > 改端口后用fail2ban的日志量可以作为效果指标,改之前每天几千条失败记录,改之后通常降到几十条,效果非常直观。

    二、禁用密码登录,改用密钥对

    这是最重要的一步。密码登录的本质是把一个随机性极低的字符串当作唯一凭证,而人类很难记住真正随机的高强度密码。SSH密钥对使用非对称加密,公钥放在服务器,私钥留在本地,攻击者即使拿到公钥也无法反推私钥。生成密钥对命令:ssh-keygen -t ed25519 -C "your_email@example.com",这会生成目前最安全的Ed25519密钥。生成后用ssh-copy-id user@your_server -p 22022把公钥上传到服务器,然后在sshd_config里设置PasswordAuthentication no和ChallengeResponseAuthentication no,重启SSH服务生效。

    ### 要点列表

  • Ed25519密钥比RSA 4096更安全且长度更短,是2026年的首选算法
  • 私钥一定要设置密码(passphrase),否则电脑被偷就等于服务器被接管
  • 建议用ssh-agent管理私钥,避免每次都要输入密码
  • 至少保留一个拥有密码登录权限的备用账户,防止完全密钥翻车
  • 三、配置Fail2Ban自动封禁

    Fail2Ban通过分析SSH日志,自动识别暴力破解特征并临时封禁来源IP。安装:apt install fail2ban,然后编辑 /etc/fail2ban/jail.local 配置参数。关键参数:maxretry = 3(失败3次封禁)、bantime = 3600(封禁1小时)、findtime = 600(10分钟内的3次失败触发封禁)。建议把bantime设置长一些,比如86400(24小时),因为大多数攻击者的IP池是有限的,封禁时间越长,他们耗尽IP池的速度越快。实测配置合理的情况下,一周内可以把来自同一IP段的攻击流量降到接近零。

    四、最小化Root登录和用户权限

    Root是最高权限账户,一旦被破解服务器就彻底沦陷。最安全的做法是:禁用Root直接登录(PermitRootLogin no),创建一个普通用户日常使用,需要提权时用sudo。创建并授权用户的命令:useradd -m -s /bin/bash -G sudo username,配置好sudo免密码(%sudo ALL=(ALL) NOPASSWD: ALL)可以减少日常使用的密码输入次数。另外用AllowUsers或AllowGroups限制哪些用户可以从哪些IP登录,比如 AllowUsers admin@your_home_ip,限制只有家宽IP能登录,大幅缩小攻击面。

    > 限制登录IP是最有效的措施之一,前提是你的网络IP相对固定。家庭宽带用户可以找客服申请固定IP,费用通常在每月10-20元。

    五、2FA双重认证:最后一道防线

    即使上述措施都做了,SSH密钥被盗或泄露的可能性仍然存在。添加2FA可以在密钥失效时提供额外保护。使用Google Authenticator实现SSH 2FA:先安装libpam-google-authenticator,然后运行google-authenticator作为要登录的用户,按提示生成密钥并扫描到Authenticator应用。最后修改sshd_config启用:KbdInteractiveAuthentication yes,以及在 /etc/pam.d/sshd 添加 auth required pam_google_authenticator.so。启用后登录需要先输入密钥对的密码,再输入Authenticator的6位动态码,双重验证即使泄露一个也无法登入。

    FAQ

    **Q1:改了端口还是被扫描到怎么办?** 答案:端口扫描可以扫全端口,但成本很高。如果还被高频扫描,说明你遇到了定向攻击,此时配合fail2ban和IP白名单使用效果更好。

    **Q2:Fail2ban误封了自己怎么办?** 答案:提前在白名单里加入自己的IP段,格式在jail.local里加 ignoreip = 127.0.0.1/8 203.0.113.0/24。被误封后可以从控制台VNC或recovery模式解封。

    **Q3:有多台服务器,一一配置太麻烦怎么办?** 答案:用Ansible批量配置,可以把上述所有操作写成Playbook,一键应用到所有服务器,配置一致性也更高。

    **Q4:密钥丢了怎么办?** 答案:提前做好密钥备份,存到加密U盘或密码管理器里。如果已经登不上去,VPS可以在控制面板通过VNC/HTML5 console登录,用临时的控制台方式修复。

    **Q5:上述所有措施都做了,还有什么遗漏?** 答案:定期检查 /var/log/auth.log,关注异常时间段的异常用户登录尝试。同时确保系统自动更新开启,apt install unattended-upgrades可以自动打安全补丁。

    总结

    SSH安全的核心原则是纵深防御,没有任何单一措施是银弹。改端口减少噪音、密钥登录消除密码猜测、Fail2Ban对抗自动化攻击、最小化Root权限降低破坏上限、2FA提供最后防线——这五步组合起来,可以把SSH被入侵的概率降到低于0.01%。安全不是一次性的配置,而是持续运营的习惯,建议每月检查一次登录日志,每季度审计一次用户权限,每半年审查一次防火墙规则。

    阅读约 1,500
    寒小逸科技 | VPS·AI·硬件评测