hacer que Checkpoint VPN SSL Network Extender funcione en la línea de comando

11

La herramienta oficial de línea de comando Checkpoint out de CheckPoint, para configurar una VPN de extensor de red SSL ya no funciona desde la línea de comando de Linux. Además, CheckPoint ya no lo admite activamente.

Sin embargo, hay un proyecto prometedor, que intenta replicar el applet de Java para autenticación, que habla con la snxutilidad de línea de comandos, llamada snxconnect.

Estaba tratando de poner la snxconnectutilidad de texto para trabajar en Debian Buster, haciendo:

sudo pip install snxvpn

y

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

Sin embargo, estaba muriendo principalmente con un error HTTP de:

HTTP/1.1 301 Moved Permanently:

o:

Got HTTP response: HTTP/1.1 302 Found

o:

Unexpected response, try again.

¿Qué hacer al respecto?

PD. El cliente oficial de EndPoint Security VPN funciona bien tanto en Mac High Sierra como en Windows 10 Pro.

Rui F Ribeiro
fuente

Respuestas:

22

SNX build 800007075 de 2012, utilizado para soportar VPN en línea de comando Así que lo probé, y he aquí, todavía funciona con las últimas distribuciones y kernel (s) 4.x / 5.x.

Entonces, en última instancia, mi otra respuesta en este hilo es cierta, si no puede obtener SNX build 800007075 o si esa versión específica de SNX deja de funcionar con las versiones actuales de Linux (podría suceder en un futuro cercano) o si necesita soporte OTP .

Actualmente, la solución es instalar esta última versión específica de SNX que todavía admite hacer la VPN desde la línea de comandos.

1) Para instalar la snxcompilación 800007075, obténgala de:

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

Para Debian y sistemas de 64 bits basados ​​en Debian como Ubuntu y Linux Mint, es posible que deba agregar la arquitectura de 32 bits:

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

Tuve que instalar los siguientes paquetes de 32 bits:

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

Ejecute entonces el snxscript de instalación:

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

Ahora tendrá un /usr/bin/snxejecutable binario de cliente de 32 bits. Compruebe si faltan bibliotecas dinámicas con:

sudo ldd /usr/bin/snx

Solo puede continuar con los siguientes puntos cuando se satisfagan todas las dependencias.

Es posible que tenga que ejecutar manualmente primero snx -s CheckpointURLFQDN -u USER, antes de cualquier uso de secuencias de comandos automática, para la firma de VPN se guardará en /etc/snx/USER.db.

2) Antes de usarlo, crea un ~/.snxrcarchivo con el siguiente contenido:

server IP_address_of_your_VPN
username YOUR_USER
reauth yes

3) Para conectar, escriba 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 

Si comprende los riesgos de seguridad de codificar una contraseña VPN en un script, también puede usarla como:

echo 'Password' | snx

4) Para cerrar / desconectar la VPN, mientras puede detener / matar snx, la mejor manera oficial es emitir el comando:

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

ver también problemas de configuración de la herramienta Linux Checkpoint SNX para algunas aclaraciones sobre quésnx versión usar.

5) Si automatiza el inicio de sesión y acepta una nueva firma (y comprende las implicaciones de seguridad), escribí un expectscript, al que llamé script snx_login.exp; no es muy seguro, sin embargo, puede automatizar su inicio de sesión, llamándolo con la contraseña como argumento:

#!/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
}

PD. Tenga cuidado snxno solo es compatible con OTP, tendrá que usar elsnxconnect script presente en la otra respuesta.

PPS @gibies me llamó la atención que al usar un etoken, el campo de contraseña obtiene la contraseña del etoken y no una contraseña fija.

Rui F Ribeiro
fuente
1
Esto funciona en arch linux usando snx del repositorio aur.
reunió el
@En efecto, encuéntralo mucho más tarde ... mira el último enlace en esta respuesta. Sin embargo, no estoy seguro de la legalidad de ese AUR que nos da una versión 2012 de 32 bits mucho más antigua y no compatible de la utilidad snx de Checkpoint, incluso si la descarga de un sitio de terceros. Estoy usando la misma versión en la respuesta aceptada, el otro es un método alternativo.
Rui F Ribeiro
@linuxatico Respuesta editada para reemplazar el antiguo enlace de descarga por uno que funcione. ¿Como le fue?
Rui F Ribeiro
1
Me funcionó en Ubuntu 18.04 (64 bits). No snx -s CheckpointURLFQDN -u USER
ejecuté y ejecuté
@AmilWaduwawara "paso 4" es cómo desconectarse, y el paso 5 es principalmente útil para personas con grupos de puntos de control que presentan diferentes firmas y / o cuando el grupo está actuando. ¿Podría confirmar si tiene IPv6 activo o deshabilitado?
Rui F Ribeiro
7

Al trabajar para instalar la interfaz de SSL VPN Extender oficial de Firefox en la pregunta VPN SSL Network Extender en Firefox , descubrí y resolví algunas piezas más del rompecabezas de esta pregunta.

Aparentemente, aunque el uso de la línea de comandos snxdesde el punto de control se ha descontinuado, el cliente basado en la web como se describe en la publicación vinculada sigue funcionando. Sin embargo, hay un cliente de línea de comandos de Python que intenta replicar la interfaz Web + Java en la parte superior delsnx cliente, y esta publicación trata de configurarlo para que funcione.

En primer lugar, el snxvpinstalado desde python pipno funciona. Hay una versión parcheada actualizada en https://github.com/agnis-mateuss/snxvpn , que tiene algunos parches útiles, incluida una opción para ignorar certificados no firmados y / o caducados, y más interesante, siendo compatible con python2 y python3.

Además, todas las URL en snxconnect.pydeben cambiarse de sslvpn/a ``.


Entonces, las instrucciones paso a paso son aproximadamente:

1) En primer lugar, instalando el snx configuración:

Si está en la VPN, para obtener el archivo de instalación, haga lo siguiente:

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

De lo contrario, deberá obtenerlo de la interfaz web, como se describe en la respuesta vinculada.

Para Debian, podría necesitar:

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

Tuve que instalar lo siguiente:

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

Corre entonces:

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

Ahora tendrá un /usr/bin/snxejecutable binario de cliente de 32 bits. Compruebe si faltan bibliotecas dinámicas con:

sudo ldd /usr/bin/snx

Solo puede continuar con los siguientes puntos cuando se satisfagan todas las dependencias.

No estoy seguro de si necesita ejecutar primero snx -s CheckpointURLFQDN -u USERantes de usar snxconnect, ya que la firma VPN se guardará en /etc/snx/USER.db.

2) Ahora tenemos la snxconnectutilidad python. Dicho programa intenta emular la interfaz web y, lo que es más interesante, no necesita Java para autenticarse.

Entonces, para instalar y configurar snxconnect, ejecute como 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  

. luego haga como root, para python3: (recomendado)

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

. o en su lugar , haz como root, para 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) Después de instalarlo, puede ejecutarlo como un usuario sin privilegios:

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

Si todo salió bien, le pedirá la contraseña y luego mostrará:

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

Si tiene problemas para obtener este mensaje y, en su lugar, recibe varias veces seguidas, el mensaje: "Respuesta inesperada, intente nuevamente", realice el método de Firefox y Desconecte y cierre la sesión correctamente, espere un par de minutos antes de intentar snxconnectcomando de nuevo.

4) El archivo de cookies se creará en ~ / .snxcookies, después de un uso exitoso.

Después de establecer la VPN, puede consultar ip addresso ifconfigahora tiene una tunsnxinterfaz:

$ 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 routele mostrará también nuevas rutas que pasan por la tunsnxinterfaz.

5) Para cerrar / desconectar la VPN, mientras puede detener / matar snxconnect, la mejor manera oficial es emitir el comando:

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


Además, también descubrí:

  • snxconnectparece que se comporta mejor al desconectar la conexión VPN anterior y cerrar sesión en la interfaz web oficial si hay algún problema extraño (debe intentar hacerlo snx -dpara ver si produce el mismo resultado);
  • PYTHONHTTPSVERIFY = 0 solo afecta la versión de python2;
  • si la interfaz web está redirigiendo HTML a una ubicación CheckPoint secundaria, apuntando directamente a ese nombre de host redirigido, tiene mejores resultados;
  • si los certificados de los cortafuegos son autofirmados (a menudo lo son), se debe usar la opción --skip-cert, o la autenticación fallará;
  • para no tener tantos problemas para volver a autenticarse, tuve que usar --save-cookies para usar cookies de autenticación, mientras el usuario está conectado en el punto VPN remoto (tiene un tiempo de espera de x horas);
  • como se describe en la última pregunta, para que el script funcione, la opción "Al iniciar sesión en SSL Network Extender" debe cambiarse a "automáticamente";
  • 7776 / TCP en localhost tiene que ser gratuito, para snxser propietario, ya que snxconnecthabla de snxusarlo;
  • el nombre de host pasado a snxconnect/ snxse maneja como un host virtual y, como tal, no puede usar directamente la dirección IP de VPN;
  • instalar una arquitectura de 32 bits parece ser un requisito para ejecutar el snx_install.shscript;
  • puede optar por correr como python2una compensación por menos espacio, sin embargo, dado que python2 se está eliminando gradualmente, snxconnecten un futuro cercano podría no ser compatible;
  • desde el uso de la interfaz del cliente web, está claro que necesito parchear / eliminar todas las /sslvpncadenas, ya que mis URL no comienzan con /sslvpn. Verificaría tu caso particular. No tengo ni idea de si la presencia de esa cadena en el código se debe a una versión anterior, me encantaría recibir algunos comentarios;
  • en snxconnectel nombre de host de CheckPoint tiene que ser el nombre exacto que la interfaz web le muestra una vez autenticado allí, ya que es un host virtual web. De lo contrario, no logrará establecer la VPN;
  • La primera vez que snxse usa, se creará un archivo con la firma del servidor VPN / Checkpoint en/etc/snx/USER.db ;
  • Si necesita usar OTP desde la línea de comandos, debe usarlo snxconnectya que snxsolo no lo admite.
Rui F Ribeiro
fuente
En cuanto a la eliminación de cadenas '/ sslvpn'. El servidor al que me conecto lo tiene en la URL, así que no hice ese paso. Es interesante señalar esto en la respuesta, ya que puede sucederle a otras personas.
Wiley Marques
@WileyMarques Gracias por los comentarios, ya sospechaba que sería diferente para algunos, también porque en la versión github / pip la URL está allí.
Rui F Ribeiro
1
Mi VPN usa autenticación múltiple, así que descubrí que tenía que agregar -MC yesal snxconnectcomando para que funcione en mi caso. Ahora funciona como un encanto, ¡muchas gracias por esto, Rui!
Vito