新购买的 VPS 通常是一个"裸系统"。为了确保服务器长期稳定、安全地运行,我们需要进行一系列的初始化设置和性能优化。本指南将带您完成从"开箱"到"精装修"的全过程。
📦 更新系统组件
这是拿到服务器后的第一件事。旧版本的软件可能包含安全漏洞。
如果更新过程中出现交互式弹窗询问是否保留配置文件,通常选择 "keep the local version currently installed" (保留当前版本) 是最稳妥的。
👤 用户与权限管理
长期使用 root 账户操作极其危险。我们应该创建一个普通用户,并在需要时使用 sudo 提权。
创建新用户
将 username 替换为您想要的用户名:
系统会提示您设置密码并填写一些信息(直接回车跳过即可)。
授予 Sudo 权限
现在,该用户可以使用 sudo command 来执行管理员操作了。
🔒 SSH 安全加固
SSH 是公网扫描和凭据攻击的常见目标。密钥认证、普通管理用户、最小化入口与登录审计是核心措施;修改默认端口只能减少日志噪声,不能替代身份验证和防火墙。
🛑 警告:防封锁指南
在修改 SSH 配置前,请确保您已经创建了新用户并设置了 SSH 密钥登录。建议保持当前终端连接不关闭,新开一个终端测试连接成功后,再关闭旧连接。
修改配置文件
编辑 SSH 配置文件:nano /etc/ssh/sshd_config
# 修改默认端口 (选一个 1024-65535 之间的端口)
Port 22222
# 禁止 root 直接登录
PermitRootLogin no
# 禁止密码登录 (仅限已配置好密钥的情况)
PasswordAuthentication no
# 仅允许特定用户登录 (可选)
AllowUsers username 修改后先检查配置语法;校验通过才平滑重载,并保留旧会话、通过新终端验证:
sudo sshd -t
sudo systemctl reload ssh
# 在新终端验证密钥、端口和 sudo 后,再退出旧会话 📂 进阶:解除文件描述符限制
文件描述符限制取决于 shell、systemd 服务单元和应用自身配置。只有监控或日志出现 Too many open files,并确认当前软硬限制确实不足时,才需要按服务容量调高。
1. 临时修改 (重启失效)
ulimit -n 65535 2. 永久修改
编辑 /etc/security/limits.conf,在文件末尾添加以下内容:
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535 注:需重启服务器生效。验证命令:ulimit -n
🛡️ 配置 UFW 防火墙
UFW (Uncomplicated Firewall) 是 Ubuntu/Debian 上最简单的防火墙工具。
1️⃣ 安装 UFW
apt install ufw -y 2️⃣ 放行必要端口 (关键!)
务必先放行 SSH 端口,否则开启防火墙后会断连。
ufw allow 22222/tcp SSH 端口 ufw allow 80/tcp HTTP ufw allow 443/tcp HTTPS 3️⃣ 启用防火墙
ufw enable 输入 y 确认启用。
👮 进阶:Fail2ban 自动防御
即使改了端口,服务器仍会被不停扫描。Fail2ban 可以监控日志,自动封禁多次尝试失败的恶意 IP。
# 1. 安装 Fail2ban
apt install fail2ban -y
# 2. 创建局部覆盖,不复制整份 jail.conf
cat > /etc/fail2ban/jail.d/sshd.local <<'EOF'
[sshd]
enabled = true
bantime = 1h
findtime = 10m
maxretry = 5
EOF
# 3. 先验证配置,再启用服务
fail2ban-client -t
systemctl enable --now fail2ban
fail2ban-client status sshd /var/log/auth.log。以 fail2ban-client status sshd 和实际失败登录测试确认 jail 正在读取正确日志并写入预期防火墙后端。
🚀 开启 BBR 加速
BBR 是 Linux 支持的 TCP 拥塞控制算法之一,是否改善吞吐或延迟取决于内核、线路、丢包、队列和业务流量。启用前后应使用同一测试方法对比,不能把“模块可用”等同于“业务一定提速”。
一键开启命令
# 先确认当前内核提供 BBR
sysctl net.ipv4.tcp_available_congestion_control
# 使用独立配置文件,便于审计和回退
cat > /etc/sysctl.d/90-vpsknow-bbr.conf <<'EOF'
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF
sysctl --system
sysctl net.ipv4.tcp_congestion_control 验证是否成功:
sysctl net.ipv4.tcp_congestion_control 输出为 bbr 只表示系统已选择该算法;仍需用实际业务指标验证收益。
🌐 进阶:DNS 解析优化
DNS 解析速度和可用性与服务器地域、上游网络、缓存和 DNSSEC 支持有关。云厂商内网 DNS 往往还能解析私有域名,因此不要仅凭品牌直接替换。
先用 resolvectl status 确认系统实际由 Netplan、NetworkManager、systemd-resolved 还是云初始化管理,再在对应管理层修改。以 systemd-resolved 为例:
# /etc/systemd/resolved.conf.d/10-vpsknow-dns.conf
[Resolve]
DNS=1.1.1.1 1.0.0.1
FallbackDNS=8.8.8.8 8.8.4.4
# 保存后重启并验收
systemctl restart systemd-resolved
resolvectl status
resolvectl query example.com 不要直接覆盖 /etc/resolv.conf:它通常是动态生成的符号链接。若修改后私有域名或软件源解析失败,应删除该 drop-in、重启服务并恢复云厂商配置。
💾 配置 SWAP 虚拟内存
如果您的 VPS 内存较小(如 512MB 或 1GB),配置 SWAP 可以防止内存耗尽导致系统卡死。
1. 创建 SWAP 文件
这里以创建 1GB SWAP 为例:
# 创建文件
fallocate -l 1G /swapfile
# 设置权限
chmod 600 /swapfile
# 格式化为 swap
mkswap /swapfile
# 启用 swap
swapon /swapfile 2. 开机自动挂载
为了让重启后依然生效,需要写入 /etc/fstab:
echo '/swapfile none swap sw 0 0' >> /etc/fstab 3. 调整使用倾向 (Swappiness)
设置系统使用 SWAP 的积极程度。值越低,越倾向于使用物理内存。
# 独立配置便于回退,避免重复追加
printf 'vm.swappiness=10\n' > /etc/sysctl.d/90-vpsknow-swap.conf
sysctl --system
sysctl vm.swappiness 🧹 进阶:日志清理策略
systemd-journald 日志如果不加限制,可能会占用数 GB 空间。建议限制其大小。
清理并限制大小
# 只保留最近 100M 日志
journalctl --vacuum-size=100M
# 只保留最近 7 天日志
journalctl --vacuum-time=7d 如需永久生效,请修改 /etc/systemd/journald.conf 中的 SystemMaxUse=100M。
⏰ 时间同步设置
许多服务(如 V2Ray、SSL 证书验证)对时间极其敏感。确保服务器时间准确非常重要。
修改时区
timedatectl set-timezone Asia/Shanghai 设置为上海时间(CST)。
启用 NTP 同步
timedatectl set-ntp true 开启网络时间协议自动同步。
优化完成!
现在您的 VPS 已经处于最佳状态:安全、快速且稳定。接下来可以开始部署您的服务了。
❓ 常见问题解答
这篇指南和"购机后必做清单"有什么区别?做了一个还需要做另一个吗?
两者有较大重叠,但侧重不同。购机后必做清单是面向绝对新手的"10步安全初始化流程",每步都有详细操作说明,目标是让新机器在 30 分钟内达到基础安全标准。本指南则覆盖更广,额外包含文件描述符限制、BBR 加速、DNS 优化、journald 日志管理等性能调优内容,并补充了 CentOS/AlmaLinux 的命令,更适合想深入了解 Linux 优化的用户。建议路径:新手先看"购机后必做清单"完成基础加固,再回来看本指南进行性能调优。两者可以配合使用,不存在重复做某步"报错"的问题。
BBR 已经是最好的 TCP 加速方案了吗?还有没有更激进的优化?
不存在适合所有 VPS 的“最好”拥塞控制算法。发行版内核自带的 BBR 通常比更换第三方内核容易回退,但实际收益仍取决于 RTT、丢包、队列、接收端和套餐限速。BBRv3、其他队列调度器、QUIC / HTTP/3 与 TCP Fast Open 解决的问题也不同,不能叠加后直接归因。建议先记录当前算法和业务指标,每次只改一个变量,并在相同目标、时段和并发条件下复测;没有稳定改善就恢复原配置。
禁用 root 登录后,如果 sudo 用户密码忘了,怎么恢复访问?
通过商家控制面板的 VNC/Console 带外连接恢复:① 登录 VNC,系统会提示登录;② 输入您的普通用户名;③ 如果密码忘记,在 VNC 中输入 root 用户名(即使禁用了 SSH root 登录,VNC 控制台仍可用 root 登录);④ 以 root 身份重置普通用户密码:passwd username。更好的预防方案:配置 SSH 密钥登录并保存好私钥,这样即使忘记密码也能通过密钥直接登录,无需密码。同时,建议在密码管理器(如 Bitwarden、1Password)中记录服务器的所有凭据。
修改 /etc/resolv.conf 设置 DNS 后,重启就恢复了,怎么永久生效?
/etc/resolv.conf 在现代系统中通常由解析器或网络管理工具动态生成。先运行 resolvectl status 并检查该文件的符号链接目标:systemd-resolved 使用 /etc/systemd/resolved.conf.d/*.conf 局部配置;Netplan 或 NetworkManager 管理的主机应在对应网络配置中修改。变更后测试公共域名、私有域名和软件源解析;失败时删除本次新增配置并恢复原管理层。不要用 chattr +i 锁定 resolv.conf,这会破坏 DHCP、云初始化和合法 DNS 更新。
文件描述符设置为 65535 够用吗?高并发应用需要更高的值吗?
65535 对绝大多数场景已经足够。计算公式:每个 TCP 连接需要 1 个文件描述符,65535 可以同时支持约 6.5 万个并发连接,远超个人 VPS 的实际需求。真正需要更高值的场景:大型反向代理(每个上游连接 + 每个客户端连接各占一个 fd)、Nginx + 每 worker 进程的 worker_connections 超过 65535。如果确实需要更高,可以将值改为 1048576(100 万),同时需要在 /etc/sysctl.conf 中配套调整 fs.file-max = 1048576(系统级总上限)。修改后用 cat /proc/sys/fs/file-max 验证系统级上限,用 ulimit -n 验证进程级限制。
OpenVZ 架构的 VPS 可以开启 BBR 吗?
OpenVZ 和 LXC 共享宿主机内核,租户通常不能加载内核模块或切换受限制的拥塞控制参数;宿主机可能已经启用 BBR,但容器内未必允许修改。先运行 sysctl net.ipv4.tcp_available_congestion_control 和 sysctl net.ipv4.tcp_congestion_control 查看实际能力,权限被拒绝时不要强行套用脚本。KVM 通常有更多内核控制权,但仍取决于发行版内核和商家限制。
Fail2ban 的默认封禁时间(10分钟)太短了,怎么修改为更长时间?
在 /etc/fail2ban/jail.d/sshd.local 只覆盖需要调整的参数,例如 bantime = 1h、findtime = 10m、maxretry = 5。先执行 fail2ban-client -t,再重载服务并检查 jail 状态。初期不建议永久封禁:动态 IP、共享出口和误报会让规则长期积累。若需要 Cloudflare 边缘联动,还必须先恢复真实访客 IP、使用最小权限 Token,并设置观察、过期和回收流程;不能把源站日志中的 Cloudflare 节点地址直接同步为封禁对象。
这些优化步骤需要按顺序执行吗?可以只做部分吗?
绝大多数步骤相互独立,可以按需选择。唯一有强依赖关系的是:必须先做用户管理和 SSH 密钥配置(步骤2+3),再做"禁用密码登录"——否则会把自己锁门外。其余步骤的推荐执行优先级:① 必做:系统更新(安全基础);② 强烈推荐:SSH 加固 + UFW 防火墙 + Fail2ban(安全三件套);③ 按需做:BBR(改善网络质量)、文件描述符(高并发应用)、DNS 优化(网络环境差时有效);④ 低配机必做:Swap 配置(小内存 VPS 防崩);⑤ 长期运维必做:日志清理(防磁盘爆满)。
执行 sysctl -p 时报错 "No such file or directory",怎么解决?
先根据错误输出定位具体参数和来源文件,不要批量删除所有 net.ipv4.tcp_* 或 net.core.* 设置。用 sysctl 参数名 检查当前内核是否提供该项,并核对拼写、模块和容器权限;只注释本次新增且确认不受支持的那一行,再运行 sysctl --system 验证。BBR 应直接检查 net.ipv4.tcp_available_congestion_control,不要只凭内核版本推断。
完成系统优化后,下一步应该做什么?
系统层优化完成后,建议按以下顺序继续:① 防火墙深度配置:本指南的 UFW 是基础入门,进一步学习 iptables 高级规则(速率限制、端口敲门、状态检测)能大幅提升安全性——参见防火墙配置教程;② 自动化运维:把本指南中的常用命令写成 Shell 脚本,配合 Cron 定时执行(如定期清理日志、自动备份),大幅节省运维时间——参见自动化脚本与 Cron 定时任务;③ 应用部署:系统调好了,可以开始部署实际服务:Docker 容器、Nginx Web 服务器、WordPress 博客等,参见应用部署系列指南。