最近忙着重建崩了的魔法节点,顺手记录一下 VPS 的初始化流程,免得下次从头考古。
系统加固
VPS 托管在各种恶意扫描脚本横行的公网上,又经常和不可信的第三方程序打交道,好的加固流程能够降低系统被入侵的风险。
账户加固
通常 VPS 只有一个初始的 root 用户,用 root 运行从互联网上拉下来的未知应用/脚本很危险,因此有必要创建一个普通用户负责日常登录、部署和运行应用:
1 | adduser {user} |
把新用户加入 sudo 清单用于临时提权。执行 visudo 编辑清单,在 User Privilege Spec 下添加配置:
1 | {user} ALL=(ALL:ALL) ALL |
切换到新用户并验证提权:
1 | su - {user} |
配置远程密钥登录,在本地终端上执行:
1 | # 复制公钥到服务器 |
SSH 加固
VPS 的 SSH 服务通常暴露在公网上,只要知道 (IP, 端口, 用户名, 密码/私钥) 四段信息就可以直接进入。因此,这里需要增加获取这些信息的难度。
禁用所有用户的密码登录并禁止 root 登录,只允许普通用户的密钥登录。备份并编辑 SSH 服务配置 /etc/ssh/sshd_config:
1 | PermitRootLogin no |
SSH 端口改成 22 以外的非常规端口:
1 | Port {new_port} |
应用配置:
1 | sudo sshd -t # 检查配置语法 |
本地新开终端验证登录,出现问题则到原终端上回滚配置:
1 | ssh root@{server} -p {new_port} # 失败 |
内核参数
Linux 内核在运行时维护着大量参数,包括:
- 网络协议参数
- 虚拟内存参数
- 文件系统参数
- 进程限制参数
- 安全策略参数
这些参数通过 /proc/sys/ 目录以文件形式向用户层提供接口 — 向对应文件写入内容,就可以调整内核运行时行为。
sysctl 持久化配置
直接写入 /proc/sys/ 的修改只在当前运行周期内生效,系统重启后便会恢复。例如,下面的命令可以临时将 TCP 拥塞控制算法切换为 BBR:
1 | echo bbr | sudo tee /proc/sys/net/ipv4/tcp_congestion_control |
为了持久化这些参数,Linux 提供了 sysctl 工具和配置文件 /etc/sysctl.conf。写入其中的参数会在系统启动时被读取并应用:
1 | net.core.default_qdisc=fq # 队列调度算法设置为 FQ |
随着配置增多,把所有内容集中在一个文件中会变得难以维护。因此,Linux 又引入了 /etc/sysctl.d/ 目录,方便按用途拆分配置:
1 | 10-network.conf |
配置修改完成后,手动进行应用,无需重启:
1 | sudo sysctl --system |
应用:BBR
魔法节点需要 BBR 来提升网络传输效率。
BBR 是一种 TCP 拥塞控制算法。相比于系统默认的 Cubic、Reno 等根据丢包反馈调整发送速率的传统算法,BBR 会估算网络带宽和往返时延(RTT),据此判断网络状态并动态控制发送速率。
在 Linux 系统中,BBR 由内核实现,并随内核持续更新。市面上常见的所谓“魔改 BBR”,通常是在特定内核版本上调整算法参数或修改部分实现后重新构建的版本,并非一种独立于 BBR 的全新拥塞控制算法。
配置前先检查当前系统的内核版本:
1 | uname -r |
BBR 从 Linux 4.9 开始进入主线内核。如果内核版本低于 4.9,需要先升级内核。
使用任意文本编辑器创建 /etc/sysctl.d/99-bbr.conf 并写入配置:
1 | net.core.default_qdisc=fq # 队列调度算法设置为 FQ |
应用配置:
1 | sudo sysctl --system |
验证配置是否生效:
1 | sysctl net.core.default_qdisc |
结语
大多 VPS 厂商提供的默认配置并不可靠,像 AWS 那么贴心的厂商少之又少,必要的加固工作能够让 VPS 远离公网上的妖魔鬼怪。