【转载/翻译】安全配置您的 VPS

如何安全配置您的 VPS:分步指南 - Kyri --- How to Secure Your New VPS: A Step-by-Step Guide - by Kyri

确保访问安全

设置非 root 用户

$ sudo adduser username

为新用户授予 sudo 权限:

$ sudo usermod -aG sudo username

现在切换到新用户并验证 sudo 访问权限:

$ su - username
$ sudo whoami

如果最后一个命令返回 root,则表示您已成功为新用户设置 sudo 访问权限。

设置 SSH 身份验证

切换到基于密钥的认证以提高安全性。
在你的本地计算机上生成一个 SSH 密钥对:

$ ssh-keygen -t ed25519 -C "email@example.com"

将 'email@example.com' 替换为你自己的地址*

按 Enter 键将密钥保存到默认位置。你可以选择性地输入一个密码短语——如果你输入了,每次你 SSH 连接到 VPS 时都需要输入它。我个人为了方便通常留空。
接下来,从你的本地计算机将你的公钥复制到你的 VPS:

$ ssh-copy-id -i ~/.ssh/ed25519.pub username@12.34.56.78

将'username'替换为您之前创建的用户名。*

验证您是否可以使用新密钥连接:

$ ssh -i ~/.ssh/ed25519 -o PasswordAuthentication=no username@12.34.56.78

为了避免每次都指定密钥的路径,将其添加到您的本地 SSH 代理:

$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/ed25519

现在您只需使用以下方式即可 SSH 连接到您的 VPS:

$ ssh username@12.34.56.78

(可选)为了更方便,您可以在 ~/.bashrc 或 ~/.zshrc 中添加一个别名:

alias ssh-vps='ssh username@12.34.56.78'

保存并关闭文件。然后,将配置源到当前会话中:

$ source ~/.zhsrc

现在您只需在终端中输入 ssh-vps 即可连接到您的 VPS。

禁用密码认证

现在您已启用 SSH 密钥访问,是时候禁用密码认证和 root 登录了。首先,使用新用户连接到您的 VPS:

$ ssh username@12.34.56.78

打开 SSH 守护进程配置文件:

$ sudo vim /etc/ssh/sshd_config

对以下进行更改:

  1. 查找 PermitRootLogin yes 并将其更改为 PermitRootLogin no
  2. 查找 ChallengeResponseAuthentication 并将其设置为 no
  3. 查找 PasswordAuthentication 并将其设置为 no
  4. 查找 UsePAM 并将其设置为 no

现在您的 sshd_config 文件应包含以下行:

PermitRootLogin no
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no

保存并关闭文件。
⚠️ 注意:在进行下一步之前,请确保您已创建非 root 用户并按照上一节详细说明设置 SSH 密钥认证,否则您将面临永久无法访问您的 VPS 的风险。

通过重启 SSH 守护进程应用新配置:

$ sudo service sshd reload

确认 root 登录现在已被禁用。从您的本地计算机,尝试以 root 身份登录:

$ ssh root@12.34.56.78

这应该会以“权限拒绝”的错误消息失败。

加固您的 VPS

配置防火墙

防火墙对于防止未经授权访问您的 VPS 端口至关重要。我们将遵循最小权限原则,仅打开所需的端口。

安装 UFW(Uncomplicated Firewall):

$ sudo apt install ufw

检查防火墙状态:

$ sudo ufw status verbose
$ sudo ufw disable

列出已知的 UFW 应用程序策略:

$ sudo ufw app list

允许 OpenSSH(这对于保持访问权限至关重要):

$ sudo ufw allow 'OpenSSH'

⚠️ 请确认 OpenSSH 是否允许(这可以防止被锁定):

$ sudo ufw show added

你应该看到以下内容:

ufw allow OpenSSH

除非看到这个,否则不要继续。

Set default rules: 设置默认规则:

$ sudo ufw default deny incoming 
$ sudo ufw default allow outgoing

这允许所有出站流量,但拒绝所有入站流量(除 SSH 外)。

(可选)如果您计划运行 Web 服务器,请允许端口 80 和 443:

$ sudo ufw allow 'Nginx Full'

最后,启用防火墙:

$ sudo ufw enable

⚠️ 注意:系统可能会警告您中断 SSH 连接。如果您已确认允许 OpenSSH(如我们之前所做的那样),则可以继续操作——在提示时输入 'y'。

验证防火墙是否正在运行:

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)

您的 VPS 现在已受到防火墙的保护。

配置 Fail2Ban

Fail2Ban 会监控您的认证日志,并禁止尝试登录次数过多的 IP 地址。我们将配置它来监控 SSH 连接尝试。

Install Fail2ban: 安装 Fail2ban:

$ sudo apt install fail2ban

检查其状态(默认情况下应已禁用):

$ sudo systemctl status fail2ban.service
○ fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; disabled; vendor preset: enabled)
     Active: inactive (dead)
       Docs: man:fail2ban(1)

在启用之前,您将配置 Fail2Ban 来监控 SSH 访问日志。

前往 Fail2Ban 配置目录:

$ cd /etc/fail2ban

创建本地配置文件:

$ sudo cp jail.conf jail.local

编辑本地配置:

$ sudo vim jail.local

[sshd] 部分,添加或修改这些行:

[sshd]
enabled = true
mode = aggressive
...

这启用了 SSH 监控并将模式设置为激进,这会应用更严格的规定以覆盖更广泛的潜在威胁。

可以根据需要自由探索和调整其他设置。默认值通常适用于大多数情况。完成后,保存并关闭文件。

在系统启动时启用 Fail2Ban:

$ sudo systemctl enable fail2ban

Start Fail2Ban manually: 手动启动 Fail2Ban:

$ sudo systemctl start fail2ban

Verify it’s running: 验证是否正在运行:

$ sudo systemctl status fail2ban

(可选)要验证 Fail2Ban 是否正常工作,您可以尝试使用无效的 SSH 密钥反复连接。当被禁止时,错误信息应该从"Permission denied"变为"Connection refused"。警告:请从与本地不同的机器上执行此测试,以避免将自己锁出系统。如果您确实被锁出,默认的禁止时间为 10 分钟。

您的 VPS 现在具有额外的防护层,可以抵御暴力破解攻击。

保持安全:自动安全更新

Ubuntu 提供 unattended-upgrades ,一个工具,可以自动检索并安装服务器的安全补丁和重要升级。

安装它(如果尚未预装):

$ sudo apt install unattended-upgrades

验证是否正在运行:

$ sudo systemctl status unattended-upgrades.service

(可选)配置自动重启。某些升级需要重启才能生效。默认情况下,自动重启是禁用的。要更改此设置,请打开其配置文件:

$ sudo vim /etc/apt/apt.conf.d/50unattended-upgrades

找到行 Unattended-Upgrade::Automatic-Reboot 并将其设置为 true

⚠️ 注意:启用自动重启会使您的 VPS 及其服务在重启期间暂时不可用。我个人保持此功能关闭,并在需要时手动重启。当您通过 SSH 连接到 VPS 时,如果需要为更新而重启,您会看到一条消息。

如果您进行了更改,请重新加载服务:

$ sudo systemctl reload unattended-upgrades.service

您的 VPS 现在将自动保持最新安全补丁和关键升级。

VPS 结论:一个坚不可摧的 VPS

恭喜你成功走到这一步!你的 VPS 现在比开始时状态好多了。让我们回顾一下你已经完成的工作:

  1. 将服务器的软件更新到最新版本
  2. 禁用密码认证并设置更安全的基于密钥的认证机制
  3. 添加防火墙来控制对服务器端口的访问
  4. 安装了 Fail2Ban 来自动阻止尝试进行未授权连接的 IP 地址
  5. 配置了自动安全升级和补丁