Настройка VPN (PPTP) в Ubuntu 17.10 с авторизацией по смарт-карте JaCarta

    В операционных системах семейства Windows настроить доступ по VPN c использованием смарт-карт – достаточное простое и тривиальное дело. Хотя, господа из MS явно сломали эту возможность в ОС Windows 10 версия 1709 сборка 16299.15.

    При попытке подключиться к VPN серверу по протоколу pptp с использованием смарт-карты, ОС Windows просто закрывает данное окно без каких-либо ошибок, даже не спрашивая пароль от смарт-карты.

    «Надо было ставить Linux!!!», скажут многие, и, может быть, будут правы.

    В статье мы рассмотрим, как настроить подключение к удаленному серверу по VPN с использованием авторизации по смарт-карте JaCarta.

    В качестве операционной системы была выбрана ОС Ubuntu 17.04 x64 Desktop. К сожалению, быстрым способом завести на Debian 9 у меня не получилось, но это повод написать следующую статью под Debian.

    $ uname –a
    Linux VPN-PPTP 4.13.0-16-generic #19-Ubuntu SMP Wed Oct 11 18:35:14 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

    1. Далее ставим необходимые нам пакеты

    $ sudo apt update
    $ sudo apt install opensc libpcsclite1 pcsc-tools pcscd libengine-pkcs11-openssl ppp pptp-linux

    *pptp version 1.9.0

    Помимо пакетов из стандартного репозитория нам необходимы драйвера и библиотеки для нашей смарт-карты.

    Скачиваем

    $ mkdir ~/tmp
    $ cd ~/tmp
    $ wget  https://www.aladdin-rd.ru/support/downloads/279f1310-d83d-4858-ba13-ecdbe0d37530/get
    

    Распаковываем архив

    $ unzip get
    $ cd JaCarta_PKI_Linux/IDProtect\ Client\ 6.37.03/DEB/
    $ ls 
    
    idprotectclient_637.03-0_amd64.deb 
    idprotectclient_637.03-0_i386.deb  
    idprotectclientlib_637.03-0_amd64.deb

    Устанавливаем необходимые драйверы и библиотеки.

    Для 64bit систем:

    $ sudo dpkg -i idprotectclient_637.03-0_amd64.deb
    $ sudo dpkg –i idprotectclientlib_637.03-0_amd64.deb

    Для 32bit систем:

    $ sudo dpkg -i idprotectclient_637.03-0_i386.deb

    2. Предварительные операции завершены. Теперь сама настройка VPN.

    2.1. Для начала нам необходимо проверить, увидела ли система нашу смарт-карту. Вставляем карточку JaСarta в USB-порт компьютера и выполняем команду

    $ pkcs11-tool --module /lib64/libASEP11.so -L

    После чего должно появиться примерно следующее:

    [TEXT]
    Available slots:
    Slot 0 (0x0): Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00
      token label       	: ISadykov
      token manufacturer 	: Aladdin R.D.
      token model       	: JaCarta Laser
      token flags        	: login required, rng, token initialized, PIN initialized
      hardware version   	: 1.0
      firmware version   	: 1.0
      serial num 		: 4E46001220483933
      pin min/max		: 4/16


    2.2. Для создания конфигурационного файла нам будут необходимы идентификаторы ключа и сертификата с токена. Для этого вводим команду

    $ pkcs11-tool --module /lib64/libASEP11.so -l –O

    после ввода пин-кода, надо будет запомнить значения из полей ID:

    Using slot 0 with a present token (0x0)
    Logging in to "ISadykov".
    Please enter User PIN: 
    Certificate Object; type = X.509 cert
      label:      le-AladdinJacartaUser-1e321881-0e-59035
      ID:         xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    Private Key Object; RSA 
      label:      le-AladdinJacartaUser-1e321881-0e-59035
      ID:         xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      Usage:      decrypt, sign


    2.3. Получаем root сертификат организации в формате .pem из сертификата формата .cer в кодировке DER.

    $ openssl x509 -inform der -in ./root_certificate.cer -out ./root_certificate.pem

    2.4. Создаём файл /etc/ppp/openssl.cnf со следующим содержанием:

    $ sudo nano /etc/ppp/openssl.cnf
    openssl_conf = openssl_def
    [ openssl_def ]
    engines = engine_section
    [ engine_section ]
    pkcs11 = pkcs11_section
    [ pkcs11_section ]
    engine_id = pkcs11
    dynamic_path = /usr/lib/x86_64-linux-gnu/openssl-1.0.2/engines/pkcs11.so
    MODULE_PATH = /lib64/libASEP11.so
    init = 0

    2.5. Необходимо разрешить аутентификацию EAP-TLS, закомментировав в файле /etc/ppp/options.pptp строчку refuse-eap

    $ sudo nano /etc/ppp/options.pptp

    # refuse-eap

    2.6. Создаем файл с параметрами подключения /etc/ppp/peers/any-peer-name, в качестве параметра «UserName» указать свой доменный логин, далее в качестве параметра «ca» указать путь до сконвертированного корневого сертификата в формате PEM, в качестве параметров «cert» и «key» указать сохраненные идентификаторы ключа и сертификата с префиксом «pkcs11:»

    pty "pptp ***.aladdin-rd.ru --nolaunchpppd" 	
    name isadykov 				# Имя пользователя (может быть DOMAIN\\username)
    remotename ***.aladdin-rd.ru			# имя сервера подключения
    require-mppe-128
    file /etc/ppp/options.pptp
    ipparam any-peer-name
    need-peer-eap
    updetach
    usepeerdns
    defaultroute
    replacedefaultroute
    ca /path/to/root_certificate.pem		# путь до root.pem
    cert pkcs11:xxxxxxxxxxxxxxxxxxxxxxxxxx	# certificate ID
    key pkcs11:xxxxxxxxxxxxxxxxxxxxxxxxxx	# key ID

    3.Установка соединения:

    $ sudo pon any-peer-name

    Разрыв соединения:

    $ sudo poff any-peer-name

    Включение отладочного вывода в процессе установки соединения:

    $ sudo pon klvpn debug dump logfd 2


    ПРИЛОЖЕНИЕ:

    Инструкция основана на документе.
    Аладдин Р.Д. 67,55
    Информационная безопасность
    Поделиться публикацией
    Комментарии 4
    • –1
      Согласен с вами. Это только первая статья из цикла статей по настройке VPN с авторизацией по смарт-карте JaCarta. В следующих — будет OpenVPN + EAP +RADIUS, а также IPSEC
      • +2
        Спасибо за статью. Однако, возникает вопрос: чем обоснован выбор PPTP? Насколько я знаю это весьма уязвимый протокол. Лучшим решением видится IPSEC + EAP + RADIUS.
        Ну или хотя бы заворачивание PPTP внутрь IPSEC.
        • 0
          1. Закрытый ключ на токене неизвлекаемый?
          2. Возможно ли использование токенов etoken/rutoken?
          3. Возможно ли использование токена для подключений SSH с помощью putty(мануалы с использованием расширения для Firefox уже устарели)

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое