Debian 系新机开荒手册
适用于 Debian、Ubuntu Server 和常见 VPS,主要面向第一次接触服务器新手。按顺序执行,带“可选”的部分按实际需求处理。
修改 SSH、网络、防火墙和磁盘挂载时,保留当前 SSH 会话,并确保可以通过云控制台或物理终端救援。不要把密码、Token 和私钥写进本文。
本文命令默认在 root shell 中执行。普通用户先运行:
sudo -i
看到提示符变为 # 后再执行后续命令,完成后使用 exit 退出 root shell。
文中包含多条命令的代码块可以整块复制。cat > 文件 <<'EOF' 会覆盖目标文件,结尾的 EOF 必须单独占一行且不能缩进;本文优先覆盖专用的 drop-in 文件,避免破坏系统主配置。
1. 先确认服务器配置
本文主要面向第一次接触 VPS 的新手。拿到服务器后先不要急着修改 SSH 或安装软件,第一步是确认自己买了什么,以及商家实际交付了什么。
1.1 查看商家提供的配置
先从购买页面或商家控制台记录:
- 商家、套餐名称和机房地区;
- CPU 核心数;
- 内存和磁盘大小;
- 带宽与流量限制;
- 操作系统版本;
- 是否提供 IPv4 和 IPv6。
例如:
某 VPS 商家,新加坡机房,2 核 CPU、2 GB 内存、40 GB SSD,每月 1 TB 流量,安装 Debian 12。
现阶段不需要研究 CPU 型号和虚拟化架构。知道“几核、几 GB 内存、多少磁盘、服务器在哪里”就足够继续操作。
1.2 运行服务器测试
记录商家配置后,可以使用 NodeQuality 对服务器进行一次简单“验机”:
bash <(curl -sL https://run.NodeQuality.com)
建议选择 v+ y+ y+ y
测试完后会给出此次测评结果的访问网址 示例: NodeQuality - 我的Zouter HK BGP Global - Lite
NodeQuality 会生成包含硬件、IP 质量、网络质量和回程路由的报告。1
这条命令会以 root 身份下载并运行第三方脚本。执行前应确认域名和开源项目地址没有被替换。测速会消耗一定流量,生成的报告或图片还可能上传到临时网页;分享给别人前注意隐藏公网 IP。
1.3 报告重点看什么
第一次看到报告时不需要理解每个指标,只看下面四类结果。
1.3.1 基本信息
重点看 CPU 核心数、内存、Swap、磁盘、操作系统和 IP 地区是否与购买页面基本一致。例如购买的是“2 核 2 GB”,报告中也应看到大约 2 个 CPU 核心和 2 GB 内存。
1.3.2 IP 质量
重点看 IP 类型、风险、黑名单,以及常用流媒体和 AI 服务是否可用。准备搭建代理节点时,这部分比 CPU 型号更值得关注。
1.3.3 网络质量
它反映服务器连接不同地区和运营商时的延迟、速度与稳定性。简单理解:服务器配置决定“能运行多少东西”,网络质量决定代理节点“快不快、稳不稳”。
1.3.4 回程路由
回程路由表示服务器向你的网络返回数据时经过的线路,可能影响延迟、晚高峰表现和不同运营商下的体验。新手暂时不需要看懂每个路由节点。
1.4 保存报告并用于后续配置
保存商家套餐信息和第一次测试报告,它们相当于服务器刚到手时的“体检记录”。以后遇到 IP 更换、线路变化或网络变慢时,可以重新测试并进行比较。
报告中的 CPU、内存、Swap 和磁盘 I/O 信息,也可以直接用于后文的 Swap 与 zswap 选择。向 AI 提问时不必手动描述所有硬件,只需附上套餐信息、NodeQuality 的基本信息部分和服务器用途即可。
2. 主机名、时区和时间同步
SETUP_HOSTNAME='sg-server-01'
hostnamectl set-hostname "$SETUP_HOSTNAME"
timedatectl set-timezone Asia/Singapore
timedatectl
hostnamectl set-hostname:设置主机名,将sg-server-01改成实际名称。timedatectl set-timezone:设置系统时区;本文使用新加坡时区(和北京时区一样),也可以统一使用UTC。timedatectl:显示时区、系统时间和时间同步状态。
检查时间同步:
timedatectl timesync-status 2>/dev/null || timedatectl status
如果时间未同步,应检查 NTP 服务和网络。时间错误会影响日志、证书和定时任务。
3. 更新系统
3.1 检查软件源
grep -RhsE '^(deb |Types:|URIs:|Suites:|Components:)' \
/etc/apt/sources.list /etc/apt/sources.list.d 2>/dev/null
该命令列出当前启用的软件源。确认发行版代号正确,并避免混用 Debian stable、testing、Ubuntu PPA 或来源不明的第三方仓库。
3.2 获取并安装更新
apt update && apt list --upgradable && apt upgrade -y
该命令依次刷新索引、显示可升级的软件包并安装更新。-y 表示自动确认,适合尚未承载业务的新机;已有业务的服务器建议去掉 -y,先审阅变更。
test -f /var/run/reboot-required && cat /var/run/reboot-required
3.3 清理旧依赖
先模拟清理,查看将被删除的软件包:
apt -s autoremove
确认列表中没有业务依赖后再执行:
apt autoremove -y
autoremove 用于删除已不再被其他软件包依赖的包。它不是每次更新都必须执行,拿不准时可以跳过。
4. 安装常用工具
apt install -y ca-certificates curl wget git vim tmux htop unzip
对于学习 Linux、编写代码和搭建代理节点,这些工具已经能够覆盖大多数日常操作:
ca-certificates:让系统能够验证 HTTPS 网站的证书。curl、wget:下载文件或访问网络接口。git:拉取代码和进行版本管理。vim:编辑配置文件。tmux:保持远程任务运行,SSH 断开后可以重新连接。htop:查看 CPU、内存、Swap 和进程状态。unzip:解压常见的 ZIP 文件。
4.1 使用 htop 查看机器状态
htop
进入后主要看:
CPU:各核心当前使用率;Mem:物理内存使用情况;Swp:Swap 使用情况;Load average:最近 1、5、15 分钟的系统负载;- 下方进程列表:哪些程序占用了较多 CPU 或内存。
按 F6 可以选择排序方式,按 q 或 F10 退出。不要因为某个进程占用较高就直接结束它,应先确认进程用途。
5. 服务器安全加固:避免主机沦为肉鸡
公网服务器会持续收到端口扫描、弱密码尝试和自动化攻击。新机至少应完成下面三项安全配置:
- SSH 使用公钥登录并禁用密码认证;
- UFW 只开放真正需要的端口;
- Fail2ban 自动封禁反复尝试登录的来源。
这三项不能保证服务器绝对安全,但可以显著减少最常见的入侵风险,避免主机因为弱密码或无关端口暴露而沦为“肉鸡”。
5.1 配置 SSH 公钥登录
以下操作均以 root 身份执行。将示例公钥替换为真实公钥后,写入 root 的公钥文件:
install -d -m 700 /root/.ssh
cat > /root/.ssh/authorized_keys <<'EOF'
ssh-ed25519 AAAA请替换为真实公钥
EOF
chown root:root /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
这些命令创建 /root/.ssh、写入客户端公钥,并设置 OpenSSH 要求的属主和权限。
先保留当前会话,并从新终端确认可以使用公钥登录 root:
ssh root@服务器IP
公钥登录成功后,使用 Vim 编辑 SSH 配置:
install -d /etc/ssh/sshd_config.d
vim /etc/ssh/sshd_config.d/00-local-hardening.conf
写入:
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
PermitRootLogin prohibit-password 允许 root 使用公钥登录,但禁止 root 使用密码登录。保存后检查并重载:
sshd -t
systemctl reload ssh
sshd -T | grep -Ei 'passwordauthentication|permitrootlogin|pubkeyauthentication'
这组配置启用公钥认证,同时禁用密码和键盘交互认证。只有在 root 公钥登录成功后才能执行。
sshd -t:检查配置语法,无输出通常表示正常。reload ssh:不中断现有连接地重新加载配置。sshd -T:查看最终生效的配置,避免被其他配置文件覆盖。
不要退出原 SSH 会话,先确认新会话仍能连接。
5.2 配置 UFW 防火墙
安装 UFW,默认拒绝入站连接,并开放 SSH 的 22/TCP 端口:
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw --force enable
ufw status verbose
- 默认拒绝所有未明确允许的入站连接,同时允许正常出站访问。
ufw allow 22/tcp允许外部访问 SSH。ufw status verbose用于确认最终规则和默认策略。
其他服务按照实际端口开放,例如:
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 51820/udp
ufw status verbose
分别对应 HTTP、HTTPS 和示例 UDP 服务。没有使用的端口不要开放。
5.3 配置 Fail2ban
公网 SSH 可按需启用:
apt install -y fail2ban && systemctl enable --now fail2ban && fail2ban-client status
这条命令安装并启动 Fail2ban,然后显示已启用的 jail。需要查看 SSH 的封禁状态时,可执行 fail2ban-client status sshd。
自定义配置放在 /etc/fail2ban/jail.d/*.local,不要直接修改 jail.conf。
6. 限制系统日志大小
查看当前日志占用:
journalctl --disk-usage
该命令显示 journald 当前占用的磁盘空间。
一键创建配置并重启 journald:
install -d /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/10-size-limit.conf <<'EOF'
[Journal]
Storage=persistent
SystemMaxUse=500M
RuntimeMaxUse=100M
MaxRetentionSec=30day
EOF
systemctl restart systemd-journald
journalctl --disk-usage
Storage=persistent:重启后保留日志。SystemMaxUse、RuntimeMaxUse:限制持久日志和临时日志的最大空间。MaxRetentionSec:日志最多保留 30 天。
重启 journald 使配置生效,再查看实际占用。小磁盘主机可适当降低上限。
7. 根据配置选择 Swap 与 zswap
Swap 没有适合所有服务器的固定大小。NodeQuality 报告已经包含内存、当前 Swap、磁盘和部分 I/O 信息,因此不需要新手自己判断一大串底层参数。
先记住三个概念:
- Swap 是磁盘上的应急内存,可以降低内存耗尽时直接触发 OOM 的概率,但速度远慢于真实内存。
- zswap 是 Swap 前面的内存压缩缓存,可以减少部分磁盘读写,但它仍然需要后端 Swap。2
- 如果服务器长期大量使用 Swap,应该减少程序占用或升级内存,而不是不断扩大 Swap。
可以把下面内容交给 AI:
- 商家套餐信息;
- NodeQuality 报告中的“基本信息”和磁盘测试部分;
- 服务器用途,例如“只运行一个代理节点”或“还要部署网站”;
- 自己是否更在意稳定性、磁盘写入还是响应速度。
复制下面的提问模板,并把括号中的内容替换掉:
我有一台 Debian/Ubuntu VPS,主要用途是【代理节点/学习 Linux/部署网站】。
商家套餐:
【粘贴商家、地区、CPU、内存、磁盘和流量信息】
NodeQuality 基本信息与磁盘测试结果:
【粘贴对应内容】
请根据这些信息判断:
1. 是否需要 Swap;
2. Swap 建议设置为多大;
3. 是否适合启用 zswap;
4. 是否需要修改 vm.swappiness;
5. 给出适用于当前系统的完整配置命令;
6. 给出验证和回滚命令。
不要假设磁盘设备名,不要覆盖已有 Swap 或启动参数。修改前先检查当前状态。
给 AI 结果前可以参考以下常见起点,但不要当成硬性标准:
| 服务器情况 | 可参考的起点 |
|---|---|
| 1 GB 内存,只运行轻量代理节点 | 1 GB Swap 通常可作为应急空间 |
| 1 GB 内存,磁盘 I/O 良好且希望留更多余量 | 可评估 2 GB Swap |
| 1 GB 内存,磁盘较慢但 CPU 尚可 | 可评估 1 GB Swap 配合 zswap |
| 2~4 GB 内存,运行轻量服务 | 可从 1 GB Swap 开始评估 |
| 经常用满内存并持续读写 Swap | 优先限制程序占用或升级内存 |
AI 给出的命令不是最终答案。执行前检查它是否识别了正确的系统版本、现有 Swap 和引导方式,并确认同时提供了验证与回滚步骤。
8. 启用 BBR(可选)
先确认内核支持:
modprobe tcp_bbr
sysctl net.ipv4.tcp_available_congestion_control
第一条命令加载 BBR 内核模块,第二条列出当前内核可用的 TCP 拥塞控制算法。
如果输出包含 bbr,一键写入并加载配置:
cat > /etc/sysctl.d/90-bbr.conf <<'EOF'
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF
sysctl --system
sysctl net.core.default_qdisc net.ipv4.tcp_congestion_control
fq 是与 BBR 常用的队列调度器,sysctl --system 加载配置,最后一条命令确认设置已经生效。
BBR 不保证所有网络环境都更快,修改前后应使用相同方法测速。
8.1 第三方 BBR 脚本(方便但不推荐新手使用)
wget http://sh.xdmb.xyz/tcp.sh && bash tcp.sh
该命令通过未加密的 HTTP 下载脚本并以 root 身份执行,内容可能在传输途中被替换。本文保留它仅用于辨认已有命令,不建议新手执行;优先使用上一节可阅读、可回滚的系统配置。
9. 最终检查与重启
hostnamectl
timedatectl
ip -brief address
ip route
getent hosts deb.debian.org
systemctl --failed
ss -lntup
ufw status verbose
swapon --show
journalctl -b -p warning
这组命令重新检查主机身份、时间、网络、DNS、失败服务、开放端口、防火墙、Swap 和本次启动的警告日志,结果应与前面各节的预期一致。
确认以下项目:
- 主机名、时区、DNS 和时间同步正常。
- 系统已更新,APT 没有报错。
- root SSH 公钥登录正常。
- root 密码登录已禁用。
- 防火墙与实际监听端口符合预期。
- 磁盘剩余空间、Swap 和日志空间正常。
- 备份、监控和必要服务正常。
最后重启:
reboot
重启后再次检查:
uname -r
systemctl --failed
swapon --show
ss -lntup
journalctl -b -p warning
确认机器已使用预期内核启动,所有挂载和服务自动恢复,并且没有新的启动错误。SSH、防火墙和业务端口还应从另一台机器进行实际连接测试。
附录:Vim 常用技巧
使用 Vim 打开普通文件:
vim 文件名
在本文的 root shell 中编辑系统配置文件:
vim /etc/配置文件
Vim 启动后默认处于普通模式。按 i 进入插入模式开始编辑,完成后按 Esc 返回普通模式。
保存与退出
| 按键 | 作用 |
|---|---|
:w |
保存文件 |
:q |
退出 Vim |
:wq |
保存并退出 |
:q! |
放弃修改并退出 |
ZZ |
保存并退出 |
输入以 : 开头的命令后,需要按回车执行。
移动与查找
| 按键 | 作用 |
|---|---|
gg |
跳到文件开头 |
G |
跳到文件末尾 |
数字G |
跳到指定行,例如 20G |
/关键词 |
向下搜索关键词 |
n / N |
下一个/上一个搜索结果 |
:set number |
显示行号 |
编辑与撤销
| 按键 | 作用 |
|---|---|
i |
在光标前插入 |
a |
在光标后插入 |
o |
在下一行插入 |
dd |
删除当前行 |
yy |
复制当前行 |
p |
在光标后粘贴 |
u |
撤销上一步 |
Ctrl+r |
重做 |
粘贴大段配置前可执行 :set paste,粘贴完成后执行 :set nopaste,避免自动缩进破坏格式。
交互式全文替换:
:%s/旧内容/新内容/gc
其中 g 表示替换每行中的全部匹配,c 表示每次替换前确认。


