- HowTo: Подключение к Cisco VPN с использованием Aladdin eToken в Linux (Ubuntu)
- Набор программ
- Установка клиента eToken
- Установка и настройка GnuTLS
- Чтение данных токена
- Наконец-то OpenConnect
- Послесловие
- How to set up the Cisco VPN client on a Linux computer
- Contents
- Updates
- Introduction
- Installing the VPN client
- If you’re receiving errors during installation
- Most common error
- 64-bit operating system errors
- CFLAGS / EXTRA_CFLAGS error
- Configuring the VPN Client
- VPN service still does not start automatically after rebooting
- Connecting to the VPN Host
- If you are unable to connect without superuser privileges
- If you are unable to browse the internet, check email, etc. after connecting to the VPN
- Additional LAN access issues due to Firestarter firewall
- vpnc Integration with Network Manager in Ubuntu 9.04
HowTo: Подключение к Cisco VPN с использованием Aladdin eToken в Linux (Ubuntu)
Сравнительно недавно я решил перевести домашний компьютер с Windows на Linux. То есть идея такая бродила уже некоторое время, подогреваемая новостями с фронтов борьбы с добровольно-принудительной установкой Windows 10 и размышлениями о неизбежном устаревании «семерки» следом за XP, а вот поводом взяться за дело стал выход очередного LTS-релиза Ubuntu. При этом основным мотивом такого перехода я назову простое любопытство: домашний компьютер используется в основном для развлечений, ну а знакомство с новой ОС — развлечение не хуже прочих. Причем развлечение, как мне кажется, полезное в плане расширения кругозора. Дистрибутив же от Canonical был выбран просто как наиболее популярный: считаю при первом знакомстве с системой это немаловажным подспорьем.
Довольно быстро я на собственном опыте убедился, что для котиков и кино Ubuntu вполне подходит. Но, поскольку компьютер используется еще и для удаленной работы, для отказа от Windows не хватало настроенного подключения к Cisco VPN c авторизацией по eToken.
Набор программ
Было ясно, что для подключения понадобятся по меньшей мере драйвер токена и некий VPN-клиент. В результате поисков в сети получился такой список:
- OpenConnect — VPN-клиент, «совершенно случайно» совместимый с серверами Cisco «AnyConnect»
- GnuTLS — свободная реализация протоколов TLS и SSL. Что важно, в состав этой библиотеки входит утилита p11tool для работы со смарт-картами
- SafeNet Authentication Client — набор драйверов и дополнительных утилит, обеспечивающий работу с электронными ключами eToken
Поскольку для установки соединения OpenConnect-у требуется URL сертификата клиента, который можно узнать с помощью утилиты p11tool, и обеим программам требуется драйвер для работы со смарт-картой — с установки этого драйвера и начнем.
Установка клиента eToken
Как резонно замечено в статье про настройку eToken в Ubuntu 12.04, ссылка на SafeNet Authentication Client почти секретная. Но в то же время на просторах интернета нашлась более свежая заметка про аналогичные танцы с бубном уже в 14.04, причем с живой ссылкой на дистрибутив где-то в бразильском филиале SafeNet. Что еще интереснее, на том же сервере есть файл с актуальной версией клиента — 9.1, которая, ура-ура, не требует устаревших библиотек. Правильный же способ получения клиента — конечно обратиться к поставщику вашего ключа.
На текущий момент пакет SafenetAuthenticationClient-9.1.7-0_amd64.deb ( или SafenetAuthenticationClient-9.1.7-0_i386.deb для 32-битных систем ) элементарно ставится двойным щелчком по нему в файловом менеджере. Но во время начала работы над этим материалом еще не была исправлена ошибка в Ubuntu Software, из-за которой не работала установка сторонних пакетов. Поэтому была написана
При успешной установке в меню Applications появляется приложение SafeNet Authentication Client Tools.
Установка и настройка GnuTLS
Дело в том, что в определенный момент я совершенно застрял, не понимая, почему токен из родного клиента виден, а через p11tool — нет. И именно отсюда я понял, где же лежит собственно драйвер. Зная путь к драйверу, ставим и настраиваем GnuTLS по инструкции.
Теперь с токеном смогут работать любые приложения, использующие GnuTLS. А мы сможем воспользоваться утилитой p11tool для выяснения URL-а нашего сертификата.
Чтение данных токена
Вывести список имеющихся в токене сертификатов можно следующей командой:
Вывод p11tool выглядит примерно так:
Object 0:
URL: pkcs11:model=eToken;manufacturer=SafeNet%2c%20Inc.;serial=99999999;token=Username;id=%XX%XX;object=%7bXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX%7d;type=cert
Type: X.509 Certificate
Label:
ID: XX:XX
Object 1:…
Сертификатов может быть несколько, а для подключения требуется один конкретный. В инструкции по p11tool от OpenConnect в такой ситуации предлагают попробовать каждый. Я же для сопоставления сертификата с его URL составил небольшой скрипт, который выводит как URL, так и текстовые данные каждого сертификата:
Здесь в цикле по URL-ам объектов p11tool —info выводит данные сертификата в своем представлении, а p11tool —export передает сертификат в формате pem-файла на вход openssl, который и выводит текстовое представление. Для передачи в OpenConnect нам нужен тот, где найдется строка Client Authentication — запоминаем его URL. Кроме того, если сервер использует самоподписанный сертификат, запоминаем еще и URL объекта с флагом CKA_CERTIFICATE_CATEGORY=CA.
Экспортируем сертификат удостоверяющего центра в файл (весь URL не обязателен — лишь бы он однозначно определял объект):
Наконец-то OpenConnect
Минимальный набор аргументов для подключения приведен в следующей команде:
Если сервер использует самоподписанный сертификат, при запуске в таком виде OpenConnect уточнит, доверяем ли мы серверу, и к тому же будет занято окно терминала. Поэтому слегка расширим команду:
С помощью cafile мы указали сертификат удостоверяющего центра — теперь не будет вопроса относительно доверия серверу. Опция background говорит сама за себя, а pid-file позволяет указать имя файла, в котором сохранится идентификатор фонового процесса. Кроме того, пароль токена может быть указан прямо в URL с помощью атрибута pin-value. Но это несколько… небезопасно.
Останавливать фоновый процесс правильно следующей командой:
По сообщению SIGINT OpenConnect корректно завершает соединение, а если разорвать соединение «жестко», могут быть проблемы при следующем подключении. Хотя у меня не было.
Послесловие
Задача решена, и я радостно пользуюсь для удаленного доступа приложением Remmina, которое запускаю сразу при подключении к vpn, добавив в скрипт запуска OpenConnect команду:
Правда, пришлось отключить синхронизацию буфера обмена: иначе на удаленной машине он в некоторых приложениях не работает; и включить настройку «Disable tray icon»: в противном случае при каждом подключении в трей добавляется новая иконка. Опять же, переход в домашнюю директорию перед вызовом Remmina неспроста: приложение почету-то не видит путь , а задавать полный путь с именем пользователя мне кажется неправильным.
Выводов относительно применимости Linux дома делать не буду — мне пока хватает, а статья задумана именно как HowTo.
P.S.: На окончательный выбор версии Ubuntu повлияло именно решение данной задачи: в пятой, включенной в Ubuntu 14.04, версии OpenConnect обнаружилась ошибка, мешавшая установке соединения. Вот ради лишенной той ошибки седьмой версии OpenConnect я и поставил возможно еще сырую 16.04.
EDIT: в Ubuntu 19.04 обновилась версия libcrypto и даже драйвер, поставляемый с 10 версией SafeNet, не находит данную библиотеку. Спасаемся симлинком
sudo ln -s /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 /usr/lib/libcrypto.so
Еще раз ссылки на использованные материалы:
Источник
How to set up the Cisco VPN client on a Linux computer
Contents
Updates
4/28/09 — This guide has been around in different forms for nearly two years and has generated a good deal of interest. The basic steps are still exactly the same, but many of the compilation errors listed in the subsections have been resolved in newer versions of the Cisco VPN client (v4.8.02.0030) and Linux kernel (2.6.28). I’m still actively updating this site for my own sake, so please contact me (William Cash) with any mistakes or suggestions.
4/29/09 — Added a section on vpnc in Ubuntu, because I now feel that it’s integrated into the OS well-enough to be superior to the Cisco VPN client.
Introduction
Cisco VPN is required to connect to many of Stanford’s computer resources because of some past security lapses. Unlike the Windows and Mac OS clients, Cisco’s Linux VPN requires use of the terminal and comparatively little documentation from the company. This guide will show you how to install and use the Linux client. In addition, it addresses some of the most common problems encountered during this problem.
As an alternative to using the Cisco VPN client, vpnc is an open-source program available on many *NIX systems that is compatible with Cisco VPNs. A general guide for vpnc is not included here. However, instructions for using it with Ubuntu’s Network Manager are discussed at the end of this document. This is a more elegant and useful way to connect to Cisco VPNs, and I encourage Ubuntu users to try this before they install the Cisco VPN client.
Installing the VPN client
Note: most of the following steps require superuser access.
- Download the v4.8 VPN client from http://vpn.stanford.edu.
- Extract the downloaded file.
- Answer the following questions during the installation (the defaults should be fine)
- Note that you need to reinstall the VPN client whenever your kernel is upgraded. Before reinstalling it, first run:
- to clean files and directories previously installed.
If you’re receiving errors during installation
Most common error
With the newer Linux kernels that are incompatible with the Cisco VPN you may receive an errors similiar to these:
This is a fairly well known problem with numerous websites and forum postings on the topic. The website http://projects.tuxx-home.at has been releasing patches for the installation files of the Cisco VPN client for all the latest Linux kernels.
Instead of using the VPN client provided by Stanford, download the latest one from there (currently v4.8.02.0030) and the patch file for the linux kernel you are running. Update: Stanford has finally decided to upgrade its download to v4.8.02.0030 , as well. If you aren’t sure which you have run:
Assuming you’ve already performed steps 1-2 of installation procedure for the new client, you will now place your patch file in the vpnclient directory and patch the installation:
Then follow steps 3 and 4 as before.
64-bit operating system errors
If you are still receiving errors after using the previous patch and are using a 64-bit OS, you should also patch the installer with cisco_skbuff_offset.patch from http://projects.tuxx-home.at.
Then follow steps 3 and 4 as before.
CFLAGS / EXTRA_CFLAGS error
Finally, if you’ve tried the last two patches and are receiving the following error when compiling:
you need to do exactly what the compiler error is telling you and change CFLAGS to EXTRA_CFLAGS in the makefile. First, open the file Makefile in the installer directory with your preferred text editor.
Then, change CFLAGS to EXTRA_CFLAGS in line 15. The line should read:
Now try compiling once more.
Configuring the VPN Client
Note: As an alternative to the steps below, Stanford now provides a working configuration file that can simply be placed in the Profile directory (/etc/opt/cisco-vpnclient/Profiles). A line to store your user name can be added to the profile (see Step 2). This profile is not included in the supplied VPN client and must be downloaded separately from http://vpn.stanford.edu.
- A sample configuration file is: /etc/opt/cisco-vpnclient/Profiles/sample.pcf.
- Copy and edit the configuration file.
- The edited configuration file should look similar to this:
- Note that VPN service will be started automatically at boot time. If you want to stop VPN service, use the option stop instead. Also, You may use status, restart or reload in addition to start and stop.
- For a detailed description of each keyword in configuration file, refer to Cisco’s guide.
VPN service still does not start automatically after rebooting
If you issued the previously mentioned command to start the VPN service at boot but are receiving the error message:
after rebooting, your operating system is not actually starting the service. A temporary, but somewhat annoying fix, is to continue issuing the command:
each time you reboot the system. To actually remedy the problem, you need to create symbolic links for the VPN client at different run-levels. The Cisco VPN client, only creates one in runlevel 4, but many Linux OS’s don’t run at this level. For example, Ubuntu commonly uses runlevel 2. To have the client start at boot for runlevel 2, issue the command:
To have the client run at a different runlevel boot simply replace rc2 in the previous command with the appropriate number. If you are unsure which runlevel to choose, you could place links in all seven.
Connecting to the VPN Host
- Once the VPN client service starts, you are ready to connect to the VPN Concentrator. Enter the group password and your SUNet ID/Pass to activate the connection. The group password is given in the file REAME-Stanford. Note: If you don’t want to keep entering that terrible group password, you can store it under GroupPwd= in the configuration file. The first time the client connects with the host it will remove the plain-text password and replace it with an encrypted one under enc_GroupPwd=.
- Press ctrl + z and type bg to run vpnclient in the background. Now you can do ssh or scp to other machines.
- To disconnect, type:
If you are unable to connect without superuser privileges
When trying to connect to the VPN host as a regular user you may encounter the following error:
This is because you don’t have the correct privileges to read the profile file.
To change its permissions run:
as the superuser. If you are still not able to use the VPN without being root, type:
If you are unable to browse the internet, check email, etc. after connecting to the VPN
Another common problem with the Cisco VPN client for linux is that it disables your local LAN access once you connect to the host, even if the host is not set to disable local LAN access. This can be remedied with the override-local-lan-access.diff patch from projects.tuxx-home.at. You will first have to uninstall your VPN client and move the patch to vpnclient source code directory. If you had to use the aforementioned kernel patch, apply that first. Then apply the LAN access patch and install as usual.
Additional LAN access issues due to Firestarter firewall
Firestarter is a popular desktop firewall tool used by many Linux users. However, it can also restrict internet access when the Cisco VPN is active. A quick temporary fix is to open the Firestarter utility and simply stop the firewall. A safer and permanent fix is to add the following code to /etc/firestarter/user-pre (for many users this file will be empty beforehand):
Where xxx.xxx.xxx.xxx is the IP address of the VPN server (you can find this from the Server Address given when starting the VPN), and cipsec0 is the common name for the VPN network device on your computer. You can verify if cipsec0 is the correct name by running:
ifconfig will also display the names of your network and/or wireless cards.
For the changes to take effect, you will need to restart the firewall by running:
vpnc Integration with Network Manager in Ubuntu 9.04
Ubuntu’s Network Manager is the way Ubuntu organizes all your wired and wireless networks. It’s the icon in the task bar you’re always clicking to view all the available wifi signals, because it always seems to connect to the wrong network. It used to suck (e.g. 7.04), but it has improved greatly in recent releases. In version 9.04, I finally feel that it is reliable enough to warrant a section in this guide — especially since more of us at Stanford seem to be using Ubuntu these days.
- To allow Network Manager to manage your Cisco VPN connection you will first need to install the vpnc plugin. You will need to get the packages network-manager-vpnc and vpnc from the Ubuntu repositories using either the Synaptic Package Manager or apt-get. If this is over your head, you can also find it in Add/Remove Programs if you search for ‘vpnc’ in all available applications.
- Click the Network Manager icon in your task bar and there should now be an option labeled «VPN Connections». Expand this option and select Configure VPN, as shown below (my desktop and task bar probably look different than yours because I was on my netbook).
Источник