fazendo com que o Checkpoint VPN SSL Network Extender funcione na linha de comando

11

A ferramenta de linha de comando oficial Checkpoint out do CheckPoint, para configurar uma VPN do SSL Network Extender, não está mais funcionando na linha de comando do Linux. Também não é mais suportado ativamente pelo CheckPoint.

No entanto, existe um projeto promissor, que tenta replicar o applet Java para autenticação, que conversa com o snxutilitário de linha de comando, chamado snxconnect.

Eu estava tentando colocar o snxconnectutilitário de texto para trabalhar no Debian Buster, fazendo:

sudo pip install snxvpn

e

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

No entanto, estava morrendo principalmente com um erro HTTP de:

HTTP/1.1 301 Moved Permanently:

ou:

Got HTTP response: HTTP/1.1 302 Found

ou:

Unexpected response, try again.

O que fazer sobre isso?

PS. O cliente oficial do EndPoint Security VPN está funcionando bem em um Mac High Sierra e no Windows 10 Pro.

Rui F Ribeiro
fonte

Respostas:

22

SNX build 800007075 a partir de 2012, usado para oferecer suporte à VPN na linha de comando. Então eu testei, e eis que ele ainda funciona com as mais recentes distribuições e kernel 4.x / 5.x.

Portanto, em última análise, minha outra resposta nesse segmento é verdadeira, se você não conseguir se apossar do SNX build 800007075 ou se essa versão específica do SNX parar de funcionar com as versões atuais do Linux (isso pode acontecer em um futuro próximo) ou se você precisar de suporte do OTP .

Atualmente, a solução está instalando esta última versão específica do SNX, que ainda suporta a VPN a partir da linha de comando.

1) Para instalar a snxcompilação 800007075, obtenha-a em:

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

Para sistemas Debian e baseados em Debian de 64 bits, como Ubuntu e Linux Mint, pode ser necessário adicionar a arquitetura de 32 bits:

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

Eu tive que instalar os seguintes pacotes de 32 bits:

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

Execute o snxscript de instalação:

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

Agora você terá um /usr/bin/snxexecutável binário de cliente de 32 bits. Verifique se está faltando alguma biblioteca dinâmica:

sudo ldd /usr/bin/snx

Você só pode prosseguir para os seguintes pontos quando todas as dependências forem satisfeitas.

Pode ser necessário executar manualmente primeiro snx -s CheckpointURLFQDN -u USER, antes de criar scripts para qualquer uso automático, para que a VPN da assinatura seja salva /etc/snx/USER.db.

2) Antes de usá-lo, você cria um ~/.snxrcarquivo com o seguinte conteúdo:

server IP_address_of_your_VPN
username YOUR_USER
reauth yes

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

Se você entende os riscos de segurança de codificar permanentemente uma senha VPN em um script, também pode usá-la como:

echo 'Password' | snx

4) Para fechar / desconectar a VPN, enquanto você pode parar / matar snx, a maneira melhor e oficial é emitir o comando:

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

consulte também problemas de configuração da ferramenta Linux Checkpoint SNX para obter alguns esclarecimentos sobre qual snxversão usar.

5) Ao automatizar o login e aceitar uma nova assinatura (e entender as implicações de segurança), escrevi um expectscript, que chamei de script snx_login.exp; não muito seguro, no entanto, você pode automatizar seu login, chamando-o com a senha 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
}

PS. Cuidadosnx não suporta OTP sozinho, você terá que usar o snxconnectscript presente na outra resposta, se estiver usando.

O PPS @gibies chamou minha atenção que, usando um etoken, o campo de senha obtém a senha do etoken e não uma senha fixa.

Rui F Ribeiro
fonte
1
Isso funciona no arch linux usando snx do repositório aur.
101818 Met:
@ De fato, encontre-o muito mais tarde ... veja o último link nesta resposta. No entanto, não tenho certeza sobre a legalidade desse AUR, fornecendo uma versão 2012 de 32 bits muito mais antiga e sem suporte do utilitário snx do Checkpoint, mesmo que você faça o download de um site de terceiros. Estou usando a mesma versão na resposta aceita, o outro é um método alternativo.
Rui F Ribeiro
@linuxatico Resposta editada para substituir o link de download antigo por um link funcional. Como foi?
Rui F Ribeiro
1
Trabalhou para mim no Ubuntu 18.04 (64 bits). Eu não executar snx -s CheckpointURLFQDN -u USERe executou-se apenas para a etapa 3.
Amil Waduwawara
@AmilWaduwawara "etapa 4" é como desconectar, e a etapa 5 é útil principalmente para pessoas com clusters de pontos de verificação que apresentam assinaturas diferentes e / quando o cluster está funcionando. Você poderia confirmar se o IPv6 está ativo ou desativado?
Rui F Ribeiro
7

Ao trabalhar para instalar a interface oficial SSL VPN Extender do Firefox na pergunta VPN SSL Network Extender no Firefox , descobri e resolvi mais algumas peças do quebra-cabeça dessa pergunta.

Aparentemente, enquanto o uso da linha de comando snxdo ponto de verificação foi descontinuado, o cliente baseado na Web, conforme descrito na postagem vinculada, ainda funciona. No entanto, existe um cliente de linha de comando python, que tenta replicar a interface Web + Java na parte superior dosnx cliente, e este post é sobre como configurá-lo para funcionar.

Em primeiro lugar, o snxvpinstalado de python pipnão funciona. Existe uma versão corrigida atualizada em https://github.com/agnis-mateuss/snxvpn , que possui alguns patches úteis, incluindo uma opção para ignorar certificados não assinados e / ou expirados e, mais interessante, sendo compatível com python2 e python3.

Além disso, todos os URLs ativados snxconnect.pydevem ser alterados de sslvpn/para ``.


Portanto, as instruções passo a passo são aproximadamente:

1) Primeiramente, instalando o snx instalação:

Se estiver na VPN, para obter o arquivo de instalação, faça:

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

Caso contrário, você precisará obtê-lo da interface da web, conforme descrito na resposta vinculada.

Para o Debian, você pode precisar de:

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

Eu tive que instalar o seguinte:

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

Execute então:

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

Agora você terá um /usr/bin/snxexecutável binário de cliente de 32 bits. Verifique se está faltando alguma biblioteca dinâmica:

sudo ldd /usr/bin/snx

Você só pode prosseguir para os seguintes pontos quando todas as dependências forem satisfeitas.

Não tenho certeza se você precisa executar primeiro snx -s CheckpointURLFQDN -u USERantes de usar snxconnect, para que a VPN da assinatura seja salva em /etc/snx/USER.db.

2) Agora temos o snxconnectutilitário python. Esse programa tenta emular a interface da web e, mais interessante, não precisa do Java para autenticar.

Portanto, para instalar e configurar snxconnect, execute 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  

. então faça 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

. ou , em vez disso , faça 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) Após a instalação, você pode executar como um usuário não privilegiado:

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

Se tudo der certo, ele solicitará a senha e exibirá:

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

Se você estiver com problemas para receber essa mensagem e, em vez disso, receber várias vezes seguidas, a mensagem: "Resposta inesperada, tente novamente.", Execute o método Firefox e Desconecte e efetue logout corretamente, aguardando alguns minutos antes de tentar o snxconnectcomando novamente.

4) O arquivo de cookie (s) será criado em ~ / .snxcookies, após um uso bem-sucedido.

Após o estabelecimento da VPN, você pode verificar ip addressou ifconfigagora possui uma 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 routemostrará também novas rotas passando pela tunsnxinterface.

5) Para fechar / desconectar a VPN, enquanto você pode parar / matar snxconnect, a maneira melhor e oficial é emitir o comando:

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


Além disso, eu também descobri:

  • snxconnectparece se comportar melhor ao desconectar a conexão VPN anterior e sair da interface da web oficial se houver algum problema estranho (tente fazer snx -dpara verificar se produz o mesmo resultado);
  • PYTHONHTTPSVERIFY = 0 afeta apenas a versão python2;
  • se a interface da web estiver fazendo um redirecionamento HTML para um local secundário do CheckPoint, apontando diretamente para esse nome de host redirecionado, obtém melhores resultados;
  • se os certificados dos firewalls são autoassinados (geralmente são), a opção --skip-cert deve ser usada ou a autenticação falhará;
  • por não ter tantos problemas para se autenticar, teve que usar --save-cookies para usar cookies de autenticação, enquanto o usuário está conectado no ponto de VPN remoto (o tempo limite é de x horas);
  • conforme descrito na última pergunta, para que o script funcione, a opção "Ao fazer logon iniciar o SSL Network Extender" deve ser alterada para "automaticamente";
  • 7776 / TCP no localhost tem que ser livre, para snxpossuir, como snxconnectfala com o snxuso;
  • o nome do host passado para snxconnect/ snxé tratado como um host virtual e, como tal, você não pode usar diretamente o endereço IP da VPN;
  • instalar uma arquitetura de 32 bits parece ser um requisito para executar o snx_install.shscript;
  • você pode optar por executar como python2uma troca por menos espaço; no entanto, como o python2 está sendo eliminado,snxconnect em um futuro próximo, talvez não seja possível;
  • ao usar a interface do cliente da Web, fica claro que preciso corrigir / excluir todas as /sslvpnstrings, pois meus URLs não começam /sslvpn. Eu verificaria seu caso particular. Não tenho absolutamente nenhuma idéia se a presença dessa cadeia no código é devido a uma versão antiga, gostaria de receber algum feedback;
  • no snxconnectnome do host do CheckPoint, deve ser o nome exato que a interface da web está mostrando, uma vez autenticado lá, pois é um host virtual da web. Caso contrário, você não conseguirá estabelecer a VPN;
  • Na primeira vez em que snxé usado, um arquivo com a assinatura do servidor VPN / ponto de verificação será criado em/etc/snx/USER.db ;
  • Se você precisar usar o OTP na linha de comando, precisará usá-lo, snxconnectpois snxsozinho não o suporta.
Rui F Ribeiro
fonte
Em relação à remoção de strings '/ sslvpn'. O servidor ao qual me conecto o possui na URL, então não fiz essa etapa. Interessante apontar isso para a resposta, pois isso pode acontecer com outras pessoas.
Wiley Marques
@WileyMarques Obrigado pelo feedback, eu já suspeitava que seria diferente para alguns, também porque na versão github / pip a URL está lá.
Rui F Ribeiro
1
Minha VPN usa autenticação múltipla, então achei que precisava adicionar -MC yesao snxconnectcomando para que ele funcionasse no meu caso. Funciona como um encanto agora, muito obrigado por isso, Rui!
Vito