如何在 Linux VPS 上保护 SSH 安全
公网 VPS 上线后几分钟内就会遭到自动化的登录尝试。以下步骤可以大幅提高 SSH 的抗攻击能力。本文面向 Ubuntu 或 Debian 编写;如果你还没有服务器,可以租用 Linux VPS,从干净的系统镜像开始。在第二个窗口中测试新配置之前,请保持当前的 SSH 会话处于打开状态。
1. 创建带 sudo 权限的普通用户
adduser deploy
usermod -aG sudo deploy2. 使用 SSH 密钥代替密码
在你自己的电脑上执行:
ssh-keygen -t ed25519 -C "you@example.com"
ssh-copy-id deploy@YOUR_SERVER_IP
ssh deploy@YOUR_SERVER_IP在关闭密码登录之前,先用密钥登录一次,确认其可以正常工作。
3. 关闭密码登录和 root 登录
创建 /etc/ssh/sshd_config.d/99-hardening.conf:
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
MaxAuthTries 3检查语法并重新加载服务。在 Ubuntu 和 Debian 上服务名为 ssh,在基于 RHEL 的系统上为 sshd:
sudo sshd -t && sudo systemctl reload ssh打开第二个终端并重新登录。只有确认可以登录后,才关闭旧会话。
4. 启用防火墙
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status verbose只开放你需要的端口,例如网站服务器所需的 80 和 443 端口。你也可以在云控制台中设置防火墙规则,将 SSH 访问限制为你自己的 IP 地址。
5. 使用 Fail2ban 阻止反复失败的登录
sudo apt install -y fail2ban创建 /etc/fail2ban/jail.local:
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1hsudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd6. 自动安装安全更新
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades7. 可选的补充措施
- 更改 SSH 端口可以减少日志噪音,但它本身不是安全措施。
- 为私钥设置口令(passphrase),并将备份保存在安全的地方。
- 使用
last和sudo journalctl -u ssh --since today查看登录记录。 - 服务器配置完成后,创建一个快照,以便将系统恢复到干净的基线状态。
如果你被锁在服务器之外,可以使用云控制台中的浏览器控制台登录并修复配置。我们的 DDoS 防护指南 介绍了下一层防御措施。
常见问题
禁用 root 登录安全吗?
安全,前提是你已先创建 sudo 用户并测试其密钥可以正常工作。之后你仍然可以使用 sudo 执行管理命令。
如果只使用密钥,还需要 Fail2ban 吗?
这不是必须的。关闭密码登录后,暴力破解无法成功,但 Fail2ban 可以减少日志噪音和系统负载。
如果丢失了 SSH 密钥怎么办?
使用云控制台中的控制台登录,将新的公钥添加到 ~/.ssh/authorized_keys 中,并删除旧的公钥。