全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 610|回复: 4

如何轻松使用 Azure AD 认证配合 Cloudflare Teams 的 WebSSH

[复制链接]
发表于 2023-10-31 11:10:08 | 显示全部楼层 |阅读模式
本帖最后由 898198 于 2023-10-31 11:10 编辑

看到一篇好文章,搬运过来
原文:https://loliloli.moe/2021/09/20/cfwebssh/

大致上,这篇文章将会介绍三个主要部分,和一个简单的硬核推广

注意:本教程仅适用大部分 Linux 设备,以及安装有 SSH 功能的 Windows 设备,虽然 Cloudflare Teams 服务提供 50 个成员的免费额度,但是需要绑定一种支付方式到 Cloudflare 才能开启 Cloudflare Teams 服务

主要部分

硬核推广

参考文档

Cloudflare Docs:
  • Microsoft Azure AD® · Cloudflare for Teams documentation
  • Render an SSH client in a browser · Cloudflare for Teams documentation
  • Configure short-lived certificates · Cloudflare for Teams documentation


虽上述三篇文档如只需完成目标已经足够了,但是都是英语文档,且存在常见细节补充需求,故旧事重提

为 Cloudflare Teams 添加 Microsoft Azure AD SSO 登录方法

相关链接:
  • Cloudflare for Teams
  • Microsoft Azure AD


准备 Cloudflare Teams

注意:Cloudflare Teams 虽然拥有免费套餐,但是必须在 Cloudflare 绑定一个支付方式,否则无法设置 Cloudflare Teams

打开上述 Cloudflare for Teams 链接,点击登录,将会跳转至熟悉的 Cloudflare 管理界面,此时点击一个域名并且而点击 Acess 即可进入



这里如果是第一次使用 Access 则会看到如下页面,点击启动 Access 即可



这时将会跳转到 Cloudflare Teams 页面,此时按照流程完成设置,选择 Settings 并且点击 Authentication



进入页面后点击位于 Login methods 下的 Add new 且如下图选择 Azure AD 即可(演示使用的 Cloudflare Teams 由于已经添加过验证方法因此已经显示有 Azure AD 选项,此时没有显示应是正常的)





选择后可以看到熟悉的填写要求,以及一篇简易的文档



如上图
  1. Name
复制代码
对应登陆方式名称,
  1. Application ID
复制代码
对应 Azure AD 中的
  1. 应用程序(客户端) ID
复制代码
  1. Application secret
复制代码
对应
  1. 客户端密码
复制代码
  1. Directory ID
复制代码
对应
  1. 目录(租户) ID
复制代码
(这里只是稍作对应介绍,下面将描述如何创建 Azure AD 应用)

创建一个 Azure AD 应用程序

进入 Azure AD 后,如下点击应用注册,并且在界面点击 新注册



进入后界面如下图,写入需要的任意应用名称,且在 重定向 URI 中写入重定向链接(如下)


  1.    https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/callback  
  2.    # 此处 <your-team-name> 为你的 Cloudflare Teams 租户名称  
复制代码
[/code]

注意:Cloudflare Teams 的租户名称为最初设置的名称,如遗忘或者需要重新设置,点击 Settings 下的 General 即可查看和设置

即如下例即可(请勿直接填写,按照上方所属需求填写方可有效,否则无效)



填写完毕后,点击注册即可,完成注册后将会看到如下页面,此时需要获取
  1. 应用程序(客户端) ID
复制代码
  1. 目录(租户) ID
复制代码
以及
  1. 客户端密码
复制代码


如下图框选位置为
  1. 应用程序(客户端) ID
复制代码
以及
  1. 目录(租户) ID
复制代码




选择菜单栏的 证书和密码 并在对应界面点击 新客户端密码



选择过期时间为 24 个月,并且点击添加(如需设置更长时间,可以自寻方法)



此时可以看到下图框选区域,为
  1. 客户端密码
复制代码
,点击复制即可(这里的机密值请妥善保存,且不应泄露,避免额外的意外情况发生,机密值仅在创建时显示,刷新后将被隐藏)



到此步骤,你应该已经获取到上述需求的三个值了,接下来则需要为该应用添加相应 API 且授予权限

选择菜单栏 API 权限



点击相关页面 添加权限 再点击 Microsoft Graph 如下图选择 委托的权限 并在搜索框中分别搜索勾选下述权限



以下为需要寻找并且授予的权限

  1.    email  
  2.    openid  
  3.    profile  
  4.    offline_access  
  5.    User.Read  
  6.    Directory.Read.All  
  7.    Group.Read.All  
复制代码
[/code]

选择完毕后,点击添加权限,确认无误后,点击 代表 You Directory Name 授予管理员同意 (此处 You Directory Name 字面意思,意为你的租户名称)



注意:此时如果你使用的全局管理员账户完成的应用创建,则该选项为可选状态直接点击即可,若使用非管理员账户进行了应用创建,则请登录管理员账户并且在该页面授予权限

设置 Azure AD 验证方法

上述步骤完成后,接下来回到如下页面,直接写入
  1. Name
复制代码
  1. Application ID
复制代码
  1. Application secret
复制代码
  1. Directory ID
复制代码




勾选 Support groups(对于组的支持)并且点击 Save 保存



注意:这里对于组的支持为对于 Azure AD 组的支持,此操作将会允许获取 Azure AD 组相关信息,需要对于组的读取权限(上述步骤已经添加)

设置 Azure AD 组信息到 Cloudflare Teams

点击 Azure AD 菜单中选项,在页面中可以看到组名称及对应对象ID获取 Azure AD 组对象ID即可

回到 Cloudflare Teams 如下图选择 Groups 并且点击 Add a Group



填写名称(按需求填写,可随意填写)选择如下图下拉框底部 Azure Group 选项,并在后面方框中填入上面获取的 Azure 组对象 ID ,确认无误点击 Save 保存即可



在服务器上面安装 Cloudflare Tunnel 并且配置使用 Cloudflare 渲染 WebSSH

这里的工作将会分为两部分,一部分在服务器上完成,另一部分在 Cloudflare Teams 完成

安装 Cloudflare Tunnel 完成相关配置并且设置守护进程

 楼主| 发表于 2023-10-31 11:10:09 | 显示全部楼层
这里首先通过 SSH 登录服务器,此时你可以考虑使用如 PuTTY 类似的工具直接登录服务器或者在腾讯云控制台登录(前提是你使用的是腾讯云轻量服务器)下述使用 PuTTY 进行演示

首先依次执行如下指令(即,安装 cloudflared)

  1.    yum install epel-release -y  
  2.    yum repolist  
  3.    yum install dpkg-devel dpkg-dev -y  
  4.    wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb  
  5.    dpkg -i ./cloudflared-linux-amd64.deb  
复制代码
[/code]

接下来使用如下指令进行登录,显示如下图
  1. cloudflared tunnel login
复制代码
[/code]



复制如上链接到浏览器,选择需要授权的域名进行授权



完成授权后,显示如下



接下来需要创建一条隧道用于连接

  1.    cloudflared tunnel create <NAME>  
  2.    # 此处 <NAME> 为你定义的隧道名称  
复制代码
[/code]

提示如下则,隧道成功创建,这里请记下隧道的 ID 即如下
  1. c2af5c2b-4fd3-4069-b25d-xxxxxxxx049f
复制代码
部分



注意:如果忘记隧道 ID,也无需担心,请使用如下指令查看
  1. cloudflared tunnel list
复制代码
[/code]

接下来,需要为 Cloudflared 设置一个守护进程并且保证其可以开机自动启动

使用如下指令创建一个新的文件,并且写入内容
  1. vi /etc/systemd/system/cloudflared.service
复制代码
[/code]

需写入
  1. cloudflared.service
复制代码
的内容

  1.    [Unit]  
  2.    Description=Argo Tunnel  
  3.    After=network.target  
  4.      
  5.    [Service]  
  6.    TimeoutStartSec=0  
  7.    Type=notify  
  8.    ExecStart=/usr/local/bin/cloudflared --config /root/.cloudflared/config.yml --no-autoupdate tunnel run  
  9.    Restart=on-failure  
  10.    RestartSec=5s  
  11.      
  12.    [Install]  
  13.    WantedBy=multi-user.target  
复制代码
[/code]

注意:上述
  1. /usr/local/bin/cloudflared
复制代码
为 Cloudflared 的路径
  1. /root/.cloudflared/config.yml
复制代码
为配置文件路径,下文将会说明如何设置该配置文件


设置 Cloudflare Teams 相关应用

现在回到 Cloudflare Teams 页面,选择 Applications 并点击 Add an application 进入如下页面



此时如上选择 Self-hosted 并进入如下页面

  • Application name: 你的应用名称
  • Session Duration: 会话保存时间
  • Application domain: 应用域名


注意:请务必记清楚 Application domain 后续操作将会继续使用



此处 Identity providers (身份提供者)选择 Azure AD 因为只有一种验证方法,因此 Instant Auth 勾上,便于直接验证跳转

点击 Next 进入如下页面,此处 Rule name 填写规则名称(可以按照需求填写)



接下来下一个页面中,如下 Access-Control-Max-Age (seconds) 填写需求的合适值即可,勾选 Access-Control-Allow-OriginAccess-Control-Allow-Methods



注意:上述 Access-Control-Allow-Origin 和 Access-Control-Allow-Methods 必须勾选,否则无法成功创建



如上图,勾选 Cookie settings 下的 Enable Binding Cookie 以及 Cloudflared settings 下的 Enable automatic cloudflared authentication 并将 Browser rendering 选择为 SSH

修改 Cloudflared 配置文件并且启动隧道

首先使用如下指令创建配置文件
  1. vi /root/.cloudflared/config.yml
复制代码
[/code]

填写如下内容(注意按照自身需求填写)

  1.    tunnel: <you-tunnel-id>  
  2.    credentials-file: /root/.cloudflared/<you-tunnel-id>.json  
  3.       
  4.    ingress:  
  5.      - hostname: <Application domain>  
  6.        service: ssh://localhost:<sshd-port>  
  7.      - service: http_status:404  
复制代码
[/code]

注意:这里的
  1. you-tunnel-id
复制代码
为你的隧道 ID ,
  1. Application domain
复制代码
为你设置的域名
  1. sshd-port
复制代码
为你的 SSH 服务端口


填写效果如下例



附加步骤(如果使用 CNAME 将域名接入 Cloudflare 则需要进行)



添加一条 CNAME 解析记录,格式如下
  1. <Application domain> CNAME <you-tunnel-id>.cfargotunnel.com
复制代码
[/code]

注意:上例使用的 CFP 面板为梦牛,这里必须注意,完成设置后务必前往 Cloudflare 检查 WebSocket 是否开启,因为梦牛有概率关闭 WebSocket 选项,而此教程所示功能需要基于 WebSocket 运行

启动隧道并且测试效果

  1.    systemctl start cloudflared  
  2.    systemctl status cloudflared  
复制代码
[/code]



执行上述指令,内容类似于图中情况,则可以打开浏览器访问你所设置的域名并且尝试登录服务器了

通过访问域名可以看到如下效果即可以确定运行正常且配置无误



这时方可设置隧道开机自动启动了,指令如下
  1. systemctl enable cloudflared
复制代码
[/code]

设置短期证书进行安全的快速登录

得到上述结果后,可以看到,通过进行登录便可以直接访问服务器了,不过此时可以更进一步即,使用短期证书进行登录

如果需要配置短期证书,则需要注意下述几点
  • 登录时的 Username 必须和 Email 前缀相同
  • 不建议也也不提倡使用 root 账户直接进行登录
  • 服务器必须开启允许公钥登录(下面会进行相关操作)


首先回到 Cloudflare Teams 并且选择 Access 下的 Service AuthApplication 下拉框中选择自己的应用程序,并且点击 Generate certificate 即可获得一个 Public key 如下图



复制 Public key 在终端中使用如下指令并且写入 Public key
  1. vi /etc/ssh/ca.pub
复制代码
[/code]

接下来修改 SSH 配置文件
  1. vi /etc/ssh/sshd_config
复制代码
[/code]

首先删除
  1. PubkeyAuthentication yes
复制代码
的注释随后在另一行添加
  1. TrustedUserCAKeys /etc/ssh/ca.pub
复制代码
完成添加后,保存退出,使用如下指令重启 sshd 服务
  1. systemctl restart sshd
复制代码
[/code]

完成后添加一个和你的邮箱前缀相同名称的用户即可,指令如下
  1. adduser <username>
复制代码
[/code]

如,我的邮箱为
  1. romeyer@loliloli.moe
复制代码
则应添加
  1. romeyer
复制代码
用户

此时再次登录 WebSSH 则会发现,登录便可以直接进入终端了,效果如下



发表于 2023-10-31 11:52:21 | 显示全部楼层
这个b字体看着是真的难受
发表于 2023-10-31 14:47:17 | 显示全部楼层
核心思想就是利用cf零信任隧道搭建一个cloudflared提前在浏览器渲染好的ssh终端,其实零信任官方教程就有…
发表于 2023-11-25 11:12:28 | 显示全部楼层
吃个自己的瓜
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-4-28 16:28 , Processed in 0.085936 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表