VPSKnow

Linux 系统初始化与优化指南

中级
30分钟

新购买的 VPS 通常是一个"裸系统"。为了确保服务器长期稳定、安全地运行,我们需要进行一系列的初始化设置和性能优化。本指南将带您完成从"开箱"到"精装修"的全过程。

📦 更新系统组件

这是拿到服务器后的第一件事。旧版本的软件可能包含安全漏洞。

UPDATE
# 对于 Debian / Ubuntu 系统
apt update && apt upgrade -y
# 对于 CentOS / AlmaLinux 系统
yum update -y
⚠️

如果更新过程中出现交互式弹窗询问是否保留配置文件,通常选择 "keep the local version currently installed" (保留当前版本) 是最稳妥的。

👤 用户与权限管理

长期使用 root 账户操作极其危险。我们应该创建一个普通用户,并在需要时使用 sudo 提权。

1

创建新用户

username 替换为您想要的用户名:

adduser username

系统会提示您设置密码并填写一些信息(直接回车跳过即可)。

2

授予 Sudo 权限

usermod -aG sudo username

现在,该用户可以使用 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_controlsysctl net.ipv4.tcp_congestion_control 查看实际能力,权限被拒绝时不要强行套用脚本。KVM 通常有更多内核控制权,但仍取决于发行版内核和商家限制。

Fail2ban 的默认封禁时间(10分钟)太短了,怎么修改为更长时间?

/etc/fail2ban/jail.d/sshd.local 只覆盖需要调整的参数,例如 bantime = 1hfindtime = 10mmaxretry = 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 博客等,参见应用部署系列指南。