在命令行中使Checkpoint VPN SSL Network Extender正常运行


11

CheckPoint提供的用于设置SSL Network Extender VPN的官方Checkpoint out命令行工具不再可以在Linux命令行上使用。CheckPoint也不再主动支持它。

但是,有一个很有前途的项目,该项目尝试复制Java applet进行身份验证,该项目与snx名为的命令行实用程序进行通讯snxconnect

我试图将snxconnect文本实用程序在Debian Buster中工作,这样做:

sudo pip install snxvpn

export PYTHONHTTPSVERIFY=0
snxconnect -H checkpoint.hostname -U USER 

但是,它几乎都死于HTTP错误:

HTTP/1.1 301 Moved Permanently:

要么:

Got HTTP response: HTTP/1.1 302 Found

要么:

Unexpected response, try again.

怎么办呢?

PS。EndPoint Security VPN官方客户端在Mac High Sierra和Windows 10 Pro中均运行良好。

Answers:


22

从2012年开始的SNX内部版本800007075,用于在命令行中支持VPN。因此,我对其进行了测试,瞧瞧,它仍然适用于最新的发行版和内核4.x / 5.x。

因此,最终,如果您无法掌握SNX内部版本800007075,或者该特定版本的SNX停止使用当前的Linux版本(可能在不久的将来发生),或者您需要OTP支持,那么我在此线程中的其他答案仍然成立。。

目前,该解决方案正在安装此特定版本的SNX,该版本支持从命令行进行VPN。

1)要安装内部snx版本800007075,请从以下位置获取:

wget https://starkers.keybase.pub/snx_install_linux30.sh?dl=1 -O snx_install.sh

对于Ubuntu和Linux Mint等基于Debian和Debian的64位系统,您可能需要添加32位体系结构:

sudo dpkg --add-architecture i386
sudo apt-get update    

我必须安装以下32位软件包:

sudo apt-get install libstdc++5:i386 libx11-6:i386 libpam0g:i386

然后运行snx安装脚本:

chmod a+rx snx_install.sh
sudo ./snx_install.sh`

您现在将拥有一个/usr/bin/snx32位客户端二进制可执行文件。检查是否缺少任何动态库:

sudo ldd /usr/bin/snx

当满足所有依赖性时,您只能继续执行以下几点。

您可能需要先手动运行snx -s CheckpointURLFQDN -u USER,然后再执行脚本自动使用脚本,以将签名VPN保存在/etc/snx/USER.db

2)在使用它之前,请创建一个~/.snxrc具有以下内容的文件:

server IP_address_of_your_VPN
username YOUR_USER
reauth yes

3)对于连接,键入 snx

$ snx
Check Point's Linux SNX
build 800007075
Please enter your password:

SNX - connected.

Session parameters:
===================
Office Mode IP      : 10.x.x.x
DNS Server          : 10.x.x.x
Secondary DNS Server: 10.x.x.x
DNS Suffix          : xxx.xx, xxx.xx
Timeout             : 24 hours 

如果您了解在脚本中对VPN密码进行硬编码的安全风险,还可以将其用作:

echo 'Password' | snx

4)对于关闭/断开VPN,虽然您可以停止/杀死snx,但更好的官方方式是发出以下命令:

$snx -d
SNX - Disconnecting...
 done.

另请参阅Linux Checkpoint SNX工具配置问题以获取有关snx使用哪个版本的一些说明。

5)如果自动化登录并接受新的签名(并了解安全隐患),我编写了一个expect脚本,我将该脚本称为snx_login.exp;不太安全,但是您可以自动登录,并使用密码作为参数来调用它:

#!/usr/bin/expect
spawn /usr/bin/snx 

set password [lindex $argv 0]

expect "*?assword:*"
send -- "$password\r"

expect {
   "o:" {
      send "y\r"
      exp_continue
   }
   eof
}

PS。当心snx不仅仅支持OTP,snxconnect如果使用它,您将不得不使用其他答案上的脚本。

PPS @gibies提醒我注意,使用etoken,密码字段从etoken获取密码,而不是固定密码。


1
这在Arch Linux中使用aur储存库中的snx起作用。
2012年

@Met的确是,以后再找到它...请参阅此答案中的最后一个链接。不过,即使从第三方网站下载了AUR,也无法确定该AUR是否可为我们提供较旧且不受支持的32位Checkpoint的snx实用程序2012版。我在接受的答案中使用了相同的版本,另一种是替代方法。
Rui F Ribeiro

编辑了@linuxatico Answer,将旧的下载链接替换为可用的链接。怎么样了
Rui F Ribeiro

1
在Ubuntu 18.04(64位)上为我工作。我没有执行snx -s CheckpointURLFQDN -u USER,并执行只占到第3步
阿米尔Waduwawara

@AmilWaduwawara“步骤4”是如何断开连接的步骤,步骤5主要适用于具有检查点群集且呈现不同签名的人员和/或当群集正在运行时。您可以确认是否启用或禁用了IPv6吗?
Rui F Ribeiro

7

当尝试在Firefox中的VPN SSL Network Extender问题中安装Firefox官方SSL VPN Extender界面时,我发现并解决了该问题的更多难题。

显然,虽然snx来自checkpoint的命令行使用已被终止,但链接文章中所述的基于Web的客户端仍然有效。但是,有一个python命令行客户端,该客户端尝试在snx客户端顶部复制Web + Java界面,而本文旨在将其设置为正常工作。

首先,无法snxvp从安装python piphttps://github.com/agnis-mateuss/snxvpn上有一个更新的修补程序版本,其中包含一些有用的修补程序,包括用于忽略未签名和/或已过期证书的选项,更有趣的是,它与python2 python3兼容。

此外,所有URL snxconnect.py都必须从更改sslvpn/为``。


因此,分步说明大致如下:

1)首先,安装snx安装程序:

如果在VPN中,要获取安装文件,请执行以下操作:

wget --no-check-certificate https://VPN_FW_HOSTNAME/SNX/INSTALL/snx_install.sh 

否则,您将必须从Web界面中获取它,如链接答案中所述。

对于Debian,您可能需要:

sudo dpkg --add-architecture i386
sudo apt-get update    

我必须安装以下内容:

sudo apt-get install libstdc++5:i386 libx11-6:i386 libpam0g:i386

然后运行:

chmod a+rx snx_install.sh
sudo ./snx_install.sh`

您现在将拥有一个/usr/bin/snx32位客户端二进制可执行文件。检查是否缺少任何动态库:

sudo ldd /usr/bin/snx

当满足所有依赖性时,您只能继续执行以下几点。

不知道是否需要先运行snx -s CheckpointURLFQDN -u USER才能使用snxconnect,因为签名VP​​N保存在/etc/snx/USER.db

2)现在我们有了snxconnectpython实用程序。此类程序尝试模拟Web界面,更有趣的是,它不需要Java进行身份验证。

因此要安装和设置snxconnect,请以root身份运行:

apt-get -y install git make libxml2-dev libxslt1-dev zlib1g-dev python-pip
pip install pytz
git clone https://github.com/agnis-mateuss/snxvpn
git clone  git://git.code.sf.net/p/sfreleasetools/code releasetools
cd snxvpn   

Now, as for taking out the /sslvpn URL, some Checkpoint appliances need it, some do not. I am not still aware of why the difference. I need it, @WileyMarques does not.

sed -i "s/sslvpn\///g" snxconnect.py  

。然后以root的身份针对python3做:(推荐)

apt-get install python3-docutils python3-pip python3-libxml2 python3-dev python3-crypto python3-bs4
make
python3 setup.py install --prefix=/usr/local

。或代替,如做根,为python2:

apt-get install python-docutils python-libxml2 python-lxml python-dev python-bs4 python-beautifulsoup
sed -i "s/distutils.core/setuptools/g" setup.py
make
python setup.py install --prefix=/usr/local

3)安装后,您可以以非特权用户身份运行:

/usr/local/bin/snxconnect -H CheckpointURLFQDN -U USER --skip-cert --save-cookies

如果一切正常,它将要求输入密码,然后显示:

SNX connected, to leave VPN open, leave this running!

如果您在收到此消息时遇到问题,而连续几次却收到消息,则显示消息:“意外响应,请重试。”,执行Firefox方法,然后正确断开连接并注销,请等待几分钟,然后再尝试snxconnect再次命令。

4)成功使用后,将在〜/ .snxcookies处创建cookie文件。

建立VPN后,您可以通过进行检查,ip address或者ifconfig您现在拥有一个tunsnx接口:

$ ip addr show dev tunsnx
14: tunsnx: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
    link/none
    inet 10.x.x.x peer 10.x.x.x/32 scope global tunsnx
       valid_lft forever preferred_lft forever
    inet6 fe80::acfe:8fce:99a4:44b7/64 scope link stable-privacy
       valid_lft forever preferred_lft forever

ip route还将显示通过该tunsnx界面的新路线。

5)对于关闭/断开VPN,虽然您可以停止/杀死snxconnect,但更好的官方方式是发出以下命令:

$snx -d
SNX - Disconnecting...
 done.


另外,我还发现:

  • snxconnect如果存在一些奇怪的问题,断开先前的VPN连接并从官方Web界面注销时,似乎表现更好(必须尝试snx -d查看是否产生相同的结果);
  • PYTHONHTTPSVERIFY = 0仅影响python2版本;
  • 如果Web界面正在将HTML重定向到次要CheckPoint位置,并直接指向该重定向的主机名,则会获得更好的结果;
  • 如果防火墙的证书是自签名的(通常是),则必须使用--skip-cert选项,否则身份验证将失败;
  • 因为重新身份验证没有太多问题,所以当用户登录到远程VPN点(超时时间为x小时)时,必须使用--save-cookies来使用身份验证cookie;
  • 如上一个问题所述,要使脚本正常工作,必须将“登录时启动SSL Network Extender”选项更改为“自动”;
  • 7776 / TCP在本地主机必须是免费的,snx拥有它,因为snxconnect与谈判snx使用它;
  • 传递给snxconnect/ 的主机名snx被视为虚拟主机,因此您不能直接使用VPN IP地址;
  • 安装32位体系结构似乎是运行snx_install.sh脚本的必要条件。
  • 您可以选择以python2较少的空间作为折衷方案来运行,但是随着python2的逐步淘汰,snxconnect在不久的将来它可能不支持它。
  • 通过使用Web客户端界面,很明显,我需要修补/删除所有/sslvpn字符串,因为我的网址不是以开头/sslvpn。我会检查您的具体情况。我绝对不知道代码中该字符串的存在是否是由于旧版本引起的,不希望有一些反馈。
  • snxconnect该检查站的主机名必须是webinterface正显示出你确切的名字曾经在那里验证,因为它是一个网络的虚拟主机。否则,您将无法成功建立VPN。
  • 首次snx使用时,将在处创建带有VPN / Checkpoint服务器签名的文件/etc/snx/USER.db
  • 如果需要从命令行使用OTP,则必须单独使用,snxconnect因为snx它不支持。

关于删除“ / sslvpn”字符串。我连接的服务器在URL上有它,因此我没有执行此步骤。将此问题有趣地指向答案,因为它可能发生在其他人身上。
Wiley Marques,

@WileyMarques感谢您的反馈,我已经怀疑它对某些人来说会有所不同,这也是因为在github / pip版本中,URL已经存在。
Rui F Ribeiro

1
我的VPN使用多重身份验证,因此我发现必须添加-MC yessnxconnect命令才能使其在我的情况下正常工作。现在就像魅力一样工作,非常感谢Rui!
维托
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.