Лайфхаки

Маленькие, полезные хитрости

Настройка OpenVPN сервера на Ubuntu 18.04: шаг за шагом

21.09.2024 в 18:01

Настройка OpenVPN сервера на Ubuntu 18.04: шаг за шагом

В этом руководстве вы настроите сервер OpenVPN на сервере Ubuntu 18.04, а затем настроите доступ к нему из Windows, macOS, iOS и / или Android. В этом руководстве все этапы установки и настройки будут максимально простыми для каждой из этих установок.

Шаг 1 - Установка OpenVPN и EasyRSA

Для начала обновите индекс пакетов вашего VPN-сервера и установите OpenVPN. OpenVPN доступен в репозиториях Ubuntu по умолчанию, поэтому вы можете использовать его apt для установки:

OpenVPN - это TLS / SSL VPN. Это означает, что он использует сертификаты для шифрования трафика между сервером и клиентами. Для выдачи доверенных сертификатов вы создадите свой собственный простой центр сертификации (CA). Для этого мы загрузим последнюю версию EasyRSA, которую мы будем использовать для построения нашей инфраструктуры открытых ключей CA (PKI), из официального репозитория проекта GitHub.

Как упоминалось в предварительных условиях, мы будем строить ЦС на отдельном сервере. Причина такого подхода заключается в том, что если злоумышленник сможет проникнуть на ваш сервер, он сможет получить доступ к вашему секретному ключу CA и использовать его для подписи новых сертификатов, предоставляя им доступ к вашей VPN. Соответственно, управление ЦС с автономного компьютера помогает предотвратить доступ неавторизованных пользователей к вашей VPN. Также обратите внимание, что рекомендуется держать CA-сервер выключенным, когда он не используется для подписи ключей, в качестве дополнительной меры предосторожности.

Чтобы приступить к созданию инфраструктуры CA и PKI, wget загрузите последнюю версию EasyRSA как на своем компьютере CA, так и на сервере OpenVPN . Чтобы получить последнюю версию, перейдите на страницу « Релизы» официального проекта EasyRSA GitHub , скопируйте ссылку на скачивание для файла, оканчивающегося на .tgz, и вставьте его в следующую команду:

Вы успешно установили все необходимое программное обеспечение на свой сервер и компьютер CA. Продолжайте настраивать переменные, используемые EasyRSA, и настраивать каталог CA, из которого вы будете создавать ключи и сертификаты, необходимые для доступа вашего VPN-сервера и клиентов.

Шаг 2 - Конфигурирование переменных EasyRSA и построение CA

EasyRSA поставляется с файлом конфигурации, который вы можете редактировать, чтобы определить ряд переменных для вашего CA.

    Связанные вопросы и ответы:

    Вопрос 1: Что такое OpenVPN и для чего он используется

    Ответ: OpenVPN - это программное обеспечение, которое используется для создания защищенных VPN-соединений. Оно позволяет соединяться с сетью, используя протоколы SSL/TLS, что обеспечивает высокий уровень безопасности. OpenVPN может быть использован для создания защищенного канала между двумя компьютерами или между компьютером и сервером, что позволяет обеспечить защищенное подключение к сети, даже если она находится за NAT или防火墙.

    Вопрос 2: Какие инструменты и программы необходимы для настройки OpenVPN сервера на Ubuntu 18.04

    Ответ: Для настройки OpenVPN сервера на Ubuntu 18.04 необходимо установить несколько инструментов и программ. В первую очередь, вам потребуется установить пакеты openvpn и easy-rsa. OpenVPN - это сама программа, которая позволяет создавать VPN-соединения, а easy-rsa - это набор инструментов для создания и управления ключами и сертификатами. Кроме того, вам также потребуется установить пакеты, необходимые для работы с сетью, такие как net-tools и iptables.

    Вопрос 3: Как установить OpenVPN и easy-rsa на Ubuntu 18.04

    Ответ: Для установки OpenVPN и easy-rsa на Ubuntu 18.04 необходимо открыть терминал и выполнить несколько команд. Во-первых, необходимо обновить список пакетов, выполнив команду "sudo apt-get update". Затем, можно установить пакеты openvpn и easy-rsa, выполнив команды "sudo apt-get install openvpn" и "sudo apt-get install easy-rsa". После установки пакетов, вам потребуется скопировать файлы easy-rsa в нужный каталог, выполнив команду "sudo cp -r /usr/share/easy-rsa/ /etc/openvpn/".

    Вопрос 4: Как создать конфигурационный файл для OpenVPN сервера на Ubuntu 18.04

    Ответ: Для создания конфигурационного файла для OpenVPN сервера на Ubuntu 18.04 необходимо открыть текстовый редактор и создать новый файл. В качестве названия файла можно использовать "server.conf". В этом файле необходимо указать параметры, необходимые для настройки сервера, такие как IP-адрес, порт, протокол, метод аутентификации и т.д. Кроме того, вам также потребуется указать путь к файлу сертификата и ключа сервера, которые можно создать с помощью инструментов easy-rsa.

    Вопрос 5: Как запустить OpenVPN сервер на Ubuntu 18.04

    Ответ: Для запуска OpenVPN сервера на Ubuntu 18.04 необходимо открыть терминал и перейти в каталог, где находится конфигурационный файл сервера. Затем, можно запустить сервер, выполнив команду "sudo openvpn --config server.conf". Если конфигурация корректна, сервер начнет работать и будет ожидать подключений клиентов.

    Вопрос 6: Как настроить OpenVPN клиента на Ubuntu 18.04

    Ответ: Для настройки OpenVPN клиента на Ubuntu 18.04 необходимо создать конфигурационный файл для клиента. В этом файле необходимо указать параметры, необходимые для подключения к серверу, такие как IP-адрес сервера, порт, протокол, метод аутентификации и т.д. Кроме того, вам также потребуется указать путь к файлу клиентского сертификата и ключа, которые можно создать с помощью инструментов easy-rsa. После создания конфигурационного файла, можно запустить клиент, выполнив команду "sudo openvpn --config client.conf". Если конфигурация корректна, клиент начнет работать и будет подключаться к серверу.

    Что такое OpenVPN

    Сначала рассмотрим как подключиться к OpenVPN из Ubuntu или любого другого Linux дистрибутива через терминал. Допустим, вы скачали файл конфигурации сервера .ovpn и хотите подключиться к этой сети. Для этого нужно установить клиент openvpn:

    sudo apt install openvpn

    А далее для подключения к сети достаточно выполнить команду openvpn и передать ей в параметры нужный вам файл:

    sudo openvpn ~/Загрузки/config.ovpn

    После этого окно терминала закрывать нельзя и если OpenVPN сервер был настроен правильно, то он уже передал на машину правильные маршруты и ваш трафик идет через виртуальную сеть. Давайте посмотрим маршруты:

    sudo ip route

    Здесь стоит обратить внимание на две строки:

    0.0.0.0/1 via 192.168.243.1 dev tun0
    169.254.0.0/16 dev enp2s0 scope link metric 1000

    Первая направляет весь трафик системы на интерфейс tun0, а вторая более интересная, она разворачивает трафик ip сети 169.254.0.0 на реальный интерфейс. Если ее не будет, то весь трафик будет идти на tun0, в том числе и трафик от программы OpenVPN, который уже прошел этот интерфейс и получиться петля. Чтобы разорвать подключение в таком варианте достаточно нажать Ctrl+C в терминале, где вы запустили openvpn.

    Второй способ использовать OpenVPN в Linux - это установить плагин openvpn для NetworkManager и подключатся с помощью него. Для установки этого пакета в Ubuntu выполните такую команду:

    sudo apt-get install network-manager-openvpn

    Теперь откройте апплет Network Manager, разверните "Соединение VPN" и выберите "Настроить соединение" :

    В открывшемся окне нажмите кнопку "+" :

    Затем выберите надпись "VPN" .

    Далее, вы можете взять "OpenVPN" , но нас будет интересовать пункт "Импорт из файла".

    Далее, просто выберите файл *.ovpn, который вы скачали на сервере. Осталось нажать кнопку "Добавить" . Дальше вы можете активировать нужную сеть с помощью переключателя в окне настроек или аплета:

    Снова смотрим таблицу маршрутизации:

    sudo ip route

    В целом, NetworkManager создает другие правила, но они работают так же. Настройка клиента openvpn на ubuntu завершена.

    Зачем нужен OpenVPN сервер

    Директория содержит файлы и поддиректории двух типов: статичные (входящие в репозитория непосредственно) и генерируемые автоматически.

    Статичные:

      «main.sh» - файл, содержащий основную кодовую базу репозитория.

      «vpn.env» - основной файл конфигурации.

      «full_setup_vpn_server.sh» - скрипт полной установки VPN-сервера. После запуска исполняет следующие действия:
      1) инициация структуры файлов/директорий для управления ключами easyrsa («./easyrsa init-pki»);
      2) создание корневого сертификата («./easyrsa build-ca»);
      3) генерация ключа Диффи-Хелмана («./easyrsa gen-dh»);
      4) создание запроса на выпуск сертификата VPN-сервера («./easyrsa gen-req vpn-server»);
      5) импорт и подписание сертификата VPN-сервера («./easyrsa sign-req server vpn-server»);
      6) генерация списка отозванных сертификатов («./easyrsa gen-crl»);
      7) генерация секретного ключа ta.key («/usr/sbin/openvpn --genkey --secret "$PKI_DIR/ta.key"»), используемого как на стороне сервера, так и на стороне клиента. Необходим для обеспечения дополнительного уровня безопасности (защищает от сканирования прослушиваемых VPN-сервером портов, переполнения буфера SSL/TLS, DoS-атак и flood-атак, а также вводит дополнительный механизм аутентификации между сервером и клиентом);
      8) генерация файла конфигурации для VPN-сервера, вспомогательных скриптов и файлов со справочной информацией;
      9) копирование всех необходимых сертификатов и файлов конфигурации, необходимы для работы VPN-сервера, в директорию «/etc/openvpn/server».

      «create_cli_cert_and_conf.sh» - скрипт генерации клиентского набора сертификатов и файла конфигурации.

      «revoke_client_cert.sh» - скрипт отзыва клиентских сертификатов.

      «gen_crl_and_restart_ovpn.sh» - скрипт генерации CRL-сертификата (Certificate Revocation List или список отозванных сертификатов), содержащего сведения о всех отозванных клиентских сертификатах (отозванных посредством «revoke_client_cert.sh»). Скрипт необходимо запускать каждый раз после отзыва клиентского сертификата.

      «get_client_cert_expire_info.sh» - скрипт проверки клиентских сертификатов на предмет устаревания.

      «get_server_cert_expire_info.sh» - скрипт проверки серверных сертификатов на предмет устаревания.

    Какие компоненты необходимы для настройки OpenVPN сервера на Ubuntu 18.04

    OpenVPN часто используется для создания виртуальных безопасных сетей между компьютерами, которые находятся на очень большом расстоянии, но при этом между ними нужно получить шифрованное безопасное соединение, которое невозможно перехватить и прослушать.

    Другое применение для OpenVPN - это обход блокировок различных интернет ресурсов. Существуют различные серверы OpenVPN серверы в интернете, но будет намного надежнее если развернуть OpenVPN на своем сервере. Мы рассматривали процесс в статье установка OpenVPN на Ubuntu , но для новичков это достаточно сложно. В этой инструкции мы рассмотрим как выполняется настройка OpenVPN linux с помощью скрипта openvpn-install, который упрощает процесс установки и настройки в несколько раз. С его помощью вы получите работающий сервер в течение нескольких минут.

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

      В этой статье, в качестве системы для примера мы будем использовать операционную систему CentOS, но операции не будут отличаться в других дистрибутивах. Сначала скачайте сам скрипт:

      wget https://git.io/vpn -O openvpn-install.sh

      Затем запустите скрипт от имени суперпользователя с помощью такой команды:

      bash openvpn-install.sh

      Дальше скрипт задаст несколько вопросов по настройкам OpenVPN. Сначала нужно указать точный ip адрес VPS, на котором будет запущен OpenVPN, именно на этом адресе программа будет слушать соединения:

      Затем выберите протокол, который вы хотите использовать. Например, если я хочу использовать TCP то нужно выбрать 2:

      Затем введите номер порта, на котором будет слушать программа, можно оставить значение по умолчанию:

      Выберите сервера DNS, которые нужно использовать, мне, например, нравятся сервера от Google:

      Введите имя клиента, для которого будут подписаны сертификаты на доступ:

      Дальше нажмите Enter, и подтвердите установку OpenVPN. Программа сама установит нужные пакеты в вашем дистрибутиве, а затем подпишет все необходимые сертификаты, запустит сервер openvpn и даже добавит его в автозагрузку systemd:

      Последний шаг, это утилита спросит есть ли у вашего сервера дополнительный внешний ip адрес. Это может быть полезно, если вы используете NAT, и для доступа к серверу применяете какой-либо туннель. В других случаях этот пункт можно пропустить, для VPS точно пропускаем.

      Теперь установка и настройка OpenVPN сервера Linux завершена. Конфигурационный файл для клиента сохранен по адресу /root/sergiy-pc.ovpn, может иметь и другое имя, в зависимости от того, какое имя вы дали клиенту. Самое интересное, что для того чтобы добавить новых клиентов, вам просто достаточно запустить скрипт еще раз. Осталось только скопировать полученный файл клиенту, для этого можно на клиентском компьютере выполнить scp:

      scp root@адрес_сервера:/root/sergiy-pc.ovpn /etc/openvpn/

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

      Вы можете настроить OpenVPN на клиентской машине как захотите, например, с помощью NetworkManager. Но мы рассмотрим ручной вариант. Сначала установите саму программу. Установка OpenVPN Linux Ubuntu выполняется командой:

      sudo apt install openvpn

      А для CentOS:

      sudo yum install openvpn

      Теперь для подключения к нашему серверу используем полученный файл:

      openvpn --config /etc/openvpn/client.ovpn

      Вы можете использовать команду ip addr чтобы проверить ip адрес интерфейса OpenVPN - tun0:

      ip addr

      Как видите, OpenVPN автоматически выдал IP вашему компьютеру, теперь можете проверить подключение к этому серверу с помощью ping:

      ping -c3 10.8.0.1

      Вот и все, ваша сеть готова к работе.

      Выводы

      Пять минут и настройка OpenVPN Linux завершена, а на подключение следующего клиента уйдет еще меньше. Этот метод не специфичен для RPM систем и может использоваться также в DEB системах, таких как Ubuntu или Debian. Если у вас остались вопросы, спрашивайте в комментариях!

    Как установить OpenVPN на Ubuntu 18.04

    Для этого руководства вам понадобится сервер Ubuntu 18.04 для службы OpenVPN. Перед запуском этого руководства необходимо настроить пользователя без полномочий root с привилегиями sudo. Вы можете следовать нашему руководству по начальной настройке Ubuntu 18.04, чтобы настроить пользователя с соответствующими разрешениями.

    Вам потребуется отдельный компьютер для работы в качестве центра сертификации (ЦС) . Хотя можно использовать свой собственный VPN-сервер или локальный компьютер в качестве ЦС, хотя это не рекомендуется, поскольку это открывает вашу VPN для некоторых уязвимостей безопасности. Согласно официальной документации OpenVPN, вам необходимо разместить ЦС на отдельном компьютере, предназначенном для импорта и подписи запросов на сертификаты. По этой причине в этом руководстве предполагается, что ЦС находится на отдельном сервере Ubuntu 18.04, на котором также есть пользователь без полномочий root с привилегиями sudo.

    Обратите внимание, что если вы отключите аутентификацию по паролю при настройке этих серверов, вы можете столкнуться с трудностями при передаче файлов. Чтобы решить эту проблему, вы можете повторно включить аутентификацию по паролю на каждом сервере. Кроме того, вы можете сгенерировать пару ключей SSH для каждого сервера, а затем добавить открытый ключ SSH сервера OpenVPN в файл author_keys сервера ЦС и наоборот.

    Как создать конфигурационный файл для OpenVPN сервера

    Создание конфигурационных файлов для клиентов OpenVPN может быть затруднено, поскольку каждый клиент должен иметь свою собственную конфигурацию и соответствовать настройкам, описанным в файле конфигурации сервера. Вместо написания одного файла конфигурации, который можно использовать только на одном клиенте, опишем процесс создания инфраструктуры конфигурации клиента, которую можно использовать для создания файлов конфигурации «на лету». Сначала создадим «базовый» конфигурационный файл, затем запустим скрипт, который сгенерирует уникальные конфигурационные файлы клиента.

    Начнём с создания нового каталога на сервере OpenVPN, где будем хранить конфигурационные файлы клиента в каталоге client-configs, который создали ранее :

    mkdir -p ~/client-configs/files

    Затем скопируем пример конфигурационного файла клиента в каталог client-configs для использования в качестве базовой конфигурации:

    cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

    Откроем новый файл в текстовом редакторе:

    nano ~/client-configs/base.conf

    Внутри найдём директиву remote. Она указывает клиенту общедоступный IP-адрес вашего OpenVPN. Если вы решите изменить порт, который прослушивает сервер OpenVPN, нужно будет изменить 1194 на выбранный порт:

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

    Затем раскомментируем директивы user  и group , удалив «;» в начале каждой строки:

    Найдём директивы, которые задают файлы ca, cert и key  Закомментируем эти директивы:

    Аналогичным образом закомментируем директиву tls-auth:

    Зеркально повторим настройки cipher  и auth, которые мы установили в файле /etc/openvpn/server.conf:

    Затем добавим директивы key-direction  в файл. Нужно установить значение «1», чтобы VPN правильно функционировал на клиентском компьютере:

    Наконец, добавим несколько закомментированных строк. Хотя мы можем включить эти директивы в каждый конфигурационный файл клиента, нужно включить их только для клиентов Linux, которые поставляются с файлом /etc/openvpn/update-resolv-conf. Скрипт использует утилиту resolvconf для обновления информации DNS для клиентов Linux.

    Если клиент работает под управлением Linux и имеет файл /etc/openvpn/update-resolv-conf, раскомментируем эти строки после создания конфигурационного файла. Сохраним изменения. Затем введём простой скрипт, который создаст новый конфигурационный файл, содержащий наш сертификат, ключ, файлы шифрования и базовую конфигурацию в каталоге the ~/client-configs/files. Откроем новый файл make_config.sh в каталоге ~/client-configs:

    nano ~/client-configs/make_config.sh

    Внутрь добавим следующее содержимое, убедившись, что изменили sammy на учётную запись пользователя без прав root на нашем сервере:

    #!/bin/bash # First argument: Client identifier KEY_DIR=/home/sammy/client-configs/keys OUTPUT_DIR=/home/sammy/client-configs/files BASE_CONFIG=/home/sammy/client-configs/base.conf cat ${BASE_CONFIG} \ ') \ ${KEY_DIR}/ca.crt \ \n') \ ${KEY_DIR}/${1}.crt \ \n') \ ${KEY_DIR}/${1}.key \ \n') \ ${KEY_DIR}/ta.key \ ') \ > ${OUTPUT_DIR}/${1}.ovpn

    Сохраним изменения и закроем файл.

    Прежде чем двигаться дальше, обязательно пометим файл как исполняемый:

    chmod 700 ~/client-configs/make_config.sh

    Скрипт создаст копию файла base.conf, соберёт все файлы сертификатов и ключей, которые мы делали для клиента, извлечёт их содержимое, добавит к копии файла базовой конфигурации и экспортирует всё содержимое в новый конфигурационный файл клиента. Вся необходимая информация будет храниться в одном месте . Плюс этого в том, что если нам когда-нибудь понадобится добавить клиента, мы сможем просто запустить скрипт и быстро создать конфигурационный файл, содержащий всю информацию в одном легко распространяемом файле.

    Как настроить сетевую безопасность для OpenVPN сервера

    Прежде чем создать закрытый ключ и сертификат для вашего сервера OpenVPN, вам необходимо создать локальный каталог для инфраструктуры открытых ключей. Это нужно сделать на сервере OpenVPN. Этот каталог вы будете использовать для управления запросами сертификатов сервера и клиентов, чтобы не отправлять их прямо на сервер ЦС.

    Чтобы создать каталог PKI на вашем сервере OpenVPN, нужно заполнить стандартными значениями файл vars. Сначала перейдите в каталог easy-rsa, а затем создайте и отредактируйте файл vars в удобном для вас текстовом редакторе.

    cd ~/easy-rsa
    nano vars

    Когда файл откроется, вставьте в него эти две строки:

    set_var EASYRSA_ALGO "ec"
    set_var EASYRSA_DIGEST "sha512"

    Теперь ваши закрытые ключи и запросы сертификатов поддерживают современную эллиптическую криптографию (Elliptic Curve Cryptography, ECC) для генерации ключей и защиты подписей ваших клиентов и сервера OpenVPN.

    Настройка серверов OpenVPN и ЦС для поддержки ECC позволяет им использовать алгоритмы эллиптической кривой для обмена данными, если клиент и сервер пытаются установить общий симметричный ключ. Обмен ключами с помощью ECC значительно быстрее, чем с помощью простого классического алгоритма Диффи-Хеллмана, поскольку числа ECC намного меньше и вычисления выполняются быстрее.

    Примечание : Когда клиенты подключаются к OpenVPN, они используют асимметричное шифрование (через открытый и закрытый ключ) для выполнения рукопожатия TLS . Однако при передаче зашифрованного трафика VPN сервер и клиенты используют симметричное шифрование, которое также называется шифрованием с общим ключом.

    Симметричное шифрование требует значительно меньше вычислительных затрат по сравнению с асимметричным: используемые числа намного меньше, а современные процессоры оптимизируют симметричные операции шифрования .

    Чтобы переключиться с асимметричного шифрования на симметричное, сервер и клиент OpenVPN будут использовать эллиптический алгоритм Диффи-Хеллмана (ECDH) для скорейшего согласования общего секретного ключа.

    Заполнив файл vars, вы можете приступить к созданию каталога PKI. Для этого запустите скрипт easyrsa с параметром init-pki. Если вы следовали нашим руководствам по предварительной настройке, вы уже выполнили эту команду на сервере ЦС. Теперь ее необходимо выполнить здесь, на этом сервере, поскольку ваш сервер OpenVPN и сервер ЦС имеют отдельные каталоги PKI:

    ./easyrsa init-pki

    Обратите внимание, вам не нужно создавать центр сертификации на вашем сервере OpenVPN, поскольку сервер ЦС несет полную ответственность за проверку и подпись сертификатов. PKI на вашем VPN-сервере используется только как централизованное место для хранения запросов и публичных сертификатов.

    Как создать пользователей и разрешения для OpenVPN сервера

    Зайдем на vm «vpn», применим bash-скрипт «vm-start.sh» и приступим к настройке OpenVPN:

    Установим Open-VPN версии 2.5.5:

    sudo apt-get install -y openvpn=2.5.5-1ubuntu3

    Заметка

    В других версиях OpenVPN процесс и особенности настройки могут отличаться от описанных в данной статье.

    OpenVPN поддерживает двунаправленную аутентификацию на основе сертификатов, что означает, что клиент должен проверить сертификат сервера, а сервер - сертификат клиента, прежде чем будет установлено взаимное доверие.

    И сервер, и клиент аутентифицируют друг друга, сначала проверяя, что представленный сертификат был подписан главным центром сертификации (CA), а затем проверяя информацию в заголовке сертификата, который теперь аутентифицирован, например общее имя сертификата или тип сертификата (клиент или сервер).