科学上网·自建篇(一):VPS 服务器环境搭建与安全加固

很多人拿到VPS后的第一反应是“赶紧把代理装上”,但这一篇想强调一个更重要的前置步骤:先把服务器本身加固好,再谈部署。一台配置不当的服务器,本身就是一个安全隐患,无论上面跑的是什么协议。


一、操作系统选择

系统 特点 建议
Debian(长期支持版本) 稳定性高,更新相对保守,社区资料丰富 追求长期稳定运行的首选之一
Ubuntu(LTS长期支持版本) 在Debian基础上,软件包相对新一些,新手资料同样丰富 兼顾稳定性和易用性的常见选择
CentOS系(如Rocky Linux、AlmaLinux等替代发行版) CentOS官方版本已终止维护,目前社区更多转向这些兼容替代发行版 如果有企业级Red Hat生态使用习惯,可以考虑,但对新手不是首选

建议:如果没有特殊的生态依赖,直接选择Debian或Ubuntu的长期支持(LTS)版本即可,两者社区资料最丰富,遇到问题也最容易找到解决方案。


二、实操步骤

在保留“用户名 + 密码”登录习惯的前提下,尽可能提升服务器的安全性——本文将手把手带你完成一套系统化的 VPS 安全加固方案。无论你使用的是 Debian 12 还是 Ubuntu(如 22.04 / 24.04),都可以无缝对照执行。

SSH密钥认证比密码认证更安全:传统的密码登录方式,本质上是“你知道一个字符串,服务器验证这个字符串是否正确”,这种方式天然存在被暴力破解(不断尝试各种密码组合)的风险。SSH密钥认证采用非对称加密原理:你在本地生成一对密钥(公钥和私钥),公钥放在服务器上,私钥留在你自己的设备上,登录时通过密码学方式验证你确实持有对应的私钥,私钥本身从始至终不需要在网络上传输,这从原理上就杜绝了暴力破解密码的攻击方式。但为了保留大部分新手的操作习惯,以及我们搭建节点的VPS本身不会存储敏感重要的内容,本文不讲解SSH密钥认证,保留“用户名 + 密码”登录方式。

通过SSH登录VPS

打开 Finalshell ,通过 SSH 链接 VPS 。

双击刚添加的VPS,登录SSH。

在弹出的安全警告提示框内点击 接受并保存

登录完成。


第一步:更新系统软件包

  • 做什么:把系统自带的所有底层软件和安全补丁升级到最新状态。
  • 为什么:刚装好的系统可能包含一些已知的漏洞,更新它们可以封堵潜在的安全隐患。
  • 命令(Debian / Ubuntu 通用):
sudo apt update && sudo apt upgrade -y

命令解释:

  • sudo:以最高管理员权限临时执行命令。
  • apt update:刷新软件源列表,告诉系统哪里可以下载最新的软件。
  • &&:连接符,代表前面命令成功后接着执行后面的命令。
  • apt upgrade -y:开始升级所有可以升级的软件。-y 的意思是中途如果问你“是否继续”,自动回答“是”。

第二步:创建一个普通用户并赋予管理员权限

  • 做什么:新建一个专属于你自己的普通账号(例如叫 myuser),并把它加入管理员组。
  • 为什么:Linux 系统默认最高权限账户叫 root。黑客攻击 VPS 的首要目标就是猜 root 的密码。如果我们平时用普通用户登录,即使密码不小心泄露了,对方也无法直接拿到整台服务器的最高控制权。
  • 命令(请把 myuser 换成你想用的英文用户名):
sudo adduser myuser

执行后会依次要求你输入两次密码(输入时屏幕上不会显示密码字符,属正常现象,输完直接回车即可),随后还会询问 Full Name、Room Number、Work Phone 等一系列个人信息,这些信息与账号安全无关,全部直接回车跳过即可,最后系统会让你确认信息无误,输入 Y 并回车即可完成用户创建。

接着,把这个新用户加入管理员组。Ubuntu 默认已预装 sudo 命令及对应的 sudo 用户组,可以直接执行下一步;但部分 Debian 精简安装(如 netinst 版本)可能没有预装 sudo,需要先手动安装:

sudo apt install sudo -y   # 若系统已自带 sudo,此命令不会造成任何影响,可放心执行

确认 sudo 可用后,将新用户加入 sudo 组(Debian 和 Ubuntu 在这一步完全相同):

sudo usermod -aG sudo myuser

第三步:修改 SSH 登录配置(核心防线)

  • 做什么:修改远程连接配置文件,关闭最高权限用户(root)直接登录,并把默认的 22 端口改成一个冷门端口。
  • 为什么:
    • PermitRootLogin no:彻底切断黑客直接暴力破解 root 账户的通道。
    • 修改端口(比如改成 50022):互联网上 99% 的自动化攻击脚本只会死盯着 22 端口撞库。换掉端口后,这些脚本直接就找不到大门了。

打开 SSH 配置文件:

sudo nano /etc/ssh/sshd_config

在打开的文件中,找到以下几行(如果前面有 # 号,代表被注释了,记得把 # 号删掉):

Port 22                       # 改成你想用的端口,例如:Port 50022
PermitRootLogin no            # 确保这里是 no(禁止 root 远程登录)
PasswordAuthentication yes    # 保留 yes(允许你使用密码登录)

修改方法:修改好后,按下键盘上的 Ctrl + O 保存,然后按 Enter 确认,再按 Ctrl + X 退出。

修改完成后,重启 SSH 服务让配置生效

sudo systemctl restart ssh

⚠️ 极度重要提醒:在断开当前连接前,请务必新开一个终端窗口,用你刚创建的新用户和新端口,测试一下能不能连上。确认无误后再关掉旧窗口!若重启后新配置似乎没有生效,可检查 /etc/ssh/sshd_config.d/ 目录下是否存在其他配置文件覆盖了同一项设置。


第四步:配置 UFW 防火墙(最小权限原则)

  • 做什么:开启系统的 UFW 防火墙,默认拒绝所有外来的不速之客,只放行我们需要用的端口。
  • 为什么:这就好比给房子装上防盗门,只留一扇小窗户(SSH 端口)和几个业务通风口(如 3x-ui 面板端口),其余所有端口全部上锁。
  • 命令(Debian / Ubuntu 通用):

Ubuntu 通常已预装 UFW,Debian 则大多需要手动安装;不确定的话直接执行以下命令即可,若已安装不会有任何副作用:

sudo apt install ufw -y

设置默认规则(拒绝所有进来的,允许所有出去的):

sudo ufw default deny incoming
sudo ufw default allow outgoing

放行你刚才修改的 SSH 端口(假设你改成了 50022):

sudo ufw allow 50022/tcp

放行你未来准备安装的 3x-ui 面板端口(假设是 2053)以及你的节点传输端口(假设是 443):

sudo ufw allow 2053/tcp
sudo ufw allow 443/tcp

基本原则是:只开放你确实需要用到的端口,其余一律保持关闭状态。

启动防火墙:(会提示你可能会断开连接,输入 y 回车即可)

sudo ufw enable

查看防火墙状态:

sudo ufw status

第五步:安装并配置 Fail2ban(防密码暴力破解)

  • 做什么:安装一个智能安全卫士(Fail2ban)。它会自动盯着你的 SSH 登录日志,如果有人连续输错密码超过指定次数,它会立刻出手,直接在防火墙里把对方的 IP 地址封掉。
  • 为什么:因为我们保留了 PasswordAuthentication yes(密码登录),黑客可能会尝试用程序暴力猜密码。有了 Fail2ban,对方只要连续输错 3 次,就会被关进“小黑屋”一整天。
  • 命令(Debian / Ubuntu 通用):
sudo apt install fail2ban -y

复制一份默认配置文件作为本地自定义配置:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

打开配置文件:

sudo nano /etc/fail2ban/jail.local

在文件中找到 [sshd] 这一段,修改或核对以下参数:

[sshd]
enabled = true
port = 50022     # 填入你在第三步修改的 SSH 端口!
maxretry = 3     # 允许最大输错密码次数
bantime = 86400  # 封禁时间(秒,86400秒 = 24小时)

保存并退出(Ctrl + OEnterCtrl + X)。

启动并设置开机自启:

sudo systemctl enable --now fail2ban

第六步:校准时区与时间同步(建议,但非必要)

  • 做什么:把服务器的时区修改为中国上海时间(CST),并开启自动时间校准。
  • 为什么:
    • 新 VPS 默认是 UTC 时间,查看日志时和国内有 8 小时时差。
    • 科学上网协议(尤其是 VLESS-Reality、Hysteria 2 等现代加密协议)对时间精度要求很高。如果服务器时间漂移过大,会导致客户端与服务端时间对不上,直接导致节点连不上。
  • 命令(Debian / Ubuntu 通用):
sudo timedatectl set-timezone Asia/Shanghai

检查时区和时间同步状态:

timedatectl

检查标准:

  • 看到 Time zone: Asia/Shanghai (CST, +0800) 说明时区正确。
  • 看到 System clock synchronized: yes 说明系统正在自动联网校准时间。

完成以上配置之后,你的服务器已经具备了基本的安全底线,可以放心进入下一步的协议部署环节。


三、下一步

服务器环境准备好之后,接下来是根据第06篇选定的协议进行实际部署,详见第17篇《代理协议部署逻辑详解》。