заставить Checkpoint VPN SSL Network Extender работать в командной строке

11

Официальный инструмент командной строки Checkpoint out от CheckPoint для настройки SSL Network Extender VPN больше не работает из командной строки 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.

Руи Ф Рибейро
источник

Ответы:

22

SNX build 800007075 от 2012 года, используется для поддержки 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

Для 64-разрядных систем Debian и Debian, таких как Ubuntu и Linux Mint, вам может потребоваться добавить 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 с использованием snx из репозитория aur.
Встречался
@ Действительно, найди это намного позже ... см. Последнюю ссылку в этом ответе. Тем не менее, мы не уверены в правомерности того, что AUR предоставляет нам более старую и неподдерживаемую 32-битную версию 2012 года утилиты Checkpoint snx, даже если ее скачивают со стороннего сайта. Я использую ту же версию в принятом ответе, другой - альтернативный метод.
Руи Ф Рибейро
@linuxatico Ответ отредактирован, чтобы заменить старую ссылку для скачивания на рабочую. Как прошло?
Руи Ф. Рибейро
1
Работал у меня на Ubuntu 18.04 (64-битная версия). Я не казнил snx -s CheckpointURLFQDN -u USERи выполнил только до шага 3.
Амил Вадувавара
@AmilWaduwawara «шаг 4» - это способ отключения, а шаг 5 в основном полезен для людей с кластерами контрольных точек, которые представляют разные подписи и / или когда кластер работает. Не могли бы вы подтвердить, активен ли у вас IPv6 или нет?
Руи Ф. Рибейро
7

При работе по установке Firefox официальный интерфейс SSL VPN Extender в вопросе VPN SSL Network Extender в Firefox , я обнаружил и решил еще несколько частей головоломки этого вопроса.

Очевидно, что хотя использование командной строки snxиз контрольной точки было прекращено, веб-клиент, как описано в связанном посте, все еще работает. Однако есть клиент командной строки python, который пытается реплицировать интерфейс Web + Java поверхsnx клиента, и этот пост посвящен настройке его работы.

Во-первых, snxvpустановленное из python pipне работает. На https://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 

В противном случае вам придется получить его из веб-интерфейса, как описано в связанном ответе.

Для 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, чтобы подпись VPN была сохранена на/etc/snx/USER.db .

2) Теперь у нас есть snxconnect утилита python. Такая программа пытается эмулировать веб-интерфейс, и что более интересно, ей не требуется 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

, или вместо этого сделайте от имени root для 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-подключения и выходе из официального веб-интерфейса, если есть какая-то странная проблема (попробуйте сделать, snx -dчтобы увидеть, если он дает тот же результат);
  • PYTHONHTTPSVERIFY = 0 влияет только на версию python2;
  • если веб-интерфейс выполняет перенаправление HTML во вторичное местоположение CheckPoint, указывающее непосредственно на это перенаправленное имя хоста, содержит лучшие результаты;
  • если сертификаты брандмауэров являются самозаверяющими (часто таковыми являются), необходимо использовать параметр --skip-cert, иначе аутентификация не удастся;
  • из-за того, что не было слишком много проблем с повторной аутентификацией, пришлось использовать --save-cookies для использования куки аутентификации, когда пользователь вошел в систему в удаленной точке VPN (время ожидания x часов);
  • как описано в последнем вопросе, чтобы скрипт работал, параметр «При входе в систему запуска SSL Network Extender» должен быть изменен на «автоматически»;
  • 7776 / TCP в localhost должен быть свободным, snxчтобы владеть им, как snxconnectговорит с snxним;
  • имя хоста, переданное snxconnect/ snxобрабатывается как виртуальный хост, и поэтому вы не можете напрямую использовать IP-адрес VPN;
  • установка 32-битной архитектуры является обязательным требованием для запуска snx_install.shскрипта;
  • вы можете использовать его в python2качестве компромисса для меньшего пространства, однако, поскольку python2 постепенно сокращается,snxconnect в ближайшем будущем он может его не поддерживать;
  • из использования интерфейса веб-клиента становится ясно, что мне нужно исправить / удалить все /sslvpnстроки, поскольку мои URL-адреса не начинаются с /sslvpn. Я бы проверил ваш конкретный случай. Я абсолютно не знаю, связано ли наличие этой строки в коде со старой версией, хотелось бы получить обратную связь;
  • в snxconnectимени хоста CheckPoint должно быть точное имя, которое веб-интерфейс показывает вам после аутентификации, поскольку это веб-виртуальный хост. В противном случае вам не удастся установить VPN;
  • При первом snxиспользовании файл с подписью сервера VPN / Checkpoint будет создан по адресу/etc/snx/USER.db ;
  • Если вам нужно использовать OTP из командной строки, вы должны использовать snxconnectкак snxодин, не поддерживает его.
Руи Ф Рибейро
источник
Относительно удаления строк '/ sslvpn'. На сервере, к которому я подключаюсь, он указан в URL, поэтому я этого не сделал. Интересно указать это на ответ, так как это может случиться с другими людьми.
Wiley Marques
@WileyMarques Спасибо за отзыв, я уже подозревал, что для некоторых он будет другим, также потому что в версии github / pip URL есть.
Руи Ф. Рибейро
1
Мой VPN использует multiauthentication, так что я нашел , что я должен был добавить -MC yesк snxconnectкоманде , чтобы получить его на работу в моем случае. Работает как шарм сейчас, большое спасибо за это, Руи!
Вито