Как настроить сервер OpenVPN в Ubuntu 16.04 #1
@Torchik_RuВведение
Хотите иметь безопасный и защищённый доступ в Интернет с вашего смартфона или ноутбука при подключении к незащищённой сети через WiFi отеля или кафе? Виртуальная частная сеть (Virtual Private Network, VPN) позволяет использовать незащищённые сети таким образом, как если бы вы работали в частной сети. Весь ваш трафик в этом случае проходит через VPN-сервер.
В комбинации с использованием HTTPS-соединения описываемые далее настройки позволят вам обезопасить свою приватную информацию, например, логины и пароли, а также ваши покупки. Более того, вы сможете обходить региональные ограничения и цензуру, а также скрывать своё местонахождение и незашифрованный HTTP-трафик от незащищённой сети.
OpenVPN представляет собой мощное и гибко настраиваемое программное обеспечение с открытым исходным кодом для работы с Secure Socket Layer (SSL) VPN. В этой статье мы установим и настроим OpenVPN сервер, а также научимся осуществлять к нему доступ из Windows, Mac OS, iOS и Android. Для этого мы выполним несколько простых шагов.
Необходимые условия
Прежде всего вам необходимо иметь сервер с Ubuntu 16.04.
Перед тем, как начать следовать шагам, описанным в этой статье, вам необходимо настроить отдельный, не-рутовый (non-root) профиль пользователя с привилегиями sudo
на вашем сервере. Вы можете сделать это следуя инструкциям, описанным в статье о первичной настройке сервера на Ubuntu 16.04. В этой же статье описан процесс настройки файрвола; далее мы будем считать, что файрвол настроен на вашем сервере.
Когда вы будете готовы начать, зайдите на ваш сервер под созданным вами sudo
-пользователем и следуйте шагам, описанным ниже.
Шаг 1. Установка OpenVPN
Сначала установим OpenVPN на наш сервер. OpenVPN доступен в стандартных репозиториях Ubuntu, мы можем использовать apt
для его установки. Также мы установим пакет easy-rsa
, который позволит нам настроить наш собственный внутренний центр сертификации (certificate authority, CA) для использования с нашей VPN.
Обновим список пакетов сервера и установим необходимые пакеты следующими командами:
sudo apt-get update
sudo apt-get install openvpn easy-rsa
Необходимое программное обеспечение установлено и готово к настройке.
Шаг 2. Создание директории центра сертификации
OpenVPN это виртуальная частная сеть, использующая TLS/SSL. Это означает, что OpenVPN использует сертификаты для шифрования трафика между сервером и клиентами. Для выпуска доверенных сертификатов (trusted certificates) нам потребуется создать наш собственный центр сертификации.
Для начала скопируем шаблонную директорию easy-rsa
в нашу домашнюю директорию с помощью команды make-cadir
:
make-cadir ~/openvpn-ca
Далее зайдём в эту директорию для начала настройки центра сертификации:
cd ~/openvpn-ca
Шаг 3. Настройка переменных центра сертификации
Для настройки переменных нашего центра сертификации нам необходимо отредактировать файл vars
. Откройте этот файл в вашем текстовом редакторе:
nano vars
Внутри файла вы найдёте переменные, которые можно отредактировать, и которые задают параметры сертификатов при их создании. Нам нужно изменить всего несколько переменных.
Перейдите ближе к концу файла и найдите настройки полей, используемые по умолчанию при создании сертификатов. Они должны выглядеть примерно так:
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"
Замените значения, выделенные красным, на что-нибудь другое, не оставляйте их не заполненными:
export KEY_COUNTRY="US"
export KEY_PROVINCE="NY"
export KEY_CITY="New York City"
export KEY_ORG="DigitalOcean"
export KEY_EMAIL="admin@example.com"
export KEY_OU="Community"
Пока мы в этом файле, отредактируем значение KEY_NAME
чуть ниже, которое заполняет поле субъекта сертификатов. Для простоты зададим ему название server
:
export KEY_NAME="server"
Сохраните и закройте файл.
Шаг 4. Создание центра сертификации
Теперь мы можем использовать заданные нами переменные и утилиты easy-rsa
для создания центра сертификации.
Убедитесь, что вы находитесь в директории центра сертификации и используйте команду source
к файлу vars
:
cd ~/openvpn-ca
source vars
Вы должны увидеть следующий вывод:
NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/sammy/openvpn-ca/keys
Убедимся, что мы работаем в "чистой среде" выполнив следующую команду:
./clean-all
Теперь мы можем создать наш корневой центр сертификации командой:
./build-ca
Эта команда запустит процесс создания ключа и сертификата корневого центра сертификации. Поскольку мы задали все переменные в файле vars
, все необходимые значения будут введены автоматически. Нажимайте ENTER для подтверждения выбора:
Generating a 2048 bit RSA private key
..........................................................................................+++
...............................+++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [US]:
State or Province Name (full name) [NY]:
Locality Name (eg, city) [New York City]:
Organization Name (eg, company) [DigitalOcean]:
Organizational Unit Name (eg, section) [Community]:
Common Name (eg, your name or your server's hostname) [DigitalOcean CA]:
Name [server]:
Email Address [admin@email.com]:
Теперь у нас есть центр сертификации, который мы сможем использовать для создания всех остальных необходимых нам файлов.
Шаг 5. Создание сертификата, ключа и файлов шифрования для сервера
Далее создадим сертификат, пару ключей и некоторые дополнительные файлы, используемые для осуществления шифрования, для нашего сервера.
Начнём с создания сертификата OpenVPN и ключей для сервера. Это можно сделать следующей командой:
Внимание: Если ранее вы выбрали имя, отличное отserver
, вам придётся немного изменить некоторые инструкции. Например, при копировании созданных файлов в директорию/etc/openvpn
вам придётся заменить имена на заданные вами. Вам также придётся изменить файл/etc/openvpn/server.conf
для того, чтобы он указывал на корректные.crt
и.key
файлы.
./build-key-server server
Вывод опять будет содержать значения по умолчанию, переданные этой команде (server
), а также значения из файла vars
.
Согласитесь со всеми значениями по умолчанию, нажимая ENTER. Не задавайте challenge password. В конце процесса два раза введите y для подписи и подтверждения создания сертификата:
. . .
Certificate is to be certified until May 1 17:51:16 2026 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Далее создадим оставшиеся файлы. Мы можем сгенерировать сильные ключи протокола Диффи-Хеллмана, используемые при обмене ключами, командой:
./build-dh
Для завершения этой команды может потребоваться несколько минут.
Далее мы можем сгенерировать подпись HMAC для усиления способности сервера проверять целостность TSL:
openvpn --genkey --secret keys/ta.key
Шаг 6. Создание сертификата и пары ключей для клиента
Далее мы можем сгенерировать сертификат и пару ключей для клиента. Вообще это можно сделать и на клиентской машине и затем подписать полученный ключ центром сертификации сервера, но в этой статье для простоты мы сгенерируем подписанный ключ на сервере.
В этой статье мы создадим ключ и сертификат только для одного клиента. Если у вас несколько клиентов, вы можете повторять этот процесс сколько угодно раз. Просто каждый раз передавайте уникальное значение скрипту.
Поскольку мы можем вернуться к этому шагу позже, мы повторим команду source
для файла vars
. Мы будем использовать параметр client1
для создания первого сертификата и ключа.
Для создания файлов без пароля для облегчения автоматических соединений используйте команду build-key
:
cd ~/openvpn-ca
source vars
./build-key client1
Для создания файлов, защищённых паролем, используйте команду build-key-pass
:
cd ~/openvpn-ca
source vars
./build-key-pass client1
В ходе процесса создания файлов все значения по умолчанию будут введены, вы можете нажимать ENTER. Не задавайте challenge password и введите y на запросы о подписи и подтверждении создания сертификата.
Шаг 7. Настройка сервиса OpenVPN
Далее настроим сервис OpenVPN с использованием созданных ранее файлов.
Копирование файлов в директорию OpenVPN
Нам необходимо скопировать нужные нам файлы в директорию /etc/openvpn
.
Сначала скопируем созданные нами файлы. Они находятся в директории ~/openvpn-ca/keys
, в которой они и были созданы. Нам необходимо скопировать сертификат и ключ центра сертификации, сертификат и ключ сервера, подпись HMAC и файл Diffie-Hellman:
cd ~/openvpn-ca/keys
sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
Далее нам необходимо скопировать и распаковать файл-пример конфигурации OpenVPN в конфигурационную директорию, мы будем использовать этот файл в качестве базы для наших настроек:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
Настройка конфигурации OpenVPN
Теперь, когда наши файлы находятся на своём месте, займёмся настройкой конфигурационного файла сервера:
sudo nano /etc/openvpn/server.conf
Базовая настройка
Сначала найдём секцию HMAC поиском директивы tls-auth
. Удалите ";" для того, чтобы раскомментировать строку с tls-auth
. Далее добавьте параметр key-direction
и установите его значение в "0":
tls-auth ta.key 0 # This file is secret
key-direction 0
Далее найдём секцию шифрования, нас интересуют закомментированные строки cipher
. Шифр AES-128-CBC
обеспечивает хороший уровень шифрования и широко поддерживается другими программными продуктами. Удалите ";" для раскомментирования строки AES-128-CBC
:
cipher AES-128-CBC
Под этой строкой добавьте строку auth
и выберите алгоритм HMAC. Хорошим выбором будет SHA256
:
auth SHA256
Наконец, найдите настройки user
и group
и удалите ";" для раскомментирования этих строк:
user nobody
group nogroup
(Опционально) Проталкивание изменений DNS для перенаправления всего трафика через VPN
Сделанные нами настройки создают VPN соединение между двумя машинами, но они не заставляют эти машины использовать VPN соединение. Если вы хотите использовать VPN соединение для всего своего трафика, вам необходимо протолкнуть (push) настройки DNS на клиентские машины.
Для этого вам необходимо раскомментировать несколько директив. Найдите секцию redirect-gateway
и удалите ";" из начала строки для расскоментирования redirect-gateway
:
push "redirect-gateway def1 bypass-dhcp"
Чуть ниже находится секция dhcp-option
. Удалите ";" для обеих строк:
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
Это позволит клиентам сконфигурировать свои настройки DNS для использования VPN соединения в качестве основного.
(Опционально) Настройка порта и протокола
По умолчанию OpenVPN использует порт 1194 и протокол UDP для соединения с клиентами. Если вам необходимо изменить порт из-за каких-либо ограничений для ваших клиентов, вы можете сделать это изменив настройку port
. Если вы не хостите веб-контент на вашем OpenVPN сервере, вы можете использовать порт 443, поскольку этот порт обычно разрешён для использования в большинстве файрволов.
# Optional!
port 443
Используемый протокол может иметь ограничения по номеру порта. В этом случае измените proto
с UDP на TCP:
# Optional!
proto tcp
Если у вас нет явной необходимости использовать другой порт, лучше оставить обе эти настройки со значениями по умолчанию.
(Опционально) Использование кастомного имени сертификата и ключа
Если во время использования команды ./build-key-server
чуть выше вы указали параметр, отличный от server
, измените настройки cert
и key
, чтобы они указывали на правильные файлы .crt
и .key
. Если вы использовали server
, эти настройки должны выглядеть таким образом:
cert server.crt
key server.key
Сохраните и закройте файл.
Далее следует.