适用系统:Ubuntu 20.04/22.04、Debian 11/12 | 其他发行版命令略有差异
先说结论
新买的 VPS 默认开着密码登录 + root 直连 + 22 端口敞开——等于在互联网上裸奔。这 5 个配置做完,能挡掉 99% 的自动攻击,全程不超过 30 分钟。
很多人买完 VPS 第一件事就是装宝塔或者搭网站,安全配置直接跳过。结果不到一周 SSH 日志里全是暴力破解记录,流量被莫名其妙消耗掉。这篇就是给刚拿到 VPS 的新手准备的——每条命令都带解释,照做就行。
前提:你已经能 SSH 连上 VPS
还没连上的话,先去终端输入:
ssh root@你的VPS_IP地址
输入 VPS 商家给你的 root 密码,登录成功就开始。另外关于选 VPS,如果还没买,可以先看 2026年海外VPS推荐TOP10。
第一步:创建普通用户(别用 root)
root 是 Linux 的超级管理员,权限最大。用 root 干日常操作,一个手滑 rm -rf / 就能把系统删光。先建一个普通用户,要用 root 权限时加 sudo。
# 创建新用户(把 yourname 换成你的用户名) adduser yourname # 把新用户加入 sudo 组 usermod -aG sudo yourname # 切换到新用户确认 sudo 能用 su - yourname sudo whoami # 应该输出 root
adduser 会提示你设置密码。密码记住,后面会用。
第二步:配置 SSH 密钥登录,禁掉密码登录
密码登录最大的问题是——你能猜,别人也能。SSH 密钥是一对公私钥,私钥只有你本地有,不被偷就没人能登。
2.1 在你本地电脑生成密钥
Mac / Linux 用户(在自己的终端里,不是 VPS 上):
ssh-keygen -t ed25519 -C "你的邮箱" # 一路回车就行,会在 ~/.ssh/ 下生成 id_ed25519 和 id_ed25519.pub
Windows 用户:用 PowerShell 或者装个 Git Bash,命令一样。
2.2 把公钥传到 VPS
在你的本地电脑上执行(不是 VPS):
ssh-copy-id yourname@你的VPS_IP
输入刚才给新用户设的密码。成功后,SSH 到 VPS 就不会再提示密码了。
2.3 禁用密码登录 + 禁用 root 登录
sudo nano /etc/ssh/sshd_config
找到并修改这三行(前面有 # 注释的去掉 #):
PermitRootLogin no # 禁止 root 通过 SSH 登录 PasswordAuthentication no # 禁止密码登录 PubkeyAuthentication yes # 允许密钥登录(通常是默认开启的)
Ctrl+O 保存,Ctrl+X 退出,然后重启 SSH:
sudo systemctl restart sshd
第三步:改掉 SSH 默认端口(22 → 其他)
全网扫描 22 端口的自动化工具太多了,改了端口能减少 90% 的无效登录尝试。
sudo nano /etc/ssh/sshd_config
找到 #Port 22,改成:
Port 22222 # 或者你喜欢的端口号,建议 10000-65535 之间
保存后重启 SSH:
sudo systemctl restart sshd
以后登录要加 -p 参数指定端口:
ssh -p 22222 yourname@你的VPS_IP
第四步:装 UFW 防火墙,只开需要的端口
UFW 是 Linux 上最简单的防火墙。默认策略是关闭所有入站连接,你一个个放行需要的端口。
# 安装(Ubuntu 通常已自带) sudo apt update && sudo apt install ufw -y # 默认策略:拒绝所有入站,允许所有出站 sudo ufw default deny incoming sudo ufw default allow outgoing # 只放行你需要的端口 sudo ufw allow 22222/tcp # SSH(你改过的端口) sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS # 开启防火墙 sudo ufw enable
验证一下:
sudo ufw status verbose
应该只看到你放行的端口,其他的全被拒。如果以后装了宝塔面板,别忘了在 UFW 里也放行宝塔的端口(8888 之类的)。
第五步:装 Fail2Ban,自动封 IP
Fail2Ban 会监控 SSH 登录日志,有 IP 短时间内连续失败太多次,自动封禁一段时间。和 UFW 配合使用。
# 安装 sudo apt install fail2ban -y # 创建本地配置(不直接改默认配置,方便恢复) sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo nano /etc/fail2ban/jail.local
在 [sshd] 段落里,确认或修改这几项:
[sshd] enabled = true port = 22222 # 你改过的 SSH 端口 maxretry = 5 # 5 次失败就封 bantime = 3600 # 封 1 小时(单位秒) findtime = 600 # 10 分钟窗口
保存后启动:
sudo systemctl enable fail2ban sudo systemctl start fail2ban # 查看封禁状态 sudo fail2ban-client status sshd
以后有 IP 被 BAN 了,可以看:
sudo fail2ban-client status sshd # 当前被封 IP 列表
做完这5步之后
- ✅ root 不能直接 SSH 登录了
- ✅ 只能用密钥登录,密码无效了
- ✅ SSH 端口从 22 改走了
- ✅ 除了 80/443/SSH,其他端口全关了
- ✅ 失败 5 次自动封 IP
这个时候再看 SSH 日志:
sudo tail -f /var/log/auth.log
之前满屏的 Failed password for root 基本消失了。如果想进一步加固,可以继续看 各 VPS 商家评测 了解哪家的默认安全配置做得更好。
