深信服的 EasyConnect 这玩意,不能说不好,毕竟方便了连接公司内网(没它还真干不了活),但是软件本身的一些行为,确实让人看不懂,比如:两个以 root 权限后台常驻的进程以及自动安装的 Sangfor 根证书。
- 两个 root 权限后台常驻的 EasyMonitor 和 ECAgentProxy,且手动停止后仍会拉起
- 自动安装系统根证书,删除后,由于上述两个常驻进程的存在,仍然会重新安装
上述行为的危害懂得都懂,root 权限常驻,意味着拥有读取和写入任何文件的权限;安装了根证书,意味着可以解密流量,中间人攻击,篡改数据等。
本机环境:
操作系统:macOS Ventura 13.1 (22C65)
CPU:Intel
EasyConnect 版本:7.6.3
终端:zsh (oh-my-zsh)
终端工具:iTerm2
其他环境请自行测试。
方案一(使用 Docker 启动,强烈推荐)
不满其行为的大有人在,已由大佬封装 Linux 和命令行版本的包为 Docker 镜像来规避其“流氓”行为对宿主机的影响。
docker-easyconnect:https://github.com/docker-easyconnect/docker-easyconnect
项目的目的也很明确:
使深信服(Sangfor)开发的非自由的 VPN 软件 EasyConnect 和 aTrust 运行在 docker 或 podman 中,并作为网关和/或提供 socks5、http 代理服务
该项目提供纯命令行版和图形桌面版两个版本,如无必要,推荐纯命令行版本(以下仅介绍该版本使用方式),简单快速高效。推荐本地安装,本地暴露 socks5 代理,避免使用公有云 VPS 受网络影响及安全性问题。
详细使用文档可参考:https://github.com/docker-easyconnect/docker-easyconnect/blob/master/doc/usage.md
启动容器
- 安装 Docker 运行环境并启动
执行以下命令
docker run --rm --device /dev/net/tun --cap-add NET_ADMIN -ti -p 127.0.0.1:1080:1080 -p 127.0.0.1:8888:8888 -e EC_VER=7.6.3 -e CLI_OPTS="-d vpnaddress -u username -p password" hagb/docker-easyconnect:cli
将命令行中的vpnaddress
、 username
和password
替换为实际的 VPN 连接地址、用户名和密码。
-e EC_VER=7.6.3
表示使用7.6.3
版本的 EasyConnect,可根据实际情况修改
执行完毕后,容器会在前台运行,关闭后容器自动销毁数据。
封装脚本
上述命令行过于复杂,可将其封装为脚本执行
新建一个
~/.tools/connvpn.sh
并输入以下内容:#!/bin/bash echo "Start Docker EasyConnect..." username="你的用户名" vpnaddr="你的 VPN 连接地址" echo "Please enter $username password:" read -s password docker run --rm --device /dev/net/tun --cap-add NET_ADMIN -ti -p 127.0.0.1:1080:1080 -p 127.0.0.1:8888:8888 -e EC_VER=7.6.3 -e CLI_OPTS="-d $vpnaddr -u $username -p $password" hagb/docker-easyconnect:cli
编辑
~/.zshrc
文件,末尾加入:alias connvpn="/bin/sh ~/.tools/connvpn.sh"
- 之后使配置生效
source ~/.zshrc
,此时,尝试执行connvpn
,会自动启动一个 Docker 容器,并自动登录相关账号
配置代理
经过上述一系列操作,本地已经暴露了一个socks5
代理在1080
端口,接下来需要做的是配置并使用暴露出来的代理。
浏览器代理
使用 SwitchyOmega 插件实现,可自行安装该插件,安装完毕后,「新建情景模式」:
配置如下:
保存后设置使用该配置:
此时新开浏览器窗口,已经可以正常访问内网地址。
SSH 代理
实际使用中,有时不仅仅需要浏览网页,还需要连接内网服务器,SSH 本身就提供 socks5 代理的方式连接
第一种方式,直接使用 SSH 命令连接:
ssh -o ProxyCommand="nc -X 5 -x 127.0.0.1:1080 %h %p" root@xxx.xxx.xxx.xxx
第二种方式,建议使用 SSH config 的方式来管理连接,编辑~/.ssh/config
:
# 以下为示例配置
Host machine1
HostName 192.168.111.222
User root
Port 60022
IdentityFile ~/.ssh/id_ed25519
ProxyCommand nc -X 5 -x 127.0.0.1:1080 %h %p
此时直接执行ssh machine1
即可透过 socks5 代理连接服务器
Jetbrains 代理
适用于需要通过 VPN 从内网自建 GitLab 等工具拉取/推送代码,按照下图配置即可:
方案二(已安装 EasyConnect)
如开头所述,如已安装了 EasyConnect(建议卸载,并按照方案一来使用),以下方案在我的环境无法正常使用,Good luck to you!
删除开机启动项及后台运行项目
sudo rm /Library/LaunchDaemons/com.sangfor.EasyMonitor.plist && sudo rm /Library/LaunchAgents/com.sangfor.ECAgentProxy.plist
回车后输入密码即可
- 删除根证书
执行完第一步后,需要先重启电脑
,之后打开「钥匙串访问」-「系统」-「证书」,找到Sangfor
关键字对证书,右键删除即可。
如果证书删除后不久又自动添加回来,检查是否删除开机启动项并重启
编辑
~/.zshrc
文件,添加以下脚本(也可单独新建脚本文件,.zshrc
中配置):startEasyConnect() { /Applications/EasyConnect.app/Contents/Resources/bin/EasyMonitor > /dev/null 2>&1 & /Applications/EasyConnect.app/Contents/MacOS/EasyConnect > /dev/null 2>&1 & } fuckEasyConnect() { function killprocess() { processname=$1 killall $processname >/dev/null 2>&1 proxypids=$(ps aux | grep -v grep | grep $processname | awk '{print $2}') for proxypid in $proxypids do kill -9 $proxypid done } killprocess svpnservice killprocess CSClient killprocess ECAgentProxy killprocess /Applications/EasyConnect.app/Contents/MacOS/EasyConnect pkill ECAgent pkill EasyMonitor }
- 重新加载配置
source ~/.zshrc
,此时如果需要启动 EasyConnect,直接终端执行startEasyConnect
即可,使用时不可关闭窗口,使用完需要执行fuckEasyConnect
来关闭进程
One comment
厉害厉害 还有这种操作