Назад в блог

Настройка OpenVPN на Ubuntu 18.04

Настройка OpenVPN на Ubuntu 18.04

Введение

Хотите ли вы безопасно выходить в Интернет со своего смартфона или ноутбука при подключении к ненадежной сети (например, Wi-Fi в отеле или кафе)? К счастью, есть способ осуществить это желание. Вы можете безопасно подключиться к ненадежной сети так, как будто вы находитесь в частной сети, используя виртуальную частную сеть (VPN).

Что такое VPN?

VPN расшифровывается как Virtual Private Network (виртуальная частная сеть). Она предоставляет возможность открыть безопасный туннель к доверенному серверу. Затем все запросы отправляются и получаются через этот сервер. Преимущество заключается в обеспечении безопасности вашего доступа и транзакций при использовании публичных сетей, таких как бесплатный Wi-Fi в отеле.

Через VPN все данные шифруются и обрабатываются сервером. Промежуточные устройства, такие как сторонние маршрутизаторы и тому подобное, не имеют возможности перенаправить трафик на нежелательные ресурсы. Кроме того, после успешного установления соединения вы становитесь частью сети сервера. Другие серверы, компьютеры или устройства, такие как принтеры, которые обычно доступны только в локальной сети сервера, теперь также могут быть доступны через VPN-туннель. Однако, поскольку не все данные обязательно отправлять через зашифрованный туннель, можно настроить VPN-клиент так, чтобы через VPN-туннель отправлялась только определенная часть запросов. Остальной трафик обрабатывается в обычном режиме через Интернет.

В этом руководстве мы шаг за шагом рассмотрим процесс настройки сервера OpenVPN на Ubuntu 18.04.

Требования

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

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

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

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

Шаг 2: Создание центра сертификации

Создайте простой центр сертификации (CA) для выдачи доверенных сертификатов для сервера OpenVPN. Для этого загрузите последнюю версию EasyRSA как на машину CA, так и на сервер OpenVPN с помощью wget. Чтобы получить последнюю версию, перейдите на страницу релизов официального проекта EasyRSA на GitHub, скопируйте ссылку на скачивание файла с расширением .tgz и вставьте ее в следующую команду:

Затем распакуйте архив:

 OpenVPN EasyRSA software

На данном этапе все необходимое программное обеспечение успешно установлено на вашем компьютере CA и сервере.

Шаг 3 – Настройка переменных EasyRSA и создание CA

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

В этой директории есть файл с именем vars.example. Сделайте копию этого файла и назовите её vars без расширения:

Используйте предпочитаемый текстовый редактор, чтобы открыть этот новый файл:

Затем найдите настройки, которые задают значения по умолчанию для полей новых сертификатов. Это будет выглядеть примерно так:

Обновите эти переменные по своему усмотрению, как показано ниже:

Сохраните и закройте файл, когда закончите. Следующим шагом будет вызов скрипта easyrsa и его запуск с опцией init-pki для инициализации инфраструктуры открытых ключей на сервере CA:

easyrsa init-pki

Затем запустите команду build-ca с опцией nopass, чтобы вам не приходилось вводить пароль каждый раз при взаимодействии с вашим CA:

В выводе вам будет предложено подтвердить общее имя для вашего CA:

 OpenVPN build-ca

После этого ваш CA будет настроен и готов к подписанию запросов на сертификаты.

Шаг 4 — Генерация сертификата сервера, ключа и файлов шифрования

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

Оттуда запустите скрипт easyrsa с опцией init-pki. Хотя вы уже запускали эту команду на компьютере CA, здесь её также необходимо выполнить. Это связано с тем, что директории PKI сервера и CA различаются:

Затем снова вызовите скрипт easyrsa, на этот раз с опцией gen-req, за которой следует общее имя компьютера’:

Это создаст закрытый ключ для сервера и файл запроса сертификата с именем server.req. Скопируйте ключ сервера в директорию /etc/openvpn/:

Перенесите файл server.req на ваш компьютер CA безопасным способом (например, с помощью SCP, как показано ниже):

Затем перейдите в директорию EasyRSA на вашем компьютере CA:

Снова используйте скрипт easyrsa, чтобы импортировать файл server.req, указав его общее имя после пути к файлу:

Затем подпишите запрос, запустив скрипт easyrsa с опцией sign-req, за которой следуют тип запроса и общее имя. Для запроса сертификата сервера OpenVPN обязательно используйте тип запроса server:

Вывод предложит вам подтвердить, что запрос исходит из доверенного источника. Введите yes и нажмите Enter для подтверждения. Пожалуйста, проверьте данные ниже, чтобы убедиться в их точности. Обратите внимание, что этот запрос еще не был проверен паролем.

Запросите субъект и подпишите его как сертификат сервера на 3650 дней:

 OpenVPN sign certificate for server

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

Перенесите файл ca.rt на сервер перед тем, как выйти из компьютера CA:

Затем снова войдите на свой сервер OpenVPN и скопируйте файлы server.crt и ca.crt в каталог /etc/openvpn/:

Затем перейдите в каталог EasyRSA:

Введите следующий код, чтобы создать надежный ключ Диффи-Хеллмана, который можно использовать при обмене ключами:

По завершении сгенерируйте подпись HMAC для улучшения функции проверки работоспособности TLS сервера:

После завершения команды скопируйте два новых файла в каталог /etc/openvpn/:

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

Шаг 4 – Генерация клиентского сертификата и пары ключей

Далее мы создадим клиентский ключ и несколько сертификатов. Если у вас несколько клиентов, вы можете повторить этот процесс для каждого из них. Однако обратите внимание, что для каждого клиента необходимо передавать скрипту уникальное значение имени. В этом руководстве мы назовем первую пару сертификат/ключ client1. Сначала создайте структуру каталогов в своем домашнем каталоге для хранения клиентских сертификатов и файлов ключей:

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

Затем вернитесь в каталог EasyRSA и запустите скрипт easyrsa с опциями gen-req и nopass, а также общим именем клиента:

Нажмите Enter, чтобы подтвердить общее имя. После этого скопируйте файл client1.key в ранее созданный каталог /client-configs/keys/:

Далее используйте безопасный метод для передачи файла client1.req на ваш компьютер CA:

Войдите на свой компьютер CA, перейдите в каталог EasyRSA и импортируйте запрос сертификата:

import client.req

Затем, как и на предыдущем шаге, подпишите запрос на сервере. Но на этот раз вам нужно указать тип запроса клиента:

При появлении запроса введите yes, чтобы подтвердить, что вы хотите подписать запрос сертификата и что запрос исходит из доверенного источника. Пожалуйста, введите слово “yes” для продолжения или введите что-либо другое для отмены:

sign certificate

Если вы зашифровали ключ CA, здесь вам также будет предложено ввести пароль. При этом будет создан файл сертификата клиента с именем client1.crt. Перенесите этот файл обратно на сервер:

Подключитесь обратно по SSH к вашему серверу OpenVPN и скопируйте клиентский сертификат в каталог / client-configs / keys /:

Затем скопируйте файлы ca.crt и ta.key в каталог / client-configs / keys /:

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

 Шаг 5 – Настройка службы OpenVPN

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

Откройте файл конфигурации сервера в предпочитаемом вами текстовом редакторе:

Затем найдите часть HMAC, выполнив поиск команды tls-auth:

Найдите часть с паролем, найдя закомментированную строку с паролем. Шифрование AES-256-CBC обеспечивает хороший уровень шифрования и хорошо поддерживается. Строка не должна быть закомментирована, но если это не так, удалите “;” перед ней:

Ниже добавьте команду Auth для выбора алгоритма хэширования сообщений HMAC. SHA256 — хороший выбор для этого:

Затем найдите строку с директивой dh, которая определяет параметры Диффи-Хеллмана. Из-за недавних изменений в EasyRSA имя файла ключа Диффи-Хеллмана может отличаться от имени файла, указанного в примере файла конфигурации сервера. При необходимости измените указанное здесь имя файла, удалив 2048, чтобы оно соответствовало ключу из предыдущего шага:

Наконец, найдите настройки пользователя и группы (user и group) и удалите “;” в начале каждой строки:

На данный момент изменений, внесенных вами в пример файла server.conf, должно быть достаточно для работы OpenVPN.

Шаг 6 – Настройка сети сервера

Настройте перенаправление IP-пакетов (IP forwarding) для правильной маршрутизации трафика через VPN. Это необходимо для работы функций VPN, предоставляемых вашим сервером:

Найдите закомментированную строку, которая задает net.ipv4.ip_forward. Удалите символ «#» из начала строки, чтобы раскомментировать этот параметр:

Сохраните файл и закройте его после завершения. Чтобы прочитать файл и применить значения для текущего сеанса, введите:

sysctl -p

Затем определите публичный сетевой интерфейс вашей машины:

Ваш публичный интерфейс — это строка в выводе этой команды, которая следует за словом «dev». Например, этот результат показывает интерфейс с именем ens3.

default ip route

Откройте файл /etc/ufw/before.rules, чтобы добавить соответствующую конфигурацию:

Ближе к началу файла добавьте выделенные ниже строки, чтобы установить политику по умолчанию для цепочки POSTROUTING в таблице nat и маскировать весь трафик, поступающий из VPN. Замените ens3 в строке -A POSTROUTING ниже на интерфейс, который вы нашли с помощью предыдущей команды:

Сохраните и закройте файл после завершения редактирования. Далее вам нужно указать UFW также разрешать пересылаемые пакеты по умолчанию. Для этого откройте файл /etc/default/ufw:

Внутри найдите директиву DEFAULT_FORWARD_POLICY и измените значение с DROP на ACCEPT:

Сохраните и закройте файл, когда закончите. Далее настройте брандмауэр для разрешения трафика OpenVPN. Если вы не меняли порт и протокол в файле /etc/openvpn/server.conf, вам нужно будет открыть UDP-трафик для порта 1194. Если вы изменили порт и/или протокол, подставьте выбранные вами значения здесь. Если вы забыли добавить порт SSH при выполнении предварительного руководства, добавьте его также здесь:

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

ufw commands

Поздравляем, ваш сервер теперь настроен для корректной обработки трафика OpenVPN!

Заключение

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

Приятной работы!

 

 

author

Akshay Nagpal

Автор · CloudSigma

Preslav Dobrev — креативный дизайнер в CloudSigma, сосредоточенный на формировании последовательного корпоративного образа с помощью традиционных и инновационных маркетинговых каналов. Он умело сочетает художественное видение со стратегическим маркетингом, создавая убедительные истории бренда.

Комментарии

Комментариев пока нет. Будьте первым.