VPS 安全加固实战总结

起因

VPS 遭遇 DDoS 攻击,IP 被黑洞路由 15 分钟。排查后发现多个安全隐患。


问题一:端口暴露过多

发现:

ss -tlnp

MySQL 3306 对公网开放,代理端口直接暴露。

修复:

  • Docker 服务只绑定 127.0.0.1
  • 同一 Docker network 内的容器通信不需要暴露端口
  • 启用 ufw,只放行必要端口

问题二:SSH 直接暴露

方案:Cloudflare Tunnel

原理:VPS 主动向外建立隧道,外部无法直接访问任何端口。

本地 → Cloudflare 网络 → VPS(主动连出的隧道)

配置完成后:

  • SSH 只监听 127.0.0.1
  • 关闭 SSH 端口的防火墙规则
  • 通过 cloudflared access ssh 连接

逃生通道:VPS 控制台的 VNC/Serial Console,与 SSH 完全独立。


问题三:代理协议过时

原方案 Trojan 问题:

  • 项目停止维护(2020)
  • 需要单独暴露端口
  • 不支持 WebSocket,无法套 CDN

升级为 VLESS + Reality:

优势:

  • 不需要域名和证书
  • 伪装成访问正规大站,无法识别
  • 可与 Web 服务共用 443 端口(fallback 机制)

架构:

外部 443 → Xray
            ├─ VLESS 流量 → 代理出去
            └─ 普通 HTTPS → 回落到 Web 服务

问题四:真实 IP 泄露

检查方法:

curl -s "https://api.hackertarget.com/hostsearch/?q=你的域名"

历史 DNS 记录会被收录,一旦泄露无法撤回。

教训:

  • 新域名/新 IP 从第一秒起开启 Cloudflare 代理
  • 子域名命名避免暴露用途(不要用 vpn、proxy、trojan 等)
  • VLESS 客户端直接填 IP,不走域名

关于 Null Route

廉价 VPS 的 DDoS 防护机制:检测到异常流量后,将 IP 路由到黑洞。

副作用: 攻击者只需小流量触发阈值,就能让服务中断 15 分钟。

应对: 隐藏真实 IP 比硬扛更重要。


最终架构

服务访问方式
WebCloudflare 代理 → Xray 回落 → Docker
SSHCloudflare Tunnel
代理VLESS + Reality(直连 IP)
数据库仅本地

对外只暴露 80/443,且:

  • 禁用 ping 响应
  • Web 流量有 Cloudflare 保护
  • 代理流量伪装成正常 HTTPS

扫描者只能看到一个普通网站。


检查清单

# 查看监听端口
ss -tlnp

# 查看防火墙状态
sudo ufw status

# 检查 IP 是否泄露
curl -s "https://api.hackertarget.com/hostsearch/?q=你的域名"

# 禁用 ping
sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1

最后修改:2026 年 01 月 03 日
如果觉得我的文章对你有用,请随意赞赏