web-dev-qa-db-ja.com

コマンドラインで動作するCheckpoint VPN SSL Network Extenderを取得する

SSL Network Extender VPNを設定するためのCheckPointの公式のCheckpoint outコマンドラインツールは、Linuxコマンドラインからは機能しなくなりました。また、CheckPointでは積極的にサポートされていません。

ただし、認証のためにJavaアプレットを複製しようとする、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の両方でうまく機能しています。

11
Rui F Ribeiro

2012年のSNXビルド800007075。コマンドラインでVPNをサポートするために使用されます。だから私はそれをテストしました、そして見たところ、それはまだ最新のディストリビューションとカーネル4.xで動作します。

したがって、最終的に、SNXビルド800007075またはを取得できない場合、このスレッドのもう1つの答えはtrueになり、SNXの特定のバージョンが現在のLinuxバージョン(近い将来に発生する可能性があります)またはOTPサポートが必要な場合。

現在の解決策は、stillがコマンドラインからのVPNの実行をサポートするSNXのこの特定の最新バージョンをインストールすることです。

1)snx build 800007075をインストールするには、次のようにします。

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

DebianおよびUbuntuやLinux Mintのような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/snx 32ビットクライアントバイナリ実行可能ファイルを知っているでしょう。ダイナミックライブラリが不足していないかどうかを確認します。

Sudo ldd /usr/bin/snx

すべての依存関係が満たされた場合にのみ、次のポイントに進むことができます。

シグネチャVPNをsnx -s CheckpointURLFQDN -u USERに保存するには、自動使用をスクリプト化する前に、最初に手動で/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.

使用するsnxバージョンの説明については、 Linuxチェックポイント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を使用する場合、passwordフィールドは固定のパスワードではなくetokenからパスワードを取得することに注意を呼びかけました。

22
Rui F Ribeiro

質問 FirefoxのVPN SSLネットワークエクステンダー でFirefox公式のSSL VPNエクステンダーインターフェイスをインストールする作業をしているときに、この質問のパズルのいくつかのピースを見つけて解決しました。

どうやら、チェックポイントからのsnxのコマンドラインの使用は中止されましたが、リンクされた投稿で説明されているWebベースのクライアントは引き続き機能します。ただし、snxクライアントの上にWeb + Javaインターフェースを複製しようとするpythonコマンドラインクライアントがあり、この投稿はそれが機能するように設定することについてです。

まず、python pipからインストールされたsnxvpが機能しません。 https://github.com/agnis-mateuss/snxvpn にはパッチが適用された更新バージョンがあり、署名されていない証明書や期限切れの証明書を無視するオプションなど、いくつかの便利なパッチがあり、さらに興味深いことに、 python2およびpython3互換です。

さらに、snxconnect.pyのすべてのURLを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/snx 32ビットクライアントバイナリ実行可能ファイルを知っているでしょう。ダイナミックライブラリが不足していないかどうかを確認します。

Sudo ldd /usr/bin/snx

すべての依存関係が満たされた場合にのみ、次のポイントに進むことができます。

snxconnectを使用する前に最初にsnx -s CheckpointURLFQDN -u USERを実行する必要があるかどうか不明です。署名VPNは/etc/snx/USER.dbに保存されます。

2)snxconnect pythonユーティリティです。このようなプログラムは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  

。次に、Python3の場合はrootとして実行します:(推奨)

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)cookie(s)ファイルは、使用に成功した後、〜/ .snxcookiesに作成されます。

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インターフェイスが、リダイレクトされたホスト名を直接指しているセカンダリCheckPointの場所にHTMLリダイレクトを行っている場合、より良い結果が得られます。
  • ファイアウォールの証明書が自己署名されている場合(多くの場合そうです)、-skip-certオプションを使用する必要があります。そうしないと認証が失敗します。
  • 再認証にそれほど多くの問題がなかったため、ユーザーがリモートVPNポイントにログインしている間(タイムアウトはx時間)、-save-cookiesを使用して認証Cookieを使用する必要がありました。
  • 前の質問で説明したように、スクリプトが機能するためには、「サインイン時にSSL Network Extenderを起動する」オプションを「自動」に変更する必要があります。
  • snxsnxconnectと通信するため、snxがそれを所有するためには、localhostの7776/TCPがフリーでなければなりません。
  • snxconnect/snxに渡されるホスト名は仮想ホストとして扱われるため、VPN IPアドレスを直接使用することはできません。
  • 32ビットアーキテクチャをインストールすることは、snx_install.shスクリプトを実行するための要件のようです。
  • より少ないスペースとのトレードオフとしてpython2として実行することを選択する場合がありますが、python2が段階的に廃止されるため、近い将来にsnxconnectはそれをサポートしない可能性があります。
  • 私のURLが/sslvpnで始まっていないので、ウェブクライアントインターフェースを使用して、すべての/sslvpn文字列にパッチを適用するか削除する必要があることは明らかです。特定のケースを確認します。コード内のその文字列の存在が古いバージョンによるものであるかどうかは、まったくわかりません。
  • snxconnectでは、CheckPointのホスト名は、Web仮想ホストであるため、そこで認証されるとWebインターフェースが表示する正確な名前である必要があります。そうしないと、VPNの確立に成功しません。
  • snxを初めて使用するときは、VPN /チェックポイントサーバーの署名を含むファイルが/etc/snx/USER.dbに作成されます。
  • コマンドラインからOTPを使用する必要がある場合は、snxconnectを使用する必要があります。snxだけではサポートされないためです。
7
Rui F Ribeiro