最近公司某公司专家(小弟进公司的师傅)分享了一个7.6.8版本的web VPN,顺便测试体验了一把,小弟在此整体学习了一波分享出来和大家一起共同学习;
一: 首先我们先了解一下webvpn
老话说温故而知新,首先还是复习一下老版本的web应用资源,在早期老版本的SSL VPN配置中,我们一般都不建议将资源发布成web应用资源,因为web应用资源是在一定程度上对数据进行了https加密,将数据包进行HTTP和HTTPS的转换,在这个过程中容易出现一些兼容性问题导致资源访问异常,(具体的原理可以参考下边两张SCSA培训教材):
只是浏览器免控件 客户端在使用SSL VPN的过程中还是会下载的。
而在新版本7.6.7R1开始对web资源进行了重构新增子站点配置、泛域名配置(依旧兼容旧版本web资源)
因此在重构的webVPN中,有了新的概念,这是新一代纯网页形式的VPN,WebVPN无需用户做任何配置或安装客户端软件及浏览器插件(真正做到不需要下载客户端),直接在网页上通过身份验证即可进入内网应用,大大降低使用门槛,提升用户体验。
好了废话就不多说了,我们一起看一下具体的案例:
二: webvpn具体案例配置细节分享
下边我们拿到一个XX某公司的一个测试项目,体验一下新版本7.6.8版本的webVPN配置与访问过程:(配置其实比较简单)
(1)基础网络 常规单臂 出口端口映射配置
新版本的在线授权体验:
相对于老版本SSL VPN新版本如果发布web资源,除了443登录端口的映射到公网,还需要映射泛域名所用的端口,默认8118
针对与Web 资源,需在【系统设置】-【SSL VPN 选项】-【系统选项】-【资源服务选项项】-【WEB 应用】中配置好WEB 泛域名及端口,默认是8118,若没有导入受信SSL 泛域名证书(泛域名证书需要单独申请需要费用,免费的一般有效期只有一年),则需要勾选启用HTTP 透明代理访问。(本案例中因为没有申请泛域名证书,因此开启了HTTP代理)
注:开启HTTP 透明代理访问会重启SSL VPN 服务,请合理安排时间配置。
SSL单臂部署在内网,在出口设备映射8118 端口。
(3)发布新版本web应用资源
下边就可以愉快的建立资源了:
这里的子站点一般填写地址的子链接,支持通配符,例如“*.cnki.net”,也可以填写其他地址,例如“
www.baidu.com、*.qq.com”等,最多支持10 个子站点。需要注意:地址和子站点填写域名需要设备能够解析到该地址,可在设备接口上的地址配置可以解析的内网DNS。
(4)用户登录免客户端 免浏览器差件登录SSL VPN访问web资源
接下来我们体验无客户端无插件的接入场景:直接打开浏览器接入·
没有提示下载客户端 登入就可以看到web资源:
直接点击相关资源访问:
三:从访问实际使用中对比数据报文深入分析webVPN的一些原理
小弟是一个喜欢瞎折腾的,只要有充足的时间,纵向深入了解一下webVPN是靠什么实现的,它的工作原理究竟是什么。虽然从外观,配置形式,访问形式上,上我们看到与传统web资源好像区别并不大,那么我们究竟如何在客户现场向客户解释这块究竟是优化了什么,因此小弟开始google一堆资料,丰富一下自己装X词汇。
于是通过资源访问对比两种场景:(通过webvpn访问的资源与直接访问的资源F12查看HTTP报文的变化)
首先是直接访问:SOSHOO数据的时候我们看到的请求与相应的情况:
当我们使用webvpn资源访问SOHOO的时候我们看到地址栏出现了目的域名+泛域名的形式出现了,目的域名中间多了一些“-”的符号,HTTP请求和响应中明显多了一些web_proxy.js和 vpn_config。
通过页面点击直接跳转资源:
在这些访问中可以看到实际上访问是先到了SSLVPN的ip地址,然后由8118端口代理访问了真实的端口。(不知道理解是否有误,欢迎有大神可以前来指正。)
看到这个web_proxy.js文件小编goole 百度了一堆资料,大致整理如下:
可以从上图看到实际上这是一种通过某公司SSL设备的一个页面网站的8118端口(泛域名A记录是指向SSL VPN设备的),去访问另外一个网站的。
实际上这种通过某个网站访问另一个网站的在线代理技术,(通常是代理去访问一些无法直接访问网站,或者是如某公司资源 知网这种,特定的公网IP段才可以获取一些资源权限,否则下载资源要收费),这种代理形式是不用安装任何插件,不用修改任何配置,仅仅打开一个网页即可。类似的网站,或许大家都曾见过,但是因为网站复杂的结构,实际中都不怎么好用。相比 ssr/v2ray 这些网络层代理,这种在线代理的成熟度显然要低得多,只能临时凑合着用。
然而在guthub的开源项目中,许多大神已经有了更先进的技术来实现并优化在线代理,参考:
https://github.com/EtherDream/jsproxy/blob/master/docs/blogs/js-hook.md
简单的说, 是一个基于浏览器端 JS 实现的在线代理, JS Hook 技术,靠它来实现我们实现了三种类型的 Hook:API Hook (重写函数和属性);DOM Hook (MutationObserver);URL Hook (Service Worker),这样无论加载 URL 还是调用 API,都可被我们拦截和代理,仿佛将原始网页嵌套在一个沙盒中运行,这个过程中借助了泛域名来实现。
小编不是搞开发,可以说基本看不懂,只是拿来和大家某公司,扩展一下思路的,从截图中小编猜测某公司也是借助这种类似的基于浏览器端 JS 实现的在线代理技术来实现的webvpn。(欢迎各位大神对这些原理进行指正)
最后附上新版webVPN配置测试指导,本案比较简单,例没有结合CAS第三方统一认证
好了这次分享就到这里