$ view ~/notes/个人服务器安全加固方案.md
个人服务器安全加固方案
$ tree --toc
个人服务器安全加固方案
方案核心逻辑
本方案遵循 "最小暴露面" 原则,构建三层递进的防御体系:
- 网络层 (Network):利用 Tailscale 建立私有隧道,关闭云平台所有公网入站端口,使服务器在公网上"隐身"。
- 应用层 (SSH):强制 SSH 仅限密钥登录,物理切断密码爆破的可能性。
- 本地层 (OS):配置 UFW 防火墙作为二次保险,防止内网渗透及 Docker 自动开孔风险。
相关文档:
- Tailscale 深度原理参见 Tailscale 零公网暴露方案
- 多机集群架构参见 Oracle 多机集群零公网架构方案(Oracle 免费层专用)
分步实施指南
阶段一:虚拟组网 (Tailscale)
- 安装与连接:在服务器和本地电脑分别执行
tailscale up并完成登录。 - 获取内网 IP:记录服务器在 Tailscale 内部的 IP(通常为
100.x.y.z)。 - 持久化配置:登录 Tailscale Admin Console → Edit machine settings → 勾选 Disable key expiry(避免半年后凭证过期导致无法连接)。
阶段二:SSH 身份验证加固
-
注入公钥:将本地电脑的
id_rsa.pub内容写入服务器的/root/.ssh/authorized_keys。 -
修改配置:编辑
/etc/ssh/sshd_config:
# 只允许 Root 密钥登录
PermitRootLogin prohibit-password
# 彻底关闭密码登录
PasswordAuthentication no
# 启用公钥校验
PubkeyAuthentication yes
- 生效:执行
sshd -t检查语法,无误后执行systemctl restart ssh。
阶段三:本地防火墙 (UFW)
# 安装并初始化
sudo apt update && sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 核心规则:放行虚拟网卡 (必须优先执行此条)
sudo ufw allow in on tailscale0
# 允许同子网内网互通(请替换为你云平台子网的实际 CIDR)
sudo ufw allow from 10.0.0.0/24
# 启动
sudo ufw enable
阶段四:云端隔离(云平台安全组)
在云平台的安全组 / 防火墙规则中执行以下操作:
- 删除:所有源为
0.0.0.0/0的入站规则(22, 80, 443 等)。 - 新增:允许源为你的子网网段(如
10.0.0.0/24)的所有协议入站。
💡 Oracle Cloud 示例:在控制台的 安全列表 (Security Lists) 中操作。 其他平台:AWS 对应 Security Group,GCP 对应 Firewall Rules,腾讯云/阿里云对应安全组。
三重兜底机制(紧急救援 SOP)
即使在最坏情况下(Tailscale 故障),仍有三层救援手段。
第一层:Tailscale(主通道)
- SSH 主入口
- 不暴露公网
- 支持多设备
👉 日常使用 99% 依赖它
第二层:公网 SSH(临时救援)
仅作为临时应急通道使用,修复后立即关闭。
操作流程:
- 登录云平台控制台
- 临时添加入站规则:
0.0.0.0/0 → TCP 22
- 使用公网 IP 登录(注意:密码仍不可用,必须有私钥):
ssh root@公网IP
- 修复后立即关闭端口
第三层:Serial Console / VNC(终极救援)
即使 SSH 配错、防火墙锁死、Tailscale 挂了,主流云平台都提供控制台级别的远程访问,可 100% 救回服务器。
各平台入口:
| 云平台 | 功能名称 | 路径 |
|---|---|---|
| Oracle Cloud | Serial Console | Compute → Instance → Console Connection |
| AWS | EC2 Serial Console | EC2 → Instance → Connect → EC2 Serial Console |
| 腾讯云 / 阿里云 | VNC 登录 | 实例详情 → 远程连接 → VNC |
能做什么?
# 重启 SSH
systemctl restart ssh
# 关闭防火墙
ufw disable
# 修配置
nano /etc/ssh/sshd_config
👉 100% 救回服务器
可恢复性矩阵
| 场景 | 是否可救 |
|---|---|
| SSH 配错 | ✅ |
| 防火墙锁死 | ✅ |
| Tailscale 挂 | ✅ |
| 网络异常 | ✅ |
紧急容灾预案 SOP
场景:Tailscale 故障导致无法连接。
- 控制台救急:在云平台后台手动临时添加入站规则:
源: 0.0.0.0/0, 协议: TCP, 端口: 22。 - 密钥登录:使用
ssh root@服务器公网IP登录(注意:此时密码仍不可用,必须有私钥)。 - 修复服务:排查并重启 Tailscale。
- 复原隔离:修复后立即删除临时 22 端口规则。
配置核对清单 (Checklist)
- [ ] Tailscale 已设置 Disable Key Expiry
- [ ]
/etc/ssh/sshd_config已禁用密码登录 - [ ] UFW 已允许
on tailscale0流量 - [ ] 云平台安全组已删除
0.0.0.0/0的入站规则
日常运维
如何连接
# 永远通过 Tailscale IP 访问
ssh root@100.x.y.z
如何发布 Web 服务
推荐使用 Cloudflare Tunnel:
- 原理:
cloudflared进程从内部向外建立连接,对外提供服务而无需开放端口 - 优势:无需在云平台安全组或 UFW 中开启 80/443 端口,IP 不对外暴露
- 详细配置参见 Cloudflare Tunnel 完整方案