
为什么 VPS 安全如此重要
您的 VPS 拥有公网 IP 地址,全天候向互联网开放端口。自动化扫描机器人持续探测未受保护的服务器,寻找弱密码和已知漏洞。如果您在部署后不立即进行加固,一台使用默认配置的全新 VPS 可能在数小时内就会被入侵。
好消息是,基本的加固步骤其实并不复杂。本清单涵盖了您在部署新 Linux VPS 后需要立即完成的所有操作。
AsiaGB VPS 提供完整的 Root 访问权限,让您从第一天起就能执行本指南中的每个步骤。套餐起价 500 泰铢/月。
第一步:将 SSH 端口从 22 改为其他端口
端口 22 是 SSH 的默认端口,也是所有扫描机器人的首要攻击目标。将其切换为非标准端口(例如 2222 或 54321)可以大幅减少暴力破解尝试。
nano /etc/ssh/sshd_config
将 Port 22 改为 Port 2222
systemctl restart sshd
在关闭端口 22 之前,务必先在防火墙中开放新端口,以免将自己锁在服务器外面。
第二步:禁用 Root 登录并创建 Sudo 用户
直接以 root 身份登录风险极高。请改为创建一个具有 sudo 权限的普通用户:
adduser yourusername
usermod -aG sudo yourusername
然后在 sshd_config 中禁用 root SSH 登录:
将 PermitRootLogin yes 改为 PermitRootLogin no
第三步:配置 SSH 密钥认证
SSH 密钥远比密码安全,因为攻击者需要同时拥有您的私钥文件及其密码短语才能获得访问权限。在本机生成密钥对:
ssh-keygen -t ed25519 -C "[email protected]"
将公钥复制到您的 VPS:
ssh-copy-id -i ~/.ssh/id_ed25519.pub yourusername@YOUR_VPS_IP
确认密钥登录正常后,禁用密码认证:
将 PasswordAuthentication yes 改为 PasswordAuthentication no
第四步:安装并配置 UFW 防火墙
UFW(简单防火墙)让您轻松控制服务器只开放必要的端口:
apt install ufw -y
ufw default deny incoming
ufw default allow outgoing
ufw allow 2222/tcp(您的新 SSH 端口)
ufw allow 80/tcp(HTTP)
ufw allow 443/tcp(HTTPS)
ufw enable
第五步:保持系统更新
大多数漏洞利用都针对已有补丁却未及时安装的已知漏洞。未能及时更新是服务器被入侵最常见的原因之一:
apt update && apt upgrade -y
启用自动安全更新:apt install unattended-upgrades -y
第六步:安装 Fail2ban
Fail2ban 监控日志文件,自动封禁多次登录失败的 IP 地址,有效阻止暴力破解攻击:
apt install fail2ban -y
systemctl enable fail2ban
systemctl start fail2ban
第七步:定期备份
即使是防护最严密的服务器也可能发生故障。定期备份是您的最后一道防线。请参阅我们的 VPS 备份指南,了解完整的备份策略。
SSH 端到端加固(仅密钥、禁用 Root 登录、更改端口)
上文逐一介绍了各项 SSH 配置,但在实际操作中,建议您在 /etc/ssh/sshd_config 中一并完成所有设置,因为 SSH 是进入服务器的主要通道。将这扇门锁好,入侵者得手的概率将大幅下降。原则很简单:仅允许密钥(禁用密码)、禁止直接 root 登录,并将端口从 22 改到其他位置以减少自动扫描流量。
以下是 AsiaGB VPS 上 Ubuntu 系统的推荐配置。使用 nano /etc/ssh/sshd_config 编辑文件并设置这些值:
# /etc/ssh/sshd_config — recommended values
Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
MaxAuthTries 3
LoginGraceTime 30
AllowUsers yourusername
X11Forwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
编辑完成后,验证语法并重启服务——但在另一个终端确认新登录成功之前,请勿关闭当前 SSH 会话:
sshd -t # validate syntax before restarting
systemctl restart ssh # or: systemctl restart sshd
# Open a new terminal and try: ssh -p 2222 yourusername@YOUR_VPS_IP
避免将自己锁在外面:测试时务必保持一个 SSH 会话处于打开状态。若因配置错误导致新登录失败,现有会话可让您撤销更改。这是人们将自己锁出 VPS 最常见的方式。
设置 MaxAuthTries 3 和 LoginGraceTime 30 可限制每次连接的尝试次数和时间,而 AllowUsers 则起到白名单作用:只有列出的用户才能通过 SSH 登录,即使机器人猜出了其他有效用户名也无法入侵。
防火墙 + Fail2Ban + 定期更新(三层协同防护)
良好的防护从不依赖单一手段,而是采用分层防御(纵深防御)。每台 VPS 都应具备三个基础防护层:防火墙关闭除必要端口外的所有端口、Fail2Ban 封禁暴力破解的 IP,以及自动更新在漏洞被利用前及时打补丁。
从 UFW 开始:将默认入站策略设为拒绝,然后只开放实际使用的端口:
ufw default deny incoming
ufw default allow outgoing
ufw allow 2222/tcp # your new SSH port
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
ufw limit 2222/tcp # rate-limit SSH connections (anti brute-force)
ufw enable
ufw status verbose # review all rules
接下来,使用与新端口匹配的 SSH jail 配置 Fail2Ban。创建 /etc/fail2ban/jail.local(切勿直接编辑 jail.conf——该文件在更新时会被覆盖):
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 2222
maxretry = 3
findtime = 600
bantime = 3600
backend = systemd
这意味着,某个 IP 在 10 分钟内(findtime = 600)三次登录失败,将被封禁一小时(bantime = 3600)。使用 systemctl restart fail2ban 重启服务,并通过 fail2ban-client status sshd 查看封禁状态。
最后一层是更新。大多数漏洞利用针对已有补丁的已知漏洞,因此请配置 unattended-upgrades 自动安装安全更新:
apt update && apt upgrade -y
apt install unattended-upgrades -y
dpkg-reconfigure --priority=low unattended-upgrades # enable it
最小权限原则与禁用闲置服务
最小权限原则——仅授予所需的最低访问权限——是服务器安全的核心。每个运行中的服务、用户和开放端口都会增加一个攻击面。暴露越少,被入侵的可能性就越小。
首先查看哪些服务在监听端口,然后禁用不需要的服务:
ss -tulpn # see which services are listening
systemctl list-units --type=service --state=running
systemctl disable --now SERVICE # disable unused services (e.g. cups, avahi-daemon)
值得采用的最小权限实践:
- 始终以 sudo 用户身份工作,绝不长期使用 root——仅在需要提升权限的命令时使用
sudo。 - 授予最低限度的文件权限——网站文件使用
chmod 644,目录使用755,绝对不要使用777。 - 为每个应用程序创建专用用户(例如 Web 服务器使用
www-data),而非以 root 身份运行。 - 使用
apt purge卸载不需要的软件包,消除遗忘软件中可能存在的漏洞。 - 在防火墙中关闭闲置端口——数据库端口(3306、5432)绝对不应对外开放,应仅绑定到
127.0.0.1。
将数据库绑定到本地地址是很多人忽略的一步。如果 MySQL 或 PostgreSQL 直接监听公网,机器人会扫描、发现并立即尝试暴力破解。请务必在数据库配置文件中确认 bind-address = 127.0.0.1。
监控与备份也是安全的一部分
很多人认为安全只需要防火墙和 SSH 密钥,但实际上,可见性(监控)和可恢复性(备份)才是让系统在真实安全事件中保持韧性的两大支柱。如果您被入侵却浑然不知,损失会持续扩大;如果数据丢失时没有备份,则一切都将无法挽回。
在监控方面,先使用内置工具定期检查日志:
journalctl -u ssh --since "1 hour ago" # review SSH access logs
last -20 # recent login history
grep "Failed password" /var/log/auth.log # find failed login attempts
apt install auditd -y # install the audit framework
需要定期关注的异常包括:异常登录(奇怪的时间或境外 IP)、CPU、内存或磁盘使用量的异常飙升(可能是被偷偷安装了挖矿程序),以及 /etc 目录或网站根目录中无故发生变化的文件。
在备份方面,遵循 3-2-1 原则:保留三份数据副本,存放在两种不同介质上,其中至少一份在异地。最重要的是,定期测试恢复流程——无法恢复的备份等于没有备份。请参阅我们的 VPS 备份指南,了解完整备份策略。
安全配置清单总结
- 将 SSH 端口从 22 改为其他端口
- 禁用 root 登录,创建 sudo 用户
- 启用 SSH 密钥认证,禁用密码登录
- 配置 UFW 防火墙,仅开放必要端口
- 保持软件包更新(unattended-upgrades)
- 安装并配置与端口匹配的 Fail2ban jail
- 实施最小权限原则,禁用闲置服务
- 将数据库仅绑定到 127.0.0.1
- 配置监控,定期检查日志
- 按 3-2-1 原则备份并定期测试恢复
常见问题解答
更改 SSH 端口真的能提升安全性吗?
将端口从 22 改为其他端口并非真正的安全措施(这属于"通过隐晦来实现安全"),但它能大幅减少自动扫描端口 22 的机器人流量,让您的日志更整洁,也减轻 Fail2Ban 的负担。这只是一个辅助层——真正的防护来自使用 SSH 密钥、禁用密码登录和禁用 root 登录,三者应同时配置。
如果配置错误导致自己被锁出 VPS 该怎么办?
最好的预防措施是在进行更改时始终保持一个 SSH 会话处于打开状态。如果真的被锁出,AsiaGB VPS 通过控制面板提供控制台 / VNC 访问,让您无需 SSH 即可直接访问服务器。您可以通过控制台登录并撤销 sshd_config 或防火墙规则。
已经使用 SSH 密钥,还需要 Fail2Ban 吗?
建议两者同时使用。SSH 密钥可以防止密码猜测,但 Fail2Ban 还能减少来自不需要连接的服务器负载,并可保护其他服务(如网页登录和邮件)。它还能缓解来自连接洪泛的轻量级 DoS 攻击。多层防护始终比单一手段更安全。
VPS 应该多久备份一次?
这取决于您的数据变化频率。有订单或频繁更新数据库的网站应每天备份(数据库甚至更频繁),而很少更新的静态网站可能每周备份一次就够了。比频率更重要的是将备份存放在异地,并定期测试恢复,确保真正需要时能够成功恢复数据。