Daimon's Blog
主页 归档 关于 RSS 探针 常用工具
主页
归档
关于
RSS
探针
常用工具

VPS 到手第一件事:基础配置 + 安全加固 + BBR 一条龙

daimon daimon 2026-05-25 #VPS#Linux#SSH#BBR#fail2ban#安全

新 VPS 拿到手,几乎所有教程都跳过了一个事实:默认状态的 VPS 是不安全的——22 端口暴露在公网、密码登录开着、没有 fail2ban、内核 TCP 拥塞算法还是几十年前的 cubic。

这篇按顺序把”刚开机到能放心跑服务”之间最少要做的事过一遍,标准 Debian/Ubuntu,10 分钟搞定。

一、整体顺序#

graph TD A[首次 SSH 登录] --> B[查系统信息] B --> C[系统更新] C --> D[安装基础工具] D --> E[配置 SSH 密钥登录] E --> F[关闭密码登录 + 改 SSH 端口] F --> G[开启 ufw 防火墙] G --> H[装 fail2ban] H --> I[开启 BBR] I --> J[设置时区] J --> K[完成]

⚠️ 顺序很重要:先配好密钥再关密码登录,否则容易把自己锁在外面。

二、第一次登录后查系统信息#

Terminal window
1
# 系统版本
2
cat /etc/os-release
3
4
# 内核版本
5
uname -r
6
7
# CPU 核心数 / 型号
8
nproc
9
lscpu | grep "Model name"
10
11
# 内存 / 磁盘
12
free -h
13
df -h

这一步是为了和商家承诺的配置对齐——很多小商家会”超售”,到手发现 CPU 是被限频的或内存是 swap 凑出来的。

三、系统更新#

Terminal window
1
apt update && apt full-upgrade -y && apt autoremove -y && apt autoclean
子命令作用
apt update更新软件包索引
apt full-upgrade -y升级所有软件(含内核)
apt autoremove -y删除孤立依赖
apt autoclean清理过期下载缓存

升级完检查是否需要重启(通常内核更新后要重启):

Terminal window
1
cat /var/run/reboot-required 2>/dev/null && echo ">>> 需要重启" || echo ">>> 无需重启"

四、安装基础工具#

Terminal window
1
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 在本地生成密钥(如果还没有)#

Terminal window
1
# 在你自己电脑上跑
2
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_ed25519

-t ed25519 比 RSA 更短更安全。

5.2 把公钥上传到 VPS#

Terminal window
1
# 方式一:ssh-copy-id(最简单)
2
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@<VPS_IP>
3
4
# 方式二:手动(如果商家关了密码登录或没装 ssh-copy-id)
5
cat ~/.ssh/id_ed25519.pub | ssh root@<VPS_IP> "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

5.3 修复权限(90% 的”密钥登录失败”是这个)#

Terminal window
1
# 在 VPS 上跑
2
chmod 700 ~/.ssh
3
chmod 600 ~/.ssh/authorized_keys

5.4 验证能用密钥登录#

开一个新终端(别关原来的,万一连不上能救):

Terminal window
1
ssh -i ~/.ssh/id_ed25519 root@<VPS_IP>

能直接进,不让你输密码——成功。

六、改 SSH 端口 + 关密码登录#

编辑 /etc/ssh/sshd_config:

Terminal window
1
sudo vim /etc/ssh/sshd_config

修改这几行:

1
# 改端口(任选一个 1024–65535 之间的,别用常见的)
2
Port 22000
3
4
# 禁用密码登录
5
PasswordAuthentication no
6
ChallengeResponseAuthentication no
7
8
# 禁用 root 用密码登录(密钥还允许)
9
PermitRootLogin prohibit-password
10
11
# 启用密钥登录
12
PubkeyAuthentication yes

改完先别 restart,先把新端口在防火墙开放(下一步),否则 restart 后旧端口失效、新端口被防火墙挡,你就连不上了。

Terminal window
1
# 先放新端口
2
sudo ufw allow 22000/tcp
3
4
# 再重启 ssh
5
sudo systemctl restart ssh

再开一个新终端验证:

Terminal window
1
ssh -p 22000 -i ~/.ssh/id_ed25519 root@<VPS_IP>

能进就成功。这时候才关掉原来的旧连接。

🪤 特别注意:部分云厂商的”轻量应用服务器”或”容器实例”是平台层代理 SSH 的,你改 sshd_config 没用——用 sudo ss -lntp | grep :22 看监听的是 sshd 还是 init/platform_agent。是后者的话,得去云控制台改。

七、开启 ufw 防火墙#

Terminal window
1
# 默认策略
2
sudo ufw default deny incoming
3
sudo ufw default allow outgoing
4
5
# 关键端口
6
sudo ufw allow 22000/tcp # 你的新 SSH 端口
7
sudo ufw allow 80/tcp
8
sudo ufw allow 443/tcp
9
10
# 启用
11
sudo ufw enable
12
sudo ufw status

⚠️ ufw enable 会警告”可能中断 SSH”,确认 22000 已 allow 再 y 确认。

八、配置 fail2ban 防 SSH 暴力破解#

fail2ban 监控日志,多次登录失败的 IP 自动封 N 分钟:

Terminal window
1
# 复制默认配置(不要直接改 jail.conf)
2
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
3
sudo vim /etc/fail2ban/jail.local

把 [sshd] 段改成(其它段先不动):

1
[sshd]
2
enabled = true
3
port = 22000 # 你的 SSH 端口
4
filter = sshd
5
logpath = /var/log/auth.log
6
maxretry = 4 # 4 次失败就封
7
bantime = 3600 # 封 1 小时
8
findtime = 600 # 10 分钟内累计
9
backend = auto

启动:

Terminal window
1
sudo systemctl enable --now fail2ban
2
sudo systemctl status fail2ban

常用命令:

Terminal window
1
# 看 fail2ban 状态
2
sudo fail2ban-client status
3
4
# 看 SSH jail 状态(含被封 IP 列表)
5
sudo fail2ban-client status sshd
6
7
# 手动封 / 解封
8
sudo fail2ban-client set sshd banip 1.2.3.4
9
sudo fail2ban-client set sshd unbanip 1.2.3.4

🪤 常见坑:自己输错密码几次也会被自己 ban 掉。把自己的家庭 IP 加白名单:

1
ignoreip = 127.0.0.1/8 ::1 <你的家庭 IP>

九、开启 BBR 拥塞控制#

BBR 是 Google 设计的 TCP 拥塞控制算法,对延迟敏感的代理 / 翻墙线路提升非常明显。Linux 4.9+ 都内置,只需要开启:

Terminal window
1
# 看当前用的算法
2
sysctl net.ipv4.tcp_congestion_control
3
4
# 开启 BBR
5
echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.conf
6
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf
7
sudo sysctl -p
8
9
# 验证
10
sysctl net.ipv4.tcp_congestion_control
11
# 输出 net.ipv4.tcp_congestion_control = bbr 即成功
12
lsmod | grep bbr

也可以用社区一键脚本(自动判断内核 + 安装 BBR Plus / BBRv3 等变种):

Terminal window
1
# 选一个你信任的 BBR 脚本(GitHub star 数高、近期更新)
2
# 谨慎执行,最好读一遍源码

⚠️ 不要随便执行陌生 BBR 脚本——这是 VPS 上权限最高的操作之一。优先用上面的 sysctl 原生方式。

十、设置时区#

VPS 默认时区是 UTC:

Terminal window
1
# 看当前时区
2
timedatectl
3
4
# 改为上海(中国用户)
5
sudo timedatectl set-timezone Asia/Shanghai
6
7
# 验证
8
date

如果是给国外用户用的服务,时区保留 UTC 反而最好(日志可对齐)。

十一、本地 SSH config(强烈推荐)#

每次 ssh -p 22000 -i ~/.ssh/id_ed25519 root@1.2.3.4 太累。编辑本机 ~/.ssh/config:

1
Host vps1
2
HostName 1.2.3.4
3
User root
4
Port 22000
5
IdentityFile ~/.ssh/id_ed25519
6
ServerAliveInterval 60
7
8
Host vps2
9
HostName 5.6.7.8
10
User admin
11
Port 22000
12
IdentityFile ~/.ssh/id_ed25519

之后只用:

Terminal window
1
ssh vps1

十二、关键文件位置(出问题时去这查)#

文件用途
/etc/ssh/sshd_configSSH 服务端配置
~/.ssh/authorized_keys允许登录的公钥
/etc/fail2ban/jail.localfail2ban 配置
/var/log/auth.logSSH 登录日志
/etc/sysctl.conf内核参数(BBR 等)
/etc/ufw/user.rulesufw 用户规则

十三、常见故障速查#

现象原因解决
密钥登录失败一直要密码~/.ssh 或 authorized_keys 权限错chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
改端口连不上防火墙没开 / sshd 没重启 / 云厂商代理 SSH用 VNC 进去查
fail2ban 把自己封了没加 ignoreipVNC 登录后 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 分钟从零到生产可用。后面我会把这套整理成一键脚本(带交互式确认,不直接执行陌生命令),避免每次手动复制粘贴。

dd 系统全流程:把任何 VPS 重装成 Debian / Ubuntu / Windows / NixOS
本博客所有文章除特别声明外,均遵循 CC BY-NC-SA 4.0 协议,转载请注明出处。
博客框架 Astro & Fuwari
冀ICP备20260167号
1
一、整体顺序
2
二、第一次登录后查系统信息
3
三、系统更新
4
四、安装基础工具
5
五、配置 SSH 密钥登录(关键)
5.1 在本地生成密钥(如果还没有)
5.2 把公钥上传到 VPS
5.3 修复权限(90% 的”密钥登录失败”是这个)
5.4 验证能用密钥登录
6
六、改 SSH 端口 + 关密码登录
7
七、开启 ufw 防火墙
8
八、配置 fail2ban 防 SSH 暴力破解
9
九、开启 BBR 拥塞控制
10
十、设置时区
11
十一、本地 SSH config(强烈推荐)
12
十二、关键文件位置(出问题时去这查)
13
十三、常见故障速查
14
十四、可选进阶