新购买的 VPS 通常是一个"裸系统"。为了确保服务器长期稳定、安全地运行,我们需要进行一系列的初始化设置和性能优化。本指南将带您完成从"开箱"到"精装修"的全过程。
📦 更新系统组件
这是拿到服务器后的第一件事。旧版本的软件可能包含安全漏洞。
如果更新过程中出现交互式弹窗询问是否保留配置文件,通常选择 "keep the local version currently installed" (保留当前版本) 是最稳妥的。
👤 用户与权限管理
长期使用 root 账户操作极其危险。我们应该创建一个普通用户,并在需要时使用 sudo 提权。
创建新用户
将 username 替换为您想要的用户名:
系统会提示您设置密码并填写一些信息(直接回车跳过即可)。
授予 Sudo 权限
现在,该用户可以使用 sudo command 来执行管理员操作了。
🔒 SSH 安全加固
SSH 是黑客暴力破解的重点目标。修改默认端口和禁止 Root 登录能抵挡 99% 的攻击。
🛑 警告:防封锁指南
在修改 SSH 配置前,请确保您已经创建了新用户并设置了 SSH 密钥登录。建议保持当前终端连接不关闭,新开一个终端测试连接成功后,再关闭旧连接。
修改配置文件
编辑 SSH 配置文件:nano /etc/ssh/sshd_config
# 修改默认端口 (选一个 1024-65535 之间的端口)
Port 22222
# 禁止 root 直接登录
PermitRootLogin no
# 禁止密码登录 (仅限已配置好密钥的情况)
PasswordAuthentication no
# 仅允许特定用户登录 (可选)
AllowUsers username 修改完成后,重启 SSH 服务生效:
sudo service sshd restart 📂 进阶:解除文件描述符限制
Linux 默认限制每个进程打开的文件数量(通常为 1024),这对于高并发应用(如 Web 服务器、代理工具)来说远远不够,容易导致 "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. 复制配置文件 (避免更新覆盖)
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# 3. 启动服务
systemctl enable fail2ban
systemctl start fail2ban /var/log/auth.log,并在 IP 失败 5 次后将其封禁 10 分钟。
🚀 开启 BBR 加速
BBR 是 Google 开发的 TCP 拥塞控制算法,能显著提升弱网环境下的传输速度。Linux Kernel 4.9+ 已内置。
一键开启命令
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p 验证是否成功:
lsmod | grep bbr 如果输出包含 tcp_bbr,说明开启成功。
🌐 进阶:DNS 解析优化
默认的 ISP DNS 可能速度慢或有劫持风险。建议更换为 Google 或 Cloudflare 的公共 DNS。
编辑 /etc/resolv.conf,修改为:
nameserver 8.8.8.8
nameserver 1.1.1.1 注:部分系统重启后会重置此文件,需修改 Netplan 或 systemd-resolved 配置以永久生效。
💾 配置 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 的积极程度。值越低,越倾向于使用物理内存。
sysctl vm.swappiness=10
# 永久生效需写入 /etc/sysctl.conf
echo "vm.swappiness=10" >> /etc/sysctl.conf 🧹 进阶:日志清理策略
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 加速方案了吗?还有没有更激进的优化?
BBR(v1)是目前最稳定的内置方案,适合绝大多数场景。更激进的选项包括:① BBRv3:Google 2023 年发布的新版本,进一步优化了高丢包场景下的表现,需要 Linux 6.x 内核;② BBR + fq_codel 调度器:比默认的 fq 调度器在延迟敏感场景(游戏、视频通话)下更稳定;③ QUIC/HTTP3:通过 Nginx 或 Caddy 开启 HTTP/3 支持,利用基于 UDP 的 QUIC 协议绕过 TCP 拥塞问题;④ TCP Fast Open:echo 3 > /proc/sys/net/ipv4/tcp_fastopen,减少 TCP 握手延迟。对于普通 VPS 用户,开启 BBRv1 已能带来 20-40% 的传输效率提升,其余优化收益递减,按需选择即可。
禁用 root 登录后,如果 sudo 用户密码忘了,怎么恢复访问?
通过商家控制面板的 VNC/Console 带外连接恢复:① 登录 VNC,系统会提示登录;② 输入您的普通用户名;③ 如果密码忘记,在 VNC 中输入 root 用户名(即使禁用了 SSH root 登录,VNC 控制台仍可用 root 登录);④ 以 root 身份重置普通用户密码:passwd username。更好的预防方案:配置 SSH 密钥登录并保存好私钥,这样即使忘记密码也能通过密钥直接登录,无需密码。同时,建议在密码管理器(如 Bitwarden、1Password)中记录服务器的所有凭据。
修改 /etc/resolv.conf 设置 DNS 后,重启就恢复了,怎么永久生效?
/etc/resolv.conf 在现代 Ubuntu/Debian 系统中由 systemd-resolved 动态生成,直接修改会被覆盖。永久修改方法:① systemd-resolved 方式(推荐):编辑 /etc/systemd/resolved.conf,在 [Resolve] 段落下添加 DNS=8.8.8.8 1.1.1.1,然后重启服务 systemctl restart systemd-resolved;② Netplan 方式(Ubuntu 18+):编辑 /etc/netplan/ 下的 yaml 文件,在网卡配置中添加 nameservers: addresses: [8.8.8.8, 1.1.1.1],执行 netplan apply;③ 锁定文件(简单粗暴):修改好 resolv.conf 后执行 chattr +i /etc/resolv.conf 加不可变属性,但这会阻止所有程序修改该文件,包括合法的 DHCP 更新。
文件描述符设置为 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 容器共享宿主机内核,无法自定义内核模块和 sysctl 参数。sysctl -p 命令可能会报错,或者修改不生效。BBR 需要 KVM 架构(拥有独立虚拟内核)才能正常启用。同样受影响的操作还有:修改文件描述符限制(可能不生效)、自定义 TCP 拥塞控制算法、加载自定义内核模块。判断架构:运行 systemd-detect-virt 或 virt-what,输出 kvm 或 vmware 说明是 KVM,输出 openvz 或 lxc 则是容器架构。这也是我们强烈推荐选购 KVM 架构 VPS 的核心原因。
Fail2ban 的默认封禁时间(10分钟)太短了,怎么修改为更长时间?
编辑 /etc/fail2ban/jail.local(如果不存在就从 jail.conf 复制一份),修改以下参数:bantime = 86400(封禁 24 小时,单位秒);findtime = 3600(1小时内触发计数);maxretry = 3(3次失败即封禁)。对于已知的恶意 IP 池,可以设置 bantime = -1 实现永久封禁。修改后执行 systemctl restart fail2ban 生效。还可以配合 Cloudflare API 实现:被 Fail2ban 封禁的 IP 自动同步到 Cloudflare 防火墙规则,在 CDN 层直接拦截,不消耗服务器资源。
这些优化步骤需要按顺序执行吗?可以只做部分吗?
绝大多数步骤相互独立,可以按需选择。唯一有强依赖关系的是:必须先做用户管理和 SSH 密钥配置(步骤2+3),再做"禁用密码登录"——否则会把自己锁门外。其余步骤的推荐执行优先级:① 必做:系统更新(安全基础);② 强烈推荐:SSH 加固 + UFW 防火墙 + Fail2ban(安全三件套);③ 按需做:BBR(改善网络质量)、文件描述符(高并发应用)、DNS 优化(网络环境差时有效);④ 低配机必做:Swap 配置(小内存 VPS 防崩);⑤ 长期运维必做:日志清理(防磁盘爆满)。
执行 sysctl -p 时报错 "No such file or directory",怎么解决?
这个报错通常是由于 /etc/sysctl.conf 中存在当前内核不支持的参数(尤其是 OpenVZ 容器)。处理方法:① 查看具体哪一行报错(sysctl 会输出具体的参数名和文件路径);② 对于 OpenVZ 容器,删除或注释掉所有 net.ipv4.tcp_* 和 net.core.* 开头的行;③ 对于 KVM 机器,如果报错通常是拼写错误,仔细检查参数名;④ 用 sysctl -a | grep 参数名 验证该参数在当前系统是否存在;⑤ 如果是 BBR 相关报错,先确认内核版本 uname -r——需要 4.9 以上,4.9 以下需要先升级内核。
完成系统优化后,下一步应该做什么?
系统层优化完成后,建议按以下顺序继续:① 防火墙深度配置:本指南的 UFW 是基础入门,进一步学习 iptables 高级规则(速率限制、端口敲门、状态检测)能大幅提升安全性——参见防火墙配置教程;② 自动化运维:把本指南中的常用命令写成 Shell 脚本,配合 Cron 定时执行(如定期清理日志、自动备份),大幅节省运维时间——参见自动化脚本与 Cron 定时任务;③ 应用部署:系统调好了,可以开始部署实际服务:Docker 容器、Nginx Web 服务器、WordPress 博客等,参见应用部署系列指南。