带有公网 IP 地址的新 VPS,在几分钟内就会开始收到自动化的登录尝试。这些都不是针对个人的;机器人只是扫描每一个地址。几个基本步骤就能阻止几乎所有这类攻击。本清单假设你使用全新的 Ubuntu 24.04 或 Debian 12/13 服务器,大约需要十五分钟。
1. 首先更新所有内容
apt update && apt full-upgrade -y
reboot
重启后重新登录。始终从完全打好补丁的系统开始。
2. 创建非 root 用户
始终以 root 身份工作会让每一个输入错误都变得危险。创建一个具有 sudo 权限的普通用户:
adduser deploy
usermod -aG sudo deploy
3. 设置 SSH 密钥
在你自己的计算机上,如果还没有密钥对,就创建一个,并把公钥部分复制到服务器:
ssh-keygen -t ed25519 -C "my-vps"
ssh-copy-id deploy@YOUR_SERVER_IP
打开第二个终端,确认你可以使用密钥以 deploy 身份登录,然后再继续。在确认之前,不要关闭你原来的会话。
4. 关闭密码登录和 root 登录
编辑 SSH 守护进程配置:
sudo nano /etc/ssh/sshd_config.d/99-hardening.conf
在文件中写入以下几行:
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
检查语法并重新加载:
sudo sshd -t && sudo systemctl reload ssh
5. 启用防火墙
UFW 是最简单的选择。先允许 SSH,再开启防火墙:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp # only if you run a web server
sudo ufw enable
sudo ufw status verbose
只为你实际运行的服务开放端口。其他一切默认保持关闭。
6. 添加 fail2ban
Fail2ban 监视日志,并临时封禁那些持续登录失败的地址。
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
默认设置对 SSH 来说是合理的。由于你已经禁用了密码,这主要是减少日志噪音和浪费的 CPU。
7. 开启自动安全更新
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
这会自动安装安全补丁。偶尔重启以应用内核更新,或者让该工具在安静的时段自行重启。
8. 检查正在监听的内容
sudo ss -tulpn
任何你没有预料到的、监听在 0.0.0.0 上的内容都值得调查。仅供本地使用的服务(数据库、缓存、管理面板)应监听在 127.0.0.1 上。
9. 基本监控与备份
- 查看日志:不时运行
journalctl -u ssh --since today。 - 检查资源:使用
htop和df -h,以免磁盘占满或失控的进程让你措手不及。 - 进行备份。在重大更改前为服务器创建快照,并为任何无法重建的内容保留一份服务器之外的副本。
接下来做什么
你现在拥有一台比默认状态难攻破得多的服务器。从这里开始,请保持软件更新,让每个服务以各自独立的非特权用户运行,并且只暴露你需要的部分。如果你想要一条通往服务器的私有隧道,我们的指南设置 WireGuard是不错的下一步。
常见问题
新 VPS 上首先应该做什么?
更新软件包、创建非 root 用户、改用 SSH 密钥、禁用密码登录并启用防火墙。
应该更改 SSH 端口吗?
这能减少日志噪音,但不是真正的安全措施。密钥和防火墙要重要得多。