VPS 初始化配置
新购 VPS 后的标准安全配置流程,以 Ubuntu/Debian 为例。
这页适合作为“新机器上线前的第一轮交付清单”。初始化阶段最怕两件事:一是漏掉基础安全项,二是过早堆业务环境,导致后面出了问题很难定位。
推荐初始化顺序
建议按这个顺序推进:
- 先更新系统并确认时区、时间同步正常
- 再创建普通用户并验证 sudo
- 再配置 SSH 密钥登录
- 再改端口、禁密码、禁 Root
- 然后开启防火墙和 fail2ban
- 最后再装 Docker、运行时、监控和业务应用
这样做的核心是:先把“进得去、管得住、看得清”三件事建立起来。
系统更新
apt update && apt upgrade -y
建议更新完成后顺手检查:
uname -a
lsb_release -a
timedatectl
df -h
free -h
创建普通用户
# 创建用户
adduser deploy
# 添加 sudo 权限
usermod -aG sudo deploy
SSH 安全配置
配置密钥登录
在本地生成密钥后,复制公钥到服务器:
ssh-copy-id deploy@your-server-ip
禁用密码登录
编辑 /etc/ssh/sshd_config:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
Port 2222
重启 SSH:
systemctl restart sshd
修改前确保密钥登录已测试成功,否则会被锁在外面。
更稳的处理方式
- 先保留当前会话,不要改完立即退出
- 新开一个终端测试新端口和新用户
- 确认能登录后,再关闭旧端口或旧登录方式
防火墙(UFW)
# 安装
apt install ufw -y
# 允许 SSH(使用你修改后的端口)
ufw allow 2222/tcp
# 允许 HTTP/HTTPS
ufw allow 80/tcp
ufw allow 443/tcp
# 启用
ufw enable
# 查看状态
ufw status verbose
Fail2ban
防止暴力破解:
apt install fail2ban -y
创建 /etc/fail2ban/jail.local:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
[sshd]
enabled = true
port = 2222
systemctl enable fail2ban
systemctl start fail2ban
# 查看封禁状态
fail2ban-client status sshd
常用工具安装
apt install -y \
curl wget git vim htop \
unzip zip tree jq \
build-essential
可按角色补充
- 运维偏多:
ncdu、iftop、tcpdump - Web 服务偏多:
nginx、certbot - 容器偏多:
docker-compose-plugin - 数据库偏多:对应客户端,如
postgresql-client、mysql-client
时区与语言
# 设置时区
timedatectl set-timezone Asia/Tokyo
# 查看
timedatectl
安装 Docker
curl -fsSL https://get.docker.com | sh
usermod -aG docker deploy
# 安装 Docker Compose 插件
apt install docker-compose-plugin -y
如果业务准备跑在容器里,推荐在装完 Docker 后马上做一次空容器验证:
docker version
docker run --rm hello-world
docker compose version
自动安全更新
apt install unattended-upgrades -y
dpkg-reconfigure -plow unattended-upgrades
初始化完成后的交付前检查
上线前至少确认:
- SSH 只保留你计划使用的登录方式
- 防火墙规则正确,且不会误封自己
- 时区、时间同步、日志时间都正常
- Docker / 运行时 / 包管理器版本符合预期
- 磁盘、内存、Swap 余量合理
- 备份、监控、日志留存方式已经明确
监控与日志
# 查看系统资源
htop
# 查看磁盘使用
df -h
# 查看最近登录
last -20
# 查看失败登录
journalctl -u sshd | grep "Failed"
# 查看实时日志
journalctl -f
常见问题
改完 SSH 配置后连不上
先回控制台或服务商 VNC 面板检查:
- 端口是否放行
sshd_config是否写错- fail2ban 是否把你封了
- 是否只改了配置却没重启服务
Docker 装好了,普通用户不能用
重新登录一次用户会话,让 docker 用户组生效;如果仍不行,再检查 groups 输出。
磁盘很快被吃满
高频原因通常是:
- Docker 镜像和日志没清理
- 系统日志持续累积
- 备份和下载文件都堆在系统盘
风险提醒
- 任何会影响 SSH 登录的变更都要保留回退路径
- 一开始不要急着暴露数据库、面板或非必要端口到公网
- 业务上线前先做最小基线,而不是边跑边补
延伸阅读
BBR 加速(可选)
启用 TCP BBR 拥塞控制算法:
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
# 验证
sysctl net.ipv4.tcp_congestion_control
参考链接
- Ubuntu Server 文档 — 官方指南
- Fail2ban 文档 — 官网
- UFW 文档 — Ubuntu 社区
- Docker 安装 — 官方文档