✧ 君と集まって星座になれたら ✦ ROKUTOSEI
398 字
2 分钟
Cloudflare Tunnel 实现零信任 SSH 并封闭公网端口

本文记录通过 Cloudflare Tunnel(Zero Trust)配置 SSH 反向穿透,并完全封闭公网端口的步骤


1. 部署 cloudflared#

在 VPS 上执行以下命令以安装并注册系统服务连接器:

Terminal window
# 导入密钥源与仓库地址
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-public-v2.gpg | sudo tee /usr/share/keyrings/cloudflare-public-v2.gpg >/dev/null
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-public-v2.gpg] https://pkg.cloudflare.com/cloudflared any main' | sudo tee /etc/apt/sources.list.d/cloudflared.list
# 安装并运行服务(替换 <YOUR_TOKEN>)
sudo apt-get update && sudo apt-get install cloudflared -y
sudo cloudflared service install <YOUR_TOKEN>

确认服务状态已拉起:

Terminal window
sudo systemctl status cloudflared

2. 网页端与本地配置#

2.1 路由规则配置#

在 Cloudflare Zero Trust 隧道的 Public Hostname 中配置路由映射:

  • Subdomain:自定义子域名(如 ssh-vps)
  • Domain:选择已托管的域名
  • Type:SSH
  • URL:localhost:<SSH_PORT>(若未修改默认端口,则为 localhost:22)

2.2 本地 SSH 客户端配置#

在本地的 ~/.ssh/config 文件中新增如下配置:

Host vps-tunnel
HostName ssh-vps.yourdomain.com
User your_vps_username
IdentityFile ~/.ssh/id_ed25519_vps
IdentitiesOnly yes
ProxyCommand cloudflared access ssh --hostname %h
ServerAliveInterval 30

本地通过命令行连接验证:

Terminal window
ssh vps-tunnel

3. 防火墙配置#

警告:请务必确保已经通过 ssh vps-tunnel 验证能够正常进入终端,再执行此步骤,否则会有失联风险。

在 iptables 中屏蔽除本地环回口(lo)之外所有外部访问 SSH 服务端口的连接:

Terminal window
# SSHD 实际监听的端口
SSH_PORT=54321
# 限制除本地环回外所有针对该端口的 TCP 请求
sudo iptables -I INPUT ! -i lo -p tcp --dport $SSH_PORT -j DROP
sudo ip6tables -I INPUT ! -i lo -p tcp --dport $SSH_PORT -j DROP
# 保存规则
sudo netfilter-persistent save

验证直连状态,确认外部直连超时挂起,而通过隧道连接依旧正常。

Rokutosei
Rokutosei ✦ 六等星
“君と集まって星座になれたら”
Cloudflare Tunnel 实现零信任 SSH 并封闭公网端口
https://blog.rokutosei.com/posts/linux/ssh-over-cloudflare-tunnel/
作者
Rokutosei
发布于
2026-07-13
许可协议
CC BY-NC-SA 4.0
✧ 文章目录 ✦
1
1. 部署 cloudflared
2
2. 网页端与本地配置
2.1 路由规则配置
2.2 本地 SSH 客户端配置
3
3. 防火墙配置