VPS 到手第一件事:基础配置 + 安全加固 + BBR 一条龙
新 VPS 拿到手,几乎所有教程都跳过了一个事实:默认状态的 VPS 是不安全的——22 端口暴露在公网、密码登录开着、没有 fail2ban、内核 TCP 拥塞算法还是几十年前的 cubic。
这篇按顺序把”刚开机到能放心跑服务”之间最少要做的事过一遍,标准 Debian/Ubuntu,10 分钟搞定。
一、整体顺序
⚠️ 顺序很重要:先配好密钥再关密码登录,否则容易把自己锁在外面。
二、第一次登录后查系统信息
# 系统版本cat /etc/os-release
# 内核版本uname -r
# CPU 核心数 / 型号nproclscpu | grep "Model name"
# 内存 / 磁盘free -hdf -h这一步是为了和商家承诺的配置对齐——很多小商家会”超售”,到手发现 CPU 是被限频的或内存是 swap 凑出来的。
三、系统更新
apt update && apt full-upgrade -y && apt autoremove -y && apt autoclean| 子命令 | 作用 |
|---|---|
apt update | 更新软件包索引 |
apt full-upgrade -y | 升级所有软件(含内核) |
apt autoremove -y | 删除孤立依赖 |
apt autoclean | 清理过期下载缓存 |
升级完检查是否需要重启(通常内核更新后要重启):
cat /var/run/reboot-required 2>/dev/null && echo ">>> 需要重启" || echo ">>> 无需重启"四、安装基础工具
apt install -y sudo curl wget git vim htop tree unzip ufw fail2ban neofetch| 工具 | 用途 |
|---|---|
sudo | 普通用户提权 |
curl / wget | 下载 |
git | 版本控制 |
vim | 顺手的编辑器 |
htop | 进程监控(比 top 好看) |
tree | 树形目录 |
ufw | 简单防火墙 |
fail2ban | 防 SSH 暴力破解 |
neofetch | 系统信息装饰 |
💡 Debian 最小化镜像默认连
sudo都没装,记得先装。
五、配置 SSH 密钥登录(关键)
5.1 在本地生成密钥(如果还没有)
# 在你自己电脑上跑ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_ed25519-t ed25519 比 RSA 更短更安全。
5.2 把公钥上传到 VPS
# 方式一:ssh-copy-id(最简单)ssh-copy-id -i ~/.ssh/id_ed25519.pub root@<VPS_IP>
# 方式二:手动(如果商家关了密码登录或没装 ssh-copy-id)cat ~/.ssh/id_ed25519.pub | ssh root@<VPS_IP> "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"5.3 修复权限(90% 的”密钥登录失败”是这个)
# 在 VPS 上跑chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys5.4 验证能用密钥登录
开一个新终端(别关原来的,万一连不上能救):
ssh -i ~/.ssh/id_ed25519 root@<VPS_IP>能直接进,不让你输密码——成功。
六、改 SSH 端口 + 关密码登录
编辑 /etc/ssh/sshd_config:
sudo vim /etc/ssh/sshd_config修改这几行:
# 改端口(任选一个 1024–65535 之间的,别用常见的)Port 22000
# 禁用密码登录PasswordAuthentication noChallengeResponseAuthentication no
# 禁用 root 用密码登录(密钥还允许)PermitRootLogin prohibit-password
# 启用密钥登录PubkeyAuthentication yes改完先别 restart,先把新端口在防火墙开放(下一步),否则 restart 后旧端口失效、新端口被防火墙挡,你就连不上了。
# 先放新端口sudo ufw allow 22000/tcp
# 再重启 sshsudo systemctl restart ssh再开一个新终端验证:
ssh -p 22000 -i ~/.ssh/id_ed25519 root@<VPS_IP>能进就成功。这时候才关掉原来的旧连接。
🪤 特别注意:部分云厂商的”轻量应用服务器”或”容器实例”是平台层代理 SSH 的,你改 sshd_config 没用——用
sudo ss -lntp | grep :22看监听的是sshd还是init/platform_agent。是后者的话,得去云控制台改。
七、开启 ufw 防火墙
# 默认策略sudo ufw default deny incomingsudo ufw default allow outgoing
# 关键端口sudo ufw allow 22000/tcp # 你的新 SSH 端口sudo ufw allow 80/tcpsudo ufw allow 443/tcp
# 启用sudo ufw enablesudo ufw status⚠️
ufw enable会警告”可能中断 SSH”,确认 22000 已 allow 再 y 确认。
八、配置 fail2ban 防 SSH 暴力破解
fail2ban 监控日志,多次登录失败的 IP 自动封 N 分钟:
# 复制默认配置(不要直接改 jail.conf)sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localsudo vim /etc/fail2ban/jail.local把 [sshd] 段改成(其它段先不动):
[sshd]enabled = trueport = 22000 # 你的 SSH 端口filter = sshdlogpath = /var/log/auth.logmaxretry = 4 # 4 次失败就封bantime = 3600 # 封 1 小时findtime = 600 # 10 分钟内累计backend = auto启动:
sudo systemctl enable --now fail2bansudo systemctl status fail2ban常用命令:
# 看 fail2ban 状态sudo fail2ban-client status
# 看 SSH jail 状态(含被封 IP 列表)sudo fail2ban-client status sshd
# 手动封 / 解封sudo fail2ban-client set sshd banip 1.2.3.4sudo fail2ban-client set sshd unbanip 1.2.3.4🪤 常见坑:自己输错密码几次也会被自己 ban 掉。把自己的家庭 IP 加白名单:
ignoreip = 127.0.0.1/8 ::1 <你的家庭 IP>
九、开启 BBR 拥塞控制
BBR 是 Google 设计的 TCP 拥塞控制算法,对延迟敏感的代理 / 翻墙线路提升非常明显。Linux 4.9+ 都内置,只需要开启:
# 看当前用的算法sysctl net.ipv4.tcp_congestion_control
# 开启 BBRecho "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.confecho "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.confsudo sysctl -p
# 验证sysctl net.ipv4.tcp_congestion_control# 输出 net.ipv4.tcp_congestion_control = bbr 即成功lsmod | grep bbr也可以用社区一键脚本(自动判断内核 + 安装 BBR Plus / BBRv3 等变种):
# 选一个你信任的 BBR 脚本(GitHub star 数高、近期更新)# 谨慎执行,最好读一遍源码⚠️ 不要随便执行陌生 BBR 脚本——这是 VPS 上权限最高的操作之一。优先用上面的 sysctl 原生方式。
十、设置时区
VPS 默认时区是 UTC:
# 看当前时区timedatectl
# 改为上海(中国用户)sudo timedatectl set-timezone Asia/Shanghai
# 验证date如果是给国外用户用的服务,时区保留 UTC 反而最好(日志可对齐)。
十一、本地 SSH config(强烈推荐)
每次 ssh -p 22000 -i ~/.ssh/id_ed25519 root@1.2.3.4 太累。编辑本机 ~/.ssh/config:
Host vps1 HostName 1.2.3.4 User root Port 22000 IdentityFile ~/.ssh/id_ed25519 ServerAliveInterval 60
Host vps2 HostName 5.6.7.8 User admin Port 22000 IdentityFile ~/.ssh/id_ed25519之后只用:
ssh vps1十二、关键文件位置(出问题时去这查)
| 文件 | 用途 |
|---|---|
/etc/ssh/sshd_config | SSH 服务端配置 |
~/.ssh/authorized_keys | 允许登录的公钥 |
/etc/fail2ban/jail.local | fail2ban 配置 |
/var/log/auth.log | SSH 登录日志 |
/etc/sysctl.conf | 内核参数(BBR 等) |
/etc/ufw/user.rules | ufw 用户规则 |
十三、常见故障速查
| 现象 | 原因 | 解决 |
|---|---|---|
| 密钥登录失败一直要密码 | ~/.ssh 或 authorized_keys 权限错 | chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys |
| 改端口连不上 | 防火墙没开 / sshd 没重启 / 云厂商代理 SSH | 用 VNC 进去查 |
| fail2ban 把自己封了 | 没加 ignoreip | VNC 登录后 fail2ban-client set sshd unbanip 你的IP |
sudo 找不到 | 最小化系统没装 | apt install sudo,然后 usermod -aG sudo <用户> |
| BBR 不生效 | 内核太老 | uname -r 看是不是 4.9+ |
十四、可选进阶
跑完上面这些已经是合格的”安全 VPS”了。还有几样可以按需加:
- 2FA SSH(用 google-authenticator-libpam)
- 改 UFW 默认日志级别为
low:sudo ufw logging low logwatch每天发邮件给自己(小心邮件配置麻烦)unattended-upgrades自动安装安全更新:apt install -y unattended-upgrades- VPS 监控(哪吒 / Komari / Uptime Kuma)
这套流程跑顺之后,每次新到 VPS 都是 10 分钟从零到生产可用。后面我会把这套整理成一键脚本(带交互式确认,不直接执行陌生命令),避免每次手动复制粘贴。