Настройка openvpn server ubuntu
Настройка сервера OpenVPN в Ubuntu 18.04
Предыдущая версия данного обучающего руководства была написана Джастином Эллингвудом
Введение
Хотите организовать безопасный и защищенный доступ к интернету на смартфоне или ноутбуке при подключении к ненадежной сети, например к сети WiFi в гостинице или кафе? Виртуальная частная сеть (VPN) позволит вам конфиденциально и безопасно работать в незащищенных сетях, как если бы вы находились в частной сети. Трафик поступает с сервера VPN и продолжает движение в пункт назначения.
В сочетании с соединениями HTTPS данная схема позволяет защитить учетные данные и транзакции в беспроводной сети. Вы можете обойти географические ограничения и цензуру и скрыть свое местоположение и любой нешифруемый трафик HTTP от незащищенной сети.
OpenVPN — полнофункциональное решение SSL VPN с открытым исходным кодом, поддерживающее широкий ассортимент конфигураций. В этом обучающем модуле вы настроите сервер OpenVPN на сервере Ubuntu 18.04, а затем настроите доступ к нему из Windows, macOS, iOS и/или Android. Приведенные в этом обучающем модуле шаги по установке и настройке максимально упрощены для каждого из вариантов.
Примечание. Если вы планируете настроить сервер OpenVPN на DigitalOcean Droplet, то мы, как и многие поставщики хостинга, будем взимать плату за превышение лимита пропускной способности. По этой причине необходимо следить за объемом трафика, который обрабатывает ваш сервер.
Дополнительную информацию можно найти на этой странице.
Предварительные требования
Чтобы пройти этот обучающий модуль вам потребуется доступ к серверу Ubuntu 18.04, где будет размещаться служба OpenVPN. Перед началом прохождения обучающего модуля вам нужно будет настроить пользователя без привилегий root с привилегиями sudo
. Вы можете воспользоваться нашим руководством Начальная настройка сервера Ubuntu 18.04, чтобы создать пользователя с соответствующими разрешениями. Настоящий обучающий модуль предусматривает использование брандмауэра, описание настройки которого приведено в доступном по ссылке обучающем модуле.
Также вам потребуется отдельный компьютер для выполнения функций центра сертификации (CA). Хоте в качестве центра сертификации технически возможно использовать сервер OpenVPN на локальном компьютере, это делать не рекомендуется, поскольку при этом в вашей сети VPN могут возникнуть некоторые уязвимости системы безопасности. Согласно официальной документации OpenVPN, вы должны разместить CA на отдельном компьютер, который будет отвечать за импорт и подписание запросов сертификатов. По этой причине в данном обучающем модуле предполагается, что ваш CA располагается на отдельном сервере Ubuntu 18.04, где также имеются пользователь без привилегий
root с привилегиями sudo
и базовый брандмауэр.
Обратите внимание, что если вы отключите аутентификацию с помощью пароля при настройке этих серверов, вы можете столкнуться с трудностями при передаче файлов между ними, как предусматривается последующими разделами этого обучающего модуля. Чтобы устранить эту проблему, вам нужно будет заново включить аутентификацию с помощью пароля на каждом сервере. Также вы можете сгенерировать пару ключей SSH для каждого сервера и добавить публичный ключ SSH сервера OpenVPN в файл authorized_keys
на компьютере CA, и наоборот. Дополнительные инструкции по этим решениям можно найти в обучающем модуле Настройка ключей SSH в Ubuntu 18.04.
Убедившись в выполнении предварительных требований, вы можете перейти к шагу 1 настоящего обучающего модуля.
Шаг 1 — Установка OpenVPN и EasyRSA
Для начала выполните обновление индекса пакетов вашего сервера VPN и установите OpenVPN. OpenVPN имеется в хранилищах Ubuntu по умолчанию, и поэтому вы можете использовать для установки apt
:
- sudo apt update
- sudo apt install openvpn
OpenVPN — это VPN с TLS/SSL. Это означает, что она использует сертификаты для шифрования трафика между сервером и клиентами. Для выпуска доверенных сертификатов необходимо создать собственный простой центр сертификации (CA). Для этого нужно загрузить последнюю версию EasyRSA, которую мы используем для создания инфраструктуры открытых ключей CA (PKI) из официального репозитория проекта на GitHub.
Как указывалось в предварительных требованиях, мы создадим CA на отдельном сервере. Мы выбрали такой подход, потому что если злоумышленник сможет взломать ваш сервер, он получит доступ к закрытому ключу CA и сможет использовать его для подписания новых сертификатов, предоставляя им доступ к вашей VPN. Соответственно с этим, для управления CA с отдельного компьютера нужно не допустить доступ несанкционированных пользователей к вашей VPN. В качестве дополнительной меры предосторожности рекомендуется выключать сервер CA, когда он не используется для подписания ключей.
Чтобы начать построение CA и инфраструктуры PKI, используйте wget
для загрузки последней версии EasyRSA на систему CA и на сервер OpenVPN. Чтобы получить последнюю версию, откройте страницу Релизы на официальном сервере EasyRSA на проекте GitHub, скопируйте ссылку для загрузки файла с расширением .tgz
и вставьте ее в следующую команду:
- wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz
Затем извлеките tarball:
- cd ~
- tar xvf EasyRSA-3.0.4.tgz
Вы успешно установили все требуемое программное обеспечение на свой сервер и на систему CA. Далее необходимо настроить переменные для EasyRSA и каталог CA, откуда будут генерироваться ключи и сертификаты, необходимые вашему серверу и клиентам для доступа к VPN.
Шаг 2 — Настройка переменных EasyRSA и построение CA
В комплект установки EasyRSA входит файл конфигурации, в котором можно изменять или задавать определенные переменные CA.
Откройте на компьютере CA каталог EasyRSA:
В этом каталоге есть файл с именем vars.example
. Создайте копию этого файла и присвойте ей имя vars
без расширения:
Откройте новый файл в предпочитаемом текстовом редакторе:
Найдите настройки параметров по умолчанию для новых сертификатов. Он будет выглядеть примерно так:
~/EasyRSA-3.0.4/vars
. . . #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 "[email protected]" #set_var EASYRSA_REQ_OU "My Organizational Unit" . . .
Уберите значки комментария из этих строк и замените выделенные значения предпочитаемыми, но не оставляйте их пустыми:
~/EasyRSA-3.0.4/vars
. . . set_var EASYRSA_REQ_COUNTRY "US" set_var EASYRSA_REQ_PROVINCE "NewYork" set_var EASYRSA_REQ_CITY "New York City" set_var EASYRSA_REQ_ORG "DigitalOcean" set_var EASYRSA_REQ_EMAIL "[email protected]" set_var EASYRSA_REQ_OU "Community" . . .
После завершения редактирования сохраните и закройте файл.
В каталоге EasyRSA имеется скрипт easyrsa
, который вызывается для выполнения разнообразных задач, связанных с построением и управлением CA. Запустите этот скрипт с опцией init-pki
, чтобы запустить инфраструктуру открытых ключей на сервере CA:
Output
. . . init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /home/sammy/EasyRSA-3.0.4/pki
Затем снова запустите скрипт easyrsa
с опцией build-ca
. В результате будет создан центр сертификации и два важных файла, ca.crt
и ca.key
, представляющие открытую и закрытую части сертификата SSL.
ca.crt
— файл открытой части сертификата CA, который используется сервером и клиентом OpenVPN, чтобы информировать друг друга о том, что они входят в единую сеть доверия и что между ними отсутствует потенциальный злоумышленник в качестве посредника. В связи с этим, копия файлаca.crt
потребуется для вашего сервера и для всех ваших клиентов.ca.key
— закрытый ключ CA, используемый для подписания ключей и сертификатов серверов и клиентов. Если злоумышленник получит доступ к CA и файлуca.key
, он сможет подписывать запросы сертификатов и получать доступ к вашей VPN, что нарушит ее безопасность. Поэтому файлca.key
должен храниться только на компьютере CA, и для дополнительной безопасности компьютер CA следует выключать, когда он не используется для подписывания запросов сертификатов.
Если вы не хотите вводить пароль при каждом взаимодействии с CA, вы можете запустить команду build-ca
с опцией nopass
:
- ./easyrsa build-ca nopass
После выполнения команды вам будет предложено подтвердить обычное имя CA:
Output
. . . Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
Обычное имя — это имя, которое будет использоваться для этой системы в контексте центра сертификации. Вы можете выбрать любое имя CA, но в данном случае проще всего нажать ENTER
, чтобы принять имя по умолчанию.
Теперь ваш центр сертификации установлен и готов подписывать запросы сертификатов.
Шаг 3 — Создание сертификата сервера, ключа и файлов шифрования
Теперь ваш центр сертификации готов к работе, и вы можете сгенерировать закрытый ключ и запрос сертификата с сервера, а затем передать запрос в CA для подписания и создания требуемого сертификата. Также вы можете создать дополнительные файлы для использования в процессе шифрования.
Для начала откройте каталог EasyRSA на сервере OpenVPN:
Запустите на сервере скрипт easyrsa
с опцией init-pki
. Хотя вы уже запускали эту команду в системе с CA, ее необходимо запустить здесь, потому что ваш сервер и центр сертификации используют разные каталоги PKI:
Вызовите скрипт easyrsa
еще раз и используйте опцию gen-req
с обычным именем этого компьютера. Вы можете использовать любое имя, но лучше всего выбрать запоминающийся вариант. В этом обучающем модуле для сервера OpenVPN мы будем использовать обычное имя «сервер». Обязательно добавьте опцию nopass
. Без этого файл запроса будет защищен паролем, что впоследствии может привести к проблемам с разрешениями:
Примечание. Если вы выберете любое другое имя, кроме «server», вы должны будете следовать некоторым из приведенных ниже инструкций с изменениями. Например, при копировании сгенерированных файлов в каталог /etc/openvpn
вам нужно будет указать правильные имена. Позднее вам нужно будет изменить файл etc/openvpn/server.conf
, чтобы он указывал на соответствующие файлы .crt
и .key
.
- ./easyrsa gen-req server nopass
В результате будет создан закрытый ключ для сервера и файл запроса сертификата с именем server.req
. Скопируйте ключ сервера в каталог /etc/openvpn/
:
- sudo cp ~/EasyRSA-3.0.4/pki/private/server.key /etc/openvpn/
Используя безопасный метод (например, SCP как в примере ниже), переместите файл server.req
на компьютер CA:
- scp ~/EasyRSA-3.0.4/pki/reqs/server.req [email protected]_CA_ip:/tmp
Откройте на компьютере CA каталог EasyRSA:
Снова запустите скрипт easyrsa
и импортируйте файл server.req
, добавив в путь к файлу обычное имя:
- ./easyrsa import-req /tmp/server.req server
Затем подпишите запрос, запустив скрипт easyrsa
с опцией sign-req
и указанием типа запроса и обычного имени. Запрос может относиться к типу клиента
или сервера
, и для запроса сертификата сервера OpenVPN следует использовать запрос типа сервера
:
- ./easyrsa sign-req server server
В результатах вам будет предложено убедиться, что запрос поступил из надежного источника. Для подтверждения введите yes
и нажмите ENTER
:
You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a server certificate for 3650 days: subject= commonName = server Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes
Если вы зашифровали ключ CA, вам будет предложено ввести пароль.
Затем переместите подписанный сертификат на сервер VPN, используя защищенный метод:
- scp pki/issued/server.crt [email protected]_server_ip:/tmp
Прежде чем выполнять выход из системы на компьютере CA, переместите файл ca.crt
на ваш сервер:
- scp pki/ca.crt [email protected]_server_ip:/tmp
Затем снова выполните вход в систему на сервере OpenVPN и скопируйте файлы server.crt
и ca.crt
в каталог /etc/openvpn/
:
- sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/
После этого перейдите в каталог EasyRSA:
Создайте надежный ключ Диффи-Хеллмана, который будет использоваться при обмене ключами:
Для этого может потребоваться несколько минут. После завершения сгенерируйте подпись HMAC для укрепления возможностей сервера по проверке целостности TLS:
- openvpn --genkey --secret ta.key
Когда команда будет выполнена, скопируйте два новых файла в каталог /etc/openvpn/
:
- sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/
- sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/
Теперь все необходимые вашему серверу сертификаты и файлы ключей сгенерированы. Вы готовы создать соответствующие сертификаты и ключи, которые клиентский компьютер будет использовать для доступа к серверу OpenVPN.
Шаг 4 — Создание сертификата клиента и пары ключей
Хотя вы можете сгенерировать закрытый ключ и запрос сертификата на клиентской системе и отправить их в CA для подписания, в этом обучающем модуле мы рассмотрим процесс генерирования запроса сертификата на сервере. Преимущество этого способа заключается в том, что мы можем создать скрипт, который будет автоматически генерировать файлы конфигурации клиентов, содержащие все необходимые ключи и сертификаты. Благодаря этому вам не нужно будет передавать ключи, сертификаты и файлы конфигурации на клиентские системы, и процесс подключения к VPN ускорится.
В этом обучающем модуле мы создадим одну пару из ключа и сертификата для клиентской системы. Если у вас несколько клиентских систем, вы можете повторить этот процесс для каждой такой системы. Обратите внимание, что для каждого клиента в скрипте нужно указать уникальное имя. В этом обучающем модуле мы будем использовать первую пару сертификат/ключ под именем client1
.
Вначале создайте в домашнем каталоге структуру каталогов, где будут храниться файлы сертификатов и ключей клиентской системы:
- mkdir -p ~/client-configs/keys
Поскольку в этом каталоге будут храниться пары сертификат/ключ ваших клиентов и файлы конфигурации, для него следует закрыть все разрешения:
- chmod -R 700 ~/client-configs
Вернитесь в каталог EasyRSA и запустите скрипт easyrsa
с опциями gen-req
и nopass
, указав обычное имя клиента:
- cd ~/EasyRSA-3.0.4/
- ./easyrsa gen-req client1 nopass
Нажмите ENTER
, чтобы подтвердить обычное имя. Скопируйте файл client1.key
в ранее созданный каталог /client-configs/keys/
:
- cp pki/private/client1.key ~/client-configs/keys/
Затем переместите файл client1.req
на компьютер CA, используя безопасный метод:
- scp pki/reqs/client1.req [email protected]_CA_ip:/tmp
Войдите в систему на компьютере CA, откройте каталог EasyRSA и импортируйте запрос сертификата:
- ssh [email protected]_CA_ip
- cd EasyRSA-3.0.4/
- ./easyrsa import-req /tmp/client1.req client1
Затем подпишите запрос, как сделали это для сервера на предыдущем шаге. Однако в этот раз обязательно укажите тип запроса client
:
- ./easyrsa sign-req client client1
В диалоге введите yes
, чтобы подтвердить, что вы планируете подписать запрос сертификата, и что он поступил из доверенного источника:
Output
Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes
Если вы зашифровали свой ключ CA вам будет предложено ввести пароль.
В результате будет создан файл клиентского сертификата с именем client1.crt
. Переместите этот файл обратно на сервер.
- scp pki/issued/client1.crt [email protected]_server_ip:/tmp
Подключитесь к серверу OpenVPN через SSH и скопируйте клиентский сертификат в каталог /client-configs/keys/
:
- cp /tmp/client1.crt ~/client-configs/keys/
Затем скопируйте файлы ca.crt
и ta.key
в каталог /client-configs/keys/
:
- cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/
- sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/
Теперь вы сгенерировали ключи и сертификаты для сервера и клиента и сохранили их в соответствующих каталогах на вашем сервере. С этими файлами еще предстоит выполнить несколько действий, но к ним мы вернемся позднее. Сейчас же вы можете начать настройку OpenVPN на своем сервере.
Шаг 5 — Настройка службы OpenVPN
Вы сгенерировали сертификаты и ключи для клиента и для сервера, и теперь можете начать настройку службы OpenVPN для использования этих учетных данных.
Прежде всего скопируйте файл с образцом конфигурации OpenVPN в каталог configuration и извлеките его, чтобы использовать в качестве основы:
- sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
- sudo gzip -d /etc/openvpn/server.conf.gz
Откройте файл конфигурации сервера в предпочитаемом текстовом редакторе:
- sudo nano /etc/openvpn/server.conf
Найдите раздел HMAC, выполнив поиск директивы tls-auth
. Комментарии из этой строки должны быть уже удалены, но если строка еще закомментирована, уберите символ «;» в начале строки:
/etc/openvpn/server.conf
tls-auth ta.key 0 # This file is secret
Затем найдите раздел криптографических шифров, выполнив поиск строк комментариев с текстом cipher
. Шифр AES-256-CBC
обеспечивает хороший уровень шифрования и хорошо поддерживается. Комментарии из этой строки должны быть уже удалены, но если строка еще закомментирована, уберите символ «;» в начале строки:
/etc/openvpn/server.conf
cipher AES-256-CBC
Добавьте под этой строкой директиву auth
, чтобы выбрать алгоритм обработки сообщений HMAC. Для этого хорошо подойдет SHA256
:
/etc/openvpn/server.conf
auth SHA256
Затем найдите строку с директивой dh
, которая определяет параметры алгоритма Диффи-Хеллмана. В связи с недавними изменениями EasyRSA имя файла ключа Диффи-Хеллмана может отличаться от указанного в файле образца конфигурации сервера. Если потребуется, измените указанное здесь имя файла, удалив цифры 2048
для соответствия ключу, сгенерированному на предыдущем шаге:
/etc/openvpn/server.conf
dh dh.pem
Наконец, найдите настройки user
и group
и удалите «;» из начала каждой строки:
/etc/openvpn/server.conf
user nobody group nogroup
Внесенные в файл образца server.conf
изменения необходимы для работы OpenVPN. Описанные ниже изменения не обязательны, однако они также необходимы для многих распространенных вариантов использования.
(Необязательно) Изменение DNS для перенаправления всего трафика через сеть VPN
Вышеуказанные настройки создадут соединение VPN между двумя компьютерными системами, но не заставят никакие соединения использовать туннель. Если вы хотите использовать VPN для перенаправления всего вашего трафика, вам нужно будет передать настройки DNS на клиентские компьютеры.
В файле server.conf
имеется несколько директив, которые нужно изменить для активации этой функции. Найдите раздел redirect-gateway
и удалите точку с запятой «;» в начале строки redirect-gateway
, чтобы убрать режим комментария:
/etc/openvpn/server.conf
push "redirect-gateway def1 bypass-dhcp"
Под этой строкой найдите раздел dhcp-option
. Снова удалите символ «;» в начале каждой из строк, чтобы убрать режим комментария:
/etc/openvpn/server.conf
push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220"
Это поможет клиентам изменить настройки DNS, чтобы туннель VPN использовался как шлюз по умолчанию.
(Необязательно) Изменение порта и протокола
По умолчанию сервер OpenVPN использует для подключения клиентов порт 1194
и протокол UDP. Если вам потребуется использовать другой порт из-за ограничений сети клиента, вы можете изменить номер порта
. Если вы не храните веб-контент на сервере OpenVPN, вам подойдет порт 443
, поскольку его обычно не запрещают правила брандмауэра.
/etc/openvpn/server.conf
# Optional! port 443
Довольно часто этот порт также ограничивает протокол. Если это так, измените значение proto
с UDP на TCP:
/etc/openvpn/server.conf
# Optional! proto tcp
Если вы действительно смените протокол на TCP, вам нужно будет изменить значение директивы explicit-exit-notify
с 1
на 0
, поскольку эта директива используется только протоколом UDP. В противном случае при запуске службы OpenVPN возможны ошибки протокола TCP :
/etc/openvpn/server.conf
# Optional! explicit-exit-notify 0
Если вам не нужно использовать другие порт и протокол, лучше всего оставить настройки по умолчанию.
(Необязательно) Указание на учетные данные, отличающиеся от используемых по умолчанию
Если вы выбрали другое имя при использовании команды ./build-key-server
, измените строки cert
и key
так, чтобы они указывали на соответствующие файлы .crt
и .key
. Если вы использовали имя по умолчанию «server», ничего изменять не нужно:
/etc/openvpn/server.conf
cert server.crt key server.key
После завершения редактирования сохраните и закройте файл.
После внесения необходимых изменений в конфигурацию OpenVPN вашего сервера, вы можете начать вносить изменения в настройки сети сервера.
Шаг 6 — Настройка конфигурации сети сервера
Чтобы OpenVPN мог правильно перенаправлять трафик через сеть VPN, необходимо изменить некоторые параметры конфигурации сети сервера. Прежде всего нужно изменить параметр IP forwarding, который определяет необходимость перенаправления IP-трафика. Это необходимо для реализации функций VPN, обеспечиваемых вашим сервером.
Для изменения настройки переадресации IP по умолчанию на вашем сервере следует отредактировать файл /etc/sysctl.conf
:
- sudo nano /etc/sysctl.conf
Найдите в файле строку комментария с параметром net.ipv4.ip_forward
. Удалите символ «#» из начала строки, чтобы убрать режим комментария для этой настройки:
/etc/sysctl.conf
net.ipv4.ip_forward=1
Сохраните файл и закройте его после завершения.
Чтобы прочитать файл и изменить значения для текущей сессии, введите:
Output
net.ipv4.ip_forward = 1
Если вы следовали указаниям обучающего модуля «Начальная настройка сервера Ubuntu 18.04», указанного в предварительных требованиях, у вас должен быть установлен брандмауэр UFW. Вне зависимости от того, используете ли вы брандмауэр для блокировки нежелательного трафика (что нужно делать почти всегда), в этом обучающем модуле брандмауэр вам потребуется для определенных манипуляций с трафиком, поступающим на сервер. Некоторые правила брандмауэра нужно изменить, чтобы включить маскарадинг (это концепция iptables, обеспечивающая динамическую трансляцию сетевых адресов (NAT) для правильной маршрутизации клиентских соединений.
Прежде чем открыть файл конфигурации брандмауэра для добавления правил маскарадинга, нужно предварительно найти публичный сетевой интерфейс компьютера. Для этого введите:
Публичный интерфейс компьютера показан в результатах выполнения этой команды после слова «dev». Например, в этом результате показан интерфейс с именем wlp11s0
, который выделен ниже:
Output
default via 203.0.113.1 dev wlp11s0 proto static
Когда у вас будет интерфейс, связанный с маршрутом по умолчанию, откройте файл /etc/ufw/before.rules
, чтобы добавить соответствующую конфигурацию:
- sudo nano /etc/ufw/before.rules
Правила UFW обычно добавляются с помощью команды ufw
. Правила, перечисленные в файле before.rules
, считываются и активируются до загрузки обычных правил UFW. Добавьте в верхнюю часть файла выделенные ниже строки. После этого будет задана политика по умолчанию для цепочки POSTROUTING
в таблице nat
, и любой трафик из VPN будет маскироваться. Обязательно замените wlp11s0
в строке -A POSTROUTING
на интерфейс, определенный с помощью следующей команды:
/etc/ufw/before.rules
# # rules.before # # Rules that should be run before the ufw command line added rules. Custom # rules should be added to one of these chains: # ufw-before-input # ufw-before-output # ufw-before-forward # # START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Allow traffic from OpenVPN client to wlp11s0 (change to the interface you discovered!) -A POSTROUTING -s 10.8.0.0/8 -o wlp11s0 -j MASQUERADE COMMIT # END OPENVPN RULES # Don't delete these required lines, otherwise there will be errors *filter . . .
Сохраните файл и закройте его после завершения.
Затем вам нужно будет указать UFW разрешать перенаправление пакетов по умолчанию. Для этого откройте файл /etc/default/ufw
:
- sudo nano /etc/default/ufw
Найдите в файле директиву DEFAULT_FORWARD_POLICY
и измените значение с DROP
на ACCEPT
:
/etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
Сохраните файл и закройте его после завершения.
Затем измените настройки брандмауэра, чтобы разрешить трафик OpenVPN. Если вы не изменили порт и протокол в файле /etc/openvpn/server.conf
, вам нужно будет открыть трафик UDP на порту 1194
. Если вы изменили порт или протокол, замените выбранные здесь значения.
Если вы забыли добавить порт SSH при выполнении обязательного обучающего модуля, добавьте его сейчас:
- sudo ufw allow 1194/udp
- sudo ufw allow OpenSSH
После добавления этих правил отключите и заново включите UFW, чтобы загрузить изменения из всех измененных файлов:
- sudo ufw disable
- sudo ufw enable
Теперь ваш сервер настроен для правильной обработки трафика OpenVPN.
Шаг 7 — Запуск и активация службы OpenVPN
Теперь вы готовы запустить службу OpenVPN на своем сервере. Для этого нужно использовать утилиту systemd systemctl
.
Запустите сервер OpenVPN, указав имя файла конфигурации в качестве переменной экземпляра после имени файла systemd. Файл конфигурации вашего сервера имеет имя /etc/openvpn/server.conf
, поэтому при его вызове в конец файла нужно добавить @server
:
- sudo systemctl start [email protected]
Еще раз убедитесь, что служба успешно запущена, введя следующую команду:
- sudo systemctl status [email protected]
Если все прошло хорошо, результат будет выглядеть примерно следующим образом:
Output
● [email protected] - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled) Active: active (running) since Tue 2016-05-03 15:30:05 EDT; 47s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Process: 5852 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid (code=exited, sta Main PID: 5856 (openvpn) Tasks: 1 (limit: 512) CGroup: /system.slice/system-openvpn.slice/[email protected] └─5856 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid
Также вы можете проверить доступность интерфейса OpenVPN tun0
с помощью следующей команды:
Будет выведен настроенный интерфейс:
Output
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100 link/none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever
После запуска службы активируйте ее, чтобы она автоматически запускалась при загрузке:
- sudo systemctl enable [email protected]
Теперь служба OpenVPN запущена и работает. Прежде чем начать использовать ее, необходимо создать файл конфигурации для клиентской системы. В этом обучающем модуле мы уже говорили о создании пар сертификат/ключ для клиентских систем, и на следующем шаге мы продемонстрируем создание инфраструктуры, которая будет легко генерировать файлы конфигурации клиентских систем.
Шаг 8 — Создание инфраструктуры конфигурации клиентских систем
Создание файлов конфигурации для клиентов 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
. Она указывает клиенту адрес сервера OpenVPN, т. е. публичный IP-адрес вашего сервера OpenVPN. Если вы решили изменить порт, который будет прослушивать сервер OpenVPN, вам нужно будет заменить 1194
на выбранный порт:
~/client-configs/base.conf
. . . # The hostname/IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote your_server_ip 1194 . . .
Протокол должен соответствовать значениям, используемым в конфигурации сервера:
~/client-configs/base.conf
proto udp
Уберите режим комментариев для директив user
и group
, удалив символ «;» из начала каждой строки:
~/client-configs/base.conf
# Downgrade privileges after initialization (non-Windows only) user nobody group nogroup
Найдите директивы, задающие ca
, cert
и key
. Поставьте знак комментария перед строками этих директив, поскольку вы вскоре добавите сертификаты и ключи в сам файл:
~/client-configs/base.conf
# SSL/TLS parms. # See the server config file for more # description. It's best to use # a separate .crt/.key file pair # for each client. A single ca # file can be used for all clients. #ca ca.crt #cert client.crt #key client.key
Также добавьте знак комментария в начале строки директивы tls-auth
, поскольку вы добавите ключ ta.key
непосредственно из файла конфигурации клиента:
~/client-configs/base.conf
# If a tls-auth key is used on the server # then every client must also have the key. #tls-auth ta.key 1
Создайте зеркальное отражение настроек cipher
и auth
, заданных в файле /etc/openvpn/server.conf
:
~/client-configs/base.conf
cipher AES-256-CBC auth SHA256
Затем добавьте в файл директиву key-direction
. Вы должны задать значение «1», чтобы VPN правильно работала на клиентском компьютере:
~/client-configs/base.conf
key-direction 1
В заключение, добавьте несколько строк комментариев. Хотя вы можете включить эти директивы в каждый файл конфигурации клиента, их нужно включать только для клиентов Linux с файлом /etc/openvpn/update-resolv-conf
. Этот скрипт использует утилиту resolvconf
для обновления данных DNS клиентов Linux.
~/client-configs/base.conf
# script-security 2 # up /etc/openvpn/update-resolv-conf # down /etc/openvpn/update-resolv-conf
Если ваш клиент работает под управлением Linux, и на нем есть файл /etc/openvpn/update-resolv-conf
, удалите знак комментария в начале этих строк файла конфигурации клиента, когда он будет сгенерирован.
Сохраните файл и закройте его после завершения.
Затем создайте простой скрипт, который скомпилирует базовую конфигурацию с соответствующим сертификатом, ключом и файлами шифрования, и поместите сгенерированную конфигурацию в каталог ~/client-configs/files
. Откройте новый файл с именем make_config.sh
в каталоге ~/client-configs
:
- nano ~/client-configs/make_config.sh
Добавьте в файл следующее:
~/client-configs/make_config.sh
#!/bin/bash # First argument: Client identifier KEY_DIR=~/client-configs/keys OUTPUT_DIR=~/client-configs/files BASE_CONFIG=~/client-configs/base.conf cat ${BASE_CONFIG} \ <(echo -e '<ca>') \ ${KEY_DIR}/ca.crt \ <(echo -e '</ca>\n<cert>') \ ${KEY_DIR}/${1}.crt \ <(echo -e '</cert>\n<key>') \ ${KEY_DIR}/${1}.key \ <(echo -e '</key>\n<tls-auth>') \ ${KEY_DIR}/ta.key \ <(echo -e '</tls-auth>') \ > ${OUTPUT_DIR}/${1}.ovpn
Сохраните файл и закройте его после завершения.
Прежде чем продолжить, отметьте этот файл как исполняемый, введя следующую команду:
- chmod 700 ~/client-configs/make_config.sh
Этот скрипт создает копию созданного вами файла base.conf
, собирает все созданные вами для клиента файлы сертификатов и ключей, извлекает их содержимое, добавляет их в копию базового файла конфигурации и экспортирует все это в новый файл конфигурации клиента. Это означает, что вся необходимая информация хранится в одном месте, и вам не нужно по отдельности управлять файлами конфигурации клиента, сертификатами и ключами. Если в будущем вам потребуется добавить клиент, вы можете просто запустить этот скрипт, чтобы быстро создать файл конфигурации. Вся важная информация хранится в одном удобном для доступа месте.
Учтите, что при добавлении каждого нового клиента вам нужно будет сгенерировать для него новые ключи и сертификаты, прежде чем запускать этот скрипт и генерировать файл конфигурации. На следующем шаге вы сможете потренироваться в использовании этого скрипта.
Шаг 9 — Создание конфигураций клиентов
Если вы следовали указаниям руководства, на шаге 4 вы создали клиентский сертификат и ключ с именами client1.crt
и client1.key
соответственно. Вы можете сгенерировать файл конфигурации для этих учетных данных, перейдя в каталог ~/client-configs
и запустив скрипт, созданный в конце предыдущего шага:
- cd ~/client-configs
- sudo ./make_config.sh client1
При этом файл client1.ovpn
будет создан в каталоге ~/client-configs/files
:
- ls ~/client-configs/files
Output
client1.ovpn
Этот файл нужно будет переместить на устройство, которое вы планируете использовать в качестве клиента. Например, это может быть ваш локальный компьютер или мобильное устройство.
Хотя конкретные приложения для передачи зависят от операционной системы устройства и ваших предпочтений, один из наиболее надежных и безопасных способов — использовать SFTP (протокол передачи файлов SSH) или SCP (защищенное копирование) на стороне сервера. При этом файлы аутентификации VPN вашего клиента будут передаваться через шифрованное соединение.
Вот пример команды SFTP с использованием образца client1.ovpn
, который можно запустить с локального компьютера (macOS или Linux). Он помещает файл .ovpn
в домашний каталог:
- sftp [email protected]_server_ip:client-configs/files/client1.ovpn ~/
Вот несколько инструментов и обучающих модулей для безопасной передачи файлов с сервера на локальный компьютер:
Шаг 10 — Установка конфигурации клиентов
В этом разделе рассказывается о том, как установить клиентский профиль VPN в Windows, macOS, Linux, iOS и Android. Эти инструкции не зависят друг от друга, так что вы можете сразу перейти к той, которая относится к вашему устройству.
Подключение OpenVPN будет иметь имя, совпадающее с именем файла .ovpn
. В этом обучающем модуле это означает, что соединение будет иметь имя client1.ovpn
, что соответствует первому сгенерированному клиентскому файлу.
Windows
Установка
Загрузите клиентское приложение OpenVPN для Windows со страницы загрузки OpenVPN. Выберите подходящую версию программы установки для вашей версии Windows.
Примечание. Для установки OpenVPN требуются привилегии администратора.
После установки OpenVPN, скопируйте файл .ovpn
в:
C:\Program Files\OpenVPN\config
При запуске OpenVPN профиль будет автоматически обнаружен и сделан доступным.
Вы должны запускать OpenVPN от имени администратора каждый раз, даже если используете учетную запись администратора. Чтобы вам не нужно было при каждом запуске VPN нажимать правую кнопку мыши и выбриать Запуск от имени администратора, такой запуск следует настроить в учетной записи администратора. Это также означает, что обычным пользователям нужно будет ввести пароль администратора, чтобы использовать OpenVPN. Обычные пользователи не смогут правильно подключиться к серверу, если у приложения OpenVPN на клиентской системе нет прав администратора, поэтому необходим повышенный уровень привилегий.
Чтобы настроить приложение OpenVPN для запуска от имени администратора при каждом запуске, нажмите правой кнопкой мыши на его ярлык и выберите пункт Свойства. Внизу вкладки Совместимость нажмите кнопку Изменить параметры для всех пользователей. В новом окне установите отметку Запускать эту программу от имени администратора.
Подключение
При каждом запуске графического интерфейса OpenVPN операционная система Windows будет спрашивать, разрешаете или вы этой программме внести изменения на вашем компьютере. Нажмите Да. При запуске клиентского приложения OpenVPN в области задач появляется значок приложения, с помощью которого вы сможете подключать и отключать соединение VPN; соединение VPN не устанавливается автоматически.
После запуска OpenVPN нажмите правой кнопкой на значок OpenVPN в области задач, чтобы создать соединение. Откроется контекстное меню. Выберите client1 в верхней части меню (это ваш профиль client1.ovpn
) и нажмите Подключиться.
Откроется окно состояния, где будут выведены данные журнала при установке соединения, и после подключения клиента будет выведено сообщение.
Отключение от VPN выполняется аналогично: перейдите в область задач, нажмите на иконку приложения OpenVPN правой кнопкой мыши, выберите профиль клиента и нажмите Отключиться.
macOS
Установка
Tunnelblick — бесплатный клиент OpenVPN с открытым исходным кодом для macOS. Вы можете загрузить последний образ этого клиентского приложения со страницы загрузки Tunnelblick. Дважды щелкните загруженный файл .dmg
и следуйте указаниям по установке.
В конце процесса установки Tunnelblick спросит, есть ли у вас файлы конфигурации. Укажите ответ У меня есть файлы конфигурации и дайте Tunnelblick завершить работу. Откройте окно Finder и дважды нажмите client1.ovpn
. Tunnelblick установит клиентский профиль. Для этого требуются привилегии администратора.
Подключение
Запустите Tunnelblick, дважды щелкнув значок Tunnelblick в папке Приложения. После запуска Tunnelblick в панели меню в правом верхнем углу экрана появится значок Tunnelblick для управления соединениями. Нажмите на значок, а затем нажмите на пункт меню Подключить client1, чтобы создать соединение VPN.
Linux
Установка
Если вы используете Linux, вы можете различные инструменты в зависимости от вашего дистрибутива. Диспетчер окон или среда рабочего стола также могут содержать утилиты для подключения.
Однако проще всего будет использовать для этой цели программное обеспечение OpenVPN.
В Ubuntu или Debian вы можете установить его так же, как и на сервере, введя следующую команду:
- sudo apt update
- sudo apt install openvpn
В CentOS вы можете активировать репозитории EPEL и выполнить установку, введя следующую команду:
- sudo yum install epel-release
- sudo yum install openvpn
Настройка
Проверьте, включен ли в ваш дистрибутив скрипт /etc/openvpn/update-resolv-conf
:
Output
update-resolv-conf
Затем отредактируйте перемещенный файл конфигурации клиента OpenVPN:
Если вы нашли файл update-resolv-conf,
уберите значок комментария из начала трех строк, добавленных для изменения настроек DNS:
client1.ovpn
script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf
Если вы используете CentOS, измените директиву group
с nogroup
на nobody
для соответствия доступным группам дистрибутива:
client1.ovpn
group nobody
Сохраните и закройте файл.
Теперь для подключения к VPN вы можете просто указать команде openvpn
файл конфигурации клиента:
- sudo openvpn --config client1.ovpn
Эта команда должна установить подключение к вашей VPN.
iOS
Установка
Найдите в магазине приложений iTunes App Store приложение OpenVPN Connect, официальный клиент OpenVPN для iOS, и установите его. Чтобы переместить конфигурацию клиента iOS на устройство, подключите его к компьютеру напрямую.
Здесь описан процесс завершения передачи с помощью iTunes. Откройте iTunes на компьютере и нажмите iPhone > приложения. Прокрутите страницу до раздела Общий доступ к файлам и нажмите на приложение OpenVPN. Пустое окно справа OpenVPN Documents предназначено для общего доступа к файлам. Перетащите файл .ovpn
в окно OpenVPN Documents.
Запустите приложение OpenVPN на iPhone. Вы получите уведомление, что новый профиль готов к импортированию. Нажмите зеленый значок плюс, чтобы импортировать его.
Подключение
Приложение OpenVPN готово к использованию нового профиля. Установите соединение, передвинув кнопку Подключиться в положение Вкл. Для отключения передвиньте эту же кнопку в положение Выкл.
Примечание. Переключатель VPN в разделе Настройки нельзя использовать для подключения к VPN. Если вы попробуете сделать это, вы получите уведомление о том, что для подключения нужно использовать приложение OpenVPN.
Android
Установка
Откройте магазин приложений Google Play Store. Найдите приложение Android OpenVPN Connect, официальное клиентское приложение OpenVPN для Android, и установите его.
Вы можете переместить профиль .ovpn,
подключив устройство Android к вашему компьютеру через интерфейс USB и скопировав файл. Если у вас в компьютере есть разъем для SD-карт, мы можете извлечь SD-карту из устройства, скопировать на нее профиль и вставить карту обратно в устройство Android.
Запустите приложение OpenVPN и нажмите на меню, чтобы импортировать профиль.
Затем перейдите в местоположение сохраненного профиля (на снимке экрана используется расположение /sdcard/Download/
) и выберите файл. Приложение покажет, что профиль импортирован.
Подключение
Чтобы подключиться, просто нажмите кнопку Подключиться. Вам нужно будет указать, что вы доверяете приложению OpenVPN. Нажмите OK, чтобы установить соединение. Чтобы отключиться от VPN, вернитесь в приложение OpenVPN и выберите пункт Отключиться.
Шаг 11 — Тестирование соединения VPN (необязательно)
Примечание. Этот метод тестирования соединения VPN будет работать, только если вы настроите перенаправление всего трафика через VPN на шаге 5.
После завершения установки нужно провести простую проверку, чтобы убедиться, что все работает нормально. Не активируйте соединение VPN, откройте браузер и перейдите в DNSLeakTest.
Сайт покажет IP-адрес, назначенный вашим интернет-провайдером и видный остальному миру. Чтобы проверить настройки DNS через этот же сайт, нажмите Расширенный тест, и вы увидите, какие серверы DNS вы используете.
Теперь подключите клиент OpenVPN к VPN вашего дроплета и обновите браузер. Вы увидите совершенно другой IP-адрес (адрес вашего сервера VPN), и именно этот адрес будет виден остальному миру. Итак, в приложении DNSLeakTest функция Расширенный тест проверит ваши настройки DNS и подтвердит, что вы используете параметры DNS, заданные вашей VPN.
Шаг 12 — Отзыв сертификатов клиента
Иногда вам может понадобиться отозвать клиентский сертификат, чтобы предотвратить дальнейший доступ к серверу OpenVPN.
Для этого перейдите в каталог EasyRSA на компьютере CA:
Затем запустите скрипт easyrsa
с опцией revoke
, а затем укажите имя клиента, у которого хотите отозвать сертификат:
Система предложит вам подтвердить отзыв сертификата. Введите yes
:
Output
Please confirm you wish to revoke the certificate with the following subject: subject= commonName = client2 Type the word 'yes' to continue, or any other input to abort. Continue with revocation: yes
После подтверждения действия CA полностью отзовет сертификат клиента. Однако в текущий момент ваш сервер OpenVPN не может проверить, отозваны ли сертификаты каких-либо клиентов, и все клиенты будут иметь доступ к сети VPN. Чтобы устранить эту проблему, нужно создать на компьютере CA список отзыва сертификатов (CRL):
Эта команда генерирует файл crl.pem
. Выполните защищенное перемещение этого файла на ваш сервер OpenVPN:
- scp ~/EasyRSA-3.0.4/pki/crl.pem [email protected]_server_ip:/tmp
На сервере OpenVPN скопируйте этот файл в каталог /etc/openvpn/
:
- sudo cp /tmp/crl.pem /etc/openvpn
Затем откройте файл конфигурации сервера OpenVPN:
- sudo nano /etc/openvpn/server.conf
Добавьте в конце файла опцию crl-verify
, чтобы сервер OpenVPN проверял созданный нами список отзыва сертификатов при каждой попытке подключения:
/etc/openvpn/server.conf
crl-verify crl.pem
Сохраните и закройте файл.
Перезапустите OpenVPN, чтобы завершить отзыв сертификата:
- sudo systemctl restart [email protected]
Клиент больше не сможет подключаться к серверу, используя старые учетные данные.
Чтобы запретить доступ другим клиентам, повторите эту процедуру:
- Для отзыва сертификата используется команда
./easyrsa revoke client_name
. - Создайте новый список CRL
- Переместите новый файл
crl.pem
на сервер OpenVPN и скопируйте его в каталог/etc/openvpn
, чтобы перезаписать старый список. - Перезапустите службу OpenVPN.
С помощью этой процедуры вы можете отозвать любые сертификаты, которые ранее выпустили для вашего сервера.
Заключение
Теперь вы можете безопасно использовать интернет, защитив данные о своей личности и расположении и свой трафик от снуперов и цензоров.
Для настройки других клиентских систем вам нужно будет повторить шаги 4 и 9-11 для каждого дополнительного устройства. Чтобы запретить доступ клиентским системам, следуйте указаниям в шаге 12.
Установка и настройка сервера OpenVPN в Ubuntu 20.04
Введение
Виртуальная частная сеть (VPN) позволит вам работать в незащищенных сетях, как если бы вы находились в частной сети. Она предоставляет возможность получить безопасный и защищенный доступ к сети Интернет со смартфона или ноутбука при подключении к недоверенной сети, например Wi-Fi в отеле или в кафе.
В сочетании с соединениями HTTPS данная схема позволяет защитить учетные данные и транзакции в беспроводной сети. Вы можете обойти географические ограничения и цензуру и скрыть свое местоположение, а также любой незашифрованный трафик HTTP при работе в незащищенной сети.
OpenVPN — это полнофункциональное решение VPN с открытым исходным кодом, которое использует протокол TLS и позволяет использовать широкий круг конфигураций. В этом обучающем руководстве мы установим OpenVPN на сервере Ubuntu 20.04 и настроим его для доступа с клиентского компьютера.
Примечание. Если вы планируете настроить сервер OpenVPN на DigitalOcean Droplet, то мы, как и многие поставщики хостинга, будем взимать плату за превышение лимита пропускной способности. По этой причине необходимо следить за объемом трафика, который обрабатывает ваш сервер.
Дополнительную информацию можно найти на этой странице.
Предварительные требования
Для данного обучающего руководства вам потребуется следующее:
Примечание. Хотя технически возможно использовать ваш сервер OpenVPN или ваш локальный компьютер в качестве центра сертификации, делать это не рекомендуется, поскольку это открывает ваш VPN для ряда уязвимостей. Согласно официальной документации OpenVPN, вы должны разместить ЦС на отдельном компьютере, который будет отвечать за импорт и подписание запросов сертификатов. По этой причине в данном обучающем модуле предполагается, что ваш ЦС располагается на отдельном сервере Ubuntu 20.04, где также имеются пользователь без привилегий root с привилегиями sudo и базовый брандмауэр.
Помимо этого вам потребуется клиентский компьютер, который вы будете использовать для подключения к вашему серверу OpenVPN. В этом обучающем руководстве мы будем называть его клиентом OpenVPN. В целях данного руководства рекомендуется использовать ваш локальный компьютер в качестве клиента OpenVPN.
После выполнения всех предварительных требований вы можете начать установку и настройку сервера OpenVPN в Ubuntu 20.04.
Примечание. Обратите внимание, что если вы отключите аутентификацию с помощью пароля при настройке этих серверов, то можете столкнуться с трудностями при передаче файлов между ними, как предусматривается последующими разделами этого обучающего руководства. Чтобы устранить эту проблему, вам нужно будет заново включить аутентификацию с помощью пароля на каждом сервере. Также вы можете сгенерировать пару ключей SSH для каждого сервера и добавить публичный ключ SSH сервера OpenVPN в файл authorized_keys
на компьютере ЦС, и наоборот. Дополнительные инструкции по этим решениям можно найти в обучающем модуле Настройка ключей SSH в Ubuntu 20.04.
Шаг 1 — Установка OpenVPN и Easy-RSA
Первый шаг этого руководства подразумевает установку OpenVPN и Easy-RSA. Easy-RSA — это инструмент управления инфраструктурой открытых ключей (PKI), который вы будете использовать на сервере OpenVPN для генерации запроса сертификата, который вы затем будете проверять и подписывать на сервере ЦС.
Для начала обновите указатель пакетов сервера OpenVPN и установите OpenVPN и Easy-RSA. Оба пакета доступны в репозиториях Ubuntu по умолчанию, и поэтому вы можете использовать apt
для установки:
- sudo apt update
- sudo apt install openvpn easy-rsa
Далее вам потребуется создать новую директорию на сервере OpenVPN от имени вашего пользователя non-root user с названием ~/easy-rsa
:
Теперь вам нужно создать символьную ссылку из скрипта easyrsa
, установленного пакетом в директории ~/easy-rsa
, которую вы только что создали:
- ln -s /usr/share/easy-rsa/* ~/easy-rsa/
Примечание. Хотя другие руководства могут предписывать скопировать файлы пакета easy-rsa
в директорию PKI, в этом обучающем руководстве мы используем подход на основе символьных ссылок. Таким образом, любые изменения пакета easy-rsa
будут автоматически отражаться в ваших скриптах PKI.
В заключение убедитесь, что владельцем директории является ваш пользователь non-root user с привилегиями sudo, и ограничьте доступ с помощью команды chmod
:
- sudo chown sammy ~/easy-rsa
- chmod 700 ~/easy-rsa
После установки этих программ и их перемещения в нужные локации в вашей системе следующим шагом будет создание инфраструктуры открытых ключей (PKI) на сервере OpenVPN, чтобы вы могли запрашивать и управлять сертификатами TLS для клиентов и других серверов, которые будут подключаться к вашему VPN.
Шаг 2 — Создание PKI для OpenVPN
Прежде чем вы сможете создавать закрытый ключ и сертификат вашего сервера OpenVPN, вам нужно создать локальную директорию инфраструктуры открытых ключей на сервере OpenVPN. Вы будете использовать эту директорию для управления запросами сертификата сервера и клиентов, вместо того чтобы получать их прямо на сервере ЦС.
Для создания директории PKI на сервере OpenVPN вам нужно указать в файле vars
ряд значений по умолчанию. Используйте команду cd
для перехода в каталог easy-rsa
, а затем создайте и отредактируйте файл vars
с помощью nano или другого предпочитаемого текстового редактора:
После открытия файла вставьте следующие две строки:
~/easy-rsa/vars
set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512"
Эти две строки потребуются вам в файле vars
на сервере OpenVPN, поскольку он не будет использоваться в качестве ЦС. Они будут гарантировать, что ваши закрытые ключи и запросы сертификата будут настроены для использования современной криптографии на эллиптических кривых (Elliptic Curve Cryptography, ECC) при генерации ключей и защищенных подписей для ваших клиентов и сервера OpenVPN.
Под настройкой использования ECC для ваших серверов OpenVPN и ЦС подразумевается, что, когда клиент и сервер будут пытаться установить общий симметричный ключ, они будут использовать алгоритмы эллиптической кривой для обмена. Использование ECC для обмена ключами значительно быстрее, чем использование простого алгоритма Диффи — Хеллмана с классическим алгоритмом RSA, поскольку числа намного меньше, а вычисления выполняются быстрее.
Справка: когда клиенты подключаются к OpenVPN, они используют асимметричное шифрование (также известное как открытый/закрытый ключ) для выполнения TLS-рукопожатия. Однако при передаче шифрованного VPN-трафика сервер и клиенты используют симметричное шифрование, которое также известно как шифрование общедоступного ключа.
Симметричное шифрование требует гораздо меньшего количества вычислений по сравнению с асимметричным: используемые числа гораздо меньше, и современные процессоры имеют инструкции для выполнения оптимизированного симметричного шифрования. Для переключения с асимметричного на симметричное шифрование сервер OpenVPN и клиент будут использовать алгоритм Диффи — Хеллмана на эллиптических кривых для согласования общего секретного ключа в максимально короткие сроки.
После добавления в файл vars
данных вы можете перейти к созданию директории PKI. Для этого воспользуйтесь скриптом easyrsa
с опцией init-pki
. Хотя вы уже использовали эту команду на сервере ЦС в соответствии с предварительными требованиями, необходимо запустить ее здесь, поскольку сервер OpenVPN и сервер ЦС имеют разные директории PKI.
Обратите внимание, что на сервере OpenVPN не нужно создавать центр сертификации. Ваш сервер ЦС отвечает за валидацию и подпись сертификатов. PKI на вашем сервере VPN используется только в качестве удобного и централизованного места хранения запросов сертификата и публичных сертификатов.
После инициализации PKI на сервере OpenVPN вы можете перейти к следующему шагу и создать запрос сертификата и закрытого ключа сервера OpenVPN.
Шаг 3 — Создание запроса сертификата и закрытого ключа сервера OpenVPN
Теперь, когда на вашем сервере OpenVPN установлено все необходимое, на следующем шаге мы сгенерируем закрытый ключ и запрос подписи сертификата на вашем сервере OpenVPN. После этого вы передадите запрос в ваш центр сертификации для подписи, создав необходимый сертификат. После подписи сертификата вы передадите его назад на сервер OpenVPN и установите его для использования на сервере.
Для начала перейдите в директорию ~/easy-rsa
на сервере OpenVPN, используя вашего пользователя non-root user:
Теперь вы можете вызвать easyrsa
с опцией gen-req
, за которой необходимо указать стандартное имя для компьютера. Вы можете использовать любое стандартное имя, но лучше всего выбрать запоминающийся вариант. В этом обучающем руководстве для сервера OpenVPN будет использоваться стандартное имя server
. Обязательно добавьте опцию nopass
. Без этого файл запроса будет защищен паролем, что впоследствии может привести к проблемам с разрешениями.
Примечание. Если вы выберете любое другое имя, а не server
, вы должны будете следовать некоторым из приведенных ниже инструкций с изменениями. Например, при копировании сгенерированных файлов в директорию /etc/openvpn
вам нужно будет указать правильные имена. Позднее вам нужно будет изменить файл etc/openvpn/server.conf
, чтобы он указывал на соответствующие файлы .crt
и .key
.
- ./easyrsa gen-req server nopass
Output
Common Name (eg: your user, host, or server name) [server]: Keypair and certificate request completed. Your files are: req: /home/sammy/easy-rsa/pki/reqs/server.req key: /home/sammy/easy-rsa/pki/private/server.key
В результате будет создан закрытый ключ для сервера и файл запроса сертификата с именем server.req
. Скопируйте ключ сервера в директорию /etc/openvpn/server
:
- sudo cp /home/sammy/easy-rsa/pki/private/server.key /etc/openvpn/server/
В результате выполнения этих шагов вы успешно создали закрытый ключ для вашего сервера OpenVPN. Также вы создали запрос на подпись сертификата для сервера OpenVPN. Запрос на подпись сертификата теперь готов к подписи в вашем центре сертификации. В следующем разделе этого обучающего руководства вы узнаете, как подписать запрос на подпись сертификата с помощью закрытого ключа вашего сервера ЦС.
Шаг 4 — Подпись запроса сертификата сервера OpenVPN
На предыдущем шаге вы создали запрос на подпись сертификата (CSR) и закрытый ключ для сервера OpenVPN. Теперь сервер ЦС должен узнать о сертификате server
и выполнить его валидацию. После подтверждения сертификата сервером ЦС и его отправки назад на сервер OpenVPN клиенты, которые доверяют вашему ЦС, также смогут доверять серверу OpenVPN.
На сервере OpenVPN от имени вашего пользователя non-root user воспользуйтесь запросом на передачу или другим методом передачи для копирования запроса сертификата server.req
на сервер ЦС для подписи:
- scp /home/sammy/easy-rsa/pki/reqs/server.req [email protected]_ca_server_ip:/tmp
Если вы выполнили предварительное требование обучающего модуля «Установка и настройка Центра сертификации (ЦС) в Ubuntu 20.04», следующим шагом будет войти на сервер ЦС как пользователь без привилегий root, которого вы создали для управления ЦС. Вы использовали команду cd
для перехода в каталог ~/easy-rsa
, где вы создали и импортируйте запрос сертификата с помощью скрипта easyrsa
:
- cd ~/easy-rsa
- ./easyrsa import-req /tmp/server.req server
Output
. . . The request has been successfully imported with a short name of: server You may now use this name to perform signing operations on this request.
Далее подпишите запрос, запустив скрипт easyrsa
с опцией sign-req
и указанием типа запроса и стандартного имени. В качестве типа запроса может использоваться client
или server
. Поскольку мы работаем с запросом сертификата сервера OpenVPN, необходимо использовать тип запроса server
:
- ./easyrsa sign-req server server
В выводе вам будет нужно подтвердить, что запрос поступил из надежного источника. Введите yes
, а затем нажмите ENTER
для подтверждения:
Output
You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a server certificate for 3650 days: subject= commonName = server Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes . . . Certificate created at: /home/sammy/easy-rsa/pki/issued/server.crt
Обратите внимание, что если вы зашифровали закрытый ключ ЦС, вам будет предложено ввести пароль в данный момент.
В результате выполнения этих шагов вы успешно подписали запрос сертификата сервера OpenVPN с помощью закрытого ключа сервера ЦС. Полученный файл server.crt
содержит открытый ключ шифрования сервера OpenVPN, а также новую подпись от сервера ЦС. Смысл подписи состоит в том, чтобы сообщить всем, кто доверяет серверу ЦС, что они также могут доверять серверу OpenVPN при подключении к нему.
Для завершения настройки сертификатов скопируйте файлы server.crt
и ca.crt
с сервера ЦС на сервер OpenVPN:
- scp pki/issued/server.crt [email protected]_vpn_server_ip:/tmp
- scp pki/ca.crt [email protected]_vpn_server_ip:/tmp
Теперь вернитесь на ваш сервер OpenVPN, скопируйте файлы из /tmp
в /etc/openvpn/server
:
- sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/server
Теперь ваш сервер OpenVPN почти готов к принятию подключений. На следующем шаге вы выполните ряд дополнительных шагов для повышения безопасности сервера.
Шаг 5 — Настройка криптографических материалов OpenVPN
В качестве дополнительного уровня безопасности мы добавим дополнительный общий секретный ключ, который будет использовать сервер и все клиенты, с помощью директивы OpenVPN tls-crypt
. Эта опция используется, чтобы «затемнить» сертификат TLS, используемый, когда сервер и клиент первоначально подключаются друг к другу. Также она используется сервером OpenVPN для выполнения быстрых проверок входящих пакетов: если пакет подписан с помощью предварительно предоставленного ключа, сервер обрабатывает его, если подпись отсутствует, сервер понимает, что пакет получен из непроверенного источника, и может отклонить его, не выполняя дополнительную работу по расшифровке.
Эта опция поможет убедиться, что ваш сервер OpenVPN может справляться с неудостоверенным трафиком, сканированием портов и DoS-атаками, которые могут связывать ресурсы сервера. Она также затрудняет выявление сетевого трафика OpenVPN.
Для получения предварительно предоставленного ключа tls-crypt
запустите следующую команду на сервере OpenVPN в директории ~/easy-rsa
:
- cd ~/easy-rsa
- openvpn --genkey --secret ta.key
В результате вы получите файл с именем ta.key
. Скопируйте его в директорию /etc/openvpn/server/
:
- sudo cp ta.key /etc/openvpn/server
После получения этих файлов на сервере OpenVPN вы можете переходить к созданию клиентских сертификатов и файлов ключей для ваших пользователей, которые вы будете использовать для подключения к VPN.
Шаг 6 — Создание сертификата клиента и пары ключей
Хотя вы можете сгенерировать закрытый ключ и запрос сертификата на клиентской системе и отправить их в ЦС для подписания, в этом обучающем руководстве мы рассмотрим процесс генерирования запроса сертификата на сервере OpenVPN. Преимущество этого подхода заключается в том, что мы можем создать скрипт, который будет автоматически генерировать файлы конфигурации клиентов, содержащие все необходимые ключи и сертификаты. Благодаря этому вам не нужно будет передавать ключи, сертификаты и файлы конфигурации на клиентские системы, и процесс подключения к VPN ускорится.
В этом обучающем руководстве мы создадим одну пару из ключа и сертификата для клиентской системы. Если у вас несколько клиентских систем, вы можете повторить этот процесс для каждой такой системы. Обратите внимание, что для каждого клиента в скрипте нужно указать уникальное имя. В этом обучающем руководстве мы будем использовать первую пару сертификат/ключ под именем client1
.
Вначале создайте в домашней директории структуру директорий, где будут храниться файлы сертификатов и ключей клиентской системы:
- mkdir -p ~/client-configs/keys
Поскольку в этой директории будут храниться пары сертификат/ключ ваших клиентов и файлы конфигурации, для нее следует закрыть все разрешения:
- chmod -R 700 ~/client-configs
Вернитесь в директорию EasyRSA и запустите скрипт easyrsa
с опциями gen-req
и nopass
, указав обычное имя клиента:
- cd ~/easy-rsa
- ./easyrsa gen-req client1 nopass
Нажмите ENTER
, чтобы подтвердить обычное имя. Скопируйте файл client1.key
в ранее созданную директорию ~/client-configs/keys/
:
- cp pki/private/client1.key ~/client-configs/keys/
Затем передайте файл client1.req
на сервер ЦС, используя безопасный метод:
- scp pki/reqs/client1.req [email protected]_ca_server_ip:/tmp
Теперь выполните вход на ваш сервер ЦС. Затем перейдите в директорию EasyRSA и импортируйте запрос сертификата:
- cd ~/easy-rsa
- ./easyrsa import-req /tmp/client1.req client1
Затем подпишите запрос, как вы делали это для сервера на предыдущем шаге. Однако в этот раз обязательно укажите тип запроса client
:
- ./easyrsa sign-req client client1
При запросе введите yes
, чтобы подтвердить, что вы планируете подписать запрос сертификата и что он поступил из доверенного источника:
Output
Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes
Если вы зашифровали свой ключ ЦС, вам будет предложено ввести пароль.
В результате будет создан файл клиентского сертификата с именем client1.crt
. Переместите этот файл обратно на сервер.
- scp pki/issued/client1.crt [email protected]_server_ip:/tmp
Вернитесь на ваш сервер OpenVPN, скопируйте клиентский сертификат в директорию ~/client-configs/keys/
:
- cp /tmp/client1.crt ~/client-configs/keys/
Затем скопируйте файлы ca.crt
и ta.key
в директорию ~/client-configs/keys/
и предоставьте соответствующие разрешения для вашего пользователя sudo:
- cp ~/easy-rsa/ta.key ~/client-configs/keys/
- sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
- sudo chown sammy.sammy ~/client-configs/keys/*
В результате вы сгенерировали ключи и сертификаты для сервера и клиента и сохранили их в соответствующих директориях на вашем сервере OpenVPN. С этими файлами еще предстоит выполнить несколько действий, но к ним мы вернемся позднее. Теперь вы можете перейти к настройке OpenVPN.
Шаг 7 — Настройка OpenVPN
Как и во многих широко используемых инструментах с открытым исходным кодом, OpenVPN имеет множество доступных параметров настройки для кастомизации вашего сервера согласно вашим нуждам. В этом разделе мы предоставим инструкции по настройке конфигурации сервера OpenVPN на основе одного из примеров файлов конфигурации, который включен в документацию для этого программного обеспечения.
Вначале скопируйте файл server.conf
в качестве отправной точки для вашего собственного файла конфигурации:
- sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server/
- sudo gunzip /etc/openvpn/server/server.conf.gz
Откройте новый файл для редактирования в текстовом редакторе по вашему выбору. В нашем случае мы будем использовать nano:
- sudo nano /etc/openvpn/server/server.conf
Нам нужно изменить несколько строк в этом файле. Сначала необходимо найти раздел HMAC
в конфигурации, выполнив поиск директивы tls-auth
. Эта строка должна быть разкомментирована. Закомментируйте ее, добавив ;
в начало строки. Затем добавьте после нее новую строку, содержащую только значение tls-crypt ta.key
:
/etc/openvpn/server/server.conf
;tls-auth ta.key 0 # This file is secret tls-crypt ta.key
Затем найдите раздел криптографических шифров, выполнив поиск строк с текстом cipher
. По умолчанию установлено значение AES-256-CBC
, однако шифр AES-256-GCM
обеспечивает более высокий уровень шифрования, производительности и лучше поддерживается современными клиентами OpenVPN. Мы закомментируем значение по умолчанию, добавив ;
в начало этой строки, а затем добавим другую строку после нее, содержащую обновленное значение AES-256-GCM
:
/etc/openvpn/server/server.conf
;cipher AES-256-CBC cipher AES-256-GCM
Сразу после этой строки добавьте директиву auth
для выбора алгоритма выборки сообщений HMAC. Для этого хорошо подойдет SHA256
:
/etc/openvpn/server/server.conf
auth SHA256
Затем найдите строку с директивой dh
, которая определяет параметры алгоритма Диффи — Хеллмана. Поскольку мы настроили все сертификаты для использования криптографии на эллиптических кривых, нет необходимости в использовании файла прототипа Диффи — Хеллмана. Закомментируйте существующую строку dh dh3048.pem
или dh dh.pem
. Имя файла для ключа Диффи — Хеллмана может отличаться от того, что перечислено в примере файла конфигурации сервера. Затем добавьте строку после нее с содержанием dh none
:
/etc/openvpn/server/server.conf
;dh dh3048.pem dh none
Далее нам нужно запустить OpenVPN без привилегий, с которыми он запущен, поэтому нам нужно указать на необходимость запуска с пользователем nobody и группой nogroup. Чтобы активировать эту возможность, найдите и разкомментируйте строки user nobody
и group nogroup
, удалив ;
в начале каждой строки:
/etc/openvpn/server/server.conf
user nobody group nogroup
(Необязательно) Изменение DNS для перенаправления всего трафика через сеть VPN
Вышеуказанные настройки создадут соединение VPN между вашим клиентом и сервером, но не будут заставлять соединения использовать туннель. Если вы хотите использовать VPN для перенаправления всего вашего клиентского трафика, вам нужно будет передать дополнительные настройки на клиентские компьютеры.
Для начала найдите и разкомментируйте строку push "redirect-gateway def1 bypass-dhcp"
. Она будет сообщать вашему клиенту о необходимости перенаправлять весь трафик через ваш сервер OpenVPN. Обратите внимание, что при активации этой функции могут возникать проблемы с подключением к другим сетевым службам, например SSH:
/etc/openvpn/server/server.conf
push "redirect-gateway def1 bypass-dhcp"
Под этой строкой найдите раздел dhcp-option
. Удалите ;
в начале обеих строк, чтобы разкомментировать эти строки:
/etc/openvpn/server/server.conf
push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220"
Эти строки будут сообщать вашему клиенту о необходимости использования бесплатных интерпретаторов OpenDNS на перечисленных IP-адресах. Если вы предпочитаете использовать другие интерпретаторы DNS, вставьте их на место выделенных IP-адресов.
Это поможет клиентам изменить настройки DNS, чтобы туннель VPN использовался как шлюз по умолчанию.
(Необязательно) Изменение порта и протокола
По умолчанию сервер OpenVPN использует для подключения клиентов порт 1194
и протокол UDP. Если вам потребуется использовать другой порт из-за ограничений сети клиента, вы можете изменить номер порта
. Если вы не храните веб-контент на сервере OpenVPN, вам подойдет порт 443
, поскольку его обычно не запрещают правила брандмауэра.
Чтобы заставить OpenVPN прослушивать порт 443, откройте файл server.conf
и найдите строку, которая выглядит следующим образом:
/etc/openvpn/server/server.conf
port 1194
Измените ее, указав порт 443:
/etc/openvpn/server/server.conf
# Optional! port 443
Довольно часто этот порт также ограничивает протокол. В этом случае найдите строку proto
под строкой port
и измените протокол с udp
на tcp
:
/etc/openvpn/server/server.conf
# Optional! proto tcp
Если вы действительно смените протокол на TCP, вам нужно будет изменить значение директивы explicit-exit-notify
с 1
на 0
, поскольку эта директива используется только протоколом UDP. В противном случае при запуске службы OpenVPN возможны ошибки протокола TCP.
Найдите строку explicit-exit-notify
в конце файла и измените значение на 0
:
/etc/openvpn/server/server.conf
# Optional! explicit-exit-notify 0
Если вам не нужно использовать другие порт и протокол, лучше всего оставить эти настройки без изменений.
(Необязательно) Указание на учетные данные, отличающиеся от используемых по умолчанию
Если вы выбрали другое имя при вводе команды ./easyrsa gen-req server
ранее, измените строки cert
и key
в файле конфигурации server.conf
, чтобы они указывали на соответствующие файлы .crt
и .key
. Если вы использовали имя по умолчанию server
, можно считать, что все уже настроено корректно:
/etc/openvpn/server/server.conf
cert server.crt key server.key
После завершения редактирования сохраните и закройте файл.
Вы успешно завершили настройку общих параметров OpenVPN. На следующем шаге мы настроим сетевые параметры сервера.
Шаг 8 — Настройка конфигурации сети сервера OpenVPN
Чтобы OpenVPN мог правильно перенаправлять трафик через сеть VPN, необходимо изменить некоторые параметры конфигурации сети сервера. Прежде всего нужно изменить параметр IP forwarding, который определяет необходимость перенаправления IP-трафика. Это необходимо для реализации функций VPN, обеспечиваемых вашим сервером.
Чтобы изменить используемые по умолчанию настройки IP-передачи сервера OpenVPN, откройте файл /etc/sysctl.conf
с помощью nano
или предпочитаемого редактора:
- sudo nano /etc/sysctl.conf
Добавьте следующую строку в конец файла:
/etc/sysctl.conf
net.ipv4.ip_forward = 1
Сохраните файл и закройте его после завершения.
Чтобы прочитать файл и загрузить значения для текущей сессии, введите:
Output
net.ipv4.ip_forward = 1
Теперь ваш сервер OpenVPN сможет перенаправлять входящий трафик из одного сетевого устройства на другое. Эта настройка гарантирует, что сервер сможет направлять трафик от клиентов, подключенных к виртуальному интерфейсу VPN, на другие физические сетевые устройства. Эта конфигурация будет передавать весь веб-трафик от вашего клиента через IP-адрес вашего сервера, а открытый IP-адрес клиента будет фактически скрыт.
На следующем шаге вам нужно настроить ряд правил брандмауэра, чтобы гарантировать корректную передачу входящего и исходящего трафика на вашем сервере OpenVPN.
Шаг 9 — Настройка брандмауэра
К настоящему моменту вы установили OpenVPN на ваш сервер, настроили его и создали ключи и сертификаты, необходимые вашему клиенту для доступа к VPN. Однако вы еще не предоставили OpenVPN какие-либо инструкции о том, куда нужно отправлять входящий веб-трафик от клиентов. Вы можете указать, как сервер должен обрабатывать клиентский трафик, добавив ряд правил брандмауэра и настроив конфигурацию маршрутизации.
Если вы выполнили предварительные требования, указанные в начале этого обучающего модуля, у вас на сервере должен быть установлен и запущен ufw
. Чтобы разрешить OpenVPN через брандмауэр, вам нужно будет включить маскировку. Маскировка — это концепция таблиц iptables, на основе которой выполняется автоматическая трансляция сетевых адресов (NAT) для правильной маршрутизации клиентских соединений.
Прежде чем открыть файл конфигурации брандмауэра для добавления правил маскарадинга, нужно предварительно найти публичный сетевой интерфейс компьютера. Для этого введите:
Строка после слова «dev» в этой команде — это ваш публичный интерфейс. Например, в этом результате показан интерфейс с именем eth0
, который выделен ниже:
Output
default via 159.65.160.1 dev eth0 proto static
Когда у вас будет интерфейс, связанный с маршрутом по умолчанию, откройте файл /etc/ufw/before.rules
, чтобы добавить соответствующую конфигурацию:
- sudo nano /etc/ufw/before.rules
Правила UFW обычно добавляются с помощью команды ufw
. Правила, перечисленные в файле before.rules
, считываются и активируются до загрузки обычных правил UFW. Добавьте в верхнюю часть файла выделенные ниже строки. После этого будет задана политика по умолчанию для цепочки POSTROUTING
в таблице nat
, и любой трафик из VPN будет маскироваться. Обязательно замените eth0
в строке -A POSTROUTING
на интерфейс, определенный с помощью следующей команды:
/etc/ufw/before.rules
# # rules.before # # Rules that should be run before the ufw command line added rules. Custom # rules should be added to one of these chains: # ufw-before-input # ufw-before-output # ufw-before-forward # # START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!) -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE COMMIT # END OPENVPN RULES # Don't delete these required lines, otherwise there will be errors *filter . . .
Сохраните файл и закройте его после завершения.
Затем вам нужно будет указать UFW разрешать перенаправление пакетов по умолчанию. Для этого откройте файл /etc/default/ufw
:
- sudo nano /etc/default/ufw
Найдите в файле директиву DEFAULT_FORWARD_POLICY
и измените значение с DROP
на ACCEPT
:
/etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
Сохраните файл и закройте его после завершения.
Затем измените настройки брандмауэра, чтобы разрешить трафик OpenVPN. Если вы не изменили порт и протокол в файле /etc/openvpn/server.conf
, вам нужно будет открыть трафик UDP на порту 1194
. Если вы изменили порт или протокол, замените выбранные здесь значения.
Если вы забыли добавить порт SSH при выполнении обязательного обучающего модуля, добавьте его сейчас:
- sudo ufw allow 1194/udp
- sudo ufw allow OpenSSH
После добавления этих правил отключите и заново включите UFW, чтобы загрузить изменения из всех измененных файлов:
- sudo ufw disable
- sudo ufw enable
Теперь ваш сервер настроен для правильной обработки трафика OpenVPN. После создания правил брандмауэра мы можем запустить службу OpenVPN на сервере.
Шаг 10 — Запуск OpenVPN
OpenVPN работает как служба systemd
, поэтому мы можем использовать systemctl
для управления. Мы настроим для OpenVPN запуск при загрузке, чтобы вы могли подключаться к вашей VPN в любое время, пока ваш сервер работает. Для этого активируйте службу OpenVPN, добавив ее в systemctl
:
- sudo systemctl -f enable [email protected]
Затем запустите службу OpenVPN:
- sudo systemctl start [email protected]
Еще раз проверьте, что служба OpenVPN активна, воспользовавшись следующей командой. Вы должны увидеть в выводе active (running)
:
- sudo systemctl status [email protected]
Output
● [email protected] - OpenVPN service for server Loaded: loaded (/lib/systemd/system/[email protected]; enabled; vendor preset: enabled) Active: active (running) since Wed 2020-04-29 15:39:59 UTC; 6s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Main PID: 16872 (openvpn) Status: "Initialization Sequence Completed" Tasks: 1 (limit: 1137) Memory: 1.0M CGroup: /system.slice/system-openvpn\x2dserver.slice/[email protected] └─16872 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --c> . . . . . . Apr 29 15:39:59 ubuntu-20 openvpn[16872]: Initialization Sequence Completed
Мы успешно завершили конфигурацию OpenVPN на стороне сервера. Далее вам нужно будет настроить клиентский компьютер и подключиться к серверу OpenVPN.
Шаг 11 — Создание инфраструктуры конфигурации клиентских систем
Создание файлов конфигурации для клиентов 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
или предпочитаемом текстовом редакторе:
- nano ~/client-configs/base.conf
Найдите в файле директиву remote
. Она указывает клиенту адрес сервера OpenVPN, т. е. публичный IP-адрес вашего сервера OpenVPN. Если вы решили изменить порт, который будет прослушивать сервер OpenVPN, вам нужно будет заменить 1194
на выбранный порт:
~/client-configs/base.conf
. . . # The hostname/IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote your_server_ip 1194 . . .
Протокол должен соответствовать значениям, используемым в конфигурации сервера:
~/client-configs/base.conf
proto udp
Разкомментируйте директивы user
и group
, удалив символ ;
в начале каждой строки:
~/client-configs/base.conf
# Downgrade privileges after initialization (non-Windows only) user nobody group nogroup
Найдите директивы, задающие ca
, cert
и key
. Поставьте знак комментария перед строками этих директив, поскольку вы вскоре добавите сертификаты и ключи в сам файл:
~/client-configs/base.conf
# SSL/TLS parms. # See the server config file for more # description. It's best to use # a separate .crt/.key file pair # for each client. A single ca # file can be used for all clients. ;ca ca.crt ;cert client.crt ;key client.key
Затем закомментируйте директиву tls-auth
, поскольку вы добавите ta.key
прямо в файл конфигурации клиента (а сервер настроен на использование tls-crypt
):
~/client-configs/base.conf
# If a tls-auth key is used on the server # then every client must also have the key. ;tls-auth ta.key 1
Создайте зеркало настроек cipher
и auth
, заданных в файле /etc/openvpn/server/server.conf
:
~/client-configs/base.conf
cipher AES-256-GCM auth SHA256
Затем добавьте в файл директиву key-direction
. Вы должны задать значение «1», чтобы VPN правильно работала на клиентском компьютере:
~/client-configs/base.conf
key-direction 1
В заключение добавьте несколько закомментированных строк для обработки различных методов, которые клиенты VPN на базе Linux будут использовать для разрешения DNS. Также мы добавим два похожих, но отдельных набора закомментированных строк. Первый набор предназначен для клиентов, которые не используют systemd-resolved
для управления DNS. Эти клиенты используют утилиту resolvconf
для обновления информации DNS для клиентов Linux.
~/client-configs/base.conf
; script-security 2 ; up /etc/openvpn/update-resolv-conf ; down /etc/openvpn/update-resolv-conf
Теперь добавьте другой набор строк для клиентов, которые используют systemd-resolved
для разрешения DNS:
~/client-configs/base.conf
; script-security 2 ; up /etc/openvpn/update-systemd-resolved ; down /etc/openvpn/update-systemd-resolved ; down-pre ; dhcp-option DOMAIN-ROUTE .
Сохраните файл и закройте его после завершения.
На шаге 13 «Установка конфигурации клиента» этого обучающего модуля вы узнаете, как определять, работает ли разрешение DNS для клиентов Linux, и какой раздел нужно разкомментировать.
Далее создайте простой скрипт, который скомпилирует базовую конфигурацию с соответствующим сертификатом, ключом и файлами шифрования, и поместите сгенерированную конфигурацию в директорию ~/client-configs/files
. Откройте новый файл с именем make_config.sh
в директории ~/client-configs
:
- nano ~/client-configs/make_config.sh
Добавьте в файл следующее:
~/client-configs/make_config.sh
#!/bin/bash # First argument: Client identifier KEY_DIR=~/client-configs/keys OUTPUT_DIR=~/client-configs/files BASE_CONFIG=~/client-configs/base.conf cat ${BASE_CONFIG} \ <(echo -e '<ca>') \ ${KEY_DIR}/ca.crt \ <(echo -e '</ca>\n<cert>') \ ${KEY_DIR}/${1}.crt \ <(echo -e '</cert>\n<key>') \ ${KEY_DIR}/${1}.key \ <(echo -e '</key>\n<tls-crypt>') \ ${KEY_DIR}/ta.key \ <(echo -e '</tls-crypt>') \ > ${OUTPUT_DIR}/${1}.ovpn
Сохраните файл и закройте его после завершения.
Прежде чем продолжить, отметьте этот файл как исполняемый, введя следующую команду:
- chmod 700 ~/client-configs/make_config.sh
Этот скрипт создает копию созданного вами файла base.conf
, собирает все созданные вами для клиента файлы сертификатов и ключей, извлекает их содержимое, добавляет их в копию базового файла конфигурации и экспортирует все это в новый файл конфигурации клиента. Это означает, что вся необходимая информация хранится в одном месте, и вам не нужно по отдельности управлять файлами конфигурации клиента, сертификатами и ключами. Преимущество такого метода состоит в том, что если в будущем вам потребуется добавить клиент, вы можете просто запустить этот скрипт, чтобы быстро создать файл конфигурации, а вся важная информация будет храниться в одном удобном для доступа месте.
Учтите, что при добавлении каждого нового клиента вам нужно будет сгенерировать для него новые ключи и сертификаты, прежде чем запускать этот скрипт и генерировать файл конфигурации. На следующем шаге вы сможете потренироваться в использовании этого скрипта.
Шаг 12 — Создание конфигураций клиентов
Если вы следовали указаниям руководства, на шаге 6 вы создали клиентский сертификат и ключ с именами client1.crt
и client1.key
соответственно. Вы можете сгенерировать файл конфигурации для этих учетных данных, перейдя в директорию ~/client-configs
и запустив скрипт, созданный в конце предыдущего шага:
- cd ~/client-configs
- ./make_config.sh client1
При этом файл client1.ovpn
будет создан в директории ~/client-configs/files
:
- ls ~/client-configs/files
Output
client1.ovpn
Этот файл нужно будет переместить на устройство, которое вы планируете использовать в качестве клиента. Например, это может быть ваш локальный компьютер или мобильное устройство.
Хотя конкретные приложения для передачи зависят от операционной системы устройства и ваших предпочтений, один из наиболее надежных и безопасных способов — использовать SFTP (протокол передачи файлов SSH) или SCP (защищенное копирование) на стороне сервера. При этом файлы аутентификации VPN вашего клиента будут передаваться через шифрованное соединение.
Здесь представлен пример команды SFTP, которую можно запустить с локального компьютера (под управлением macOS или Linux). Она будет копировать файл client1.ovpn
, который мы создали на последнем шаге, в вашу домашнюю директорию:
- sftp [email protected]_server_ip:client-configs/files/client1.ovpn ~/
Ниже представлено несколько инструментов и обучающих руководств для безопасной передачи файлов с сервера OpenVPN на локальный компьютер:
Шаг 13 — Установка клиентской конфигурации
В этом разделе рассказывается о том, как установить клиентский профиль VPN в Windows, macOS, Linux, iOS и Android. Эти инструкции не зависят друг от друга, так что вы можете сразу перейти к той, которая относится к вашему устройству.
Подключение OpenVPN будет иметь имя, совпадающее с именем файла .ovpn
. В этом обучающем руководстве это означает, что соединение будет иметь имя client1.ovpn
, что соответствует первому сгенерированному клиентскому файлу.
Windows
Установка
Загрузите клиентское приложение OpenVPN для Windows со страницы загрузки OpenVPN. Выберите подходящую версию программы установки для вашей версии Windows.
Примечание. Для установки OpenVPN требуются права администратора.
После установки OpenVPN, скопируйте файл .ovpn
в:
C:\Program Files\OpenVPN\config
При запуске OpenVPN профиль будет автоматически обнаружен и сделан доступным.
Вы должны запускать OpenVPN от имени администратора каждый раз, даже если используете учетную запись администратора. Чтобы вам не нужно было при каждом запуске VPN нажимать правую кнопку мыши и выбирать Запуск от имени администратора, такой запуск следует настроить в учетной записи администратора. Это также означает, что обычным пользователям нужно будет ввести пароль администратора, чтобы использовать OpenVPN. Обычные пользователи не смогут правильно подключиться к серверу, если у приложения OpenVPN на клиентской системе нет прав администратора, поэтому необходим повышенный уровень привилегий.
Чтобы настроить приложение OpenVPN для запуска от имени администратора при каждом запуске, нажмите правой кнопкой мыши на его ярлык и выберите пункт Свойства. Внизу вкладки Совместимость нажмите кнопку Изменить параметры для всех пользователей. В новом окне установите отметку Запускать эту программу от имени администратора.
Подключение
При каждом запуске графического интерфейса OpenVPN операционная система Windows будет спрашивать, разрешаете или вы этой программме внести изменения на вашем компьютере. Нажмите Да. При запуске клиентского приложения OpenVPN в области задач появляется значок приложения, с помощью которого вы сможете подключать и отключать соединение VPN; соединение VPN не устанавливается автоматически.
После запуска OpenVPN нажмите правой кнопкой на значок OpenVPN в области задач, чтобы создать соединение. Откроется контекстное меню. Выберите client1 в верхней части меню (это ваш профиль client1.ovpn
) и нажмите Подключиться.
Откроется окно состояния, где будут выведены данные журнала при установке соединения, и после подключения клиента будет выведено сообщение.
Отключение от VPN выполняется аналогично: перейдите в область задач, нажмите значок приложения OpenVPN правой кнопкой мыши, выберите профиль клиента и нажмите Отключиться.
macOS
Установка
Tunnelblick — бесплатный клиент OpenVPN с открытым исходным кодом для macOS. Вы можете загрузить последний образ этого клиентского приложения со страницы загрузки Tunnelblick. Дважды нажмите загруженный файл .dmg
и следуйте указаниям по установке.
В конце процесса установки Tunnelblick спросит, есть ли у вас файлы конфигурации. Укажите ответ У меня есть файлы конфигурации и дайте Tunnelblick завершить работу. Откройте окно Finder и дважды нажмите client1.ovpn
. Tunnelblick установит клиентский профиль. Для этого требуются привилегии администратора.
Подключение
Запустите Tunnelblick, дважды щелкнув значок Tunnelblick в папке Приложения. После запуска Tunnelblick в панели меню в правом верхнем углу экрана появится значок Tunnelblick для управления соединениями. Нажмите на значок, а затем нажмите на пункт меню Подключить client1, чтобы создать соединение VPN.
Linux
Установка
Если вы используете Linux, существуют различные инструменты в зависимости от вашего дистрибутива. Диспетчер окон или среда рабочего стола также могут содержать утилиты для подключения.
Однако проще всего будет использовать для этой цели программное обеспечение OpenVPN.
В Ubuntu или Debian вы можете установить его так же, как и на сервере, введя следующую команду:
- sudo apt update
- sudo apt install openvpn
В CentOS вы можете активировать репозитории EPEL и выполнить установку, введя следующую команду:
- sudo dnf install epel-release
- sudo dnf install openvpn
Настройка клиентов, использующих systemd-resolved
Вначале определите, использует ли ваша система systemd-resolved
для разрешения DNS, проверив файл /etc/resolv.conf
:
Output
# This file is managed by man:systemd-resolved(8). Do not edit. . . . nameserver 127.0.0.53 options edns0
Если ваша система настроена для использования systemd-resolved
для разрешения DNS , IP-адрес после опции nameserver
будет иметь значение 127.0.0.53
. Также в файле должны быть комментарии, в частности информация о том, как systemd-resolved
управляет файлом. Если у вас отображается не 127.0.0.53
, а другой IP-адрес, то есть вероятность, что ваша система не использует systemd-resolved
. В этом случае вы можете перейти к следующему разделу, предназначенному для настройки клиентов Linux, использующих скрипт update-resolv-conf
.
Для поддержки этих клиентов нужно предварительно установить пакет openvpn-systemd-resolved
. Он содержит скрипты, принудительно запускающие использование systemd-resolved
для разрешения DNS сервером VPN.
- sudo apt install openvpn-systemd-resolved
После установки пакета настройте клиент для его использования и отправки всех запросов DNS через интерфейс VPN. Откройте файл VPN клиента:
Разкомментируйте следующие строки, добавленные вами ранее:
client1.ovpn
script-security 2 up /etc/openvpn/update-systemd-resolved down /etc/openvpn/update-systemd-resolved down-pre dhcp-option DOMAIN-ROUTE .
Настройка клиентов, использующих update-resolv-conf
Если ваша система не использует systemd-resolved
для управления DNS, проверьте наличие в вашем дистрибутиве скрипта /etc/openvpn/update-resolv-conf
:
Output
update-resolv-conf
Если в вашем клиенте имеется файл update-resolv-conf
, измените ранее переданный файл конфигурации клиента OpenVPN:
Разкомментируйте три добавленные вами строки для изменения настроек DNS:
client1.ovpn
script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf
Если вы используете CentOS, измените директиву group
с nogroup
на nobody
для соответствия доступным группам дистрибутива:
client1.ovpn
group nobody
Сохраните и закройте файл.
Подключение
Теперь для подключения к VPN вы можете просто указать команде openvpn
файл конфигурации клиента:
- sudo openvpn --config client1.ovpn
Эта команда должна установить подключение к вашей VPN.
Примечание. Если ваш клиент использует systemd-resolved
для управления DNS, проверьте правильность применения настроек, запустив команду systemd-resolve --status
:
- systemd-resolve --status tun0
Результат будет выглядеть следующим образом:
Output
Link 22 (tun0) . . . DNS Servers: 208.67.222.222 208.67.220.220 DNS Domain: ~.
Если вы видите IP-адреса серверов DNS, настроенные вами на сервере OpenVPN, и настройку ~.
для DNS Domain в выводе, это означает, что вы правильно настроили клиент для управления DNS на сервере VPN. Также вы можете проверить отправку запросов DNS через VPN используя сайт DNS leak test.com или другой подобный сайт.
iOS
Установка
Найдите в магазине приложений iTunes App Store приложение OpenVPN Connect, официальный клиент OpenVPN для iOS, и установите его. Чтобы переместить конфигурацию клиента iOS на устройство, подключите его к компьютеру напрямую.
Здесь описан процесс завершения передачи с помощью iTunes. Откройте iTunes на компьютере и нажмите iPhone > приложения. Прокрутите страницу до раздела Общий доступ к файлам и нажмите на приложение OpenVPN. Пустое окно справа OpenVPN Documents предназначено для общего доступа к файлам. Перетащите файл .ovpn
в окно OpenVPN Documents.
Запустите приложение OpenVPN на iPhone. Вы получите уведомление, что новый профиль готов к импорту. Нажмите зеленый значок плюс, чтобы импортировать его.
Подключение
Приложение OpenVPN готово к использованию нового профиля. Установите соединение, передвинув кнопку Подключиться в положение Вкл. Для отключения передвиньте эту же кнопку в положение Выкл.
Примечание. Переключатель VPN в разделе Настройки нельзя использовать для подключения к VPN. Если вы попробуете сделать это, вы получите уведомление о том, что для подключения нужно использовать приложение OpenVPN.
Android
Установка
Откройте магазин приложений Google Play Store. Найдите приложение Android OpenVPN Connect, официальное клиентское приложение OpenVPN для Android, и установите его.
Вы можете переместить профиль .ovpn
, подключив устройство Android к вашему компьютеру через интерфейс USB и скопировав файл. Если у вас в компьютере есть разъем для SD-карт, вы можете извлечь SD-карту из устройства, скопировать на нее профиль и вставить карту обратно в устройство Android.
Запустите приложение OpenVPN и нажмите меню FILE
, чтобы импортировать профиль.
Затем перейдите в местоположение сохраненного профиля (на снимке экрана используется расположение /storage/emulated/0/openvpn
) и выберите файл .ovpn
. Нажмите кнопку IMPORT
, чтобы завершить импорт этого профиля.
Подключение После добавления профиля вы увидите следующий экран:
Для подключения нажмите кнопку-переключатель рядом с профилем, который вы хотите использовать. Вы увидите статистические данные вашего подключения в режиме реального времени и трафик, проходящий через ваш сервер OpenVPN:
Для отключения просто нажмите кнопку-переключатель слева еще раз. Вам будет предложено подтвердить, что вы хотите отключиться от VPN.
Шаг 14 — Тестирование соединения VPN (необязательно)
Примечание. Этот метод тестирования подключения VPN будет работать только в случае, если вы выбрали перенаправление всего трафика через VPN на шаге 7 при редактировании файла server.conf
для OpenVPN.
После завершения установки нужно провести простую проверку, чтобы убедиться, что все работает нормально. Не активируйте соединение VPN, откройте браузер и перейдите в DNSLeakTest.
Сайт покажет IP-адрес, назначенный вашим интернет-провайдером и видный остальному миру. Чтобы проверить настройки DNS через этот же сайт, нажмите Расширенный тест, и вы увидите, какие серверы DNS вы используете.
Теперь подключите клиент OpenVPN к VPN вашего дроплета и обновите браузер. Вы увидите совершенно другой IP-адрес (адрес вашего сервера VPN), и именно этот адрес будет виден остальному миру. Итак, в приложении DNSLeakTest функция Расширенный тест проверит ваши настройки DNS и подтвердит, что вы используете параметры DNS, заданные вашей VPN.
Шаг 15 — Отзыв сертификатов клиента
Иногда вам может понадобиться отозвать клиентский сертификат, чтобы предотвратить дальнейший доступ к серверу OpenVPN.
Для этго используйте пример из предварительного обучающего модуля «Установка и настройка центра сертификации в 20.04» из раздела «Отзыв сертификата».
После отзыва сертификата для клиента с помощью этих инструкций вам нужно будет скопировать созданный файл crl.pem
на ваш сервер OpenVPN в директорию /etc/openvpn/server
:
- sudo cp /tmp/crl.pem /etc/openvpn/server/
Затем откройте файл конфигурации сервера OpenVPN:
- sudo nano /etc/openvpn/server/server.conf
Добавьте в конце файла опцию crl-verify
, чтобы сервер OpenVPN проверял созданный нами список отзыва сертификатов при каждой попытке подключения:
/etc/openvpn/server/server.conf
crl-verify crl.pem
Сохраните и закройте файл.
Перезапустите OpenVPN, чтобы завершить отзыв сертификата:
- sudo systemctl restart [email protected]
Клиент больше не сможет подключаться к серверу, используя старые учетные данные.
Чтобы запретить доступ другим клиентам, повторите эту процедуру:
- Для отзыва сертификата используется команда
./easyrsa revoke client_name
. - Создайте новый список CRL.
- Переместите новый файл
crl.pem
на сервер OpenVPN и скопируйте его в директорию/etc/openvpn/server/
, чтобы перезаписать старый список. - Перезапустите службу OpenVPN.
С помощью этой процедуры вы можете отозвать любые сертификаты, которые ранее выпустили для вашего сервера.
Заключение
Теперь у вас должна быть полностью готовая к использованию виртуальная частная сеть, запущенная на вашем сервере OpenVPN. Вы можете просматривать веб-ресурсы и загружать контент, не беспокоясь о том, что злоумышленники смогут отслеживать вашу активность.
Для дальнейшей кастомизации вашей установки OpenVPN можно выполнить несколько шагов, например, настроить для вашего клиента автоматическое подключение к VPN или задать специальные правила и политики доступа для конкретного клиента. При выполнении этих действий по кастомизации OpenVPN вы должны ознакомиться с официальной документацией для OpenVPN.
Для настройки большего числа клиентов вам нужно выполнить шаги 6 и 11–13 для каждого дополнительного устройства. Чтобы запретить доступ клиентским системам, следуйте указаниям в шаге 15.
Как настроить OpenVPN Server на Ubuntu 20.04
Когда, защищая свою сеть от несанкционированного доступа, вы подключаете сетевой экран, очень часто приходится решать задачи по обеспечению доступа в вашу защищённую сеть извне, например, с вашего домашнего компьютера или с рабочих станций, находящихся в удалённых сетях. Для реализации такого доступа без необходимости изменения конфигурации брандмауэра и без потерь в обеспечении защищённости ваших ресурсов существует технология Virtual Private Network (VPN). При этом бесплатной реализацией VPN является сервис с открытым кодом OpenVPN. Далее о том, как настроить OpenVPN Server на Ubuntu 20.04.
Чтобы это сделать, вы должны иметь два сервера установленной ОС Ubuntu 20.04. Помимо сервера с установленным и настроенным ПО OpenVPN (Сервер VPN), вам понадобится ещё один сервер, на котором будет развёрнут Центр Сертификации (в данном руководстве это будет Сервер ЦС).
Несмотря на то, что и ПО OpenVPN, и ЦС можно установить на один сервер, или даже вынести ЦС на клиентский компьютер, с которого предполагается осуществлять подключение к вашей закрытой сети, официальная документация рекомендует разместить ЦА на отдельном ресурсе из-за угрозы предоставления злоумышленнику доступа к секретному ключу вашего ЦС. Если это произойдёт, он сможет подписывать добытым ключом новые сертификаты, и, таким образом, получит доступ к вашему Серверу VPN. Также, для упрощения настройки VPN, рекомендуется включить аутентификацию пользователей с использованием пароля на каждом из серверов, в случае, если она у вас отключена. Всё дело в том, что при настройке ваших VPS, вы можете столкнуться со сложностями при транспортировке файлов с одного сервера на другой.
Центр сертификации
Установку узла VPN следует начать с настройки Сервера ЦС, который будет использоваться исключительно для создания и подписания, а также, для отзыва и выгрузки запросов на сертификаты.
Для начала на Сервере ЦС запустите установку утилиты easy-rsa
:
$sudo apt update
$sudo apt install easy-rsa
После чего, необходимо создать каталог ~/easy-rsa
:
$ mkdir ~/easy-rsa
Создать ссылку:
$ ln -s /usr/share/easy-rsa/* ~/easy-rsa/
И установить соответствующие права:
$ chmod 700 /home/Your-user
/easy-rsa
После чего, запустите на исполнение скрипт easyrsa
:
$ cd ~/easy-rsa $ ./easyrsa init-pki
Таким образом, вы создали директорию “инфраструктуры открытых ключей” (Public Key Infrastructure или сокращённо PKI).
Теперь всё готово для создания Центра Сертификации, а значит, пора переходить к созданию секретного ключа и сертификата. Для этого создайте файл vars
. Он должен располагаться в директории ~/easy-rsa
. Если вы используете редактор nano
, наберите:
$ sudo nano ~/easy-rsa/vars
Скопируйте в этот файл следующий текст:
set_var EASYRSA_REQ_COUNTRY "RUS" set_var EASYRSA_REQ_PROVINCE "Moscow" set_var EASYRSA_REQ_CITY "Moscow City" set_var EASYRSA_REQ_ORG "Our Company Name" set_var EASYRSA_REQ_EMAIL "[email protected]" set_var EASYRSA_REQ_OU "LLC" set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512"
В этих строках необходимо отредактировать значения, которые относятся к вашей закрытой сети, при этом, не оставляйте пустых значений. Перед выходом из файла его нужно сохранить (для этого в nano
нажмите Ctrl+X
, затем Y
и Enter
).
Далее, запустите скрипт easyrsa
в командной строке:
$ ./easyrsa build-ca
Здесь необходимо будет ввести парольную фразу, которую впоследствии нужно вводить для получения доступа к вашему ЦС при совершении операций с сертификатами.
Также система предложит вам ввести Common Name, которое представляет собой обозначение вашего ЦС. Вы можете ввести любую символьную строку или принять дефолтное имя нажав Enter
.
Файл ca.crt – это открытый ключ ЦС. Он будет использоваться клиентами и серверами для проверки при авторизации.
Теперь ваш центр сертификации подготовлен к работе.
OpenVPN и Easy-RSA
На Сервере VPN необходимо запустить установку пакета OpenVPN и утилиты Easy-RSA:
$sudo apt update
$sudo apt install openvpn easy-rsa
Далее, необходимо создать каталог ~/easy-rsa
:
$ mkdir ~/easy-rsa
Создайте ссылку:
$ ln -s /usr/share/easy-rsa/* ~/easy-rsa/
И установите соответствующего владельца на эту папку с соответствующими правами:
$sudo chown Your-user ~/easy-rsa
$chmod 700 ~/easy-rsa
PKI для OpenVPN
На этом шаге нужно будет создать директорию на Сервере VPN, которая будет использоваться для управления запросами создаваемых сертификатов.
Сначала создайте файл vars
в директории ~/easy-rsa
, например, с помощью редактора nano
:
$ sudo nano ~/easy-rsa/vars
Скопируйте в него следующее:
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"
Сохраните файл и закройте его (в nano
для этого нажмите Ctrl+X
, затем Y
и Enter
).
Теперь необходимо создать каталог PKI
. Сделайте это при помощи скрипта easyrsa
:
$ ./easyrsa init-pki
Сертификат и закрытый ключ OpenVPN
Теперь всё необходимое для генерации закрытых ключей и запросов на подписание сертификатов установлено на Сервере VPN.
На этом шаге вы создадите секретный ключ, а также, запрос подписи сертификата. Сначала вам необходимо перейти в директорию ~/easy-rsa
. Это нужно сделать на Сервере VPN.
$ cd ~/easy-rsa
Далее запустите easyrsa
, где server
– CN вашего Сервера VPN (вместо server
вы можете использовать любую последовательность символов):
$ ./easyrsa gen-req server nopass
Таким образом, вы создали файл запроса сертификата server.req
и секретный ключ.

Этот файл нужно скопировать в /etc/openvpn/server
:
$ sudo cp /home/Your-user
/easy-rsa/pki/private/server.key /etc/openvpn/server/
Подписание запроса сертификата
На этом этапе необходимо выполнить подписание сертификата server
. Сначала скопируйте файл server.req
на сервер ЦС для подписания:
$ scp /home/Your-user
/easy-rsa/pki/reqs/server.req Your-user
@X.X.X.X:/tmp
Здесь, Your-user – имя вашей учётной записи, server – CN вашего Сервера VPN, X.X.X.X – IP-адрес Сервера ЦС.
Далее, подключитесь к вашему Серверу ЦС, переключитесь в папку ~/easy-rsa
и запустите импорт запроса server.req
при помощи easyrsa
:
$cd ~/easy-rsa
$./easyrsa import-req /tmp/server.req server
Теперь необходимо запустить подписание запроса при помощи скрипта easyrsa
используя опцию sign-req
и такой тип запроса как server
:
$ ./easyrsa sign-req server server
Для подтверждения надёжности источника запроса наберите Yes
, после чего нажмите Enter
.
И наконец, файл server.crt
, в котором находится открытый ключ шифрования, и файл ca.crt
, содержащий собственный доверенный сертификат, скопируйте на Сервер VPN:
$$
scp pki/issued/server.crt
Your-user
@X.X.X.X
:/tmpscp pki/ca.crt
[email protected]
:/tmp
В данном случае, Your-user – имя вашей учётной записи, server – CN вашего Сервера VPN, X.X.X.X – IP-адрес Сервера VPN.
После чего на Сервере VPN эти файлы скопируйте из /tmp
в /etc/openvpn/server
:
$ sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/server
Криптография OpenVPN
Чтобы повысить уровень безопасности следует добавить дополнительный секретный ключ для использования сервером и клиентами при помощи OpenVPN tls-crypt
. Для создания публичного tls-crypt
ключа запустите:
$cd ~/easy-rsa
$openvpn --genkey --secret ta.key
Файл ta.key
нужно будет скопировать в директорию /etc/openvpn/server/
:
$ sudo cp ta.key /etc/openvpn/server
Теперь вы готовы создавать сертификаты клиентов вашего VPN и ключи для подключения к OpenVPN.
Генерация сертификатов и ключей
Здесь вам нужно создать директории для хранения сертификатов клиентов и файлов ключей, а также, назначить им соответствующие права, например:
$mkdir -p ~/clients/keys
$chmod -R 700 ~/clients
После чего запустите скрипт easyrsa
используя опции gen-req
и nopass
, а также, с использованием CN клиента:
$cd ~/easy-rsa
$./easyrsa gen-req client-1 nopass
И скопируйте client-1.key
в ~/clients/keys/
:
$ cp pki/private/client-1.key ~/clients/keys/
После чего файл client-1.req
скопируйте на Сервер ЦС:
$ scp pki/reqs/client-1.req [email protected]
:/tmp
А на сервере ЦС запустите импорт запроса client-1.req
:
$cd ~/easy-rs
$./easyrsa import-req /tmp/client-1.req client-1
Теперь этот запрос необходимо подписать, используя тип запроса client
:
$ ./easyrsa sign-req client client-1
Таким образом, вы сгенерировали сертификат клиента client-1.crt
. Его необходимо передать на Сервер VPN:
$ scp pki/issued/client-1.crt [email protected]
:/tmp
И на Сервере VPN нужно скопировать его в папку ~/clients/keys/
:
$ cp /tmp/client-1.crt ~/clients/keys/
Далее, ca.crt
и ta.key
скопируйте в каталог ~/clients/keys/
с соответствующими правами:
$cp ~/easy-rsa/ta.key ~/clients/keys/
$sudo cp /etc/openvpn/server/ca.crt ~/clients/keys/
$sudo chown
Your-user
.Your-user
~/clients/keys/*
Настройка OpenVPN
На данном шаге произведите некоторые настройки конфигурации Сервера VPN:
- Скопируйте
server.conf
в директорию OpenVPN:
$sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server/
$sudo gunzip /etc/openvpn/server/server.conf.gz
- Откройте этот файл для редактирования, например, с помощью
nano
:
$ sudo nano /etc/openvpn/server/server.conf
- В разделе
HMAC
закомментируйте строкуtls-auth
и после неё вставьте строкуtls-crypt ta.key
:
- Найдите в том же файле строку
cipher AES-256-CBC
, закомментируйте её и добавьте строкиcipher AES-256-GCM
иauth SHA256
:
- Теперь найдите текст либо
dh dh3048.pem
, либоdh dh.pem
и закомментируйте его, так как в вашем случае нет необходимости использовать файл Диффи-Хеллмана. После закомментированной строки вставьте строкуdh none
:
- И для того, чтобы OpenVPN запускался без привилегий, снимите комментарий перед
user nobody
иgroup nogroup
:
Сохраните изменения в файле, закройте его.
Конфигурация сети на Сервере VPN
Теперь необходимо внести изменения в конфигурацию сети на Сервере VPN для обеспечения правильной маршрутизации трафика. А именно, откройте конфигурационный файл /etc/sysctl.conf
:
$ sudo nano /etc/sysctl.conf
После чего добавьте строку:
net.ipv4.ip_forward = 1
Перед закрытием файла сохраните внесённые изменения.
Для применения новой настройки наберите:
$ sudo sysctl -p
Изменение конфигурации сетевого экрана
Далее, вам следует произвести настройки, касающиеся ранее установленного и сконфигурированного интерфейса брандмауэра UFW на Сервере VPN. А именно, нужно разрешить работу OpenVPN через брандмауэр путём включения типа трансляции адресов, который называется маскарадинг. Такая технология позволяет транслировать пакеты клиентов, подставляя адреса отправителей в динамике.
Чтобы определить открытый сетевой интерфейс, используйте команду:
$ ip route list default
Его можно увидеть после параметра dev
:
Теперь откройте /etc/ufw/before.rules
:
$ sudo nano /etc/ufw/before.rules
В начало файла скопируйте строки:
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

Сохраните внесённые изменения и закройте файл.
Откройте файл /etc/default/ufw
:
$ sudo nano /etc/default/ufw
В строке DEFAULT_FORWARD_POLICY
поменяйте значение DROP
на значение ACCEPT
:
Сохраните изменения в файле и закройте его.
Следующими командами откройте UDP-трафик на порту 1194 и добавьте в UFW протокол OpenSSH, если вы не сделали этого ранее:
$sudo ufw allow 1194/udp
$sudo ufw allow OpenSSH
Перезапустите UFW:
$sudo ufw disable
$sudo ufw enable
Запуск OpenVPN
При помощи systemctl произведите запуск службы OpenVPN c включением его в автозагрузку:
$sudo systemctl -f enable [email protected]
$sudo systemctl start [email protected]
Проверьте корректность запуска службы:
$ sudo systemctl status [email protected]
Вывод команды должен выглядеть так:
Конфигурация клиентов
На этом шаге вам необходимо создать скрипт, с помощью которого можно будет создавать уникальные файлы клиентов, ключи и сертификаты используя базовую инфраструктуру конфигурации.
Это будет полезно с точки зрения автоматизации ваших действий при организации доступа для каждого из клиентов.
Создайте структуру директорий, где будут сохраняться файлы:
$ mkdir -p ~/clients/files
Скопируйте шаблон клиентской конфигурации в папку clients
:
$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/clients/base.conf
Откройте base.conf
:
$ sudo nano ~/clients/base.conf
В строке remote
замените порт 1194 на нужный вам, если меняли номер порта, который прослушивает Сервер VPN:
remote X.X.X.X 1194
Должен быть правильно указан протокол:
proto udp
Снимите комментарий со строк:
user nobody group nogroup
Закомментируйте следующие строки:
;ca ca.crt ;cert client.crt ;key client.key
А строку относящуюся к tls-auth
, наоборот, нужно раскомментировать:
tls-auth ta.key 1
Следующие строки должны совпадать с соответствующими строками, прописанными в файле /etc/openvpn/server.conf
:
cipher AES-256-GCM
auth SHA256
Добавьте строку:
key-direction 1
Также добавьте строки, которые нужно будет раскомментировать только для Linux-клиентов:
; script-security 2
; up /etc/openvpn/update-resolv-conf
; down /etc/openvpn/update-resolv-conf
Плюс ко всему, добавьте строки настроек для клиентов, которые планируют использовать systemd-resolved
:
; script-security 2
; up /etc/openvpn/update-systemd-resolved
; down /etc/openvpn/update-systemd-resolved
; down-pre
; dhcp-option DOMAIN-ROUTE
Сохраните изменения в файле, закройте его.
Теперь необходимо создать скрипт make_config.sh
. Он создаст базовую клиентскую конфигурацию, которая будет сохранена в директории ~/clients/files
:
$ sudo nano ~/clients/make_config.sh
Скрипт должен содержать:
#!/bin/bash
# First argument: Client identifier
KEY_DIR=~/clients/keys
OUTPUT_DIR=~/clients/files
BASE_CONFIG=~/clients/base.conf
cat ${BASE_CONFIG} \
<(echo -e '<ca>') \
${KEY_DIR}/ca.crt \
<(echo -e '</ca>\n<cert>') \
${KEY_DIR}/${1}.crt \
<(echo -e '</cert>\n<key>') \
${KEY_DIR}/${1}.key \
<(echo -e '</key>\n<tls-crypt>') \
${KEY_DIR}/ta.key \
<(echo -e '</tls-crypt>') \
> ${OUTPUT_DIR}/${1}.ovpn
Сохраните скрипт, закройте его и назначьте ему соответствующие права:
$ chmod 700 ~/clients/make_config.sh
Создание клиента
Итак, вы создали сертификат клиента client-1.crt
и файл ключа client-1.key
. Теперь можно создать клиентский файл конфигурации. Для это нужно запустить на исполнение скрипт ~/clients/make_config.sh
:
$cd ~/clients
$./make_config.sh client-1
В результате скрипт создаст файл ~/clients/files/client-1.ovpn
.
Такой файл необходимо передать клиенту для установки на устройство, которое он будет использовать для подключения к закрытой сети через Сервер VPN. При этом, на стороне клиента должно быть развёрнуто программное обеспечение OpenVPN, к которому нужно подключить полученнный из ЦС файл с расширением ovpn
. Например, если рабочая станция клиента работает под управлением ОС Windows, достаточно с сайта OpenVPN скачать дистрибутив Windows-приложения, установить его и скопировать файл сертификата .ovpn
в одну из папок, указанных приложением при первом запуске. Это позволит клиенту осуществлять извне работу с ресурсами, расположенными внутри вашей сети, без изменений в конфигурации сетевого экрана и не понижая при этом уровень защищённости сети.
Следует отметить, что в данном руководстве в качестве сервера ЦС использовалась виртуальная машина, на которой также, как и на сервере OpenVPN, развёрнута ОС Ubuntu 20.04. На самом деле, в качестве сервера ЦС вы можете использовать как и ваш VPS, на котором вы настроили серверный сегмент VPN (что не является хорошим вариантом с точки зрения соблюдения мер информационной безопасности), но и любой компьютер или сервер, находящийся за пределами вашей закрытой сети. Во втором варианте, вам нужно продумать организацию безопасного трансфера файлов ключей и сертификатов между рабочей станцией с настроенным ЦС и сервером VPN.
Инструкция по установке и настройке OpenVPN в Ubuntu
OpenVPN - открытая реализация одной из технологий VPN, предназначенная для организации защищенных виртуальных частных сетей между территориально удаленным локальными сетями, а также отдельными клиентами. Безопасность туннелей обеспечивается шифрованием с помощью OpenSSL.
Как работает OpenVPN?
По окончании настройки сервера и его запуске, он перейдет в режим готовности приема и перенаправления внешних защищенных SSL-соединений на виртуальный сетевой адаптер (tun/tap).
По желанию, маршрутизация сервера может быть настроена таким образом, чтобы Интернет-трафик клиентов проходил через сервер и становился трафиком сервера. В этом случае OpenVPN будет выполнять проксирование трафика (proxy).
Что требуется от операционной системы?
Перед установкой OpenVPN необходимо убедиться в корректности базовых параметров.
1. У сервера есть хотя бы один “белый” статичный IP-адрес. Т.е. сервер должен быть доступен из сети Интернет. Если адрес динамический, но сервер все же остается быть доступным из глобальной сети - воспользуйтесь услугами DynDNS.
2. Разрешена загрузка и установка пакетов из официальных репозиториев. Для проверки выполните cat /etc/apt/sources.list. Строки с указаниями репозиториев должны быть раскомментированы (не должно быть символа “#” решетка в начале строки).

3. Должны быть верно указаны параметры сети - hostname, параметры DNS-серверов.
Для обеспечения должного уровня безопасности, рекомендуем ознакомиться с нашими рекомендациями.
Приступаем к установке.
Все действия по установке будем выполнять от пользователя root.
1. Обновляем информацию о репозиториях:
apt-get update
2. Устанавливаем текущие обновления системы и установленных программ:
apt-get upgrade
3. Устанавливаем OpenVPN:
apt-get install openvpn


Важно. В базовых репозиториях, зачастую отсутствует новейшая версия пакета. Разработчики OpenVPN ведут собственный репозиторий, о том как его настроить можно ознакомиться на официальном сайте.
4. Аналогичным образом устанавливаем пакет easy-rsa:
apt-get install easy-rsa
Действия после установки.
Размещаем скрипты easy-rsa:
cd /etc/openvpn/ && make-cadir easy-rsa
Подготавливаем публичные ключи (PKI - Public Key Infrastructure):
1. Переходим в директорию /etc/openvpn/easy-rsa:
cd /etc/openvpn/easy-rsa
2. Создаем символьную ссылку на файл конфигурации openssl:
ln -s openssl-1.0.0.cnf openssl.cnf
3. Инициализируем скрипт vars:
source ./vars
Система сообщит: NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
4. Выполняем
./clean-all

5. Для создания центра сертификации выполняем скрипт:
./build-ca
В ходе своей работы, программа задаст несколько вопросов. Отвечать на них следует латиницей. Если вы не заполните какое-либо поле, программа подставит значения по умолчанию, обычно указанные в скобках.


Создаем ключ сервера.
Для создания ключа сервера выполним команду:
./build-key-server server


Следует обратить внимание, что процесс похож на генерацию сертификата центра сертификации, однако, перед подписанием сертификата программа задаст 2 уточняющих вопроса. Если все указано верно, отвечаем “y”.
Генерация клиентских ключей.
Аналогично генерации серверных ключей создаются и клиентские:
./build-key client1
Следует обратить внимание, что созданный client1.key не имеет парольной или криптографической защиты. Это может привести к тому, что любой пользователь завладевший файлом может попробовать подключиться к серверу. Если такая угроза существует, лучше генерировать ключи другим скриптом:
./build-key-pass client2
Скрипт запросит пароль ную фразу в самом начале. Далее процесс ничем не отличается от генерации ключей сервера и простого клиента.


Следует помнить, что имена ключей должны быть уникальными. Один пользователь - один ключ с уникальным именем.
Бывает так, что в процессе работы сервера, по прошествии некоторого времени, необходимо создать еще один или несколько сертификатов. Для этого потребуется повторно инициализировать скрипт vars и только потом запустить процесс генерации ключа:
cd /etc/openvpn/easy-rsa
source ./vars
./build-key client3
Генерация ключа Диффи-Хеллмана
Благодаря протоколу Диффи-Хеллмана, две и более стороны могут получить один секретный ключ, который позволит выстроить защищенный канал связи. Генерируются ключи командой:
./build-dh
Результат будет примерно таким.


По окончании работы программы, в директории /etc/openvpn/easy-rsa/keys/ появится файл dh3048.pem
Перемещение сертификатов и ключей
Сервер
Ключи и сертификаты созданы. Настало время раздать их пользователям, а серверные ключи скопировать в соответствующие каталоги на сервере.
1. Переходим в каталог с ключами:
cd /etc/openvpn/easy-rsa/keys
2. Копируем только необходимые серверу файлы:
cp ca.crt ca.key dh3048.pem server.crt server.key /etc/openvpn
Важно понимать, что перечисленные выше файлы являются основой работы и безопасности VPN сервера. Утеря или подмена этих файлов может иметь крайне негативные последствия. Важно хранить их в надежном месте и не передавать по открытым каналам связи.
Клиенты
Клиенту понадобится всего 3 файла ca.crt, client1.crt, client1.key. Каждому клиенту необходимо отдавать только его ключи. Данные файлы можно разместить в директории /etc/openvpn на машине клиента, если она под управлением Linux-подобной ОС.
В ОС Windows их следует разместить в пользовательский каталог.
Настройка сервера и клиента
Сервер
Большинство устанавливаемых программ в ОС Linux имеют так называемые sample-файлы. Эти файлы содержат примеры настройки и объяснения их. OpenVPN не стал исключением. Распакуем серверный конфигурационный файл в директорию /etc/openvpn:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
С полученным файлом сервер уже готов к работе. Он сконфигурирован с возможностью туннелирования, однако не имеет возможности к проксированию, т.е. отправки клиентского трафика от своего имени. Исправим это.
Для начала, проверяем какие файлы оказались в директории /etc/openvpn:
ls /etc/openvpn

Открываем файл конфигурации:
nano /etc/openvpn/server.conf
И проверяем соответствие файлов прописанных в конфигурации с файлами находящимися в каталоге. Интересны строки после “SSL/TLS root certificate (ca), certificate (cert), and private key (key).”
Скриншот 9. Файл конфигурации OpenVPN
Если имена отличаются от существующих, следует внести необходимые исправления. Выходим из редактора сочетанием клавиш Ctrl + X.
Запускаем сервер:
/etc/init.d/openvpn start
Проверим результат запуска:
/etc/init.d/openvpn status

Настройки клиента.
Предполагается, что на стороне клиента уже установлен пакет OpenVPN.
1. Копируем файл клиентских настроек в домашний каталог пользователя:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /root
2. Копируем сгенерированные ключи - client1.key, client1.crt, ca.crt:
cd /etc/openvpn/easy-rsa/keys
cp client1.key client1.crt ca.crt /root
3. Редактируем файл конфигурации клиента:
nano /root/client.conf
4. Находим закомментированные строки “# The hostname/IP and port of the server”. Для параметра remote меняем my-server-1 на IP-адрес сервера или его доменное имя.


5. В том же файле, ниже, находим блок “#SSL/TLS parms.”. Редактируем имена ключей.


6. Выходим из редактирования сочетанием Ctrl + X. На вопрос о сохранении изменений отвечаем “Y”. Имя файла оставляем неизменным.
7. Переносим файлы client1.key, client1.crt, ca.crt и client.conf на компьютер клиента с которого будет происходить подключение к серверу OpenVPN.
Важно! Некоторые клиентские реализации OpenVPN работают только с файлами *.ovpn. В подобных случаях достаточно изменить расширение файл (переименовать) с client.conf на client.ovpn.
8. Подключаемся к серверу командой:
openvpn openvpn.conf
Следует обратить внимание, что проксирование до сих пор не настроено. При этом, когда клиентская машина подключена к OpenVPN-серверу, доступ в Интернет прекращается. Связано это с тем, что созданный адаптер TUN, а в месте с ним и сам сервер, являются шлюзом по умолчанию.
Настройка маршрутизации.
1. На сервере редактируем файл server.conf:
nano /etc/openvpn/server.conf
2. В файле находим следующую строку и удаляем перед ней символ “;”, таким образом раскомментируем ее:
push "redirect-gateway def1 bypass-dhcp"
3. Сохраняем и закрываем редактор.
4. Редактируем файл /etc/sysctl:
nano /etc/sysctl.conf
5. В конец файла добавляем следующую строку:
net.ipv4.ip_forward=1
Это разрешит системе пересылать трафик между интерфейсами, но изменения вступят в силу только после перезагрузки. Сохраняем файл и закрываем редактор.
6. Разрешаем форвардинг пакетов без перезагрузки сервера:
echo 1 > /proc/sys/net/ipv4/ip_forward
7. Настроим NAT в iptables. Поочередно вводим команды:
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
iptables -A FORWARD -i tap+ -j ACCEPT
Также их можно просто вписать в файл /etc/rc.local до строки “exit 0” или выполнить настройку firewall как это указано в нашей статье.


Сервер уже готов к использованию. Однако, задача проксировать весь трафик, а следовательно необходимо настроить форвардинг DNS-запросов. Настроим.
1. Устанавливаем dnsmasq
Если установка выполняется в ОС Ubuntu:
apt-get install dnsmasq
Несмотря на то, что в большинстве современных версий ОС Ubuntu dnsmasq уже предустановлен, в старых версиях необходимо выполнить так:
apt-get install dnsmasq && dpkg-reconfigure resolvconf
Возможно запустится диалоговое окно мастера установки. В нем будет 2 вопроса. В первом случае, на вопрос “prepare /etc/resolv.conf for dynamic updates” отвечаем “Yes”, а на следующий - “Append original file to dynamic file?” отвечаем “No”.
Для ОС Debian 7:
apt-get install dnsmasq resolvconf
2. Отредактируем файл настроек dnsmasq:
nano /etc/dnsmasq.conf
Добавим следующие параметры:
listen-address=10.8.0.1
bind-interfaces
Сохраняем файл и закрываем редактор.
3. Редактируем файл сетевых настроек:
nano /etc/network/interfaces
Требуется указать адрес DNS-серверов в соответствующих секциях настроек адаптера:
dns-nameservers 8.8.8.8 8.8.4.4
Возможно это действие уже произведено,. Повторно его выполнять не нужно.
4. Учитывая особенность запуска и последующей работы dnsmasq - возможность аварийного завершения до инициализации виртуального tun-адаптера, добавим следующую строчку в файл rc.local, перед “exit 0”:
/etc/init.d/dnsmasq restart


5. Теперь разрешим клиентам OpenVPN-сервера использовать DNS. С помощью редактора nano раскомментируем строку:
push "dhcp-option DNS 10.8.0.1"
Фиксируем изменения в файле.
6. Перезагружаем сервер:
reboot
Проверка работы
Выполняем повторное подключение к серверу. Пробуем открыть сайт для проверки IP-адреса. В результате должен быть IP-адрес сервера.
Средняя оценка: 4.7 Оценили: 6
191028 Санкт-Петербург Литейный пр., д. 26, Лит. А
+7 (812) 403-06-99
191028 Санкт-Петербург Литейный пр., д. 26, Лит. А
+7 (812) 403-06-99

OpenVPN-сервер c интернет-туннелированием на Ubuntu 12/Debian 7
OpenVPN - открытая реализация технологии виртуальных частных сетей (VPN - Virtual Private Network), предназначенной для создания защищенных виртуальных локальных сетей между группой территориально удаленных клиентов поверх публичного канала передачи данных (интернет). Этот инструмент отлично подходит для таких задач, как безопасное сетевое подключение извне к серверу без предоставления публичного интернет-доступа к нему. Безопасность соединения достигается за счет шифрования канала с помощью OpenSSL.
Содержание:
Как работает OpenVPN?
После завершения настройки OpenVPN сервер сможет принимать и перенаправлять внешние защищенные SSL сетевые подключения к созданному при запуске VPN-сервиса виртуальному сетевому удаптеру (tun/tap), не затрагивая правила обработки трафика других интерфейсов (внешний интернет-адаптер и др.) Благодаря этой технологии вы можете обеспечить себе доступ к удаленному серверу и находящейся в его локальной сети группе устройств даже в том случае, если основной интернет-адаптер этого сервера не принимает входящие подключения из публичных сетей и/или не осуществляет их маршрутизацию до необходимых машин, находящихся в его LAN-сети.
При необходимости вы также можете настроить маршрутизацию интернет-трафика OpenVPN-клиентов через VPN-сервер (необходимые для этого действия описаны в данной инструкции). При такой переадресации обрабатывающий VPN-подключения хост будет выполнять и функцию прокси-сервера (Proxy) - унифицировать правила сетевой активности пользователей и осуществлять туннелирование клиентского интернет-трафика от своего имени.
Требования к системе
Прежде чем приступить к установке OpenVPN, убедитесь что на вашем сервере корректно настроены необходимые базовые параметры, приведенные ниже. (если вы используете виртуальный сервер 1cloud.ru, эти три пункта уже выполнены и их можно пропустить):
- Сервер имеет хотя бы один статичный внешний IP-адрес (в качестве альтернативы вы можете воспользоваться DynamicDNS-сервисами, автоматически обновляющими информацию о текущем IP-адресе устройства, например, DynDNS)
- Разрешена загрузка пакетов ПО из официальных репозиториев. Чтобы проверить это, откройте на сервере файл /etc/apt/sources.list и убедитесь в том, что сетевые адреса вида "deb http://..." присутствуют и не закомментированы (отсутствует # в начале строки с url репозитория). Так, например, выглядит добавленное в sources.list американское зеркало репозиториев Ubuntu Precise:
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://us.archive.ubuntu.com/ubuntu/ precise main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ precise main restricted - Верно указаны сетевые параметры:hostname, ip-адрес (адреса) вашего сервера и его параметры DNS (последний параметр потребуется для маршрутизации интернет-трафика клиентов). Найти перечисленные сетевые настройки можно в файле /etc/hosts.
Для обеспечения приемлемого уровня безопасности машины рекомендуем также предварительно ознакомиться с содержанием нашей вводной статьи по конфигурации инструментов безопасности Linux.
Установка OpenVPN на сервер
Чтобы установить пакет openvpn на сервер, необходимо последовательно выполнить приведенные ниже команды:
- Обновить репозитории пакетов:
apt-get update
- Загрузить доступные обновления для установленных программ:
apt-get upgrade
- Установить пакет openvpn:
apt-get install openvpn
- OpenVPN включает в себя набор средств шифрования easy-rsa. Для нормальной работы демона скрипты easy-rsa следует разместить в директории /etc/openvpn:
cd /etc/openvpn/ && make-cadir easy-rsa
Подготовка публичных ключей (PKI - Public Key Infrastructure)
На данном этапе нужно сгенерировать и подписать пары пользовательских и серверных ключей. Для заверения созданных пар мы будем использовать центр сертификации (CA - Certificate Authority), находящийся на самом VPN -сервере. Итак, создадим CA:
- Перейти в папку /etc/openvpn/easy-rsa:
cd /etc/openvpn/easy-rsa
- Создать символьную ссылку openssl-1.0.0.cnf -> openssl.cnf:
ln -s openssl-1.0.0.cnf openssl.cnf
- Инициализировать скрипт vars:
source ./vars
- В ответ вы получите следующее уведомление: NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
- Запустить скрипт clean-all:
./clean-all
- Выполнить скрипт build-ca для создания центра сертификации. В ответ на появляющиеся запросы введите необходимую информацию (латинскими символами). Если вы не укажите собственные значения для каких-то из требуемых полей, будет использовано значение по-умолчанию [представленное в квадратных скобках]:
./build-ca
- Теперь можно перейти к генерации пары публичного сертификата/секретного ключа VPN-сервера.
Генерация ключа/сертификата сервера
- Сгенерируйте ключ:
./build-key-server server
Заполните информацию по аналогии с build-ca. Поля "Company Name" и "Challenge Password" могут быть оставлены пустыми. - После успешной генерации ключа появится запрос на его подписание центром сертификации. Введите yes для подтверждения.
Генерация клиентских ключей
- Создайте пару ключей для пользователя:
./build-key client1
Примечание: созданный файл ключа client1.key по умолчаню незашифрован. Это позволяет любому пользователю, имеющему доступ к этому файлу, подключиться к вашей виртуальной частной сети. Для устранения этой особенности вы можете использовать команду ./build-key-pass client1 вместо ./build-key client1 . В этом случае ключ будет зашифрован выбранным вами паролем. - Повторите процедуру генерации для каждого из будущих клиентов VPN, заменив client1 на желаемое имя. Внимание: имена ключей должны быть уникальными.
Вы можете сгенерировать клиентские ключи и позднее. Для этого потребуется повторно инициализировать скрипт vars (команда source ./vars), а затем запустить процедуру генерации необходимого ключа.
Установка параметров протокола Диффи-Хеллмана
Параметры протокола Диффи-Хеллмана определяют метод обмена данными между сервером и клиентами OpenVPN. Создав файл .pem, мы укажем параметры, в соответствии с которыми сервер будет инициировать защищенные соединения с пользователями.
Сгенерировать .pem файл следует с помощью команды: ./build-dh
В ответ будет отображен набор случайных символов, говорящий о том, что идет процесс генерации. После завершения процедуры в директории etc/openvpn/easy-rsa/keys появится файл dh2024.pem.
Перемещение ключей и сертификатов
После генерации ключей необходимо перенести их в директории, используемые серверным/клиентскими приложениями OpenVPN.
На сервере:
- Перейдите в директорию, в которой хранятся созданные ключи:
cd /etc/openvpn/easy-rsa/keys
- Скопируйте сертификат и ключ центра сертификации (CA), файл параметров DH, ключ и сертификат vpn-сервера в каталог /etc/openvpn:
cp ca.crt ca.key dh2024.pem server.crt server.key /etc/openvpn
ВАЖНО: Перечисленные выше файлы - основа работоспособности и безопасности VPN. Их компрометация может иметь неблагоприятные последствия. Храните их в надежном хранилище и не передавайте эти файлы по небезопасным каналам.
На клиентском устройстве:
Скопируйте файлы ca.crt, client1.crt, client1.key в используемую приложением OpenVPN папку клиентского устройства (например, для Linux это /etc/openvpn)
Конфигурация сервера и клиента OpenVPN
В этом разделе инструкции мы создадим два файла конфигурации. Первый - файл настроек для OpenVPN-сервера, второй - параметры vpn-подключения для клиентского устройства. Для каждого клиента OpenVPN необходимо использовать свой собственный файл конфигурации (исключение - подключение нескольких пользователей с использованием одной общей для всех пары ключей).
Настройки сервера:
- В качестве отправной точки в настройке вы можете использовать образец файла конфигурации OpenVPN-сервера, содержащий список доступных параметров работы программы и подробные пояснения этих параметров. Скопируйте этот документ в директорию /etc/openvpn/ для его редактирования и последующего запуска сервера VPN:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz >/etc/openvpn/server.conf
- Скопированный на предыдущем этапе файл server.conf является вполне работоспособной конфигурацией. Ее достаточно для нормальной работы сервера, если вам не требуется туннелирование всего клиентского интернет-трафика через VPN-сервер или другие специфические опции.
Единственное, на что обязательно нужно обратить внимание - имена и пути файлов сертификата сервера (.crt) и его ключа (.key), а также сертификата CA (.crt).
Имена ключей, находящихся в директории /etc/openvpn должны полностью совпадать с именами ключей в конфиге server.conf. Проверить это можно с помощью следующих команд:- Узнаем имена файлов ключей (два файла .crt и один .key) в папке /etc/openvpn с помощью команды:
ls /etc/openvpn
- Проверяем, соответствуют ли отобразившимся выше названиям файлов имена ключей в файле /etc/openvpn/server.conf (после блока # SSL/TLS root certificate (ca), certificate (cert), and private key (key)):
nano /etc/server.conf
В случае, если имена отличаются, внесите соответствующие корректировки в файл конфига (не в имена файлов в папке openvpn) и сохраните его (CTRL+X). - Перезапускаем OpenVPN для применения изменений:
/etc/init.d/openvpn restart
- Узнаем имена файлов ключей (два файла .crt и один .key) в папке /etc/openvpn с помощью команды:
Настройки клиента:
- Копируем образец файла конфигурации клиента в любую удобную директорию (в нашем случае домашнюю директорию пользователя (home), от имени которого выполняем команды:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/client.conf.gz >/home/1cloud
- Переходим в папку keys и копируем необходимые файлы ключей (в нашем случае: client1.key, client1.crt, ca.crt) в эту же директорию (/home/1cloud):
cd /etc/openvpn/easy-rsa/keys
>cp client1.key client1.crt ca.crt /home/1cloud
- Открываем конфиг клиента:
nano /home/1cloud/client.conf
- Находим блок # The hostname/IP and port of the server и вместо example.com указываем IP адрес OpenVPN-сервера:
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote example.com 1194 - В этом же файле находим блок #SSL/TLS parms. и проверяем названия файлов ключей пользователя (аналогично тому, как делали это в конфиге сервера):
# SSL/TLS parms.
# See the server config file for more
# description. Its best to use
# a separate .crt/.key file pair
# for each client. A single ca
# file can be used for all clients.
ca ca.crt
cert client1.crt
key client1.key - Сохраняем файл конфигурации клиента (CTRL+X).
- Теперь необходимо перенести пользовательские файлы client.conf, client1.key, client1.crt, ca.crt на клиентское устройство, с которого вы будете подключаться к VPN-серверу. Сделать это можно через FTP, SCP или просто создав на пользовательском устройстве (через nano на Linux, через блокнот на Windows) файлы с идентичными именами и полностью скопировать в них содержимое исходных документов с удаленного сервера.
Внимание! Некоторые клиентские приложения OpenVPN (например на Andoid и IOS) работают с расширением файла конфигурации .ovpn, а не .conf. Если вы столкнетесь с этой проблемой - просто переименуйте файл настроек клиента соответствующим образом.
Размещаем перенесенные файлы в папке, с которой работает используемое вами приложение OpenVPN (см. документацию к программе). - Подключаемся к серверу. После успешного подключения на клиентском устройстве активируется виртуальный сетевой адаптер. Проверить это на Linux можно с помощью команды ifconfig (должен отображаться адаптер TUN), на ОС с графическим интерсейсом проверить корректность подключения можно непосредственно в программе подключения к VPN.
Внимание! Так как мы еще не настроили туннелировние всего интернет-трафика через VPN-сервер, доступ в интернет на клиентском устройстве после подключения его к виртуальной частной сети перестанет функионировать. Инструкция по маршрутизации интернет-трафика пользователей через VPN сервер представлена ниже.Б.
Туннелирование всего трафика клиентов виртуальной частной сети через VPN-сервер
В данной конфигурации мы настроим маршрутизацию всего трафика пользователей VPN через OpenVPN-сервер с сохранением SSL-шифрования от клиента до сервера.
- На сервере откройте файл конфигурации OpenVPN server.conf:
nano /etc/openvpn/server.conf
- Расскоментируйте представленную ниже строку конфига (удалите символ ; в начале строки):
push "redirect-gateway def1 bypass-dhcp"
- Сохраните и закройте файл (CTRL+X)
- Откройте файл /etc/sysctl.conf:
nano /etc/sysctl.conf
- Расскоментируйте или добавьте представленную ниже строку в открытом файле, чтобы убедиться, что переадресация IPv4-трафика разрешена:
net.ipv4.ip_forward=1
- Сохраните и закройте файл (CTRL+X)
- Введите команду для применения изменений в текущей сессии:
echo 1 > /proc/sys/net/ipv4/ip_forward
- Последовательно введите следующие команды (одна строка=одна команда), для настройки фаерволла iptables на форвардинг трафика через VPN:
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
iptables -A FORWARD -i tap+ -j ACCEPT - Добавьте такой же список правил iptables в файл /etc/rc.local , чтобы они применялись при каждом запуске системы:
nano /etc/rc.local
Содержание файла:#!/bin/sh -e
#
# [...]
#
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
iptables -A FORWARD -i tap+ -j ACCEPT
exit 0
Сохраните и закройте документ (CTRL+X) - Приведенные выше параметры активируют переадресацию всего клиентского трафика, кроме DNS-запросов, через VPN-сервер. Для форваринга DNS-запросов вам необходимо установить пакет dnsmasq и внести изменения в файл /etc/openvpn/server.conf
- Установим dnsmasq:
Если вы используете Ubuntu 12.04:apt-get install dnsmasq && dpkg-reconfigure resolvconf
Появится мастер настройки. На первом пункте (prepare /etc/resolv.conf for dynamic updates) отвечаем yes, затем no (Append original file to dynamic file?)
Если вы используете Debian 7:apt-get install dnsmasq resolvconf
- Теперь нужно отредактировать dnsmasq:
nano /etc/dnsmasq.conf
Убедитесь, что указанные ниже параметры раскомментированы или добавлены в файл:listen-address=10.8.0.1
bind-interfaces - Далее необходимо добавить в файл /etc/network/interfaces информацию об используемых dns-серверах. Возможно, в вашем случае эта информация уже присутствует (как например в случае с серверами, арендованными в 1cloud.ru), если же нет - добавьте ее следующим образом:
Откройте файл конфигурации интерфейсов:nano /etc/network/interfaces
Добавьте строку dns-nameservers с указанием адресов используемых вами DNS-серверов (например одного сервера вашего интернет провайдера и одного публичного сервера google: 8.8.8.8):# The primary network interface
auto eth0
iface eth0 inet dhcp
dns-nameservers 77.88.8.8 8.8.8.8 - При стандартных настройках утилита dnsmasq запускается до старта виртуального tun адаптера OpenVPN. Это приводит к ошибкам и завершению dnsmasq. Для устранения этой проблемы, необходимо добавить в файл /etc/rc.local строку с командой, перезапускающей dnsmasq после инициализации OpenVPN. Разместить эту строку в файле следует после параметров iptables, указанных нами ранее:
nano /etc/rc.local
Содержимое файла:...
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
iptables -A FORWARD -i tap+ -j ACCEPT
/etc/init.d/dnsmasq restart
exit 0 - Последнее, что необходимо сделать - расскоментировать строку, разрешающую клиентам OpenVPN использовать DNS серверы, в файле /etc/openvpn/server.conf:
nano /etc/openvpn/server.conf
Содержимое файла:....
push "dhcp-option DNS 10.8.0.1" - Перезапускаем сервер для применения всех настроек и проверки их корректности:
reboot
Проверка OpenVPN-соединения
На этом настройку OpenVPN сервера на Ubuntu/Debian сервере можно считать завершенной. Для проверки соединения и туннелирования трафика через VPN-сервер вы можете воспользоваться любым интернет-сервисом, отображающим ваш IP-адрес (например, этот) - при корректной настройке на странице будет отображен адрес VPN-сервера.
P. S. Другие инструкции:
Поделиться в соцсетях:Спасибо за Вашу оценку! К сожалению, проголосовать не получилось. Попробуйте позже
ru191014 Санкт-Петербург ул. Кирочная, 9
+7(812)313-88-33 235 70 1cloud ltd 2021-12-27 Настройка OpenVPN-сервера с туннелированием интернет-трафика на Ubuntu 12.04 / Debian 7191014 Санкт-Петербург ул. Кирочная, 9
+7(812)313-88-33 235 70 1cloud ltd 2021-12-27 Настройка OpenVPN-сервера с туннелированием интернет-трафика на Ubuntu 12.04 / Debian 7 600 autoНастройка OpenVPN сервера на Ubuntu 20.04
Установка
Устанавливаем OpenVPN:
apt update apt install openvpn easy-rsa
Сертификаты сервера
Создадим символьную ссылку на каталог со скриптами:
ln -s /usr/share/easy-rsa /etc/openvpn/easy-rsa
Меняем значения в /etc/openvpn/easy-rsa/vars. Данная информация будет указана в сертификатах и ключах:
nano /etc/openvpn/easy-rsa/vars
Заполняем файл (здесь указываете свои значения):
export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="[email protected]" export KEY_OU="MyOrganizationalUnit
Передаём значения переменных из vars в переменные оболочки:
cd /etc/openvpn/easy-rsa . ./vars
Создаём каталог PKI:
./easy-rsa init-pki
Создаем корневой сертификат:
./easy-rsa build-ca
Полученные файлы будут расположены в:
/etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/easy-rsa/pki/private/ca.key
Формируем ключ Диффи-Хеллмана:
./easyrsa gen-dh
Полученный файл будет расположен в:
/etc/openvpn/easy-rsa/pki/dh.pem
Создаем запрос на сертификат для сервера и генерируем сам сертификат (вместо имени «vpn-server» можете указать своё имя сервера). Добавьте опцию nopass. Без этого файл запроса будет защищен паролем, что впоследствии может привести к проблемам с разрешениями:
./easyrsa gen-req vpn-server nopass ./easyrsa sign-req server vpn-server
После ввода команды подтверждаем правильность данных, введя yes и вводим пароль, который указывали при создании корневого сертификата.Полученные файлы будут расположены в:
/etc/openvpn/easy-rsa/pki/issued/vpn-server.crt /etc/openvpn/easy-rsa/pki/private/vpn-server.key
Создадим ta ключ, чтобы использовать параметр tls-auth, добавив дополнительную проверку целостности. Это обеспечит дополнительный уровень безопасности протокола SSL/TLS:
openvpn --genkey --secret pki/ta.key
Полученный файл будет расположен в:
/etc/openvpn/easy-rsa/pki/ta.key
Сертификаты клиента
Создаем запрос на сертификат и сам сертификат(вместо имени «vpn-client» можете указать своё имя клиента):
./easyrsa gen-req vpn-client nopass ./easyrsa sign-req client vpn-client
После ввода команды подтверждаем правильность данных, введя yes и вводим пароль, который указывали при создании корневого сертификата.Полученные файлы будут расположены в:
/etc/openvpn/easy-rsa/pki/issued/vpn-client.crt /etc/openvpn/easy-rsa/pki/private/vpn-client.key
Создание конфигурационных файлов сервера и клиента
Создадим конфигурационный файл сервера:
nano /etc/openvpn/server.conf
и приведём его к виду:
port 1194 proto udp dev tun ca /etc/openvpn/easy-rsa/pki/ca.crt cert /etc/openvpn/easy-rsa/pki/issued/vpn-server.crt key /etc/openvpn/easy-rsa/pki/private/vpn-server.key dh /etc/openvpn/easy-rsa/pki/dh.pem server 10.8.0.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" tls-auth /etc/openvpn/easy-rsa/pki/ta.key 0 cipher AES-256-CBC comp-lzo user nobody group nogroup persist-key persist-tun status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log log-append /var/log/openvpn/openvpn.log verb 3 explicit-exit-notify 1
Разрешаем обмен трафиком между сетевыми интерфейсам:
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf && sysctl -p
Необходимо добавить в автозагрузку, например, с помощью пакета iptables-persistent, маскарадинг клиентов OpenVPN:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth2 -j MASQUERADE
Запускаем сервер:
systemctl daemon-reload service openvpn start service [email protected] start
Подключение
Копируем следующие файлы на устройство-клиент:
/etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/easy-rsa/pki/issued/vpn-client.crt /etc/openvpn/easy-rsa/pki/private/vpn-client.key /etc/openvpn/easy-rsa/pki/ta.key
На устройстве, с которого вы будете подключаться по OpenVPN (клиент), необходимо создать конфигурационный файл клиента (client.ovpn) и привести его к виду (server_ip необходимо заменить на IP-адрес сервера):
remote server_ip 1194 client resolv-retry infinite nobind proto udp dev tun comp-lzo ca ca.crt cert vpn-client.crt key vpn-client.key tls-client tls-auth ta.key 1 keepalive 10 120 persist-key persist-tun verb 3 user nobody group nogroup
Устанавливаем на клиент ПО OpenVPN.
После установки запускаем программу от имени администратора, далее нажимаем правой кнопкой мыши на значок в системном трее в правом нижнем углу и выбираем «Настройки...». Переходим во вкладку «Расширенные» и указываем директорию для хранения конфигураций C:\Program Files\OpenVPN\config.

Файлы vpn-client.crt, vpn-client.key, ca.crt, ta.key, client.ovpn необходимо скопировать в директорию C:\Program Files\OpenVPN\config.
Затем в интерфейсе openvpn GUI необходимо нажать кнопку Connect.
Настройка OpenVPN сервера на Ubuntu 16.04
Установка OpenVPN
#Устанавливаем openvpn и скрипты для генерации ключей apt-get update && apt-get install openvpn easy-rsa
Затем необходимо привести файл /etc/openvpn/server.conf к следующему виду:
port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh3048.pem push "redirect-gateway def1 bypass-dhcp" #default gateway через VPN push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" user nobody group nogroup server 10.8.0.0 255.255.255.0 keepalive 10 120 comp-lzo persist-key persist-tun cipher AES-256-CBC verb 3
#Разрешаем обмен трафиком между сетевыми интерфейсам echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf && sysctl -p
#SNAT для vpn клиентов #Необходимо добавить в автозагрузку, например, с помощью пакета iptables-persistent iptables -t nat -A POSTROUTING -s 10.8.0.0/8 -o eth2 -j MASQUERADE
Генерация серверных ключей и сертификатов
#Копируем скрипты для генерации ключей cp -r /usr/share/easy-rsa/ /etc/openvpn #Создаем директорию, в которой будут храниться ключи mkdir /etc/openvpn/easy-rsa/keys
#При необходимости меняем значения в /etc/openvpn/easy-rsa/vars #Данная информация будет указана в сертификатах и ключах export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="[email protected]" export KEY_OU="MyOrganizationalUnit
#Генерируем параметры Диффи-Хеллмана openssl dhparam -out /etc/openvpn/dh3048.pem 2048
#Установка переменных окружения для PKI cd /etc/openvpn/easy-rsa && source ./vars ./clean-all #Генерация CA (при необходимости можно изменить реквизиты) ./build-ca
#Генерация серверного ключа и сертификата #При необходимости задаем реквизиты #Если задать пароль, то его необходимо будет вводить при каждом запуске openvpn-сервера #На вопросы о подписи сертификата необходимо ответить 'y' cd /etc/openvpn/easy-rsa && ./build-key-server server cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn
systemctl daemon-reload systemctl start openvpn.service
Генерация клиентских ключей и сертификатов
#Генерируем сертификаты и ключи для клиентов #При необходимости задаем реквизиты #Если задать пароль, то его необходимо будет вводить при каждом подключении к серверу #На вопросы о подписи сертификата необходимо ответить 'y' cd /etc/openvpn/easy-rsa && ./build-key client1
#Копируем следующие файлы на клиентскую машину /etc/openvpn/easy-rsa/keys/client1.crt /etc/openvpn/easy-rsa/keys/client1.key /etc/openvpn/ca.crt
Также необходимо создать клиентский конфигурационный файл (client1.ovpn):
server_ip необходимо заменить на IP-адрес сервера
client dev tun proto udp remote server_ip 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client1.crt key client1.key remote-cert-tls server comp-lzo user nobody group nogroup cipher AES-256-CBC verb 3
Подключение
Файлы client1.crt, client1.key, ca.crt, client1.ovpn необходимо скопировать в директорию config:
Затем в интерфейсе openvpn GUI необходимо нажать кнопку Connect.
УстановкаOpenVPN на Ubuntu 18.04 за 4 минуты 🕶
OpenVPN - это полнофункциональное решение с открытым исходным кодом для запуска частного сервера SSL VPN. Были использованы технологии OSI уровня 2 или 3 с использованием протоколов SSL / TLS. VPN позволяет безопасно подключаться к сети из небезопасных общественных мест / сетей, таких как Wi-Fi в ресторане или в аэропорту. В статье мы описали, как можно установить сервер OpenVPN на сервер с операционной системой Ubuntu 18.04.
Разница между VPS и VPN описана здесь 🙂
Обновление системы Ubuntu 18.04
sudo apt update sudo apt обновление
Установите внешний IP-адрес
Воспользуемся командой ip :
ip а ip a счет eth0
Есть также второй вариант узнать Ваш внешний IP-адрес:
dig + short myip.opendns.com @ resolver1.opendns.com
или:
копать TXT + короткое о-о.myaddr.l.google.com @ ns1.google.com | awk -F '"' '{print $ 2}'
Информация об общедоступном IP-адресе
Большинство VPS или облачных серверов могут иметь два адреса:
- Статический общедоступный IP-адрес, который напрямую назначается вашему серверу и доступен для всех из Интернета. Например: VPS в Хостовите, Линоде, Арубе и других.
- Сервер находится за NAT с общедоступным IP и имеет только частный статический IP. Это решение используется в AWS EC2 или Lightsail .
Приведенный выше сценарий автоматически определит конфигурацию вашего устройства и отобразит правильный IP-адрес.
Установка OpenVPN с помощью скрипта
Мы будем использовать wget для загрузки файла:
wget https://git.io/vpn -O openvpn-install.sh
Ставим разрешения для файла openvpn-install.sh на всякий случай:
chmod + x openvpn-install.sh
Содержимое файла можно увидеть в любом редакторе:
нано openvpn-install.sh
Запускаем openvpn-install.sh для установки сервера OpenVPN
Теперь нам просто нужно запустить файл командой:
судо./openvpn-install.sh
В нашем случае мы получили следующие запросы, потому что у нашего сервера обычный публичный IP-адрес:
Чтобы в будущем не было проблем с DNS-сервером, мы рекомендуем всегда выбирать 1.1.1.1 или Google DNS, это одни из самых быстрых серверов, которые обновляются почти постоянно.
Как запустить / приостановить / сбросить сервер OpenVPN в Ubuntu 18.04 LTS?
sudo systemctl stop openvpn @ server # <--- зависание сервера sudo systemctl start openvpn @ server # <--- запустить сервер OpenVPN sudo systemctl restart openvpn @ server # <--- перезапуск OpenVPN sudo systemctl status openvpn @ server # <--- отображает статус службыПриглашаем вас ознакомиться с нашим VPS SSD, потому что с кодом БЛОГ СКИДКИ вы получите 15% на любую серверную оплату за VPN!
Подключение к OpenVPN через клиент для iOS / Android / Linux / Windows
На VPS есть файл конфигурации с именем (в нашем случае): / root / client.овпн . Просто скопируйте этот файл на рабочий стол нашего компьютера с помощью FileZilla (sFTP) или любой другой программы FTP.
Затем запускаем любой клиент OpenVPN с файлом client.ovpn, загруженным с сервера :
- Клиент для iOS
- Клиент для Android
- Клиент для MacOS / OS X
- Клиент для Windows 8/10
Настройка клиента OpenVPN в Linux
Устанавливаем клиент openvpn на наш Linux-компьютер:
sudo yum установить openvpn
или
sudo apt установить openvpn
Копируем файл client.овпн :
sudo cp client.ovpn /etc/openvpn/client.conf
Проверяем подключение с терминала:
sudo openvpn --client --config /etc/openvpn/klient.conf
После запуска службы OpenVPN Linux автоматически подключится через скрипт:
sudo systemctl start openvpn @ client # <--- запустить клиент OpenVPN
Проверяем / тестируем соединение
Запускаем следующие команды после подключения к серверу OpenVPN из терминала Linux:
пинг 10.1.0.1 # Ping IP-адрес сервера OpenVPN или IP-шлюза ip route # Проверить, правильно ли работает маршрутизация dig TXT + short o-o.myaddr.l.google.com @ ns1.google.com # Должен вернуть общедоступный IP-адрес нашего сервера OpenVPN
FAQ или
исправления проблем1. Проверить журналы сервера OpenVPN:
journalctl --identifier ovpn-server
2. Не блокирует ли межсетевой экран соединения или порты:
кот /etc/rc.local
#! / Bin / sh -e iptables -t nat -A ПОСТАВКА -s 10.8.0.0 / 24! -d 10.8.0.0/24 -j SNAT --to 172.26.6.74 выход 0
3. Сервер OpenVPN работает и требуемые порты открыты:
netstat -tulpn | grep: 1194 ## 1194 - порт openVPN сервера ## ss -tulpn | grep: 1194 ## 1194 - порт openVPN сервера ## ps aux | grep openvpn ## сервер openvpn запущен? ## ps -C openvpn ## работает ли сервер openvpn? ## pidof openvpn ## найти PID процесса openvpn server ##
Если услуга неактивна, просто запустите ее:
sudo systemctl перезапустить openvpn @ server
Проверить наличие ошибок в:
sudo systemctl статус openvpn @ сервер
4. Может ли клиент Linux подключиться к серверу с помощью OpenVPN. Проверяем, принимает ли трафик требуемый порт (UDP 1194) (мы меняем IP ниже на IP сервера):
NC -vu 77.83.100.116 1194 Подключение к порту 77.83.100.116 1194 [udp / openvpn] выполнено!
Если невозможно подключиться - это может означать, что либо брандмауэр на компьютере (Linux) блокирует соединение, либо маршрутизатор или интернет-провайдер блокирует выбранный порт / протокол.
Приглашаем вас ознакомиться с нашим VPS SSD, потому что с кодом БЛОГ СКИДКИ вы получите 15% на любую серверную оплату за VPN! .Как настроить сервер OpenVPN в Ubuntu 16.04
Хотите безопасно выходить в Интернет со своего смартфона или ноутбука при подключении к ненадежным сетям, например Wi-Fi в отеле или кафе? Виртуальная частная сеть (VPN) позволяет вам использовать ненадежные сети конфиденциально и безопасно, как если бы они находились в частной сети. Трафик покидает VPN сервера и продолжает свой путь к месту назначения.
В сочетании с HTTPS-соединением эта конфигурация позволяет защитить ваши беспроводные логины и транзакции.Вы можете обойти географические ограничения и цензуру, а также защитить свое местоположение и любой незашифрованный HTTP-трафик из ненадежной сети.
OpenVPN - это полнофункциональное решение VPN с открытым исходным кодом Secure Socket Layer (SSL), которое поддерживает широкий спектр конфигураций. В этом руководстве мы настроим сервер OpenVPN на Droplet, а затем настроим его для доступа из Windows, OS X, iOS и Android. В этом руководстве шаги по установке и настройке будут максимально простыми для этих параметров.
Предполетная проверка
Когда вы будете готовы начать, войдите на свой сервер Ubuntu как пользователь sudo и выполните следующие шаги.
Шаг № 1: Установка OpenVPN
Сначала мы устанавливаем OpenVPN на наш сервер. OpenVPN доступен в репозиториях Ubuntu по умолчанию, поэтому мы можем использовать apt для установки. Мы также установим пакет easy-rsa , который поможет нам настроить CA (Центр сертификации) для использования нашей VPN.
Для обновления пакетов сервера и установки необходимых пакетов используйте команду:
sudo apt-get update
sudo apt-get install openvpn easy-rsa
Требуемое программное обеспечение уже доступно на сервере и готово к настройке.
Шаг № 2: Настройте каталог CA
OpenVPN - это TLS / SSL VPN. Это означает, что он использует сертификаты для шифрования трафика между сервером и клиентами. Чтобы выдавать доверенные сертификаты, нам необходимо настроить наш собственный простой сертификат (CA).
Для начала мы можем скопировать каталог шаблонов easy-rsa в наш домашний каталог с помощью команды make-cadir :
make-cadir ~ / openvpn-ca
Перейдите во вновь созданный каталог, чтобы начать настройку CA:
компакт-диск ~ / openvpn-ca
Шаг № 3: Настройка переменных CA
Чтобы настроить наши переменные CA для использования, нам нужно отредактировать файл vars в каталоге.Откройте этот файл в текстовом редакторе:
нано-варс
Внутри файла вы найдете несколько переменных, которые можно настроить, чтобы определить, как будут создаваться сертификаты. Нам нужно беспокоиться только о некоторых из них.
В нижней части файла найдите настройки по умолчанию, которые определяют область новых сертификатов. Должно получиться примерно так:
~ / openvpn-ca / варс
. . . экспорт KEY_COUNTRY = "США" экспорт KEY_PROVINCE = "CA" экспорт KEY_CITY = "Сан-Франциско" экспорт KEY_ORG = "Форт-Фанстон" экспорт KEY_EMAIL = "меня @ myhost.mydomain " export KEY_OU = "MyOrganizationalUnit" . . .
Измените значения, выделенные красным, как хотите, но не оставляйте их пустыми:
~ / openvpn-ca / варс
. . . экспорт KEY_COUNTRY = "США" экспорт KEY_PROVINCE = "NY" export KEY_CITY = "Нью-Йорк" экспорт KEY_ORG = "DigitalOcean" экспорт KEY_EMAIL = "[email protected]" экспорт KEY_OU = "Сообщество" . . .
Пока мы здесь, мы также будем редактировать значение KEY_NAME в этом разделе, который заполняет поле темы.Чтобы сделать это легко, в этом руководстве мы будем называть его server :
~ / openvpn-ca / варс
экспорт KEY_NAME = "сервер"
По завершении сохраните и закройте файл.
Шаг № 4: Создание центра сертификации
Теперь мы можем использовать настроенные нами переменные и инструменты easy-rsa для создания нашего центра сертификации (CA).
Наши администраторы могут без проблем установить OpenVPN на наш VPS в Польше или за рубежом.Убедитесь, что вы находитесь в каталоге CA, затем подключите vars файл, который был отредактирован:
компакт-диск ~ / openvpn-ca
исходные вары
Если он подключен правильно, вы должны увидеть следующий результат:
Выход
ПРИМЕЧАНИЕ: Если вы запустите./ clean-all, я сделаю rm -rf для / home / sammy / openvpn-ca / keys
Убедитесь, что вы работаете в чистой среде, набрав:
./clean-all
Теперь мы можем построить наш главный центр сертификации, набрав:
./build-ca
Это запустит процесс создания корневого ключа CA и сертификата. Поскольку мы заполнили файл vars , все значения должны быть заполнены автоматически. Просто нажмите ENTER через подсказки, чтобы подтвердить свой выбор:
Выход
Создание 2048-битного закрытого ключа RSA ................................................... ....................................... +++ ............................... +++ запись нового закрытого ключа в 'ca.key' ----- Вас сейчас попросят ввести информацию, которая будет включена в ваш запрос на сертификат. То, что вы собираетесь ввести, называется отличительным именем или DN. Поля довольно много, но вы можете оставить поле пустым. Для некоторых полей будет значение по умолчанию, Если вы введете '.', поле останется пустым. ----- Название страны (двухбуквенный код) [США]: Название штата или провинции (полное название) [NY]: Название населенного пункта (например, город) [Нью-Йорк]: Название организации (например, компания) [DigitalOcean]: Название организационной единицы (например, раздел) [Сообщество]: Общее имя (например, ваше имя или имя хоста вашего сервера) [DigitalOcean CA]: Имя [сервер]: Адрес электронной почты [[email protected]]:
Теперь у нас есть Центр сертификации, который можно использовать для создания остальных файлов, которые нам нужны.
Шаг № 5: Создайте сертификат сервера, ключи и шифрование файла
Затем мы сгенерируем наш сертификат сервера и пару ключей, а также некоторые дополнительные файлы, используемые в процессе шифрования.
Начнем с создания сертификата сервера OpenVPN и пары ключей. Мы можем сделать это, набрав:
Примечание: , если вы выберете имя, отличное от server , вам нужно будет изменить некоторые инструкции, приведенные ниже.Например, при копировании сгенерированных файлов в каталог / etc / openvpn необходимо подставить соответствующие имена. Вы также должны изменить файл /etc/openvpn/server.conf , чтобы он указывал на правильные файлы .crt и .key .
./build-key-server сервер
Примите значения по умолчанию, нажав ENTER . Не вводите пароль подключения для этой конфигурации. В конце вам нужно будет ввести y для двух вопросов, чтобы подписать и получить сертификат:
Выход
.. . Сертификат необходимо заверить до 1 мая 17:51:16 2026 мск (3650 дней) Подпишите сертификат? [д / н]: д 1 из 1 запросов на сертификат подтвержден, совершить? [д / н] г Записать базу данных с 1 новой записью База данных обновлена
Далее мы сгенерируем некоторые другие элементы. Мы можем сгенерировать надежные ключи Диффи-Хеллмана для использования во время обмена ключами, набрав:
./build-dh
Это может занять несколько минут.
Затем мы можем сгенерировать подпись HMAC для усиления проверки целостности сервера TLS:
openvpn --genkey --секретные ключи / ta.key
Шаг № 6: Создание сертификата клиента и пары ключей
Затем мы можем сгенерировать сертификат клиента и пару ключей. Хотя это можно сделать на клиентском компьютере, а затем подписать сервером / центром сертификации в целях безопасности, в этом руководстве для простоты мы сгенерируем подписанный ключ на сервере.
В этом руководстве мы сгенерируем один клиентский ключ / сертификат, но если у вас более одного клиента, вы можете повторять этот процесс сколько угодно раз. Используйте уникальное значение скрипта для каждого клиента.
Вы можете вернуться к этому шагу позже, мы повторно создадим исходный код файла vars . Мы будем использовать client1 в качестве значения для нашей первой пары ключ / сертификат для сегодняшнего урока:
Чтобы получить учетную запись данных без пароля для автоматических подключений, используйте команду build-key следующим образом:
компакт-диск ~ / openvpn-ca
исходные вары
./ build-key client1
Если вместо этого вы хотите создать защищенную паролем учетную запись данных, используйте команду build-key-pass :
компакт-диск ~ / openvpn-ca
исходные вары
./build-key-pass client1
Опять же, значение по умолчанию должно быть заполнено, чтобы вы могли просто нажать ENTER , чтобы продолжить. Оставьте поле пароля пустым и введите y , чтобы отобразился вопрос, подписывать и делать ли сертификат.
Шаг № 7: Настройте службу OpenVPN
Затем мы можем приступить к настройке службы OpenVPN, используя данные и файлы, которые мы создали.
Копирование файлов в каталог OpenVPN
Для начала нам нужно скопировать нужные нам файлы в директорию конфигурации / etc / openvpn .
Мы можем начать со всеми файлами, которые мы создали. Они были помещены в каталог ~ / openvpn-ca / keys . Нам нужно передать наш сертификат и ключ CA, наш сертификат и ключ сервера, подпись HMAC и файл Diffie-Hellman:
cd ~ / openvpn-ca / ключи
sudo cp ca.crt ca.key server.crt server.key ta.key dh3048.pem / etc / openvpn
Затем нам нужно скопировать и распаковать образец файла конфигурации OpenVPN в каталог конфигурации, чтобы мы могли использовать его в качестве основы для нашей конфигурации:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | Судо тройник /etc/openvpn/server.conf
Настройка конфигурации OpenVPN
Теперь, когда наши файлы на месте, мы можем изменить файл конфигурации сервера:
судо нано / etc / openvpn / server.конф
Базовая конфигурация
Сначала найдите раздел HMAC, ища директиву tls-auth . Исключить «; », чтобы раскомментировать строку tls-auth. Ниже добавьте key-direction параметр, установленный на " 0 ":
/etc/openvpn/server.conf
tls-auth ta.key 0 # Этот файл секретный ключевое направление 0
Затем найдите раздел криптографических шифров, просмотрев закомментированные строки шифра .Шифр AES-128-CBC предлагает хороший уровень шифрования и хорошо поддерживается. Исключить «; ”, чтобы раскомментировать строку , шифр AES-128-CBC :
/etc/openvpn/server.conf
шифр AES-128-CBC
Ниже добавьте строку auth для выбора сообщений мастерства алгоритма HMAC. Для этого SHA256 хороший выбор:
/etc/openvpn/server.conf
аутентификация SHA256
Наконец, найдите пользователя и группу настроек и удалите «; »в начале:
/ и т.д. / openvpn / server.conf
пользователь никто группа nogroup
(Необязательно) Включите изменения DNS для перенаправления всего трафика через VPN
Приведенные выше настройки создают соединение VPN между двумя компьютерами, но не соединение для использования туннеля. Если вы хотите использовать VPN для перенаправления всего вашего трафика, вам необходимо изменить настройки DNS на клиентских компьютерах.
Для этого раскомментируйте несколько директив, которые будут настраивать клиентские компьютеры на перенаправление всего интернет-трафика через VPN.Найдите раздел redirect-gateway и удалите точку с запятой «; »начало строки redirect-gateway , чтобы раскомментировать:
/etc/openvpn/server.conf
push "redirect-gateway def1 bypass-dhcp"
Чуть ниже найдите раздел dhcp-option . Снова удалите «; »перед строками, чтобы раскомментировать их:
/etc/openvpn/server.conf
push "dhcp-option DNS 208.67.222.222" нажмите "dhcp-option DNS 208.67.220.220 "
Это должно помочь клиентам перенастроить настройки DNS для использования VPN-туннеля в качестве шлюза по умолчанию.
(необязательно) Установите порт и протокол
По умолчанию сервер OpenVPN использует порт 1194 и UDP для приема клиентских подключений. Если вы хотите использовать другой порт из-за ограниченного сетевого окружения, в котором могут находиться клиенты, вы можете изменить настройку порта. Если вы не управляете веб-контентом сервера OpenVPN, популярным выбором является порт 443, поскольку он обычно разрешен правилами брандмауэра.
/etc/openvpn/server.conf
# Необязательно! порт 443
Часто протокол может быть ограничен этим портом. Чтобы исправить это, необходимо изменить протокол протокола UDP с TCP:
./etc/openvpn/server.conf
# Необязательно! протокол TCP
Если нет необходимости использовать другой порт, лучше оставить эти две настройки по умолчанию.
(Необязательно) Выберите данные доступа, отличные от данных по умолчанию
Если вы выбрали другое имя для ./ build-key-server измените строки cert и key , чтобы они указывали на соответствующие файлы .crt и .key . Если используется сервер по умолчанию, он должен быть установлен правильно:
/etc/openvpn/server.conf
сертификат server.crt ключ server.key
По завершении сохраните и закройте файл.
Шаг № 8: Настройте конфигурацию сети
Затем нам нужно настроить некоторые аспекты сети серверов, чтобы OpenVPN мог правильно маршрутизировать трафик.
Разрешение переадресации IP
Во-первых, нам нужно разрешить серверу пересылать трафик. Это очень важно для той функциональности, которую мы хотим предоставить VPN-серверу.
Мы можем изменить этот параметр, изменив файл /etc/sysctl.conf :
Судо нано /etc/sysctl.conf
Внутри обратите внимание на строку, обозначающую net.ipv4.ip_forward . Удалите " # " из начала строки, чтобы раскомментировать этот параметр:
/ и т.д. / sysctl.conf
net.ipv4.ip_forward = 1,
Сохраните и закройте файл, когда закончите.
Чтобы прочитать файл и установить значение для текущего сеанса, введите:
sudo sysctl –p
Адаптация правил UFW к клиентским подключениям Masquerade
Если вы следовали руководству по для начальной настройки сервера с Ubuntu 16.04 , у вас уже есть межсетевой экран UFW . Независимо от того, используете ли вы брандмауэр для блокировки нежелательного трафика (что он почти всегда должен делать), в этом руководстве брандмауэр необходим для управления некоторым трафиком, поступающим на сервер.Нам нужно изменить файл с правилами для создания маскировки, это концепция iptables , которая обеспечивает современный динамический NAT для правильной маршрутизации клиентского соединения.
Прежде чем мы сможем открыть файл конфигурации брандмауэра для добавления маскарадов, нам нужно найти общедоступный веб-интерфейс нашего устройства. Для этого наберите:
IP-маршрут | grep по умолчанию
Ваш публичный интерфейс будет отображаться после « dev ».Например, этот вывод показывает интерфейс с именем wlp11s0 , который показан ниже:
Выход
по умолчанию через 203.0.113.1 dev wlp11s0 proto static metric 600
Откройте файл /etc/ufw/before.rules , чтобы добавить соответствующую конфигурацию:
судо нано /etc/ufw/before.rules
Если у вас есть интерфейс, связанный с маршрутом по умолчанию, откройте файл /etc/ufw/before.rules , чтобы добавить соответствующую конфигурацию:
sudo nano / etc / ufw / before.правила
Этот файл обрабатывает конфигурацию, которая должна быть введена в обычную загрузку политики UFW. Вверху файла добавьте строки, отмеченные ниже. Это установит политику по умолчанию для цепочки POSTROUTING в таблице nat и замаскирует любой исходящий трафик из VPN:
Примечание: Обязательно замените eth0 в строке -A POSTROUTING на интерфейс, указанный в приведенной выше команде.
/ etc / ufw / before.правила
# # rules.before # # Правила, которые должны быть выполнены до того, как в командной строке ufw добавлены правила. Обычай В одну из этих цепочек нужно добавить # правила: # Ufw-before-input # Ufw-before-output # Ufw-before-forward # # START OPENVPN ПРАВИЛА # Правила таблицы NAT * нац : ПРИНЯТИЕ ПОСТРОУТИРОВКИ [0: 0] # Разрешить трафик от клиента OpenVPN на eth0 -A ПОСТРОУТИРОВАНИЕ -s 10.8.0.0/8 -o eth0 -j МАСКАРАД СОВЕРШИТЬ # КОНЕЦ ПРАВИЛА OPENVPN # Не удаляйте эти обязательные строки, иначе будут ошибки * фильтр .. .
Сохраните и закройте файл, когда закончите.
Нам нужно включить UFW для пересылки пакетов по умолчанию. Для этого мы откроем файл / etc / default / ufw :
Судо нано / и т. Д. / По умолчанию / ufw
Найдите директиву DEFAULT_FORWARD_POLICY внутри. Мы изменим значения с DROP на ACCEPT :
./ и т. Д. / По умолчанию / ufw
DEFAULT_FORWARD_POLICY = "ПРИНЯТЬ"
Сохраните и закройте файл, когда закончите.
Открытие порта OpenVPN и включение изменений
Далее мы настроим брандмауэр, чтобы разрешить трафик в OpenVPN.
Если вы не меняли порт и протокол в файле /etc/openvpn/server.conf , вы должны открыть трафик UDP на порт 1194 . Если вы изменили порт и / или протокол, замените выбранные здесь значения.
Мы также добавим порт SSH, если вы забыли добавить
раньше sudo ufw разрешить 1194 / udp
sudo ufw разрешить OpenSSH
Теперь мы можем отключить UFW и снова включить UFW для загрузки изменений из всех файлов, которые были изменены:
sudo ufw отключить
sudo ufw включить
Наш сервер правильно настроен для обработки трафика OpenVPN .
Шаг № 9: Запустите и включите службу OpenVPN
Теперь мы готовы запустить службу OpenVPN на нашем сервере. Мы можем сделать это с помощью s ystemd .
Нам нужно запустить сервер OpenVPN, указав в нашей конфигурации имя файла в качестве переменной экземпляра после systemd в блоке имени файла. Наш файл конфигурации для нашего сервера называется / etc / openvpn / server .conf , поэтому мы добавим @server в конец имени нашего файла, когда мы его назовем:
sudo systemctl start openvpn @ сервер
Дважды проверьте, что служба запущена успешно, набрав:
sudo systemctl статус openvpn @ сервер
Если все прошло хорошо, ваш результат должен выглядеть примерно так:
● openvpn @ server.сервис - OpenVPN подключение к серверу Загружено: загружено (/lib/systemd/system/[email protected]; отключено; предустановка поставщика: включена) Активен: активен (работает) с Вт 2016-05-03 15:30:05 EDT; 47с назад Документы: man: openvpn (8) https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Процесс: 5852 ExecStart = / usr / sbin / openvpn --daemon ovpn-% i --status /run/openvpn/%i.status 10 --cd / etc / openvpn --script-security 2 --config / etc / openvpn /% i.conf --writepid /run/openvpn/%i.pid (code = exited, sta Основной PID: 5856 (openvpn) Задач: 1 (ограничение: 512) CGroup: /system.slice/system-openvpn.slice/[email protected] └─5856 / usr / sbin / openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd / etc / openvpn --script-security 2 --config / etc / openvpn / server. conf --writepid /run/openvpn/server.pid 3 мая 15:30:05 openvpn2 ovpn-server [5856]: / sbin / ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2 3 мая 15:30:05 openvpn2 ovpn-server [5856]: / sbin / ip route добавить 10.8.0.0/24 через 10.8.0.2 3 мая, 15:30:05 openvpn2 ovpn-server [5856]: GID установлен в nogroup 3 мая, 15:30:05 openvpn2 ovpn-server [5856]: UID не задан никому 3 мая 15:30:05 openvpn2 ovpn-server [5856]: UDPv4 ссылка локальная (привязанная): [undef] 3 мая 15:30:05 openvpn2 ovpn-server [5856]: удаленная ссылка UDPv4: [undef] 3 мая 15:30:05 openvpn2 ovpn-server [5856]: MULTI: вызов multi_init, r = 256 v = 256 3 мая 15:30:05 openvpn2 ovpn-server [5856]: IFCONFIG POOL: base = 10.8.0.4 размер = 62, ipv6 = 0 03 мая 15:30:05 openvpn2 ovpn-server [5856]: СПИСОК ПУЛА IFCONFIG 3 мая 15:30:05 openvpn2 ovpn-server [5856]: последовательность инициализации завершена
Вы также можете проверить, доступен ли интерфейс OpenVPN tun0 , набрав:
ip адрес показать tun0
Вы должны увидеть настроенный интерфейс:
Выход
4: tun0:mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100 ссылка / нет инет 10.8.0.1 одноранговый узел 10.8.0.2/32 глобальная область tun0 valid_lft навсегда предпочтительный_lft навсегда
Если все прошло хорошо, включите службу, чтобы она запускалась автоматически при запуске системы:
sudo systemctl включить openvpn @ server
Шаг № 10: Создание конфигурации инфраструктуры клиента
Далее нам нужно создать систему, которая позволит нам легко создавать файлы конфигурации клиентов.
Создать конфигурацию структуры каталогов клиента
Создадим структуру каталогов в домашнем каталоге для хранения файлов:
mkdir -p ~ / client-configs / files
Поскольку в файлы конфигурации клиента будут встроены клиентские ключи, нам необходимо заблокировать доступ к нашему внутреннему каталогу:
chmod 700 ~ / client-configs / files
Создать базовую конфигурацию
Затем мы скопируем образец конфигурации клиента в наш каталог, чтобы использовать его в качестве базовой конфигурации:
cp / usr / share / doc / openvpn / examples / sample-config-files / client.conf ~ / client-configs / base.conf
Откройте этот новый файл в текстовом редакторе:
нано ~ / client-configs / base.conf
Нам нужно внести некоторые правки внутри.
Сначала найдите директиву remote . Это указывает клиенту на адрес нашего сервера OpenVPN. Это должен быть общедоступный IP-адрес сервера OpenVPN. Если вы изменили порт, используемый сервером OpenVPN, измените 1194 на выбранный вами порт:
~ / client-configs / base.conf
. . . # Имя хоста / IP и порт сервера. # У вас может быть несколько удаленных записей # для балансировки нагрузки между серверами. удаленный IP-адрес_сервера 1194 . . .
Убедитесь, что протокол соответствует значению, которое вы используете в конфигурации сервера:
~ / client-configs / base.conf
протокол протокола udp
Затем раскомментируйте директивы user и group , удалив "; ":
~ / client-configs / base.conf
# Понижение привилегий после инициализации (только не для Windows) пользователь никто группа nogroup
Найдите директивы ca , cert и key , которые следует закомментировать, поскольку мы будем добавлять сертификаты и ключи в файл:
~ / client-configs / base.conf
# параметры SSL / TLS. # См. Файл конфигурации сервера для получения дополнительной информации # описание. Лучше использовать # отдельная пара файлов .crt / .key # для каждого клиента.Единый ca # файл можно использовать для всех клиентов. #ca ca.crt #cert client.crt #key client.key
Настройки cipher и auth , которые мы устанавливаем в файле /etc/openvpn/server.conf :
~ / client-configs / base.conf
шифр AES-128-CBC авторизация SHA256
Наконец, добавьте директиву key-direction где-нибудь в файле. Для работы с сервером необходимо установить значение « 1 »:
.~ / client-configs / base.conf
ключ-направление 1
Наконец, давайте добавим несколько закомментированных строк. Мы хотим поместить их в каждую конфигурацию, но должны разрешать их только для клиентов Linux, которые поставляются с / etc / openvpn / update-resolv-conf . Этот сценарий использует служебную программу resolvconf для обновления информации DNS для клиентов Linux.
~ / client-configs / base.conf
# скрипт-безопасность 2 # вверх / etc / openvpn / update-resolv-conf # вниз / etc / openvpn / update-resolv-conf
Если клиент работает в Linux и имеет файл / etc / openvpn / update-resolv-conf , раскомментируйте эти строки из сгенерированного файла конфигурации OpenVPN.
Сохраните файл, когда закончите.
Создать конфигурацию сценария для создания
Затем мы создадим простой сценарий для компиляции нашей базовой конфигурации с соответствующими файлами сертификата, ключа и шифрования. Он будет создан в каталоге ~ / client-configs / files .
Создайте и откройте файл с именем make_config.sh в каталоге ~ / client-configs :
нано ~ / client-configs / make_config.sh
Вставьте следующий скрипт внутрь:
~ / client-configs / make_config.sh
#! / Bin / bash # Первый аргумент: идентификатор клиента KEY_DIR = ~ / openvpn-ca / ключи OUTPUT_DIR = ~ / клиентские конфигурации / файлы BASE_CONFIG = ~ / client-configs / base.conf кошка $ {BASE_CONFIG} \ <(echo -e '') \ $ {KEY_DIR} /ca.crt \ <(echo -e ' ca> \ n cert>') \ $ {KEY_DIR} / $ {1} .crt \ <(echo -e ' cert> \ n key>') \ $ {KEY_DIR} / $ {1} .key \ <(echo -e ' key> \ n tls-auth>') \ $ {KEY_DIR} / ta.ключ \ <(echo -e ' tls-auth>') \ > $ {OUTPUT_DIR} / $ {1} .ovpn
Сохраните и закройте файл, когда закончите.
Отметьте файл как исполняемый, набрав:
chmod 700 ~ / client-configs / make_config.sh
Шаг № 11: Создание конфигурации клиента
Теперь мы можем легко создавать файлы конфигурации клиента.
Если вы следовали руководству, были созданы сертификат клиента и ключ с именем client1.crt и client1.key соответственно, выполнив команду ./build-key client1 на шаге 6. Мы можем сгенерировать конфигурацию для этих учетных данных, перейдя в наш каталог ~ / client-configs и используя скрипт, который мы сделал:
cd ~ / client-config
./make_config.sh client1
Если все прошло хорошо, у нас должен быть файл client1.ovpn в нашем каталоге ~ / client-configs / files :
ls ~ / client-configs / files
Выход
client1.овпн
Передача конфигурации на клиентские устройства
Нам нужно переместить файл конфигурации клиента на соответствующее устройство. Например, это может быть локальный компьютер или портативное устройство.
Хотя приложения, используемые для этой передачи, зависят от вашей операционной системы и выбора устройства, а также от того, хотите ли вы использовать SFTP (протокол передачи файлов SSH) или SCP (безопасное копирование) на сервере. Это будет транспортировать файлы аутентификации VPN-клиента по зашифрованному соединению.
Вот пример команды SFTP, использующей наш client1.ovpn. Эту команду можно запустить с локального компьютера (OS X или Linux). Просто поместите файл .ovpn в свой домашний каталог:
локальный $ sftp sammy @ openvpn_server_ip: client-configs / files / client1.ovpn ~ /
Шаг № 12: Установите профиль клиента
Теперь мы обсудим, как установить клиентский профиль VPN в Windows, OS X, iOS и Android. Ни одна из этих инструкций для клиентов не зависит друг от друга, поэтому мы рекомендуем вам выбрать подходящее вам руководство.
Соединению OpenVPN будет присвоено имя в соответствии с именем файла .ovpn. В нашем примере это означает, что соединение будет называться client1.ovpn в соответствии с первым созданным нами клиентским файлом.
Окна
Установка
Клиентское приложение OpenVPN для Windows можно найти на странице загрузок OpenVPN. Выберите соответствующую версию установщика для вашей версии Windows.
Примечание: OpenVPN требует установки прав администратора.
После установки OpenVPN скопируйте файл .ovpn :
C: \ Program Files \ OpenVPN \ config
Когда вы запустите OpenVPN, вы автоматически увидите профиль, который делает его доступным.
OpenVPN должен запускаться от имени администратора каждый раз, когда он используется, даже с административными учетными записями. Чтобы не делать этого без надобности, каждый раз щелкайте правой кнопкой мыши команду «Запуск от имени администратора», используя VPN. Это можно запрограммировать, но это нужно делать из учетной записи администратора.Это также означает, что обычные пользователи должны будут ввести пароль администратора, чтобы использовать OpenVPN. С другой стороны, обычные пользователи не могут правильно подключиться к серверу, если приложение OpenVPN на клиенте не имеет прав администратора, поэтому повышенные привилегии не требуются.
Чтобы приложение OpenVPN всегда запускалось от имени администратора, щелкните его ярлык правой кнопкой мыши и перейдите к Свойства . Внизу вкладки Совместимость нажмите кнопку Изменить настройки для всех пользователей.В новом окне выберите Запустить эту программу от имени администратора .
Позвоните
Каждый раз, когда вы хотите запустить программу с графическим интерфейсом OpenVPN, Windows будет спрашивать вас, хотите ли вы разрешить программе вносить изменения в ваш компьютер. Щелкните Да . Запуск клиентского приложения OpenVPN добавляет только апплет на панели задач, так что VPN можно подключать и отключать по мере необходимости; на самом деле он не создает VPN-соединение.
При запущенном OpenVPN инициируйте соединение с помощью апплета на панели задач, а затем щелкните правой кнопкой мыши значок апплета OpenVPN.Откроется контекстное меню. Выберите client1 вверху меню (это наш профиль client1.ovpn ) и выберите Connect .
В окне состояния будет отображаться журнал, пока соединение активно, сообщение появится, как только будет подключен клиент.
Отключитесь от VPN таким же образом: перейдите к апплету на панели задач, затем щелкните правой кнопкой мыши значок апплета OpenVPN, выберите профиль клиента и щелкните Отключить .
OS X
Установка
Tunnelblick - это бесплатный клиент OpenVPN с открытым исходным кодом для Mac OS X. Вы можете загрузить последний образ диска со страницы загрузок Tunnelblick. Дважды щелкните файл .dmg и следуйте инструкциям по установке.
В конце процесса установки Tunnelblick спросит, есть ли у вас файлы конфигурации. Будет легче ответить Нет и дать Tunnelblick завершить установку. Откройте окно Finder и дважды щелкните client1.овпн . Tunnelblick установит профиль клиента. Требуются права администратора.
Позвоните
Запустите Tunnelblick, дважды щелкнув Tunnelblick в папке Applications . Как только Tunnelblick будет запущен, в строке меню в правом верхнем углу экрана появится значок Tunnelblick для управления подключениями. Щелкните значок, а затем пункт меню Connect , чтобы инициировать VPN-соединение. Выберите соединение client1 .
Linux
Установка
Если вы используете Linux, существует множество инструментов, которые можно использовать в зависимости от вашего дистрибутива. Графическая среда или оконный менеджер также могут содержать инструменты подключения.
Однако самый универсальный способ подключения - просто использовать программное обеспечение OpenVPN.
В Ubuntu или Debian вы можете установить его так же, как и на сервере, набрав:
клиент $ sudo apt-get update
клиент $ sudo apt-get install openvpn
В CentOS вы можете добавить репозиторий EPEL, а затем установить его, набрав:
клиент $ sudo yum install epel-release
client $ sudo yum install openvpn
Конфигурация
Проверьте, есть ли в вашем дистрибутиве скрипт / etc / openvpn / update-resolv-conf:
клиент $ ls / etc / openvpn
Выход
обновление-разрешение-конф
Затем мы редактируем файл конфигурации клиента OpenVPN, который был загружен:
клиент $ nano client1.овпн
Раскомментируйте три строки, которые мы добавили в настройки DNS, если вы можете найти файл update-resolv-conf :
client1.ovpn
скрипт безопасности 2 вверх / и т.д. / openvpn / update-resolv-conf вниз / и т. д. / openvpn / update-resolv-conf
Если вы используете CentOS, измените group с nogroup на none на соответствие существующим группам рассылки:
client1.ovpn
группа никто
Сохраните и закройте файл.
Теперь вы можете подключиться к VPN, просто набрав openvpn для файла конфигурации клиента:
клиент $ sudo openvpn --config client1.ovpn
Это должно подключиться к серверу.
iOS
Установка
В iTunes App Store найдите и установите OpenVPN Connect, официальное клиентское приложение OpenVPN для iOS. Чтобы передать конфигурацию клиента iOS на устройство, подключите его напрямую к компьютеру.
Здесь будет представлено завершение переноса из iTunes. Откройте iTunes на своем компьютере и нажмите iPhone> приложения . Прокрутите вниз до раздела File Sharing и щелкните приложение OpenVPN. Пустое окно кейса OpenVPN Documents предназначено для обмена файлами. Перетащите файл .ovpn в окно документов OpenVPN. 90 984
Теперь запустите приложение OpenVPN для iPhone. Появится уведомление о том, что новый профиль готов к импорту.Щелкните зеленый знак плюса, чтобы импортировать его. 90 987
Позвоните
OpenVPNтеперь готов к использованию нового профиля. Начните соединение, сдвинув кнопку Connect на On . Для отключения сдвиньте ту же кнопку на Off .
Примечание: VPN Переключатель в настройках не может использоваться для подключения к сети VPN. Если вы попытаетесь, вы получите уведомление о том, что подключение возможно только через приложение OpenVPN.
Android
Установка
Откройте магазин Google Play. Найдите и установите OpenVPN Connect, официальное клиентское приложение OpenVPN для Android.
Профиль .ovpn можно передать, подключив устройство Android к компьютеру через USB и скопировав файл. В качестве альтернативы, если у вас есть устройство для чтения SD-карт, вы можете извлечь SD-карту вашего устройства и скопировать на нее профиль, а затем вставить карту обратно в устройство Android.
Запустите приложение OpenVPN и нажмите кнопку меню, чтобы импортировать профиль. 91 021
Затем перейдите в папку с сохраненным профилем (на снимке экрана используется / sdcard / Download / ) и выберите свой. Приложение заметит, что профиль был импортирован. 91 026
Позвоните
Чтобы установить соединение, просто нажмите кнопку Connect . Вас спросят, доверяете ли вы приложению OpenVPN. Наберите OK , чтобы установить соединение.Чтобы отключиться от VPN, вернитесь в приложение OpenVPN и выберите Отключить . 91 039
Шаг № 13: Тестирование соединения VPN
Когда все установлено, простая проверка подтвердит, что все работает правильно. При отключенном VPN-соединении откройте браузер и перейдите к DNSLeakTest.
Сайт вернет IP-адрес, назначенный провайдером. Чтобы проверить настройки DNS на той же странице, нажмите «Расширенный тест», и он покажет вам, какие DNS-серверы вы используете.
Теперь подключите клиент OpenVPN к своей Droplet VPN и обновите страницу в браузере. Должен появиться совершенно другой IP-адрес VPN-сервера. Вот так они выглядят во всем мире. Опять же, расширенный тест DNSLeakTest.com проверит ваши настройки DNS и подтвердит, что вы в настоящее время используете DNS, смещенный VPN.
Шаг № 14: отозвать сертификаты клиентов
Вам может потребоваться отозвать сертификат клиента, чтобы предотвратить дальнейший доступ к серверу OpenVPN.
Для этого введите свой каталог CA и исходный файл vars :
компакт-диск ~ / openvpn-ca
исходные вары
Затем мы вызываем команду revoke-full , используя имя клиента, которого вы хотите отменить:
./ revoke-full client3
Это покажет некоторые выходные данные, заканчивающиеся ошибкой 23. Это нормально, и процесс должен успешно сгенерировать необходимую отзывную информацию, которая хранится в файле с именем crl.pem в подкаталоге keys .
Переместите этот файл в каталог конфигурации / etc / openvpn :
sudo cp ~ / openvpn-ca / keys / crl.pem / и т. Д. / Openvpn
Затем откройте файл конфигурации сервера OpenVPN:
судо нано / etc / openvpn / server.конф
В конце файла добавьте параметр crl-verify , чтобы сервер OpenVPN проверял список отзыва сертификатов, который мы создали для каждой попытки подключения:
/etc/openvpn/server.conf
crl-verify crl.pem
Сохраните и закройте файл.
Наконец, перезапустите OpenVPN для реализации отзыва сертификата:
sudo systemctl перезапустить openvpn @ server
Клиент должен иметь возможность успешно подключиться к серверу, используя старые учетные данные.
Чтобы отозвать дополнительных клиентов, выполните этот процесс:
- Создайте новый список отзыва сертификатов, получив файл vars в каталоге ~ / openvpn-ca , а затем запустив сценарий revoke-full с именем клиента.
- Скопируйте новый список отзыва сертификатов в каталог / etc / openvpn , чтобы заменить старый список.
- Перезапустите службу OpenVPN.
- Этот процесс можно использовать для отзыва любых сертификатов, которые ранее были выданы вашему серверу.
Заявка
Поздравляем! Теперь вы можете безопасно пользоваться Интернетом, защищая свою личность, местоположение и трафик от шпионов и цензоров.
Чтобы настроить больше клиентов, просто выполните шаги 6 и 11-13 для каждого дополнительного устройства. Чтобы заблокировать доступ к клиентам, выполните шаг 14.
Если вы не хотите бороться с этой установкой и настройкой - мы поможем с этим на наших серверах в рамках бесплатной Премиум-поддержки. .Как установить и настроить VPN с OpenVPN в Ubuntu 18.04
VPN - это виртуальная частная сеть, которая позволяет вам получать доступ к Интернету и отдельным службам даже из ненадежной сети. На практике это выглядит так, как будто вы физически подключены к частной сети: вы можете, например, получить доступ к своему банковскому счету и совершать транзакции, не опасаясь, что кто-то может перехватить трафик, генерируемый на вашем устройстве.
OpenVPN - это VPN, основанная на протоколах TLS (Transport Layer Security) и SSL (Secure Sockets Layer).OpenVPN использует некоторые сертификаты для шифрования трафика между сервером и конечным клиентом.
В этом руководстве мы предоставим инструкции по настройке OpenVPN на сервере Ubuntu 18.04.
Для выполнения операций, представленных в руководстве, вам понадобятся две машины, одна из которых будет действовать как CA (центр сертификации) и проверять сертификаты.
Требуется соединить сервер и CA с помощью SSH-соединения. Если вы еще этого не сделали, ознакомьтесь с нашим руководством по безопасному подключению через SSH.
Установка OpenVPN
Подключитесь к серверу.
OpenVPN доступен в официальных установках Ubuntu, поэтому нет необходимости загружать какие-либо дополнительные файлы.
Введите:
sudo apt update sudo apt установить openvpn
После операции OpenVPN будет установлен на сервере.
Установка EasyRSA
Загрузите EasyRSA на свой сервер и в центр сертификации, введя на обеих машинах команду:
wget -P ~ / https: // github.com / OpenVPN / easy-rsa / Release / download / v3.0.4 / EasyRSA-3.0.4.tgz
Последнюю версию можно скачать с https://github.com/OpenVPN/easy-rsa/releases
кд ~ tar xvf EasyRSA-3.0.4.tgz
Название может отличаться в зависимости от скачанной версии
Конфигурацияна сервере
Завершите настройку сервера с помощью команд:
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz / etc / openvpn / sudo gzip -d / etc / openvpn / server.conf.gz Судо нано /etc/openvpn/server.conf
-
Найдите раздел, относящийся к HMAC ("tls-auth"). Если строка закомментирована, удалите «;».
-
Найдите раздел шифрования («шифр»). Если он закомментирован, удалите «;». Ниже добавьте новую строку, содержащую текст «auth SHA256».
-
Найдите раздел «dh», который определяет параметры Диффи-Хеллмана, и удалите «2048» из имени (вы должны получить «dh dh.пэм ").
-
Найдите разделы "пользователь" и "группа" и удалите ";" раскомментировать строку.
Конфигурация EasyRSA на CA
При установке EasyRSA создается файл конфигурации для определения переменных CA. Введите:
кд ~ / EasyRSA-3.0.4 / cp vars.example vars нано варс
Удалите знак "#" для инструкций на изображении ниже:
Запустите сценарий "easyrs" для инициализации инфраструктуры открытого ключа (PKI):
./ easyrsa init-pki ./easyrsa build-ca nopass
команда создаст два файла:
-
ca.crt: общедоступный сертификат ЦС, используемый серверами и клиентами для взаимной передачи информации о принадлежности к доверенной сети.
-
ca.key: закрытый ключ, используемый машиной CA для подписи ключей и сертификатов для серверов и клиентов. Этот файл должен находиться на машине CA (недоступен для третьих лиц), в противном случае сетевая безопасность может быть поставлена под угрозу.
Вам будет предложено ввести имя. Оставьте поле пустым и нажмите Enter.
Запросить сертификат в CA
После настройки машины CA сгенерируйте закрытый ключ и запрос сертификата на сервере и отправьте их на машину CA для подписи:
кд ~ / EasyRSA-3.0.4 ./easyrsa init-pki ./easyrsa gen-req сервер nopass
Вы только что создали закрытый ключ для сервера и запросили сертификат с именем "server".req ":
Судо CP ~ / EasyRSA-3.0.4 / pki / private / server.key / etc / openvpn /
Скопируйте файл server.req на компьютер CA:
scp ~ / EasyRSA-3.0.4 / pki / reqs / server.req [адрес электронной почты защищен] _CA_ip: / tmp
Сгенерируйте и подпишите сертификат
Импортируйте скопированный файл в папку EasyRSA на машине CA и подпишите его:
кд ~ / EasyRSA-3.0.4 / ./easyrsa import-req /tmp/server.req сервер ./easyrsa sign-req сервер сервер
Введите «да» и нажмите Enter.
Переместите подписанный сертификат и ca.crt на сервер VPN:
scp pki / выданный / server.crt [адрес электронной почты защищен] _server_ip: / tmp scp pki / ca.crt [адрес электронной почты защищен] _server_ip: / tmp
Затем на сервере
скопируйте полученные файлы в соответствующие места:
sudo cp /tmp/[server.crt,ca.crt} / etc / openvpn / cd ~ / EasyRSA-3.0.4 / ./easyrsa gen-dh
Сгенерируйте надежный обмен ключами на основе Диффи-Хеллмана.
openvpn --genkey --secret ta.key
Скопируйте сгенерированные файлы в папку "/ etc / openvpn /"
Судо CP ~ / EasyRSA-3.0.4 / ta.key / и т. Д. / Openvpn / sudo cp ~ / EasyRSA-3.0.4 / pki / dh.pem / и т. д. / openvpn /
Конфигурация клиента
Создайте папку для хранения клиентских сертификатов и ключей (в руководстве показан только один ключ с именем «client1», но операцию необходимо повторить для каждого клиента, который использует другой номинал)
mkdir -p ~ / client-configs / ключи chmod -R 700 ~ / клиентские конфигурации cd ~ / EasyRSA-3.0,4 / ./easyrsa gen-req client1 nopass
cp pki / private / client1.key ~ / client-configs / keys /
scp pki / reqs / client1.req [адрес электронной почты защищен] _CA_IP: / tmp
Импортировать запрос сертификата в CA:
кд ~ / EasyRSA-3.0.4 / ./easyrsa import-req /tmp/client1.req client1 ./easyrsa sign-req client client1
Введите «да», чтобы авторизовать подпись.
scp pki / edition / client1.crt [адрес электронной почты защищен] _SERVER: / tmp
Скопируйте следующие файлы в соответствующие папки на сервере.
cp /tmp/client1.crt ~ / client-configs / keys / cp ~ / EasyRSA-3.0.4 / ta.key ~ / client-configs / keys / sudo cp /etc/openvpn/ca.crt ~ / client-configs / keys /
Теперь и сертификаты, и ключи сервера и клиента созданы.
Конфигурация IP-маршрутизации и межсетевой экран
Изменить политику переадресации IP:
Судо нано /etc/sysctl.conf
Измените правила брандмауэра для правильной маршрутизации клиентских подключений.
IP-маршрут | grep по умолчанию
Судо нано /etc/ufw/before.rules
Добавьте команды, как на изображении ниже, заменив «eth0» на имя вашего сетевого интерфейса.
# START OPENVPN ПРАВИЛА # Правила таблицы NAT * нац : ПРИНЯТИЕ ПОСТРОУТИРОВКИ [0: 0] # Разрешить трафик от клиента OpenVPN на eth0 -A ПОСТРОУТИРОВАНИЕ -s 10.8.0.0/8 -o eth0 -j МАСКАРАД СОВЕРШИТЬ # END OPENVPN ПРАВИЛА
Сохранить и выйти.
Судо нано / и т. Д. / По умолчанию / ufw
sudo ufw разрешить 1194 / udp $ sudo ufw разрешить OpenSSH
sudo ufw отключить sudo ufw enable
Судо systemctl start openvpn
sudo systemctl статус openvpn
Настроить запуск службы при включении сервера
. sudo systemctl включить openvpn
mkdir -p ~ / клиент-конфигурации / файлы cp / usr / share / doc / openvpn / examples / sample-config-files / client.конф ~ / client-configs / base.conf нано ~ / client-configs / base.conf
Найдите раздел «удаленный» и убедитесь, что это «удаленный IP_Server 1194»
Найдите раздел "proto" и убедитесь, что сервер настроен на UDP (строка TCP должна быть закомментирована с помощью ";")
Найдите разделы "пользователь" и "группа" и удалите ";", чтобы раскомментировать их
Найдите разделы «ca.crt» - «client.crt» - «client.key» - «ta.key» и закомментируйте их, добавив «#» в начало каждой строки
Найдите раздел «cipher» и добавьте строку «auth SHA256» в «cipher AES-256-CBC»
Добавьте строку "key-direction 1" где-нибудь в
Добавьте строки с комментариями ниже, где хотите.Если клиент - машина Linux, раскомментируйте его с помощью
. # скрипт-безопасность 2 # вверх / etc / openvpn / update-resolv-conf # вниз / etc / openvpn / update-resolv-conf
Сохранить и выйти.
Генерация конфигураций для
клиентовСоздайте на своем сервере сценарий для автоматической компиляции конфигурации клиента.
нано ~ / client-configs / make_config.sh
Скопируйте и вставьте текст:
#! / Bin / bash # Первый аргумент: идентификатор клиента KEY_DIR = ~ / клиентские конфигурации / ключи OUTPUT_DIR = ~ / клиентские конфигурации / файлы BASE_CONFIG = ~ / client-configs / base.конф кошка $ {BASE_CONFIG} \ <(echo -e '') \ $ {KEY_DIR} /ca.crt \ <(echo -e ' \ n ') \ $ {KEY_DIR} / $ {1} .crt \ <(echo -e ' \ n ') \ $ {KEY_DIR} / $ {1} .key \ <(echo -e ' \ n ') \ $ {KEY_DIR} /ta.key \ <(echo -e ' ') \ > $ {OUTPUT_DIR} / $ {1} .ovpn
Сохранить и выйти из
chmod 700 ~ / client-configs / make_config.ш
90 023Попытка создать конфигурацию клиента.
cd ~ / client-config sudo ./make_config.sh client1
Будет создан файл client1.ovpn.
Передайте файл на устройство, которое хотите использовать. Он будет использоваться программным обеспечением VPN для установления соединения.
Перенаправить весь DNS-трафик через VPN
Измените значение параметра: нажмите "redirect-gateway def1 bypass-dhcp"
нано / etc / openvpn / server.конф
Найдите раздел "push" redirect-gateway def1 bypass-dhcp и удалите ";" раскомментировать
Аннулирование сертификата клиента
компакт-диск EasyRSA-3.0.4 / ./easyrsa отозвать client1
Введите «да» для подтверждения.
Создайте файл crl.pem и загрузите его на свой сервер:
./easyrsa gen-crl scp ~ / EasyRSA-3.0.4 / pki / crl.pem [защита электронной почты] _Server: / tmp
Обновите конфигурацию на сервере, чтобы проверить отзыв сертификата:
судо cp / tmp / crl.pem / и т. д. / openvpn Судо нано /etc/openvpn/server.conf
Добавьте crl-verify crl.pem
в конец файлаСохранить и выйти.
sudo systemctl restart [электронная почта защищена]
Перезапустите сервер, чтобы изменения вступили в силу.
.Установка OpenVPN как услуги - Debian / Ubuntu
Ниже мы представляем инструкции по установке и настройке клиента OpenVPN как службы в Linux Debian / Ubuntu.
Приложение OpenVPN может быть установлено, среди прочего команда:
# apt-get install openvpnФайл конфигурации client.conf должен находиться в папке / etc / openvpn
.Для редактирования используйте текстовый редактор vi или nano:
# нано / etc / openvpn / client.конф клиент Dev Tun протокол TCP удаленный XXX.XXX.XXX.XXX 1194 resolv-retry бесконечно без привязки постоянный ключ настойчивый туннель ca /etc/openvpn/keys/ca.crt сертификат /etc/openvpn/keys/MyClient.crt ключ /etc/openvpn/keys/MyClient.key сервер ns-cert-type глагол 0 шифр AES-256-CBC аутентификация SHA1Как видите, файл конфигурации требует, помимо прочего, указать такие параметры, как:
- удаленный - предоставление IP-адреса или имени хоста сервера OpenVPN, к которому будет подключаться клиент.
- 1194 - Укажите порт сервера OpenVPN, к которому будет подключаться клиент.
- ca /etc/openvpn/keys/ca.crt - путь, по которому находится сертификат ca.
- cert /etc/openvpn/keys/MyClient.crt - путь, по которому находится сертификат клиента.
- ключ /etc/openvpn/keys/MyClient.key - путь, по которому находится клиентский ключ.
Замените XXX.XXX.XXX.XXX IP-адресом или именем хоста сервера OpenVPN. Также необходимо ввести номер порта.
Теперь вы можете запустить настроенное клиентское приложение OpenVPN с помощью команды:
# openvpn --config /etc/openvpn/client.conf Будет отображен вывод приложения OpenVPN: # OpenVPN 2.3.4 arm-unknown-linux-gnueabihf [SSL (OpenSSL)] [VOC] [EPOLL] [PKCS11] [MH] [IPv6] создан 27 июня 2017 г. версии библиотеки: OpenSSL 1.0.1t 3 мая 2016 г., LZO 2.08 Буферы сокетов: R = [163840-> 131072] S = [163840-> 131072] ПРИМЕЧАНИЕ. Понижение UID / GID будет отложено из-за --client, --pull или --up-delay. Локальная ссылка UDPv4: [undef] Удаленный канал UDPv4: [AF_INET] XXX.XXX.XXX.XXX:1194 TLS: исходный пакет из [AF_INET] XXX.XXX.XXX.XXX:1194, sid = 2fc176a5 4d3fbbfd ПРОВЕРЬТЕ ОК: глубина = 1, C = XX, ST = XXXXXXXX, L = XXXXXXXX, O = XXXXXXXX, OU = XX, CN = XXXXXXXX, имя = EasyRSA, адрес электронной почты = XXXXXXXX ПРОВЕРИТЬ ОК: nsCertType = SERVER ПРОВЕРЬТЕ ОК: глубина = 0, C = XX, ST = XXXXXXXX, L = XXXXXXXX, O = XXXXXXXX, OU = XXXXXXXX, CN = XXXXXXXX, имя = EasyRSA, emailAddress = XXXXXXXX Шифрование канала данных: шифр AES-256-CBC, инициализированный 256-битным ключом Шифрование канала данных: использование 160-битного хэша сообщения 'SHA1' для аутентификации HMAC Расшифровка канала данных: шифр AES-256-CBC инициализирован 256-битным ключом Расшифровка канала данных: использование 160-битного хэша сообщения 'SHA1' для аутентификации HMAC Канал управления: TLSv1, шифр TLSv1 / SSLv3 ECDHE-RSA-AES256-SHA, 2048-битный RSA [сервер] Одноранговое соединение, инициированное с помощью [AF_INET] XXX.XXX.XXX.XXX:1194 SENT CONTROL [сервер]: 'PUSH_REQUEST' (статус = 1) PUSH: получено управляющее сообщение: 'PUSH_REPLY, route 10.8.0.1, topology net30, ping 10, ping-restart 120, ifconfig 10.8.0.10 10.8.0.1' ИМПОРТ ОПЦИЙ: таймеры и / или тайм-ауты изменены ИМПОРТ ОПЦИЙ: изменены параметры --ifconfig / up ИМПОРТ ОПЦИЙ: изменены параметры маршрута ROUTE_GATEWAY 192.168.1.1/255.255.255.0 IFACE = eth0 HWADDR = XXXXXXXXXXXXXXXXXX Устройство TUN / TAP tun0 открыто Длина очереди TUN / TAP TX установлена на 100 do_ifconfig, tt-> ipv6 = 0, tt-> did_ifconfig_ipv6_setup = 0 / sbin / ip ссылка установить dev tun0 вверх mtu 1500 / sbin / ip addr добавить dev tun0 local 10.8.0.10 одноранговый 10.8.0.1 Пт 8 сентября 09:08:44 2017 / sbin / ip route добавить 10.8.0.1/32 через 10.8.0.1 Набор GID - nogroup UID не задан Последовательность инициализации завершена
Чтобы разрешить автоматический запуск приложений OpenVPN, например, при перезапуске виртуальной машины, необходимо включить OpenVPN как службу в Systemd. Systemd в первую очередь отвечает за управление процессами запуска и службами.
Команда systemctl в основном используется для управления.При запуске без параметров команда systemctl отобразит все активные (работающие) службы.
Итак, чтобы включить OpenVPN как услугу, вы должны ввести команду:
# systemctl start [email protected]
, где "client" - это имя созданного файла конфигурации client.conf
.и добавьте сервис OpenVPN в опцию автозапуска:
# systemctl включить [email protected].
Как создать свой собственный сервер OpenVPN
VPN-подключения - это очень хороший способ защитить подключение к различным удаленным серверам или к нашему рабочему месту. Мы можем приобрести VPN-соединение у одного из многих провайдеров. Однако, если для нас важно контролировать сервер, к которому мы подключаемся, мы можем создать его сами, но важно, чтобы он имел стабильное соединение, был высокодоступным и имел общедоступный IP-адрес. Также обратите внимание, что в моем примере конфигурация адаптирована к моим потребностям и может отличаться от других.Поэтому при создании сервера вам также следует прочитать документацию, которая находится под номером , здесь .
В моем случае сервер, на котором будет работать OpenVPN, будет использовать Ubuntu 20.04. Однако перед началом установки вы должны помнить о нескольких важных шагах, выполнение которых сэкономит наше время и обеспечит беспроблемную установку.
Обновляем систему
перед установкой sudo apt update sudo apt обновление
И мы отображаем и сохраняем наш публичный IP-адрес
ip a показать имя_интерфейса
В моем случае команда выглядит как
ip a показать eth0
Переходим к этапу установки и настройки.Вместе с OpenVPN мы устанавливаем Easy-RSA для создания криптографических ключей.
sudo apt установить openvpn easy-rsa
Затем, как обычный пользователь, мы создаем каталог easy-rsa и связываемся с ним
мкдир ~ / easy-rsa ln -s / usr / share / easy-rsa / * ~ / easy-rsa /
Позже меняем владельцев
пользователь sudo chown ~ / easy-rsa chmod 700 ~ / easy-rsa
На следующем этапе мы создадим ключи PKI.Для этого перейдите в ранее созданную папку и создайте новый текстовый файл.
cd ~ / easy-rsa нано варс
Во вновь созданном файле введите
set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512"
После сохранения запускаем скрипт, создающий папку PKI
. ./easyrsa init-pki
Теперь пора создать запрос сертификата и создать закрытый ключ для сервера
. ./ easyrsa gen-req имя сервера nopass
Эта команда генерирует запрос сертификата для сервера server_name без защиты паролем, но если мы хотим защитить его, удалите параметр nopass . Теперь переместите сгенерированный файл запроса в каталог сервера OpenVPN
. sudo cp /home/user/easy-rsa/pki/reqs/server_name.req / etc / openvpn / server /
А потом перенести на наш CA сервер и подписать
./ easyrsa import-req /tmp/servername.req имя_сервера ./easyrsa sign-req имя сервера имя сервера
После подписания мы переносим файлы обратно на наш сервер, а затем перемещаем их в каталог OpenVPN
sudo cp /tmp/server_name.crt /tmp/ca.crt / etc / openvpn / server
Для дополнительного уровня защиты нашей сети мы добавим ключ шифрования нашего трафика. Для этого перейдите в папку easy-rsa в домашнем каталоге и сгенерируйте ключ шифрования, который мы затем передаем в каталог сервера OpenVPN
. cd ~ / easy-rsa openvpn --genkey --secret ta.ключ sudo cp ta.key / etc / openvpn / сервер
После того, как мы выполнили вышеуказанные команды, мы можем создать файлы конфигурации для клиентов. Сначала мы создаем каталог для файлов конфигурации и меняем права доступа к нему.
mkdir -p ~ / client-configs / ключи chmod -R 700 ~ / клиентские конфигурации
Теперь создаем запрос сертификата для сервера CA и копируем его во вновь созданную папку
./easyrsa gen-req client1 nopass cp pki / private / client1.ключ ~ / client-configs / keys /
Затем мы передаем запрос сертификата на сервер сертификации и подписываем его там, а затем передаем обратно на сервер vpn.
cd ~ / easy-rsa ./easyrsa import-req /tmp/klient1.req client1 ./easyrsa sign-req client client1
Теперь кладем в папку с сертификатами клиентов вместе с файлами ключей шифрования и сертификатом сервера и меняем права доступа к этим файлам.
cp /tmp/klient1.crt ~ / client-configs / keys cp ~ / easy-rsa / ta.key ~ / client-configs / keys / sudo cp /etc/openvpn/server/ca.crt ~ / client-configs / keys / sudo chown user.user ~ / client-configs / keys / *
Теперь, когда у нас есть сгенерированные сертификаты, мы можем перейти к настройке сервера. Копируем образец файла конфигурации, распаковываем и открываем.
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz / etc / openvpn / server / sudo gunzip / etc / openvpn / server / server.conf.gz sudo nano /etc/openvpn/server/server.conf
Данный файл конфигурации готов к использованию после копирования, но мы можем настроить такие параметры, как:
- порт,
- протокол связи,
- тип шифрования данных,
- и многие другие.
После внесения изменений, которые мы хотим внести, сохраните файл конфигурации и закройте его.
Если в нашей конфигурации нет ошибок, мы должны запустить сервер без проблем.
sudo systemctl -f включить [email protected] sudo systemctl start [email protected] sudo systemctl статус [email protected]
После запуска сервера мы можем приступить к созданию файлов конфигурации для пользователей. Сначала создаем папку для сертификатов и копируем образец файла конфигурации, на основе которого будут создаваться следующие.
mkdir -p ~ / client-configs / files cp / usr / share / doc / openvpn / examples / sample-config-files / client.conf ~ / client-configs / base.conf
После копирования откройте файл конфигурации в редакторе и измените некоторые значения так, чтобы они соответствовали реальному состоянию
удаленный vpn_ip_server_vpn_vpn_port proto udp # помните, что протокол такой же, как и в конфигурации сервера
Теперь мы можем создать сценарий, который поможет нам создавать пользователей. Создаем новый файл и запускаем в текстовом редакторе
нано ~ / client-configs / make_config.ш
А потом копируем в него следующее содержимое
#! / Bin / bash KEY_DIR = ~ / клиентские конфигурации / ключи OUTPUT_DIR = ~ / клиентские конфигурации / файлы BASE_CONFIG = ~ / client-configs / base.conf кошка $ {BASE_CONFIG} \ <(echo -e '') \ $ {KEY_DIR} /ca.crt \ <(echo -e ' \ n ') \ $ {KEY_DIR} / $ {1} .crt \ <(echo -e ' \ n ') \ $ {KEY_DIR} / $ {1} .key \ <(echo -e ' \ n ') \ $ {KEY_DIR} / ta.ключ \ <(эхо-е ' ') \ > $ {OUTPUT_DIR} / $ {1} .ovpn
Благодаря этому скрипту мы прикрепляем все ключи и сертификаты вместе с файлом, поэтому нам не нужно отправлять много файлов клиенту, а только один пакет, который разрешает соединение.
Чтобы защитить скрипт от несанкционированного доступа, измените его параметры безопасности
chmod 700 ~ / client-configs / make_config.sh
Когда у нас есть вся конфигурация, мы можем создать наш файл конфигурации, необходимый для подключения к VPN.
Мы запускаем сценарий, который создает конфигурацию для клиентов.
cd ~ / client-config ./make_config.sh client1
Теперь наш сценарий создаст один файл конфигурации с сертификатами и настройками подключения и сохранит его в подпапке ~ / client-configs / files как client1.ovpn. Теперь этот файл можно передать клиенту и запустить.
Однако следует помнить, что, несмотря на правильную работу сервера, стоит проверить параметры конфигурации и адаптировать их к условиям, преобладающим в нашей сети или других устройствах, чтобы получить максимально возможную производительность.Подробную информацию можно найти на странице технической документации .
Если у вас есть дополнительные вопросы по настройке или вы заинтересованы в покупке сервера для службы OpenVPN, свяжитесь с нами через форму внизу страницы.
.Как установить и настроить OpenVPN в Ubuntu
ТехнологияVPN хорошо известна как способ защиты доступа к частным ресурсам компаний, а также к различному контенту, будь то аудио, видео и архивные документы. Он позволяет создать частную сеть, перенаправляя документы на один компьютер с ресурсами другого или нескольких. Виртуальная частная сеть широко используется во всех современных браузерах. Без него удаленная работа сотрудника большой и важной организации редко окупается.Настройка OpenVPN в Ubuntu важна не только для технических специалистов и защитников высоких требований безопасности, но и для тех, кто не хочет мириться с высокой стоимостью лицензионного контента в странах, где доступ к нему ограничен.
В Linux настройка виртуальных сетей является тонкой.
Благодаря этой технологии вы можете легко получить доступ к контенту, хранящемуся в китайских файлах, например, из России, известной своей широко распространенной цензурой в Интернете.Или используйте его, чтобы получить множество других важных преимуществ бесплатного использования Интернета. В организациях проблема использования виртуальных частных сетей назрела из-за сложности настройки межсетевых экранов. Их использование требуется для постоянного изменения параметров подключенного оборудования и настроек доступа. Раньше это требовало значительных временных и финансовых затрат.
Установка OpenVPN - это приложение свободно доступной технологии виртуальной частной сети. Это возможно как в операционных системах Windows, так и в Linux.Поскольку в среде Linux настроить все параметры этой функции проще, мы рассмотрим ее. Тема виртуальных частных сетей широко освещается на многих тематических сайтах и форумах, к ней присоединились как профессионалы, так и новые сторонники технологий безопасности по всему миру. Установка OpenVPN в Ubuntu позволяет не только повысить безопасность вашей личной информации, но и организовать вашу онлайн-деятельность.
Почему вам следует использовать VPN, а не какие-либо другие средства защиты личных данных? Этот метод нужно настроить только один раз.Все данные автоматически проходят через сервер частной сети и сразу же зашифровываются.
Содержание
- 1 Что вам нужно знать теоретически?
- 2 Переходим к практике
- 2.1 Начинаем установку и настройку
Что нужно знать в теории?
OpenVPN - это довольно функциональная, быстрая и гибкая программа, позволяющая работать с SSL VPN. Имеет открытый исходный код. Это означает, что каждый может использовать свои возможности по отдельности, а также изменять программный код в соответствии со своими потребностями.
Фактически, эта технология предлагает использовать небезопасные сети, как если бы они имели мощную защиту. Это будет очень важно, если:
- Вы используете Интернет-соединение с низким уровнем безопасности.
- Существует цензура доступа к информации по вашему месту жительства.
- Вы находитесь в месте с точками доступа Wi-Fi для общественного пользования.
- Вы должны скрыть свое местоположение от других пользователей сети.
- Вы хотите еще лучше защитить свои личные данные и пароли.
Это личное, потому что никто не имеет к нему доступа. Это могут сделать только отдельные участники, которые создали такую связь друг с другом. Каждый сетевой элемент должен содержать информацию о безопасности. Эта информация позволяет одним участникам Интернета легко получить доступ к сети, а также просто запрещает доступ другим.
Основные понятия
Туннель - это безопасное безопасное соединение, использующее ресурсы из незащищенной сети (в данном случае Интернет) и позволяющее обмениваться информацией по частному каналу, настроенному только на доверенных устройствах.
Клиент - это программа, установленная на оборудовании, которая должна обеспечивать канал обмена данными с сервером. Этот канал защищен.
Сервер - компьютер или место, где хранятся учетные записи пользователей виртуальной частной сети.Использование сервера позволяет программам работать быстрее и снижает трафик (объем передаваемых данных).
Открытые ключи и сертификаты - это особые данные, которые используются для шифрования информации. Во время обмена данными они попадают в центр сертификации, где расписываются. Позже они возвращаются к исходному сетевому элементу.
Перейти к практике
Чтобы настроить сервер Ubuntu OpenVPN, вам необходимо приобрести собственный сервер под управлением Ubuntu Linux. На нем нужно получить root права.В настоящее время вы можете купить решение по невысокой цене, и количество компаний, предлагающих такие услуги, постоянно растет. Простая установка OpenVPN в Ubuntu не требует значительных затрат времени.
Мы начинаем установку и настройку
Сначала вам нужно подключиться к серверу и дать ему следующие команды:
«apt-get update
apt-get install openvpn»
Эти инструкции начнутся установка OpenVPN. Затем установите инструмент создания ключей и сертификатов и подготовьте его к работе:
"cd / tmp
wget https: // github.com / OpenVPN / easy-rsa / archive / master.zip
apt-get install unzip
extract master.zip
cd easy-rsa-master
./build/build-dist.sh
tar xvzf ./EasyRSA-git - development.tgz
cd EasyRSA-git-development "
Далее вам нужно сгенерировать ключи и сертификаты:
" ./easyrsa init-pki
./easyrsa build-ca
./easyrsa full server
./ easyrsa build-client-full client1
./easyrsa gen-dh "
После генерации вам необходимо переместить данные в / etc / openvpn /:
" mv./pki/dh.pem /etc/openvpn/dh.pem
mv ./pki/private/client1.key / etc / openvpn /
mv ./pki/private/server.key / etc / openvpn /
mv ./ pki / ca.crt / etc / openvpn /
mv ./pki/issued/client1.crt / etc / openvpn /
mv ./pki/issued/server.crt / etc / openvpn / "
Создайте сервер. conf в том же каталоге со следующими параметрами:
"mode server
dev tun
server 10.128.0.0 255.255.255.0
push" redirect-gateway def1 "
push" dhcp-option DNS 8.8.8.8 "
tls-server
ca ca.crt
cert server.crt
key server.key
dh dh.pem
proto tcp-server
port 1194
client-client
comp-lzo
keepalive 10 120
глагол 4
AES-256-CBC
user nobody
nogroup group
max-clients 10 "
Выполнить запуск
" service openvpn start "
Затем нужно ввести данные на стороне клиента. Вам нужно будет создать несколько новых файлов.
"mkdir vpn
cd vpn
scp vpn-server: /etc/openvpn/client1.crt ./
scp vpn-server: /etc/openvpn/client1.key ./
scp vpn-server: / etc / openvpn / ca.crt ./ "
Здесь, на удаленной линии, вам нужно ввести IP-адрес сервера, как показано в примере.
"клиент
proto tcp
dev tun
123.45.67.89 1194 pilot
persist-key
persist tun
ca ca.crt
cert client1.crt
key client1.key
cipher AES-256-CBC
comp-lzo
verb 3 "
Затем проверьте файлы журнала на сервере на наличие ошибок:
" sudo openvpn -config client.conf "
В следующем окне терминала введите команду:
" ping 10.128.0.1
traceroute mail.ru "
Если все в порядке, вы обнаружите, что 10.128.0.1 был успешно проверен. , отправка пакетов получателю не произошла, потому что NAT не настроен на сервере. Нам все еще нужно выполнить этот шаг.
На сервере откройте файл /etc/sysctl.conf и удалите символы комментариев из линия "net.ipv4.ip_forward = 1 ", что сделает его активным.
Затем вы можете перезагрузить компьютер или ввести строку:
" echo1 >> / proc / sys / net / ipv4 / conf / all / forwarding "
Затем вам нужно ввести:
"iptables -A FORWARD -s 10.128.0.0/24 -j ACCEPT
iptables -A FORWARD -d 10.128.0.0/24 -m state \
-state ESTABLISHED, RELATED -j ACCEPT
iptables - t nat -A POSTROUTING -s 10.128.0.0/24 \
-j SNAT -to-source (адрес сервера) "
Затем попробуйте войти в службу проверки IP.Если все прошло успешно, сохраните правила на сервере:
«iptables-save> /etc/iptables.rules»
Также проверьте, что строка «pre-up iptables-restore
Вы должны завершить настройку VPN через Network Manager. Для этого введите команду «sudoapt-get install network-manager-openvpn-gnome». Вы можете записать все файлы, определенные ранее, в текстовую форму для конфигурации.
На этом настройка сервера Ubuntu OpenVPN завершена! Если возникнут проблемы - задавайте их в комментариях или ищите подробности на тематических форумах! Linux - сложная и многогранная система, которая редко доступна новичкам. Но при должном рвении овладеть им это возможно. А затем миллион новых функций открыт для пользователя, который раньше был вне поля зрения.
.Как настроить сервер OpenVPN в Ubuntu 18.04 2022
Если вам нужен безопасный и безопасный доступ в Интернет, при подключении к ненадежной общедоступной сети Wi-Fi, в обход контента с географическими ограничениями или для обеспечения безопасного подключения ваших коллег к корпоративной сети при удаленной работе, использование VPN - лучший выбор.
VPN позволяет вам подключаться к удаленным VPN-серверам, обеспечивая шифрование и безопасность вашего соединения, и вы можете просматривать Интернет анонимно, сохраняя конфиденциальность данных о трафике.
Есть много коммерческих VPN-провайдеров, из которых вы можете выбирать, но никогда нельзя быть полностью уверенным, что провайдер не регистрирует вашу активность. Самый безопасный вариант - настроить собственный VPN-сервер.
Из этого туториала Вы узнаете, как настроить собственный VPN-сервер путем установки и настройки OpenVPN в Ubuntu 18.04. Мы также покажем вам, как генерировать сертификаты клиентов и создавать файлы конфигурации.
OpenVPN - это полнофункциональное решение для VPN с открытым исходным кодом Secure Socket Layer (SSL).Реализует безопасное расширение OSI Layer 2 или Layer 3 с использованием SSL / TLS.
Предварительные требования
Для выполнения этого руководства вам необходимо:
Отзыв клиентских сертификатов
Отзыв сертификата означает отзыв подписанного сертификата, чтобы его больше нельзя было использовать для доступа к серверу OpenVPN.
Чтобы отозвать сертификат клиента, выполните следующие действия:
-
Войдите в систему на компьютере CA и перейдите в каталог EasyRSA:
cd EasyRSA-3.0,5
Запустите сценарий easyrs, используя аргумент revoke, за которым следует имя клиента, которого вы хотите отозвать:
./easyrsa revoke client1
Вам будет предложено проверить, хотите ли вы отозвать сертификат. Введите
yes
и нажмитевведите
для подтверждения:Подтвердите, что вы хотите отозвать сертификат, указав следующую тему: subject = commonName = client1. Введите слово «yes», чтобы продолжить, или любой другой ввод для отмены.Продолжить с отзывом: да ...
Если ваш ключ CA защищен паролем, вам будет предложено ввести пароль. После проверки скрипт удалит сертификат.
... Аннулирование прошло успешно. Вы должны запустить gen-crl и загрузить CRL в свою инфраструктуру, чтобы предотвратить принятие отозванного сертификата.
Используйте параметр
gen-crl
для создания списка отзыва сертификатов (CRL):./ easyrsa gen-crl
Создан обновленный CRL. Файл CRL: /home/causer/EasyRSA-3.0.5/pki/crl.pem
Загрузите файл CRL на сервер OpenVPN:
scp ~ / EasyRSA-3.0.5 / pki / crl.pem [электронная почта protected] _server_ip: / tmp
Войдите на сервер OpenVPN и переместите файл на
/ etc / openvpn
:sudo mv /tmp/crl.pem / etc / openvpn
Откройте файл конфигурации сервера OpenVPN:
sudo nano / etc / openvpn / server1.conf
Вставьте следующую строку в конец файла
/etc/openvpn/server1.confcrl-verify crl.pem
Сохраните и закройте файл.
Перезапустите службу OpenVPN, чтобы директива отзыва вступила в силу:
sudo systemctl restart [электронная почта защищена]
На этом этапе клиент больше не должен иметь доступ к серверу OpenVPN с отозванным сертификатом.
Заключение
В этом руководстве вы узнали, как установить и настроить сервер OpenVPN на компьютере с Ubuntu 18.04.
Безопасность VPN в Ubuntu .