深信服的 EasyConnect 这玩意,不能说不好,毕竟方便了连接公司内网(没它还真干不了活),但是软件本身的一些行为,确实让人看不懂,比如:两个以 root 权限后台常驻的进程以及自动安装的 Sangfor 根证书。

  • 两个 root 权限后台常驻的 EasyMonitorECAgentProxy,且手动停止后仍会拉起
  • 自动安装系统根证书,删除后,由于上述两个常驻进程的存在,仍然会重新安装

上述行为的危害懂得都懂,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

启动容器

  1. 安装 Docker 运行环境并启动
  2. 执行以下命令

    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

将命令行中的vpnaddressusernamepassword替换为实际的 VPN 连接地址、用户名和密码。

-e EC_VER=7.6.3表示使用7.6.3版本的 EasyConnect,可根据实际情况修改

执行完毕后,容器会在前台运行,关闭后容器自动销毁数据。

封装脚本

上述命令行过于复杂,可将其封装为脚本执行

  1. 新建一个 ~/.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
  2. 编辑~/.zshrc文件,末尾加入:

    alias connvpn="/bin/sh ~/.tools/connvpn.sh"
  3. 之后使配置生效source ~/.zshrc,此时,尝试执行connvpn,会自动启动一个 Docker 容器,并自动登录相关账号

配置代理

经过上述一系列操作,本地已经暴露了一个socks5代理在1080端口,接下来需要做的是配置并使用暴露出来的代理。

浏览器代理

使用 SwitchyOmega 插件实现,可自行安装该插件,安装完毕后,「新建情景模式」:

新建情景模式

配置如下:

配置详情

保存后设置使用该配置:

此时新开浏览器窗口,已经可以正常访问内网地址。

SSH 代理

第一种方式,直接使用 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 等工具拉取/推送代码,按照下图配置即可:
jetbrains-config

方案二(已安装 EasyConnect)


如开头所述,如已安装了 EasyConnect(建议卸载,并按照方案一来使用),以下方案在我的环境无法正常使用,Good luck to you!

  1. 删除开机启动项及后台运行项目

    sudo rm /Library/LaunchDaemons/com.sangfor.EasyMonitor.plist && sudo rm /Library/LaunchAgents/com.sangfor.ECAgentProxy.plist

回车后输入密码即可

  1. 删除根证书

执行完第一步后,需要先重启电脑,之后打开「钥匙串访问」-「系统」-「证书」,找到Sangfor关键字对证书,右键删除即可。

如果证书删除后不久又自动添加回来,检查是否删除开机启动项并重启

  1. 编辑~/.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
    }
  2. 重新加载配置source ~/.zshrc,此时如果需要启动 EasyConnect,直接终端执行startEasyConnect即可,使用时不可关闭窗口,使用完需要执行fuckEasyConnect来关闭进程

参考文章:
EasyConnect 你想干甚?—— 干掉 macOS 版 EasyConnect 的流氓行为

Last modification:January 11, 2024
If you think my article is useful to you, please feel free to appreciate