0x01 前情提要
随着疫情反复,今天我在家办公。我需要登一台服务器上配置,但是那个地址只能通过深信服vpn连接,在家办公一天就带了台kali系统的笔记本回来,没带windows的。
kali上的win10虚拟机我打开了,太卡,而且那个地址没ping通,我退了出来,以为我的vpn没有访问权限(后来知道是禁ping)。
领导声声催促,那个配置虽然简单,但我却连不上服务器。杀伤力不大,侮辱性极强。羞愧难当,我就想着在kali上把深信服的EasyConnect客户端装上。
kali之前也装过EasyConnect,但是登录后闪退,当时没时间处理。后来更新了一下系统,焕然一新,本想着现在再安装可能会有种神奇的力量把这些错误给修复了。重新安装后,发现起都起不来。
我的kali版本:
深信服EasyConnect安装包:
http://download.sangfor.com.cn/download/product/sslvpn/pkg/linux_01/EasyConnect_x64.deb
我是用root权限安装和启动的EasyConnect的。
0x02 当EasyConnect起不来
访问我们公司的vpn地址,会直接跳转到下载页面:
我是kali linux,就下载适用于Ubuntu等操作系统的这个64位版本。
使用dpkg -i EasyConnect_x64.deb进行安装,没有出现任何报错。打开所有应用程序,搜索关键字”easyconnect”,点击启动。
它就转啊转,就是起不来,后来就不了了之了。
问题分析:
安装之后EasyConnect会启动一个EasyMonitor服务,查看该服务运行情况:
可以看到运行良好,安装目录在/usr/share/sangfor/EasyConnect/,我们使用:
/usr/share/sangfor/EasyConnect/EasyConnect --enable-transparent-visuals --disable-gpu 来启动EasyConnect,发现失败了,错误信息如下:
(EasyConnect:113285): Pango-ERROR **: 14:59:27.292: Harfbuzz version too old (1.3.1)
就是这个问题导致的起不来,我们需要重构一个EasyConnect的依赖环境。首先从http://rpmfind.net/linux/rpm2html/search.php?query=harfbuzz下载3个rpm包,分别是
harfbuzz-icu-1.8.7-1.fc29.x86_64.rpm
harfbuzz-1.8.7-1.fc29.x86_64.rpm
pango-1.42.4-1.fc29.x86_64.rpm
分别将这3个rpm包解压缩,将解压出来的文件夹lib64中的所有内容复制到一个新文件夹中,重命名为lib,拷贝到/usr/share/sangfor/EasyConnect/下。重新运行上面命令,EasyConnect可以启动。
我已经把EasyConnect.deb安装包和解压的提取的lib目录上传到网盘了,想偷懒的同学后台回复easyconnect领取下载地址。
0x02 登陆后闪退
输入vpn地址、账号、密码、短信验证码,点击登录,一切都无比顺畅。登录成功后按道理浏览器会打开资源页面,展示你所拥有的访问资源地址,但是都还没打开资源页面程序就闪退了,果然不讲武德。
EasyConnect有以下依赖项,但是它的deb包中依赖信息没写,所以我们还是先补一下依赖:
apt-get install -y --no-install-recommends --no-install-suggests libgtk2.0-0 libx11-xcb1 libxtst6 libnss3 libasound2 libdbus-glib-1-2 iptables
在bin目录下可以看到一些可执行文件:
EasyMonitor,ECAgent是监听服务,监听客户端的启动,登录,连接和退出的状态
CSClient 是实际的客户端程序
svpnservice 是连接程序,客户端可以启动,但连接不上去就是因为这个程序没有启动
我们继续分析安装目录下的文件,主要用到了两个路径:
1、所有的日志文件在/usr/share/sangfor/EasyConnect/resources/logs路径下
2、调试脚本在/usr/share/sangfor/EasyConnect/resources/shell路径下
shell路径下主要有这几个脚本:
envcheck.sh 环境检查,主要是检查iptables和route是否安装,默认没有输出
sslcheck.sh 检查ssl连接配置文件是否满足,默认没有输出
sslservice.sh 启动svpnservice,重要性已经不言而喻
sslservice.sh相关程序(实际上是/usr/share/sangfor/EasyConnect/resources/bin/中的CSClient和svpnservice)在登录时建立虚拟网络设备tun0,通过该设备能够访问到 vpn。这些程序未运行时,前端登录后/usr/share/sangfor/EasyConnect/resources/logs/ECAgent.log中会不断产生报错:
[2021-01-20 11:37:58][E][12500][ 165][ConnectDomainSock][cms] /usr/share/sangfor/EasyConnect/resources/conf/ECDomainFile domain socket connect failed, errno:111.
[2021-01-20 11:37:58][E][12500][ 114][Register]cms client connect failed.
[2021-01-20 11:37:58][E][12500][ 114][Register]cms client connect failed.
这个错误如果得不到解决,前端程序就会在连接失败一会后自行关闭,在报错期间运行sslservice.sh能够让前端正确连接。如果我们检测到该报错后立刻执行sslservice.sh,就可以解决这个问题,bash脚本如下:
#!/bin/bash
while true
do
tail -n 0 -f /usr/share/sangfor/EasyConnect/resources/logs/ECAgent.log | grep "\\[Register\\]cms client connect failed" -m 1
/usr/share/sangfor/EasyConnect/resources/shell/sslservice.sh
sleep 2
done
保存成sanfor.sh,并给执行权限,我们先启动前端:
此时,使用./sanfor.sh &运行上面的脚本,再输入用户名密码登录就不会闪退了。
0x04 其他问题
如果提示已经有用户登录,就把EasyConnect和上面脚本的进程都kill,再按照流程起一遍即可。
EasyConnect 的日志存放在/usr/share/sangfor/EasyConnect/resources/logs,部分登录信息存放在/usr/share/sangfor/EasyConnect/resources/conf/easy_connect.json
,该文件由前端创建,保存了登录凭据。/usr/share/sangfor/EasyConnect/resources/conf/目录的权限默认为rwxrwxrwx,但默认情况下easy_connect.json文件创建时权限为rw-r--r--,必要时可改为777权限。
0x03 最后
今天是腊八,过了腊八就是年,提前祝各位朋友新年快乐,身体健康,阖家团圆。