Введение
Хотите ли вы безопасно выходить в Интернет со своего смартфона или ноутбука при подключении к ненадежной сети (например, 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:
|
1 2 |
sudo apt update sudo apt install openvpn |
Шаг 2: Создание центра сертификации
Создайте простой центр сертификации (CA) для выдачи доверенных сертификатов для сервера OpenVPN. Для этого загрузите последнюю версию EasyRSA как на машину CA, так и на сервер OpenVPN с помощью wget. Чтобы получить последнюю версию, перейдите на страницу релизов официального проекта EasyRSA на GitHub, скопируйте ссылку на скачивание файла с расширением .tgz и вставьте ее в следующую команду:
|
1 |
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz <span class="s1">--no-check-certificate</span> |
Затем распакуйте архив:
|
1 2 |
cd ~ tar xvf EasyRSA-3.0.4.tgz |

На данном этапе все необходимое программное обеспечение успешно установлено на вашем компьютере CA и сервере.
Шаг 3 – Настройка переменных EasyRSA и создание CA
EasyRSA поставляется с конфигурационным файлом, который вы можете отредактировать, чтобы определить ряд переменных для вашего CA с помощью этой команды:
|
1 |
cd ~/EasyRSA-3.0.4/ |
В этой директории есть файл с именем vars.example. Сделайте копию этого файла и назовите её vars без расширения:
|
1 |
cp vars.example vars |
Используйте предпочитаемый текстовый редактор, чтобы открыть этот новый файл:
|
1 |
nano vars |
Затем найдите настройки, которые задают значения по умолчанию для полей новых сертификатов. Это будет выглядеть примерно так:
|
1 2 3 4 5 6 |
#set_var EASYRSA_REQ_COUNTRY "US" #set_var EASYRSA_REQ_PROVINCE "California" #set_var EASYRSA_REQ_CITY "San Francisco" #set_var EASYRSA_REQ_ORG "Copyleft Certificate Co" #set_var EASYRSA_REQ_EMAIL "me@example.net" #set_var EASYRSA_REQ_OU "My Organizational Unit" |
Обновите эти переменные по своему усмотрению, как показано ниже:
|
1 2 3 4 5 6 |
set_var EASYRSA_REQ_COUNTRY "SL" set_var EASYRSA_REQ_PROVINCE "Zurich" set_var EASYRSA_REQ_CITY "Zurich City" set_var EASYRSA_REQ_ORG "CloudSigma" set_var EASYRSA_REQ_EMAIL "admin@example.com" set_var EASYRSA_REQ_OU "Community" |
Сохраните и закройте файл, когда закончите. Следующим шагом будет вызов скрипта easyrsa и его запуск с опцией init-pki для инициализации инфраструктуры открытых ключей на сервере CA:
|
1 |
./easyrsa init-pki |

Затем запустите команду build-ca с опцией nopass, чтобы вам не приходилось вводить пароль каждый раз при взаимодействии с вашим CA:
|
1 |
./easyrsa build-ca nopass |
В выводе вам будет предложено подтвердить общее имя для вашего CA:

После этого ваш CA будет настроен и готов к подписанию запросов на сертификаты.
Шаг 4 — Генерация сертификата сервера, ключа и файлов шифрования
После того как CA готов, вы можете сгенерировать закрытый ключ и запрос на сертификат на сервере, а затем отправить его в CA для подписания и создания необходимого сертификата. Сначала перейдите в директорию EasyRSA на сервере OpenVPN:
|
1 |
cd EasyRSA-3.0.4 |
Оттуда запустите скрипт easyrsa с опцией init-pki. Хотя вы уже запускали эту команду на компьютере CA, здесь её также необходимо выполнить. Это связано с тем, что директории PKI сервера и CA различаются:
|
1 |
./easyrsa init-pki |
Затем снова вызовите скрипт easyrsa, на этот раз с опцией gen-req, за которой следует общее имя компьютера’:
|
1 |
./easyrsa gen-req server nopass |
Это создаст закрытый ключ для сервера и файл запроса сертификата с именем server.req. Скопируйте ключ сервера в директорию /etc/openvpn/:
|
1 |
sudo cp ~/EasyRSA-3.0.4/pki/private/server.key /etc/openvpn/ |
Перенесите файл server.req на ваш компьютер CA безопасным способом (например, с помощью SCP, как показано ниже):
|
1 |
scp ~/EasyRSA-3.0.4/pki/reqs/server.req cloudsigma@your_CA_ip:/tmp |
Затем перейдите в директорию EasyRSA на вашем компьютере CA:
|
1 |
cd EasyRSA-3.0.4/ |
Снова используйте скрипт easyrsa, чтобы импортировать файл server.req, указав его общее имя после пути к файлу:
|
1 |
./easyrsa import-req /tmp/server.req server |
Затем подпишите запрос, запустив скрипт easyrsa с опцией sign-req, за которой следуют тип запроса и общее имя. Для запроса сертификата сервера OpenVPN обязательно используйте тип запроса server:
|
1 |
./easyrsa sign-req server server |
Вывод предложит вам подтвердить, что запрос исходит из доверенного источника. Введите yes и нажмите Enter для подтверждения. Пожалуйста, проверьте данные ниже, чтобы убедиться в их точности. Обратите внимание, что этот запрос еще не был проверен паролем.
Запросите субъект и подпишите его как сертификат сервера на 3650 дней:

Если вы зашифровали ключ CA, на этом этапе вам будет предложено ввести пароль. Далее используйте безопасный метод для передачи подписанного сертификата обратно на ваш VPN-сервер:
|
1 |
scp pki/issued/server.crt siigma@your_server_ip:/tmp |
Перенесите файл ca.rt на сервер перед тем, как выйти из компьютера CA:
|
1 |
scp pki/ca.crt siigma@our_server_ip:/tmp |
Затем снова войдите на свой сервер OpenVPN и скопируйте файлы server.crt и ca.crt в каталог /etc/openvpn/:
|
1 |
sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/ |
Затем перейдите в каталог EasyRSA:
|
1 |
cd ~/EasyRSA-3.0.4/ |
Введите следующий код, чтобы создать надежный ключ Диффи-Хеллмана, который можно использовать при обмене ключами:
|
1 |
./easyrsa gen-dh |
По завершении сгенерируйте подпись HMAC для улучшения функции проверки работоспособности TLS сервера:
|
1 |
openvpn --genkey --secret ta.key |
После завершения команды скопируйте два новых файла в каталог /etc/openvpn/:
|
1 2 |
sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/ sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/ |
Таким образом, все необходимые серверу сертификаты и файлы ключей созданы. Теперь вы можете создать соответствующий сертификат и ключ, которые клиентский компьютер будет использовать для доступа к серверу OpenVPN.
Шаг 4 – Генерация клиентского сертификата и пары ключей
Далее мы создадим клиентский ключ и несколько сертификатов. Если у вас несколько клиентов, вы можете повторить этот процесс для каждого из них. Однако обратите внимание, что для каждого клиента необходимо передавать скрипту уникальное значение имени. В этом руководстве мы назовем первую пару сертификат/ключ client1. Сначала создайте структуру каталогов в своем домашнем каталоге для хранения клиентских сертификатов и файлов ключей:
|
1 |
mkdir -p ~/client-configs/keys |
Поскольку из соображений безопасности вы сохраняете пару сертификат/ключ и конфигурационный файл клиента в этом каталоге, теперь вам следует ограничить права доступа:
|
1 |
chmod -R 700 ~/client-configs |
Затем вернитесь в каталог EasyRSA и запустите скрипт easyrsa с опциями gen-req и nopass, а также общим именем клиента:
|
1 2 |
cd ~/EasyRSA-3.0.4/ ./easyrsa gen-req client1 nopass |
Нажмите Enter, чтобы подтвердить общее имя. После этого скопируйте файл client1.key в ранее созданный каталог /client-configs/keys/:
|
1 |
cp pki/private/client1.key ~/client-configs/keys/ |
Далее используйте безопасный метод для передачи файла client1.req на ваш компьютер CA:
|
1 |
scp pki/reqs/client1.req sigma@your_CA_ip:/tmp |
Войдите на свой компьютер CA, перейдите в каталог EasyRSA и импортируйте запрос сертификата:
|
1 2 3 |
ssh siigma@your_CA_ip cd EasyRSA-3.0.4/ ./easyrsa import-req /tmp/client1.req client1 |

Затем, как и на предыдущем шаге, подпишите запрос на сервере. Но на этот раз вам нужно указать тип запроса клиента:
|
1 |
./easyrsa sign-req client client1 |
При появлении запроса введите yes, чтобы подтвердить, что вы хотите подписать запрос сертификата и что запрос исходит из доверенного источника. Пожалуйста, введите слово “yes” для продолжения или введите что-либо другое для отмены:
|
1 |
Подтвердить Запрос Детали: Да |

Если вы зашифровали ключ CA, здесь вам также будет предложено ввести пароль. При этом будет создан файл сертификата клиента с именем client1.crt. Перенесите этот файл обратно на сервер:
|
1 |
scp pki/issued/client1.crt siigma@your_server_ip:/tmp |
Подключитесь обратно по SSH к вашему серверу OpenVPN и скопируйте клиентский сертификат в каталог / client-configs / keys /:
|
1 |
cp /tmp/client1.crt ~/client-configs/keys/ |
Затем скопируйте файлы ca.crt и ta.key в каталог / client-configs / keys /:
|
1 2 |
cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/ |
Таким образом, все сертификаты и ключи сервера и клиента были сгенерированы и сохранены в соответствующих каталогах на сервере. Теперь вы можете продолжить настройку OpenVPN на сервере.
Шаг 5 – Настройка службы OpenVPN
После генерации клиентских и серверных сертификатов вы можете настроить службу OpenVPN для использования этих учетных данных. Сначала скопируйте пример файла конфигурации OpenVPN в свой каталог конфигурации, а затем извлеките его, чтобы использовать в качестве основы для настройки:
|
1 2 |
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gzip -d /etc/openvpn/server.conf.gz |
Откройте файл конфигурации сервера в предпочитаемом вами текстовом редакторе:
|
1 |
sudo nano /etc/openvpn/server.conf |
Затем найдите часть HMAC, выполнив поиск команды tls-auth:
|
1 |
tls-auth ta.key 0 # Этот файл секретный |
Найдите часть с паролем, найдя закомментированную строку с паролем. Шифрование AES-256-CBC обеспечивает хороший уровень шифрования и хорошо поддерживается. Строка не должна быть закомментирована, но если это не так, удалите “;” перед ней:
|
1 |
cipher AES-256-CBC |
Ниже добавьте команду Auth для выбора алгоритма хэширования сообщений HMAC. SHA256 — хороший выбор для этого:
|
1 |
auth SHA256 |
Затем найдите строку с директивой dh, которая определяет параметры Диффи-Хеллмана. Из-за недавних изменений в EasyRSA имя файла ключа Диффи-Хеллмана может отличаться от имени файла, указанного в примере файла конфигурации сервера. При необходимости измените указанное здесь имя файла, удалив 2048, чтобы оно соответствовало ключу из предыдущего шага:
|
1 |
dh dh.pem |
Наконец, найдите настройки пользователя и группы (user и group) и удалите “;” в начале каждой строки:
|
1 2 |
user nobody group nogroup |
На данный момент изменений, внесенных вами в пример файла server.conf, должно быть достаточно для работы OpenVPN.
Шаг 6 – Настройка сети сервера
Настройте перенаправление IP-пакетов (IP forwarding) для правильной маршрутизации трафика через VPN. Это необходимо для работы функций VPN, предоставляемых вашим сервером:
|
1 |
sudo nano /etc/sysctl.conf |
Найдите закомментированную строку, которая задает net.ipv4.ip_forward. Удалите символ «#» из начала строки, чтобы раскомментировать этот параметр:
|
1 |
net.ipv4.ip_forward=1 |
Сохраните файл и закройте его после завершения. Чтобы прочитать файл и применить значения для текущего сеанса, введите:
|
1 |
sudo sysctl -p |

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

Откройте файл /etc/ufw/before.rules, чтобы добавить соответствующую конфигурацию:
|
1 |
$ sudo nano /etc/ufw/before.rules |
Ближе к началу файла добавьте выделенные ниже строки, чтобы установить политику по умолчанию для цепочки POSTROUTING в таблице nat и маскировать весь трафик, поступающий из VPN. Замените ens3 в строке -A POSTROUTING ниже на интерфейс, который вы нашли с помощью предыдущей команды:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# rules.before # Правила, которые должны выполняться перед правилами, добавленными через командную строку ufw. Пользовательские # правила должны быть добавлены в одну из этих цепочек: # ufw-before-input # ufw-before-output # ufw-before-forward # START OPENVPN RULES # Правила таблицы NAT *nat :POSTROUTING ACCEPT [0:0] # Разрешить трафик от клиента OpenVPN к wlp11s0 (измените на обнаруженный вами интерфейс!) -A POSTROUTING -s 10.8.0.0/8 -o ens3 -j MASQUERADE COMMIT # END OPENVPN RULES # Не удаляйте эти обязательные строки, иначе возникнут ошибки . . . |
Сохраните и закройте файл после завершения редактирования. Далее вам нужно указать UFW также разрешать пересылаемые пакеты по умолчанию. Для этого откройте файл /etc/default/ufw:
|
1 |
sudo nano /etc/default/ufw |
Внутри найдите директиву DEFAULT_FORWARD_POLICY и измените значение с DROP на ACCEPT:
|
1 |
DEFAULT_FORWARD_POLICY="ACCEPT" |
Сохраните и закройте файл, когда закончите. Далее настройте брандмауэр для разрешения трафика OpenVPN. Если вы не меняли порт и протокол в файле /etc/openvpn/server.conf, вам нужно будет открыть UDP-трафик для порта 1194. Если вы изменили порт и/или протокол, подставьте выбранные вами значения здесь. Если вы забыли добавить порт SSH при выполнении предварительного руководства, добавьте его также здесь:
|
1 2 |
sudo ufw allow 1194/udp sudo ufw allow OpenSSH |
После добавления этих правил отключите и снова включите UFW, чтобы перезапустить его и загрузить изменения из всех измененных вами файлов:
|
1 2 |
sudo ufw disable sudo ufw enable |

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