全部文章

VPS 初始化配置

Linux 服务器初始安全配置、用户管理、防火墙、Fail2ban 与常用工具安装

目录 24 节

VPS 初始化配置

新购 VPS 后的标准安全配置流程,以 Ubuntu/Debian 为例。

这页适合作为“新机器上线前的第一轮交付清单”。初始化阶段最怕两件事:一是漏掉基础安全项,二是过早堆业务环境,导致后面出了问题很难定位。

推荐初始化顺序

建议按这个顺序推进:

  1. 先更新系统并确认时区、时间同步正常
  2. 再创建普通用户并验证 sudo
  3. 再配置 SSH 密钥登录
  4. 再改端口、禁密码、禁 Root
  5. 然后开启防火墙和 fail2ban
  6. 最后再装 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

可按角色补充

  • 运维偏多ncduiftoptcpdump
  • Web 服务偏多nginxcertbot
  • 容器偏多docker-compose-plugin
  • 数据库偏多:对应客户端,如 postgresql-clientmysql-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

参考链接

阅读建议
  • - 先读标题和摘要,再结合目录决定从哪个章节开始精读。
  • - 看到具体命令、配置或步骤时,尽量在自己的环境里同步验证。
  • - 如果你只是快速查资料,可先看目录和相关文档,再决定是否深入全文。
适合谁看
  • - 希望把零散经验整理成长期可复用工作流的人
  • - 想先建立认知,再决定是否深入实践的人
  • - 希望阅读时顺手建立自己的操作清单或收藏体系的人
执行前检查
  • - 先浏览标题、摘要和目录,带着问题阅读会更高效
  • - 顺手记录真正对你有用的命令、链接和注意事项,避免重复搜索
  • - 如果页面里提到相关文档,尽量一起打开对照,效果通常更完整
同类内容
← 上一篇Vim / Neovim 入门