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 上去做个安全检查,看看这几条达标了几条?欢迎在评论区留言交流,或者告诉我还想看我写哪方面的教程。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注