faire fonctionner Checkpoint VPN SSL Network Extender dans la ligne de commande

11

L'outil de ligne de commande Checkpoint out officiel de CheckPoint, pour la configuration d'un VPN SSL Network Extender ne fonctionne plus depuis la ligne de commande Linux. Il n'est également plus activement pris en charge par CheckPoint.

Cependant, il existe un projet prometteur, qui essaie de répliquer l'applet Java pour l'authentification, qui parle avec l' snxutilitaire de ligne de commande, appelé snxconnect.

J'essayais de mettre l' snxconnectutilitaire de texte au travail dans Debian Buster, en faisant:

sudo pip install snxvpn

et

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

Cependant, il mourait principalement avec une erreur HTTP de:

HTTP/1.1 301 Moved Permanently:

ou:

Got HTTP response: HTTP/1.1 302 Found

ou:

Unexpected response, try again.

Que faire à ce sujet?

PS. Le client officiel EndPoint Security VPN fonctionne bien à la fois dans un Mac High Sierra et Windows 10 Pro.

Rui F Ribeiro
la source

Réponses:

22

SNX build 800007075 de 2012, utilisé pour prendre en charge VPN en ligne de commande. Je l'ai donc testé, et voilà, il fonctionne toujours avec les dernières distributions et les derniers noyaux 4.x / 5.x.

Donc, en fin de compte, mon autre réponse dans ce fil est vraie, si vous ne pouvez pas vous procurer la build SNX 800007075 ou si cette version spécifique de SNX cesse de fonctionner avec les versions Linux actuelles (cela pourrait arriver dans un proche avenir) ou si vous avez besoin du support OTP .

Actuellement, la solution installe alors cette dernière version spécifique de SNX qui prend toujours en charge le VPN à partir de la ligne de commande.

1) Pour installer la snxbuild 800007075, récupérez-la à partir de:

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

Pour les systèmes Debian et 64 bits basés sur Debian comme Ubuntu et Linux Mint, vous devrez peut-être ajouter l'architecture 32 bits:

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

J'ai dû installer les packages 32 bits suivants:

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

Exécutez ensuite le snxscript d'installation:

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

Vous aurez maintenant un /usr/bin/snxexécutable binaire client 32 bits. Vérifiez s'il manque des bibliothèques dynamiques avec:

sudo ldd /usr/bin/snx

Vous ne pouvez procéder aux points suivants que lorsque toutes les dépendances sont satisfaites.

Vous devrez peut-être exécuter manuellement d'abord snx -s CheckpointURLFQDN -u USER, avant de créer un script pour toute utilisation automatique, pour que la signature VPN soit enregistrée dans /etc/snx/USER.db.

2) Avant de l'utiliser, vous créez un ~/.snxrcfichier avec le contenu suivant:

server IP_address_of_your_VPN
username YOUR_USER
reauth yes

3) Pour la connexion, tapez 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 vous comprenez les risques de sécurité liés au codage en dur d'un mot de passe VPN dans un script, vous pouvez également l'utiliser comme:

echo 'Password' | snx

4) Pour fermer / déconnecter le VPN, alors que vous pouvez arrêter / tuer snx, le meilleur moyen officiel est de lancer la commande:

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

voir également les problèmes de configuration de l'outil Linux Checkpoint SNX pour obtenir des clarifications sur la snxversion à utiliser.

5) Si l'automatisation de la connexion et l'acceptation d'une nouvelle signature (et la compréhension des implications pour la sécurité), j'ai écrit un expectscript, que j'ai appelé le script snx_login.exp; pas très sécurisé, cependant vous pouvez automatiser votre connexion, en l'appelant avec le mot de passe comme argument:

#!/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. Attention snxne prend pas en charge OTP seul, vous devrez utiliser le snxconnectscript présent sur l'autre réponse si vous l'utilisez.

PPS @gibies a attiré mon attention sur le fait qu'en utilisant un etoken, le champ du mot de passe obtient le mot de passe de l'etoken et non un mot de passe fixe.

Rui F Ribeiro
la source
1
Cela fonctionne dans arch linux en utilisant snx du référentiel aur.
Rencontré
@Met en effet, retrouvez-le bien plus tard ... voir le dernier lien dans cette réponse. Néanmoins, je ne suis pas sûr de la légalité de cette AUR qui nous donne une version 2012 32 bits beaucoup plus ancienne et non prise en charge de l'utilitaire snx de Checkpoint, même si elle est téléchargée à partir d'un site tiers. J'utilise la même version dans la réponse acceptée, l'autre est une méthode alternative.
Rui F Ribeiro
@linuxatico Réponse modifiée pour remplacer l'ancien lien de téléchargement par un autre qui fonctionne. Comment c'était?
Rui F Ribeiro
1
A travaillé pour moi sur Ubuntu 18.04 (64 bits). Je n'ai pas exécuté snx -s CheckpointURLFQDN -u USERet exécuté uniquement jusqu'à l'étape 3.
Amil Waduwawara
@AmilWaduwawara "étape 4" est de savoir comment se déconnecter, et l'étape 5 est principalement utile pour les personnes avec des clusters de points de contrôle qui présentent des signatures différentes et / lorsque le cluster agit. Pourriez-vous s'il vous plaît confirmer si vous avez activé ou désactivé IPv6?
Rui F Ribeiro
7

En travaillant pour installer l'interface officielle SSL VPN Extender de Firefox dans la question VPN SSL Network Extender dans Firefox , j'ai découvert et résolu quelques pièces supplémentaires du puzzle de cette question.

Apparemment, bien que l'utilisation en ligne de commande de snxfrom checkpoint ait été interrompue, le client basé sur le Web tel que décrit dans la publication liée fonctionne toujours. Cependant, il existe un client de ligne de commande python, qui essaie de répliquer l'interface Web + Java au-dessus du snxclient, et ce message concerne sa configuration pour qu'il fonctionne.

Premièrement, l' snxvpinstallation de python pipne fonctionne pas. Il y a une version corrigée mise à jour sur https://github.com/agnis-mateuss/snxvpn , qui a quelques correctifs utiles, y compris une option pour ignorer les certificats non signés et / ou expirés, et plus intéressant, étant compatible python2 et python3.

De plus, toutes les URL sur snxconnect.pydoivent être changées de sslvpn/``.


Donc, les instructions étape par étape sont à peu près:

1) Tout d'abord, installer le snxsetup:

Si dans le VPN, pour obtenir le fichier d'installation, procédez comme suit:

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

Sinon, vous devrez l'obtenir à partir de l'interface Web, comme décrit dans la réponse liée.

Pour Debian, vous pourriez avoir besoin de:

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

J'ai dû installer ce qui suit:

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

Exécutez ensuite:

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

Vous aurez maintenant un /usr/bin/snxexécutable binaire client 32 bits. Vérifiez s'il manque des bibliothèques dynamiques avec:

sudo ldd /usr/bin/snx

Vous ne pouvez procéder aux points suivants que lorsque toutes les dépendances sont satisfaites.

Je ne sais pas si vous devez d'abord exécuter snx -s CheckpointURLFQDN -u USERavant d'utiliser snxconnect, pour que la signature VPN soit enregistrée sur /etc/snx/USER.db.

2) Nous avons maintenant l' snxconnectutilitaire python. Un tel programme essaie d'émuler l'interface Web, et plus intéressant encore, il n'a pas besoin de Java pour s'authentifier.

Donc, pour installer et configurer snxconnect, exécutez en tant que 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  

. puis faites en tant que root, pour python3: (recommandé)

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

. ou à la place , faites en tant que root, pour 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) Après l'avoir installé, vous pouvez exécuter en tant qu'utilisateur non privilégié:

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

Si tout s'est bien passé, il vous demandera le mot de passe, puis affichera:

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

Si vous rencontrez des problèmes pour obtenir ce message, et que vous obtenez à la place plusieurs fois de suite, le message: "Réponse inattendue, réessayez.", Effectuez la méthode Firefox, puis déconnectez-vous et déconnectez-vous correctement, en attendant quelques minutes avant d'essayer le snxconnectcommande à nouveau.

4) Le fichier des cookies sera créé dans ~ / .snxcookies, après une utilisation réussie.

Après avoir établi le VPN, vous pouvez vérifier avec ip addressou ifconfigvous avez maintenant une tunsnxinterface:

$ 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 routevous montrera également de nouveaux itinéraires passant par l' tunsnxinterface.

5) Pour fermer / déconnecter le VPN, alors que vous pouvez arrêter / tuer snxconnect, le meilleur moyen officiel est d'émettre la commande:

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


De plus, j'ai également découvert:

  • snxconnectsemble se comporter mieux lors de la déconnexion de la connexion VPN précédente et de la déconnexion dans l'interface Web officielle s'il y a un problème étrange (il faut essayer de le faire snx -dpour voir s'il produit le même résultat);
  • PYTHONHTTPSVERIFY = 0 affecte uniquement la version python2;
  • si l'interface Web effectue une redirection HTML vers un emplacement CheckPoint secondaire, pointant directement vers ce nom d'hôte redirigé, contient de meilleurs résultats;
  • si les certificats des pare-feu sont auto-signés (ils le sont souvent), l'option --skip-cert doit être utilisée, sinon l'authentification échouera;
  • pour ne pas avoir autant de problèmes de réauthentification, a dû utiliser --save-cookies pour utiliser les cookies d'authentification, tandis que l'utilisateur est connecté au point VPN distant (il a un délai d'expiration de x heures);
  • comme décrit dans la dernière question, pour que le script fonctionne, l'option "Lors de la connexion lancez SSL Network Extender" doit être changé en "automatiquement";
  • 7776 / TCP dans localhost doit être libre, pour snxle posséder, comme des snxconnectdiscussions avec son snxutilisation;
  • le nom d'hôte transmis à snxconnect/ snxest traité comme un hôte virtuel, et en tant que tel, vous ne pouvez pas utiliser directement l'adresse IP VPN;
  • l'installation d'une architecture 32 bits semble être une exigence pour exécuter le snx_install.shscript;
  • vous pouvez choisir de fonctionner comme python2un compromis pour moins d'espace, mais comme python2 est en cours de suppression, snxconnectdans un avenir proche, il pourrait ne pas le prendre en charge;
  • de l'utilisation de l'interface client Web, il est clair que je dois patcher / supprimer toutes les /sslvpnchaînes, car mes URL ne commencent pas par /sslvpn. Je vérifierais votre cas particulier. Je n'ai absolument aucune idée si la présence de cette chaîne dans le code est due à une ancienne version, j'aimerais avoir des commentaires;
  • dans snxconnectle nom d'hôte CheckPoint doit être le nom exact que l'interface Web vous montre une fois authentifié, car il s'agit d'un hôte virtuel Web. Sinon, vous ne réussirez pas à établir le VPN;
  • Lors de la première snxutilisation, un fichier avec la signature du serveur VPN / Checkpoint sera créé à /etc/snx/USER.db;
  • Si vous devez utiliser OTP à partir de la ligne de commande, vous devez utiliser snxconnectcomme snxseul ne le prend pas en charge.
Rui F Ribeiro
la source
Concernant la suppression des chaînes '/ sslvpn'. Le serveur auquel je me connecte l'a sur l'URL, donc je n'ai pas fait cette étape. Intéressant de pointer cela sur la réponse, car cela peut arriver à d'autres personnes.
Wiley Marques
@WileyMarques Merci pour les commentaires, je soupçonnais déjà que ce serait différent pour certains, aussi parce que dans la version github / pip l'URL est là.
Rui F Ribeiro
1
Mon VPN utilise la multi-authentification, j'ai donc trouvé que je devais ajouter -MC yesà la snxconnectcommande pour qu'elle fonctionne dans mon cas. Fonctionne comme un charme maintenant, merci beaucoup pour cela, Rui!
Vito