通过Cloudflare隧道连接SSH服务器:实现安全远程访问

嗨,大家好!在这个信息时代,远程访问和安全性变得愈发重要。你是否曾想过如何在不暴露服务器的入站端口的情况下,在互联网上提供SSH服务?别担心,今天我将为你介绍如何通过Cloudflare Zero Trust实现这一目标,确保你的SSH服务器安全可达。废话不多说,让我们开始吧!

步骤1:在GCP上设置SSH服务器

首先,我们需要在Google Cloud Platform(GCP)虚拟机上设置一个SSH服务器。这里以GCP为例,但你可以在支持SSH连接的任何机器上进行设置。

1. 创建SSH密钥对

在创建VM实例之前,你需要创建一个SSH密钥对。打开终端并运行以下命令:

ssh-keygen -t rsa -f ~/.ssh/gcp_ssh -C <你在GCP中的用户名>

在提示时输入你的密码。需要输入两次。

命令行中运行:

cat ~/.ssh/gcp_ssh.pub

复制输出内容,这将在创建GCP VM实例时使用。

2. 在GCP上创建VM实例

现在,SSH密钥对已经创建,你可以创建一个VM实例了。

  • 在Google Cloud控制台中,创建一个新项目。
  • 转到Compute Engine > VM实例。
  • 选择“创建实例”。
  • 为你的VM实例命名,例如ssh-server。
  • 滚动到“高级选项” > “安全性” > “访问管理”。
  • 在“手动添加生成的SSH密钥”下,选择“添加项目”,并粘贴之前创建的公钥。
  • 选择“创建”。

一旦你的VM实例运行起来,点击SSH旁边的下拉菜单,选择在浏览器窗口中打开。为了能够建立SSH连接,不要在VM实例上启用OS登录。

步骤2:使用WARP隧道连接SSH服务器

你可以使用Cloudflare Tunnel来创建从服务器到Cloudflare边缘的安全出站连接。这需要在服务器上运行cloudflared守护程序。用户通过在其设备上安装Cloudflare WARP客户端并加入你的Zero Trust组织来访问该服务。远程设备可以像在你的私有网络上一样连接。默认情况下,所有加入你组织的设备都可以访问该服务,除非你构建策略来允许或阻止特定用户。

1. 连接服务器到Cloudflare

通过按照我们的仪表板设置指南为你的服务器创建一个Cloudflare隧道。你可以跳过连接应用程序的步骤,直接转到连接网络。

在隧道的“私有网络”选项卡中,输入服务器的私有IP地址(或包括服务器IP的范围)。在GCP中,服务器IP是VM实例的内部IP。

(可选)设置Zero Trust策略以微调对服务器的访问。

2. 设置客户端

要将你的设备连接到Cloudflare:

  • 在设备上以WARP模式部署WARP客户端。仅当你想要显示自定义阻止页面或过滤HTTPS流量时才需要Cloudflare证书。
  • 创建设备注册规则,以确定哪些设备可以加入你的Zero Trust组织。

3. 通过WARP路由私有网络IP

默认情况下,WARP客户端将RFC 1918空间的流量排除在Split Tunnel功能之外。例如,WARP自动排除10.0.0.0/8,这些IP地址通常用于私有网络,无法从互联网访问。为了让WARP将流量发送到你的私有网络,你需要在Split Tunnel配置中包括你为Cloudflare隧道指定的IP/CIDR。

要配置私有网络访问的Split Tunnel,请按照以下步骤:

  • 首先,检查你的Split Tunnel模式是否设置为排除或包括模式。
  • 如果你使用的是包括模式,请将你的网络IP/CIDR范围添加到列表中。
  • 如果你使用的是排除模式:
    • 从列表中删除你的网络IP/CIDR范围。例如,如果你的网络使用默认的AWS范围172.31.0.0/16,请删除172.16.0.0/12。
    • 重新添加没有被你的私有网络明确使用的IP/CIDR范围。对于上面的AWS示例,你需要为172.16.0.0/13、172.24.0.0/14、172.28.0.0/15和172.30.0.0/16添加新的条目。这确保了只有流向172.31.0.0/16的流量通过WARP。

通过缩小WARP中包含的私有IP范围,你可以降低用户访问本地资源的风险。

4. 作为用户进行连接

一旦你设置了应用程序和用户设备,用户现在可以使用其私有IP地址通过SSH连接到机器。如果你的SSH服务器需要SSH密钥,该密钥应包含在命令中。

ssh -i ~/.ssh/gcp_ssh <用户名>@<服务器IP>

通过cloudflared访问SSH服务器

Cloudflare隧道还可以将应用程序路由到公共主机名,允许用户在不使用WARP客户端的情况下连接到应用程序。这需要在服务器机器和客户机器上都安装cloudflared,以及在Cloudflare上拥有活动区域。流量通过此连接代理,用户使用Cloudflare Access凭

证登录到服务器。

公共主机名方法可以与通过WARP进行路由一起实施,以便有多种连接服务器的方式。你可以重复使用同一个隧道用于私有网络和公共主机名路由。

1. 连接服务器到Cloudflare

按照我们的仪表板设置指南创建一个Cloudflare隧道。

在“公共主机名”选项卡中,选择下拉菜单中的域名,并指定任何子域名(例如,ssh.example.com)。

对于“服务”,选择SSH,并输入localhost:22。如果SSH服务器与你安装隧道的机器不在同一台机器上,请输入<服务器IP>:22。

选择“保存主机名”。

(建议)添加一个自托管应用程序到Cloudflare Access,以管理对服务器的访问。

2. 作为用户进行连接

用户可以通过通过cloudflared进行身份验证,或者从浏览器呈现的终端进行连接。

本地终端
在客户机器上安装cloudflared。

对你的SSH配置文件进行一次性更改:

vim ~/.ssh/config

输入以下值;替换ssh.example.com为你创建的主机名。

Host ssh.example.com
ProxyCommand /usr/local/bin/cloudflared access ssh --hostname %h

cloudflared的路径可能因你的操作系统和包管理器而异。例如,如果你使用Homebrew在macOS上安装了cloudflared,路径是/opt/homebrew/bin/cloudflared。

现在,你可以通过运行一个命令来测试连接到服务:

ssh <用户名>@ssh.example.com

当运行命令时,cloudflared将启动一个浏览器窗口,提示你在建立连接之前使用身份提供者进行身份验证。

浏览器呈现的终端
终端用户可以在不进行任何配置的情况下,使用Cloudflare的基于浏览器的终端连接到SSH服务器。当用户访问公共主机名URL(例如https://ssh.example.com)并使用他们的Access凭证登录时,Cloudflare将在他们的浏览器中呈现一个终端。

结束语

通过Cloudflare Zero Trust,我们可以确保SSH服务器的安全可达性,而无需在服务器上打开入站端口。这为远程访问提供了更高的安全性,同时保持了便利性。希望本教程能对你有所帮助,让你的SSH服务器更安全,更容易访问。如果你有任何问题或疑虑,请随时在评论中分享。

声明:本站所有文章,如无特殊说明或标注,均为本站(王大神)原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
指数词

Cloudflare Tunnel教程

2023-9-25 2:07:14

指数词

通过Cloudflare隧道实现安全的远程桌面访问

2023-9-25 2:11:30

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索