VPS 基本安全配置指南:新服务器到手后的第一件事

📅 2026年05月19日 · 技术

引言

购入一台崭新的 VPS 后,面对一个几乎"裸奔"的系统,许多新手用户的第一反应往往是急着部署应用或搭建网站。然而,忽略基本的安全配置,无异于将家门敞开任人进出。VPS 赋予了用户完全的 root 权限和极高的自由度,但这份自由也伴随着对服务器安全性的全部责任。

安全的目标从来不是"绝对安全"——没有人能做到这一点。合理的策略是比大多数人更安全,让攻击者觉得攻击你的服务器成本太高、收益太低,从而转向更容易的目标。本文将以 Ubuntu 24.04 LTS 为例,系统性地介绍新 VPS 到手后应当立即完成的基本安全配置步骤,涵盖从账户管理、SSH 加固到防火墙和入侵防御的全流程。

⚠️ 操作提醒: 以下所有操作均涉及服务器核心配置,建议在执行每一步之前确认当前 SSH 连接正常,并保持会话不中断。建议使用 tmux 或 screen 管理会话,避免因配置错误导致无法登录。

一、创建非 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 权限是否正常。执行 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"
⚠️ 注意: 部分云厂商(如 CloudCone)会在 /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
⚠️ 关键步骤: 禁用密码认证前,务必确认密钥登录已经正常工作!在另一个终端窗口用密钥登录成功后,再重启 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                   # 重载规则
💡 进阶技巧: 如需记录 SSH 登录日志用于审计,可以 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 到手后最基本的七步安全配置:

安全是一个持续的过程,而非一次性的任务。上述配置可以在几分钟内完成,却能挡住绝大多数的自动化攻击。对于有更高安全需求的场景,还可以进一步考虑:容器化隔离、WAF(Web 应用防火墙)、CDN 隐藏源站 IP、WireGuard 隐藏管理面板、SSH 登录通知等进阶措施。

最后请记住:安全的目标是让你的服务器比绝大多数目标更难攻破。保护好你的 VPS,不仅是对自己数据的负责,也是对互联网生态的贡献。

参考来源

🔧 在线开发者工具 — JSON格式化 · Base64 · UUID生成 · 正则测试 等80+免费工具