【转载/翻译】安全配置您的 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
对以下进行更改:
- 查找
PermitRootLogin yes
并将其更改为PermitRootLogin no
。 - 查找
ChallengeResponseAuthentication
并将其设置为no
。 - 查找
PasswordAuthentication
并将其设置为no
。 - 查找
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 现在比开始时状态好多了。让我们回顾一下你已经完成的工作:
- 将服务器的软件更新到最新版本
- 禁用密码认证并设置更安全的基于密钥的认证机制
- 添加防火墙来控制对服务器端口的访问
- 安装了 Fail2Ban 来自动阻止尝试进行未授权连接的 IP 地址
- 配置了自动安全升级和补丁