Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 9 Next »

Описание стенда

Операционная система сервера = Ubuntu 20.04

Доменное имя сервера = server.astradomain.ad

Операционная система клиента = Ubuntu 20.04

Имя VPN клиента = user

Настройка сервера

Установка пакетов для работы

За основу инструкции по настройке сервера была взята следующая инструкция.

В первую очередь поставим все необходимые пакеты для работы:

Установка пакетов
sudo apt update
# пакеты для работы strongSwan VPN сервера
sudo apt-get install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins

# пакеты для работы со смарт-картами и токенами (чтобы создать ключевую пару и сертификаты на Рутокене)
sudo apt install opensc libengine-pkcs11-openssl1.1

Генерация ключевых пар и сертификатов УЦ и сервера:

Создание ключевых пар и сертификатов УЦ и сервера
# инициализируем директорию для хранения ключей и сертификатов
mkdir -p ~/pki/{cacerts,certs,private}
chmod 700 ~/pki

# создание ключевой пары УЦ
pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem
# создание корневого сертификата
pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
    --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem

# создание ключевой пары сервера
pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem
# получение сертификата сервера
# обратите внимание, что аргументы --dn и --san нужно будет заменить на свои
pki --pub --in ~/pki/private/server-key.pem --type rsa \
    | pki --issue --lifetime 1825 \
        --cacert ~/pki/cacerts/ca-cert.pem \
        --cakey ~/pki/private/ca-key.pem \
        --dn "CN=server.astradomomain.ad" --san server.astradomain.ad  \
        --flag serverAuth --flag ikeIntermediate --outform pem \
    >  ~/pki/certs/server-cert.pem

# копируем полученные сертификаты в директорию strongSwan
sudo cp -r ~/pki/* /etc/ipsec.d/


Настройка strongSwan

Сохраним предыдущую конфигурацию:

Резервная копия предыдущей конфигурации
sudo mv /etc/ipsec.conf{,.original}


Откроем файл /etc/ipsec.conf и вставим туда следующее содержимое:

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any

# доменное имя сервера нужно будет заменить на свое
    leftid=@server.astradomain.ad

    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any

# активация аутентификации по сертификатам
    rightauth=eap-tls

    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!


Укажем какой ключ использовать серверу для аутентификации себя клиенту /etc/ipsec.secrets:

/etc/ipsec.secrets
: RSA "server-key.pem"


Настройка firewall

Настройка firewall
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw allow 500,4500/udp


Узнаем имя интерфейса, к которому подключен сервер. Данное имя нам потребуется при настройке firewall. Это можно сделать с помощью команды:

Узнаем имя интерфейса
ip route show default
# вывод данной команды будет примерно следующим:
# default via your_server_ip dev eth0 proto static
# Имя интерфейса -- eth0


Добавим в файл настроек firewall /etc/ufw/before.rules следующие строки:

/etc/ufw/before.rules
# Добавим этот блок
# Не забудьте поменять имя интерфейса
*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT

# Добавим этот блок
# Не забудьте поменять имя интерфейса
*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT

# Этот блок остается без изменений
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]

# Добавим этот блок
-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT


Добавим в файл /etc/ufw/sysctl.conf следующие строки:

/etc/ufw/sysctl.conf
net/ipv4/ip_forward=1
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0
net/ipv4/ip_no_pmtu_disc=1


Перезагрузка firewall

Перезагрузка firewall
sudo ufw disable
sudo ufw enable

Запуск VPN сервера

Запуск сервера
sudo systemctl restart strongswan-starter

Проверить, что сервер поднялся успешно, можно, например, с помощью команды:

Проверка запуска сервера
sudo systemctl status strongswan-starter

Добавление нового клиента со смарт-картой

Модуль pkcs11 для работы со смарт-картами

В настоящий момент смарт-карта отформатированная для работы с librtpkcs11ecp.so модулем не подходит для аутентификации внутри VPN strongSwan, т.к. не поддерживает необходимые PKCS#11-механизмы. 

К счастью, модуль opensc-pkcs11.so их поддерживает.


Отформатируем смарт-карту, сгенерируем на ней ключи и  получим сертификат.

Подготовка смарт-карты
# форматирование и инициализация
pkcs15-init --erase-card -p rutoken_ecp
pkcs15-init --create-pkcs15 --so-pin "87654321" --so-puk ""
pkcs15-init --store-pin --label "User PIN" --auth-id 02 --pin "12345678" --puk "" --so-pin "87654321" --finalize

# генерация ключей
ID=45
pkcs15-init -G rsa/2048 --auth-id 02 --label "My Private Key" --public-key-label "My Public Key" --id $ID

# генерация заявки на сертификат
openssl
> engine dynamic -pre SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:opensc-pkcs11.so
# не забудьте заменить идентификатор сертификата
> req -engine pkcs11 -new -key 45 -keyform engine -out req.csr -subj "/C=RU/CN=user"
> exit

# выдадим сертификат по заявке
pki --issue --lifetime 1825 \
        --cacert ~/pki/cacerts/ca-cert.pem \
        --cakey ~/pki/private/ca-key.pem \
        --in req.csr --type pkcs10 --outform pem \
    >  ~/pki/certs/client-cert.pem

# загрузим сертификат на токен
pkcs15-init --store-certificate ~/pki/certs/client-cert.pem --auth-id 02 --id $ID --format pem


Убедиться, что сертификат и ключи загружены на токен можно с помощью команды:

проверка
pkcs11-tool -O -l


Теперь Рутокен готов к работе и его можно отдать клиенту.

Настройка клиента

Проверка доступности сервера

Проверим, что сервер доступен. 

проверка доступности сервера
ping server.astradomain.ad


Установка пакетов

Установим необходимые пакеты для работы:

Установка пакетов
sudo apt update
# пакеты для работы strongSwan VPN сервера
sudo apt-get install strongswan libstrongswan-extra-plugins  libcharon-extra-plugins

# пакеты для работы со смарт-картами (чтобы создать ключевую пару и сертификаты на токене)
sudo apt install opensc libengine-pkcs11-openssl1.1


Настройка strongSwan

Корневой сертификат сервера положим в директорию /etc/ipsec.d/cacerts:

Установка корневого сертификата
sudo cp /path/to/ca-cert.pem /etc/ipsec.d/cacerts


Настроим файл конфигурации strongSwan /etc/ipsec.conf:

/etc/ipsec.conf
config setup

conn ikev2-rw
# измените адрес сервера на свой
    right=server.astradomain.ad
    rightid=@server.astradomain.ad

    rightsubnet=0.0.0.0/0
    rightauth=pubkey
    leftsourceip=%config
# имя пользователя для которого выдан сертификат
    leftid=user
    leftcert=%smartcard:45
    leftauth=eap
    eap_identity=%identity
    auto=start


Настроим файл паролей аутентфикации strongSwan /etc/ipsec.secrets и укажем, какой ключ нужно использовать для аутентификации по смарт-карте:

/etc/ipsec.secrets
# Формат следующий
#: PIN %smartcard:<keyid> <pin code>
: PIN %smartcard:45 "12345678"

Более подробно о способах задания паролей смарт-карт можно почитать здесь.

Настройка модуля pkcs11

Настроим использование pkcs11 модулей в strongSwan. Для этого откроем файл конфигурации /etc/strongswan.d/charon/pkcs11.conf и отредактируем настройки модулей pkcs11:

/etc/strongswan.d/charon/pkcs11.conf
modules {

        opensc-pkcs11 {

            # Whether to automatically load certificates from tokens.
            # load_certs = yes

            # Whether OS locking should be enabled for this module.
            # os_locking = no

            # Full path to the shared object file of this PKCS#11 module.
            path = /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so

        }

Подключение к сети

Подключите смарт-карту и инициализируйте подключение c помощью команды:

Подключение к сети VPN
sudo systemctl stop strongswan-starter
sudo systemctl start strongswan-starter

Проверить, что соединение прошло успешно, можно, например, выведя список своих ip адресов С помощью команды:

Проверка успешности подключения
ip addr show

Среди них появится ваш виртуальный ip:

  • No labels