398 字
2 分钟
Cloudflare Tunnel 实现零信任 SSH 并封闭公网端口
本文记录通过 Cloudflare Tunnel(Zero Trust)配置 SSH 反向穿透,并完全封闭公网端口的步骤
1. 部署 cloudflared
在 VPS 上执行以下命令以安装并注册系统服务连接器:
# 导入密钥源与仓库地址sudo mkdir -p --mode=0755 /usr/share/keyringscurl -fsSL https://pkg.cloudflare.com/cloudflare-public-v2.gpg | sudo tee /usr/share/keyrings/cloudflare-public-v2.gpg >/dev/nullecho '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 -ysudo cloudflared service install <YOUR_TOKEN>确认服务状态已拉起:
sudo systemctl status cloudflared2. 网页端与本地配置
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本地通过命令行连接验证:
ssh vps-tunnel3. 防火墙配置
警告:请务必确保已经通过 ssh vps-tunnel 验证能够正常进入终端,再执行此步骤,否则会有失联风险。
在 iptables 中屏蔽除本地环回口(lo)之外所有外部访问 SSH 服务端口的连接:
# SSHD 实际监听的端口SSH_PORT=54321
# 限制除本地环回外所有针对该端口的 TCP 请求sudo iptables -I INPUT ! -i lo -p tcp --dport $SSH_PORT -j DROPsudo ip6tables -I INPUT ! -i lo -p tcp --dport $SSH_PORT -j DROP
# 保存规则sudo netfilter-persistent save验证直连状态,确认外部直连超时挂起,而通过隧道连接依旧正常。
Cloudflare Tunnel 实现零信任 SSH 并封闭公网端口
https://blog.rokutosei.com/posts/linux/ssh-over-cloudflare-tunnel/