VPS 到手别急着用!从 SSH 加固到 Docker 部署,新服务器安全配置完整指南
VPS 到手别急着用!从 SSH 加固到 D…
VPS 到手别急着用!从 SSH 加固到 Docker 部署,新服务器安全配置完整指南
你有没有这种经历:花几十块钱买了一台 VPS,登录 SSH 之后两眼一抹黑,装了几个常用软件就开始跑服务,结果没过俩月,收到云厂商的邮件说你的服务器在对外发垃圾流量……
这不是段子。 我干了十年运维,见过太多人把新 VPS 当成刚装好的 Windows——插上网线就用。实际上,裸机 VPS 在上线前至少有 15 分钟的关键配置 值得花时间做一遍。做完之后,90% 的脚本小子和扫描器能被挡在门外。
今天这篇不废话,直接上实操。跟着走完这 6 步,你的 VPS 才算真正能用。
第一步:SSH 加固——把大门换成防盗门
默认的 SSH 配置(端口 22、密码登录、root 直接登)等于在门上贴了张纸条:「欢迎扫描」。先把它堵死。
1.1 用密钥登录,关掉密码
在你本地机器上生成密钥(如果还没有的话):
ssh-keygen -t ed25519 -C "your-vps-key"
然后把公钥复制到服务器:
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@你的VPS_IP
接着编辑服务器上的 SSH 配置文件:
vim /etc/ssh/sshd_config
找到并修改以下几项,这是最重要的一步:
# 关掉 root 密码登录
PermitRootLogin prohibit-password
# 关掉密码认证,只走密钥
PasswordAuthentication no
# 关掉空密码
PermitEmptyPasswords no
# 改端口(避开22,减少日志噪音)
Port 2222
改完端口记得放行防火墙,然后重启 SSH:
ufw allow 2222/tcp
systemctl restart sshd
⚠️ 坑点提醒: 改端口前先把防火墙规则加上,否则 SSH 一断就彻底连不上了。另外,不要关掉当前 SSH 会话——先另开一个终端测试新端口能连接,确认无误再退出。这招救过我三次。
1.2 安装 Fail2Ban 拦截爆破
即使关了密码登录,日志里还是会有成千上万次尝试。Fail2Ban 能帮你自动封禁扫描 IP:
apt update && apt install fail2ban -y
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
systemctl enable fail2ban --now
默认配置对 SSH 已经够用。如果你改了 SSH 端口,记得对应修改 /etc/fail2ban/jail.local 里的 [sshd] 段。
第二步:开防火墙——只放行必要端口
很多 VPS 镜像默认不装防火墙,或者只有 iptables 裸规则。我的习惯是直接用 ufw,简单直观,底层也是 iptables:
apt install ufw -y
# 先放行 SSH 新端口和可能要用的 Web 端口
ufw allow 2222/tcp
ufw allow 80/tcp
ufw allow 443/tcp
# 默认拒绝入站
ufw default deny incoming
ufw default allow outgoing
# 启用
ufw --force enable
ufw status verbose
看到 Status: active 就对了。之后每开一个新服务,记得回来加一条 ufw allow。
第三步:创建普通用户,别在 root 下裸奔
root 权限太大,一个手滑就拜拜。日常运维用普通用户+sudo 更安全:
adduser itdashu
usermod -aG sudo itdashu
# 把密钥也拷给新用户
rsync --archive --chown=itdashu:itdashu ~/.ssh /home/itdashu/
现在用 ssh itdashu@你的VPS_IP -p 2222 登录,需要提权时加 sudo 即可。绝大多数日常操作都不需要切到 root。
第四步:装 Docker——一切服务的基础
既然买了 VPS,十有八九是要跑服务的。Docker 是目前最干净的服务部署方式——隔离好、卸载不留垃圾、迁移方便。
4.1 安装 Docker
官方一键安装(推荐,永远最新版):
curl -fsSL https://get.docker.com | sh
装完把当前用户加入 docker 组,免 sudo 执行:
sudo usermod -aG docker $USER
退出重新登录(或 newgrp docker)让组生效,然后验证:
docker --version
docker run hello-world
看到 Hello from Docker! 就到位了。
4.2 装 Docker Compose
现在新版的 Docker 自带 docker compose 插件,但如果你用的是旧版本,单独装一份更稳:
apt install docker-compose-plugin -y
docker compose version
为什么要有 Docker Compose? 因为复杂服务往往有多个容器(比如 Nginx + 后端 + 数据库),用 docker-compose.yml 一次定义、一键启动,写完配置后
docker compose up -d就全起来了。后文会用到。
第五步:日常守护——自动更新与日志监控
服务器跑起来容易,忘了维护才是大问题。两个简单的自动化能省不少心:
5.1 自动安全更新
apt install unattended-upgrades -y
dpkg-reconfigure --priority=low unattended-upgrades
选「是」之后,系统会在凌晨自动安装安全补丁。你不需要每周手动 apt upgrade。
5.2 配置日志轮转
Docker 默认日志不限制大小,跑久了磁盘能给你写满。限制一下:
# 创建 Docker 配置文件
sudo mkdir -p /etc/docker
cat > /etc/docker/daemon.json << 'EOF'
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
EOF
sudo systemctl restart docker
每个容器单个日志文件最大 10MB,保留 3 个轮转,再也不用担心 /var/lib/docker 撑爆磁盘。
第六步:用 Docker Compose 部署一个最小可用服务
理论说完了,来点实在的。用 Docker Compose 部署一个 Nginx 反向代理 + 一个静态页面,验证整个环境是否正常。
创建项目目录:
mkdir -p ~/myapp && cd ~/myapp
写 docker-compose.yml:
version: '3.8'
services:
web:
image: nginx:alpine
container_name: web-demo
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html:ro
restart: unless-stopped
创建测试页面:
mkdir html
echo '<h1>🎉 我的 VPS 上线了!</h1><p>安全配置已完成,Docker 运行正常。</p>' > html/index.html
启动:
docker compose up -d
浏览器打开 http://你的VPS_IP,看到那个页面就说明你的 VPS 已经安全上线了。
清理测试服务:
docker compose down
总结一下,小本本记好
一台新 VPS 到手,花 15 分钟做完这 6 件事,后面能少操 90% 的心:
| 步骤 | 做什么 | 时间 |
|——|——–|——|
| 1 | SSH 密钥+改端口+Fail2Ban | 5 分钟 |
| 2 | ufw 防火墙 | 1 分钟 |
| 3 | 创建 sudo 用户 | 1 分钟 |
| 4 | 安装 Docker + Compose | 3 分钟 |
| 5 | 自动更新+日志轮转 | 2 分钟 |
| 6 | 测试部署验证环境 | 3 分钟 |
别嫌麻烦。 我帮朋友处理过不下 10 台被黑的小鸡,无一例外是没做这些基础配置——有些连 SSH 密码都没改。
一句话: VPS 不是买来就能用的,是你配完才能用的。
如果你手头已经有 VPS 在跑了,不妨现在就 SSH 上去做个安全检查,看看这几条达标了几条?欢迎在评论区留言交流,或者告诉我还想看我写哪方面的教程。
