Product SiteDocumentation Site

Глава 84. Создание защищенных VPN-туннелей, использующих контроль заголовков IP-пакетов в соответствии с ГОСТ Р 34.12-2015

84.1. Настройка в командной строке
84.1.1. Создание ключей для OpenVPN-туннеля средствами утилиты openssl
84.1.2. Настройка сервера OpenVPN
84.1.3. Настройка VPN-подключения по протоколу OpenVPN в Network Manager

Примечание

Для возможности использования ГОСТ алгоритмов шифрования и хеширования должна быть включена Поддержка шифрования по ГОСТ в OpenSSL.

84.1. Настройка в командной строке

84.1.1. Создание ключей для OpenVPN-туннеля средствами утилиты openssl

Для генерации всех необходимых ключей и сертификатов необходимо выполнить следующие действия:
  1. Изменить значение параметра policy в файле /var/lib/ssl/openssl.cnf для возможности подписывать любые сертификаты:
    policy = policy_anything
  2. Создать каталоги:
    # mkdir -p /root/CA/demoCA
    # cd /root/CA
    # mkdir -p ./demoCA/newcerts
    
    Создать файл базы для действующих и отозванных сертификатов:
    # touch ./demoCA/index.txt
    
    Создать файл индекса для базы ключей и сертификатов:
    # echo '01' > ./demoCA/serial
    
    Создать файл индекса для базы отозванных сертификатов:
    # echo '01' > ./demoCA/crlnumber
    
  3. Создать «самоподписанный» сертификат ca-root.crt и закрытый ключ ca-root.key, которыми будут заверяться/подписываться ключи и сертификаты клиентов, с помощью следующей команды:
    # openssl req -new -x509 -keyout ca-root.key -out ca-root.crt
    
    Ввести пароль для закрытого ключа и ответить на запросы о владельце ключа.
  4. Создать пару «ключ-сертификат» для сервера и каждого клиента. Для этого сначала сгенерировать ключ и запрос на сертификат для сервера:
    # openssl req -new -nodes -keyout server.key -out server.csr
    
    Подписать запрос на сертификат своим «самоподписанным» сертификатом ca-root.crt и ключом ca-root.key:
    # openssl ca -cert ca-root.crt -keyfile ca-root.key -days 3650 -in server.csr -out server.crt
    
    Сгенерировать ключ и запрос на сертификат для клиента:
    # openssl req -new -nodes -keyout client.key -out client.csr
    
    Подписать клиентский сертификат:
    # openssl ca -cert ca-root.crt -keyfile ca-root.key -days 365 -in client.csr -out client.crt
    
  5. Задать параметры Диффи-Хеллмана для сервера:
    # openssl dhparam -out server.dh 2048
    
  6. Разместить ключи и сертификаты в каталогах сервера и клиента следующим образом:
    • ca-root.key — используется только для подписи сертификатов (рекомендуется хранить его на отдельном от OpenVPN-сервера компьютере);
    • ca-root.crt, server.crt, server.dh, server.key — для сервера OpenVPN;
    • ca-root.crt, client.crt, client.key — для клиента OpenVPN.
  7. Для новых клиентов следует создавать новые ключи и передавать комплект: ca-root.crt, новый_сертификат.crt, новый_ключ.key.
Для создания списка отзыва сертификатов (CRL) необходимо выполнить следующие действия:
  1. Сформировать начальный список:
    # openssl ca -cert ca-root.crt -keyfile ca-root.key -gencrl -out crl.pem
    
  2. Отозвать сертификат:
    # openssl ca -cert ca-root.crt -keyfile ca-root.key -revoke <сертификат>.crt
    
  3. Обновить список (обязательно после каждого отзыва сертификата):
    # openssl ca -cert ca-root.crt -keyfile ca-root.key -gencrl -out crl.pem
    
  4. Просмотреть список:
    # openssl crl -noout -text -in crl.pem
    
  5. Поместить файл crl.pem в каталог /var/lib/openvpn.

Примечание

Для работы со списком отозванных сертификатов OpenVPN должен быть настроен на его проверку. Это достигается добавлением в конфигурацию сервера директивы:
crl-verify /var/lib/openvpn/crl.pem
При включённой проверке CRL сертификаты всех подключающихся клиентов будут проверяться по списку отозванных сертификатов, и любое положительное совпадение приведёт к разрыву соединения.

84.1.2. Настройка сервера OpenVPN

Файл конфигурации должен быть размещен в /etc/openvpn/, ключи — в /etc/openvpn/keys, файлы настроек клиентов — в /etc/openvpn/ccd/ или /var/lib/openvpn/etc/openvpn/ccd/.
Ранее созданные ключи и сертификаты необходимо перенести в каталог /etc/openvpn/keys/.
Важно правильно настроить права доступа:
  • ключи должны быть доступны только администратору;
  • файлы конфигурации клиентов должны быть доступны на чтение пользователю openvpn.
Каждый файл конфигурации по маске /etc/openvpn/*.conf является конфигурацией отдельного экземпляра демона openvpn.

Примечание

Для настройки OpenVPN-сервера можно использовать образец файла конфигурации OpenVPN. Для этого следует скопировать файл /usr/share/doc/openvpn-2.6.12/server.conf в каталог /etc/openvpn/ (номер версии в названии каталога может отличаться).
В файле конфигурации должны быть указаны следующие параметры:
  • ifconfig-pool-persist и status — без полного пути или с путём /cache/;
  • ca, dh, cert, key — с путём /etc/openvpn/keys/;
  • client-config-dir /etc/openvpn/ccd.
Пример конфигурации (/etc/openvpn/server.conf):
port 1194
proto udp
dev tun
ca /etc/openvpn/keys/ca-root.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/server.dh
comp-lzo
server 10.8.0.0 255.255.255.0
#tls-server
user openvpn
group openvpn
ifconfig-pool-persist server_ipp.txt
keepalive 10 120
client-config-dir /etc/openvpn/ccd
persist-key
persist-tun
client-to-client
script-security 2
tmp-dir /tmp
status openvpn-status.log
verb 3
tls-cipher LEGACY-GOST2012-GOST8912-GOST8912
data-ciphers kuznyechik-cbc
auth id-GostR3411-94
# Server networks start
push "route 192.168.0.0 255.255.255.0"
# Server networks end
push "dhcp-option DNS 192.168.0.32"
Запуск сервера OpenVPN:
# openvpn /etc/openvpn/server.conf

84.1.3. Настройка VPN-подключения по протоколу OpenVPN в Network Manager

Для настройки VPN-подключения по протоколу OpenVPN в Network Manager следует выполнить следующие действия:
  1. Открыть модуль Wi-Fi и сеть приложения Параметры системы.
  2. Добавить новое сетевое соединение (кнопка Добавить новое соединение):
    кнопка Добавить новое соединение
  3. В списке выбора типа соединения выбрать пункт OpenVPN и нажать кнопку Создать:
    Добавить новое соединение OpenVPN

    Примечание

    Если имеется файл конфигурации клиента, в списке выбора типа соединения можно выбрать пункт Импортировать VPN-соединение… и указать этот файл, параметры соединения будут настроены согласно этому файлу.
  4. Указать IP-адрес OpenVPN сервера, сертификат центра сертификации, приватный ключ и сертификат пользователя:
    Сгенерированные ключи и сертификаты
  5. Нажать кнопку Дополнительно чтобы указать параметры подключения. На вкладке Общее можно выбрать тип виртуального устройства и указать, нужно ли использовать сжатие:
    Параметры подключения общее
    На вкладке Защита необходимо указать алгоритм шифрования:
    Параметры подключения защита
  6. Сохранить сделанные изменения, нажав кнопку ОК, и затем Сохранить. Будет предложено ввести пароль суперпользователя для сохранения изменений.
  7. Задать криптографические параметры, отредактировав файл подключения /etc/NetworkManager/system-connections/<name_vpn_network> и добавив в раздел [vpn] строки:
    data-ciphers=kuznyechik-cbc
    auth=id-GostR3411-94
    tls-cipher=LEGACY-GOST2012-GOST8912-GOST8912
    
    Или выполнить команды:
    # nmcli connection modify <name_vpn_network> +vpn.data data-ciphers=kuznyechik-cbc
    # nmcli connection modify <name_vpn_network> +vpn.data auth=id-GostR3411-94
    # nmcli connection modify <name_vpn_network> +vpn.data tls-cipher=LEGACY-GOST2012-GOST8912-GOST8912
    

    Примечание

    • data-ciphers — определяет алгоритм шифрования пользовательских данных внутри туннеля;
    • tls-cipher — используются только на этапе TLS-рукопожатия для согласования ключей и аутентификации.
  8. Перезапустить службу NetworkManager:
    # systemctl restart NetworkManager
    
  9. Выполнить подключение из меню Сетевые подключения:
    Подключение к сети VPN
Настройка OpenVPN-клиента в командной строке:
  • скопируйте пример конфигурации /usr/share/doc/openvpn-2.6.12/client.conf в каталог /etc/openvpn/;
  • скопируйте ранее сгенерированные ключи и сертификаты в каталог /etc/openvpn/keys/ и укажите их в /etc/openvpn/client.conf;
  • отредактируйте файл /etc/openvpn/client.conf, указав IP-адрес OpenVPN-сервера и приведя другие параметры в соответствие с настройками сервера, например:
    client
    dev tun
    proto udp
    remote 192.168.0.53 1194
    resolv-retry infinite
    nobind
    user openvpn
    group openvpn
    persist-key
    persist-tun
    pull
    redirect-gateway def1
    route-metric 50
    ca   /etc/openvpn/keys/ca-root.crt
    cert /etc/openvpn/keys/client.crt
    key  /etc/openvpn/keys/client.key
    #remote-cert-tls server
    comp-lzo
    verb 3
    script-security 2
    tmp-dir /tmp
    data-ciphers kuznyechik-cbc
    tls-cipher LEGACY-GOST2012-GOST8912-GOST8912
    auth id-GostR3411-94
    
  • запустите клиент OpenVPN:
    # openvpn /etc/openvpn/client.conf