VPS 基本安全配置指南:新服务器到手后的第一件事
📅 2026年05月19日 · 技术
引言
购入一台崭新的 VPS 后,面对一个几乎"裸奔"的系统,许多新手用户的第一反应往往是急着部署应用或搭建网站。然而,忽略基本的安全配置,无异于将家门敞开任人进出。VPS 赋予了用户完全的 root 权限和极高的自由度,但这份自由也伴随着对服务器安全性的全部责任。
安全的目标从来不是"绝对安全"——没有人能做到这一点。合理的策略是比大多数人更安全,让攻击者觉得攻击你的服务器成本太高、收益太低,从而转向更容易的目标。本文将以 Ubuntu 24.04 LTS 为例,系统性地介绍新 VPS 到手后应当立即完成的基本安全配置步骤,涵盖从账户管理、SSH 加固到防火墙和入侵防御的全流程。
一、创建非 root 管理用户
绝大多数 VPS 厂商默认提供 root 账户。root 是 Linux 系统中权限最高的账户,攻击者一旦获取 root 密码即可完全控制服务器。永远不要在日常操作中使用 root 账户。正确的做法是创建一个普通用户,仅在需要管理员权限时通过 sudo 提权。
1.1 创建新用户并赋予 sudo 权限
使用以下命令创建一个新用户,并将其加入 sudo 组:
useradd -m -G sudo -s /bin/bash 用户名
各参数含义:-m 创建家目录,-G sudo 将用户加入 sudo 组,-s /bin/bash 设置默认 shell。
1.2 设置强密码
passwd 用户名
建议密码至少 16 位,包含大小写字母、数字和特殊字符。同时,也建议修改 root 账户的默认密码,因为部分云厂商会通过邮件发送初始密码,安全性较差。
sudo whoami,如果输出 root 则说明配置正确。
二、禁用 root 的 SSH 密码登录
root 账户的用户名是固定的 root,这意味着攻击者只需要暴力破解密码这一个变量即可尝试入侵。禁用 root 的密码登录是降低风险最简单的有效手段。
2.1 编辑 SSH 配置文件
sudo vim /etc/ssh/sshd_config
找到或添加以下配置项:
# 禁止 Root 用户通过密码远程登录,仅允许密钥登录
PermitRootLogin prohibit-password
为什么不是 PermitRootLogin no? 完全禁用 root 登录虽然更安全,但一旦系统出现异常(如磁盘满载导致无法建立 SSH 会话),你将无法通过 VNC 或 IPMI 等带外管理工具使用 root 账户进行紧急修复。设置为 prohibit-password 可以在保留密钥登录能力的同时关闭最危险的密码认证通路。
2.2 重启 SSHD 使配置生效
sudo systemctl restart ssh
2.3 验证配置
在另一个终端窗口尝试用 root 密码登录,确认连接被拒绝后再关闭原会话。
# 查看当前生效的 PermitRootLogin 配置
sudo sshd -T | grep -i "PermitRootLogin"
/etc/ssh/sshd_config.d/ 目录下放置自定义配置文件(如 50-cloud-init.conf),这些文件会覆盖主配置。建议执行 sudo ls /etc/ssh/sshd_config.d/*.conf 检查并必要时重命名这些文件,或直接在自定义目录下创建自己的配置 sudo vim /etc/ssh/sshd_config.d/custom.conf。
三、修改 SSH 端口
默认的 22 端口是全网扫描器的重点目标。登录后改端口几乎是每个老手的肌肉记忆。修改 SSH 端口可以大幅降低被自动化扫描和暴力破解的频率。
3.1 常规修改方法
sudo vim /etc/ssh/sshd_config
修改或添加以下配置:
# 选择一个 1024-65535 之间的端口,避免使用常见端口
Port 2233
3.2 Ubuntu 22.10 及更高版本的注意事项
从 Ubuntu 22.10 开始,SSH 默认通过 systemd socket activation(套接字激活) 方式运行,仅修改 sshd_config 可能无效。在 Ubuntu 24.04 LTS 中已恢复为传统模式,但在 22.10 至 23.10 版本中需要额外操作:
sudo mkdir -p /etc/systemd/system/ssh.socket.d
sudo vim /etc/systemd/system/ssh.socket.d/listen.conf
在 listen.conf 中写入:
[Socket]
ListenStream=
ListenStream=2233
然后依次执行:
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
sudo systemctl restart ssh.service
3.3 推荐的操作技巧
修改端口后,不要立即断开当前 SSH 会话。先打开一个新终端,尝试用新端口连接:
ssh -p 2233 user@your-server-ip
如果新连接成功,再关闭原来的会话。这样做可以在配置有误时仍有机会修正。
四、配置 SSH 密钥登录并禁用密码认证
密码认证天然存在被暴力破解和钓鱼的风险,而密钥认证使用非对称加密,安全性高得多。如果 VPS 厂商提供了 SSH 密钥绑定功能,直接使用即可;否则请按以下步骤手动配置。
4.1 在本地生成密钥对
ssh-keygen -t ed25519
推荐使用 ed25519 算法,兼顾安全性和性能。直接回车使用默认路径(~/.ssh/id_ed25519),密码短语(passphrase)可选设置。
4.2 将公钥上传到服务器
# 方法一:使用 ssh-copy-id
ssh-copy-id -p 端口 用户名@服务器IP
# 方法二:手动复制
cat ~/.ssh/id_ed25519.pub
# 然后登录服务器,将内容写入 ~/.ssh/authorized_keys
4.3 禁用密码认证
在 /etc/ssh/sshd_config 中确认或添加以下配置:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
重启 SSH 服务:
sudo systemctl restart ssh
五、配置 UFW 防火墙
防火墙是服务器的第一道防线。UFW(Uncomplicated Firewall)是 Ubuntu 内置的 iptables 前端,配置简洁直观。如果 VPS 厂商提供了云防火墙,且没有复杂需求,可直接使用云防火墙,但 UFW 提供了更精细的本地控制能力。
5.1 设置默认策略
sudo ufw default allow outgoing # 默认允许出站
sudo ufw default deny incoming # 默认禁止入站
5.2 放行必要端口
在启用防火墙之前,务必先放行 SSH 端口(如果已修改则为自定义端口),否则会被直接拒之门外:
sudo ufw allow 2233/tcp # 放行修改后的 SSH 端口
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
5.3 启动防火墙
sudo ufw enable
5.4 常用管理命令
sudo ufw status numbered # 查看规则(带编号)
sudo ufw delete 序号 # 按编号删除规则
sudo ufw disable # 关闭防火墙
sudo ufw reload # 重载规则
sudo ufw allow log 2233/tcp 在放行的同时记录日志。建议仅放行实际使用的端口,原则是"最小权限"。
六、安装和配置 Fail2ban
即使禁用了密码认证,SSH 服务本身仍可能受到协议层面的攻击。Fail2ban 通过分析日志文件,检测到多次失败尝试后自动添加 iptables 规则临时封禁来源 IP,是防御暴力破解的利器。
6.1 安装 Fail2ban
sudo apt update
sudo apt install fail2ban -y
6.2 创建自定义配置
官方推荐使用 jail.local 覆盖默认配置,避免后续升级时被覆盖:
sudo vim /etc/fail2ban/jail.local
参考配置如下:
[sshd]
enabled = true
filter = sshd
port = 2233 # 改为你实际使用的 SSH 端口
maxretry = 5 # 5 次失败即触发
findtime = 300 # 5 分钟内有效
bantime = 600 # 封禁 10 分钟
banaction = iptables-multiport
logpath = /var/log/auth.log
6.3 启动并验证
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo fail2ban-client status sshd # 查看封禁状态
七、系统更新与安全维护
安全配置不是一劳永逸的。保持系统更新是持续安全的关键环节。
7.1 定期更新软件包
sudo apt update && sudo apt upgrade -y
Ubuntu 默认每天自动安装安全更新,但建议定期手动检查。此外,可以开启 Ubuntu Pro(个人用户免费绑定 5 台机器),获得长达 10 年的安全维护和扩展的 CVE 补丁覆盖。
7.2 使用绝对路径运行命令
在日常管理和编写脚本时,养成使用绝对路径的习惯,可以避免环境变量被篡改后误执行恶意程序:
/usr/bin/su # 而非 su
/usr/bin/sudo # 而非 sudo
/usr/sbin/sshd -T # 而非 sshd -T
总结
本教程涵盖了 VPS 到手后最基本的七步安全配置:
- 创建非 root 用户 — 避免日常操作使用最高权限
- 禁用 root 密码登录 — 切断最常见的攻击入口
- 修改 SSH 端口 — 规避自动化扫描器
- 配置密钥登录 + 禁用密码 — 从根本消除密码破解风险
- 启用 UFW 防火墙 — 精细化控制入站流量
- 部署 Fail2ban — 自动封禁恶意 IP
- 保持系统更新 — 持续修补已知漏洞
安全是一个持续的过程,而非一次性的任务。上述配置可以在几分钟内完成,却能挡住绝大多数的自动化攻击。对于有更高安全需求的场景,还可以进一步考虑:容器化隔离、WAF(Web 应用防火墙)、CDN 隐藏源站 IP、WireGuard 隐藏管理面板、SSH 登录通知等进阶措施。
最后请记住:安全的目标是让你的服务器比绝大多数目标更难攻破。保护好你的 VPS,不仅是对自己数据的负责,也是对互联网生态的贡献。