Поиск по сайту:

Как настроить сервер OpenVPN в Debian 9


Введение

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

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

OpenVPN — это полнофункциональное VPN-решение Secure Socket Layer (SSL) с открытым исходным кодом, которое поддерживает широкий спектр конфигураций. В этом руководстве вы настроите сервер OpenVPN на сервере Debian 9, а затем настроите доступ к нему из Windows, macOS, iOS и/или Android. В этом учебном пособии шаги по установке и настройке будут максимально простыми для каждой из этих настроек.

Примечание. Если вы планируете настроить сервер OpenVPN в дроплете DigitalOcean, имейте в виду, что мы, как и многие хостинг-провайдеры, взимаем плату за превышение пропускной способности. По этой причине помните, сколько трафика обрабатывает ваш сервер.

См. эту страницу для получения дополнительной информации.

Предпосылки

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

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

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

Если у вас есть эти предварительные условия, вы можете перейти к шагу 1 этого руководства.

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

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

  1. sudo apt update
  2. sudo apt install openvpn

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

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

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

  1. wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz

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

  1. cd ~
  2. tar xvf EasyRSA-3.0.4.tgz

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

Шаг 2 — Настройка переменных EasyRSA и построение ЦС

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

На своем компьютере CA перейдите в каталог EasyRSA:

  1. cd ~/EasyRSA-3.0.4/

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

  1. cp vars.example vars

Откройте этот новый файл с помощью предпочитаемого вами текстового редактора:

  1. nano 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      "me@example.net"
#set_var EASYRSA_REQ_OU         "My Organizational Unit"

. . .

Раскомментируйте эти строки и измените выделенные значения на нужные, но не оставляйте их пустыми:

. . .

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      "admin@example.com"
set_var EASYRSA_REQ_OU         "Community"

. . .

Когда вы закончите, сохраните и закройте файл.

В каталоге EasyRSA есть скрипт с именем easyrsa, который вызывается для выполнения различных задач, связанных с созданием и управлением ЦС. Запустите этот сценарий с параметром init-pki, чтобы инициировать инфраструктуру открытого ключа на сервере ЦС:

  1. ./easyrsa init-pki
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 – это общедоступный файл сертификата ЦС, который в контексте OpenVPN используется сервером и клиентом для информирования друг друга о том, что они являются частью одной сети доверия, а не кем-то другим. выполнение атаки «человек посередине». По этой причине вашему серверу и всем вашим клиентам потребуется копия файла ca.crt.
  • ca.key – это закрытый ключ, который машина ЦС использует для подписи ключей и сертификатов для серверов и клиентов. Если злоумышленник получит доступ к вашему ЦС и, в свою очередь, к вашему файлу ca.key, он сможет подписывать запросы на сертификаты и получать доступ к вашей VPN, нарушая ее безопасность. Вот почему ваш файл ca.key должен находиться только на вашем компьютере ЦС, и в идеале ваш компьютер ЦС должен оставаться в автономном режиме, когда вы не подписываете запросы на сертификат, в качестве дополнительной меры безопасности.

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

  1. ./easyrsa build-ca nopass

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

Output
. . . Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

Общее имя — это имя, используемое для ссылки на этот компьютер в контексте центра сертификации. Вы можете ввести любую строку символов для общего имени ЦС, но для простоты нажмите ENTER, чтобы принять имя по умолчанию.

После этого ваш ЦС готов и готов начать подписывать запросы на сертификаты.

Шаг 3 — Создание сертификата сервера, ключа и файлов шифрования

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

Начните с перехода в каталог EasyRSA на вашем сервере OpenVPN:

  1. cd EasyRSA-3.0.4/

Оттуда запустите скрипт easyrsa с параметром init-pki. Хотя вы уже выполнили эту команду на машине ЦС, необходимо запустить ее здесь, потому что ваш сервер и ЦС будут иметь отдельные каталоги PKI:

  1. ./easyrsa init-pki

Затем снова вызовите сценарий easyrsa, на этот раз с опцией gen-req, за которой следует общее имя машины. Опять же, это может быть что угодно, но может быть полезно сделать его описательным. На протяжении всего этого руководства общим именем сервера OpenVPN будет просто «сервер». Не забудьте также включить параметр nopass. В противном случае файл запроса будет защищен паролем, что может привести к разрешениям проблемы позже:

Примечание. Если вы выберете здесь имя, отличное от \сервер, вам придется изменить некоторые из приведенных ниже инструкций. Например, при копировании сгенерированных файлов в каталог /etc/openvpn вы потребуется заменить правильные имена. Вам также потребуется позже изменить файл /etc/openvpn/server.conf, чтобы он указывал на правильные .crt и .key файлы.

  1. ./easyrsa gen-req server nopass

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

  1. sudo cp ~/EasyRSA-3.0.4/pki/private/server.key /etc/openvpn/

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

  1. scp ~/EasyRSA-3.0.4/pki/reqs/server.req sammy@your_CA_ip:/tmp

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

  1. cd EasyRSA-3.0.4/

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

  1. ./easyrsa import-req /tmp/server.req server

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

  1. ./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-сервер, используя безопасный метод:

  1. scp pki/issued/server.crt sammy@your_server_ip:/tmp

Прежде чем выйти из системы ЦС, также перенесите файл ca.crt на свой сервер:

  1. scp pki/ca.crt sammy@your_server_ip:/tmp

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

  1. sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/

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

  1. cd EasyRSA-3.0.4/

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

  1. ./easyrsa gen-dh

Это может занять несколько минут. Как только это произойдет, сгенерируйте подпись HMAC, чтобы усилить возможности проверки целостности TLS сервера:

  1. sudo openvpn --genkey --secret ta.key

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

  1. sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/
  2. sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/

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

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

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

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

Начните с создания структуры каталогов в вашем домашнем каталоге для хранения сертификата клиента и файлов ключей:

  1. mkdir -p ~/client-configs/keys

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

  1. chmod -R 700 ~/client-configs

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

  1. cd ~/EasyRSA-3.0.4/
  2. ./easyrsa gen-req client1 nopass

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

  1. cp pki/private/client1.key ~/client-configs/keys/

Затем перенесите файл client1.req на свой компьютер CA безопасным способом:

  1. scp pki/reqs/client1.req sammy@your_CA_ip:/tmp

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

  1. ssh sammy@your_CA_IP
  2. cd EasyRSA-3.0.4/
  3. ./easyrsa import-req /tmp/client1.req client1

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

  1. ./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. Перенесите этот файл обратно на сервер:

  1. scp pki/issued/client1.crt sammy@your_server_ip:/tmp

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

  1. cp /tmp/client1.crt ~/client-configs/keys/

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

  1. sudo cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/
  2. sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/

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

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

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

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

  1. sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
  2. sudo gzip -d /etc/openvpn/server.conf.gz

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

  1. sudo nano /etc/openvpn/server.conf

Найдите раздел HMAC, найдя директиву tls-auth. Эта строка уже должна быть раскомментирована, но если нет, то удалите \; раскомментировать его:

tls-auth ta.key 0 # This file is secret

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

cipher AES-256-CBC

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

auth SHA256

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

dh dh.pem

Наконец, найдите настройки user и group и удалите \;” в начале каждой раскомментировать эти строки:

user nobody
group nogroup

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

(Необязательно) Отправка изменений DNS для перенаправления всего трафика через VPN

Приведенные выше настройки создадут VPN-соединение между двумя машинами, но не заставят никакие соединения использовать туннель. Если вы хотите использовать VPN для маршрутизации всего вашего трафика, вы, вероятно, захотите передать настройки DNS на клиентские компьютеры.

В файле server.conf есть несколько директив, которые необходимо изменить, чтобы включить эту функцию. Найдите раздел 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

Если вы переключите протокол на TCP, вам нужно будет изменить значение директивы explicit-exit-notify с 1 на 0, так как это директива используется только UDP. Если этого не сделать при использовании TCP, при запуске службы OpenVPN возникнут ошибки:

# Optional!
explicit-exit-notify 0

Если вам не нужно использовать другой порт и протокол, лучше оставить эти два параметра по умолчанию.

(Необязательно) Укажите учетные данные не по умолчанию

Если вы выбрали другое имя во время команды ./build-key-server ранее, измените строки cert и key, которые вы видите, чтобы указать в соответствующие файлы .crt и .key. Если вы использовали имя по умолчанию \сервер, оно уже задано правильно:

cert server.crt
key server.key

Когда вы закончите, сохраните и закройте файл.

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

Шаг 6 — Настройка сетевой конфигурации сервера

Есть некоторые аспекты сетевой конфигурации сервера, которые необходимо настроить, чтобы OpenVPN мог правильно направлять трафик через VPN. Первый из них – это IP-переадресация, способ определения, куда следует направлять IP-трафик. Это важно для функциональности VPN, которую будет предоставлять ваш сервер.

Настройте параметры IP-переадресации вашего сервера по умолчанию, изменив файл /etc/sysctl.conf:

  1. sudo nano /etc/sysctl.conf

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

net.ipv4.ip_forward=1

Сохраните и закройте файл, когда закончите.

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

  1. sudo sysctl -p
Output
net.ipv4.ip_forward = 1

Если вы следовали руководству по первоначальной настройке сервера Debian 9, указанному в предварительных требованиях, у вас должен быть установлен брандмауэр UFW. Независимо от того, используете ли вы брандмауэр для блокировки нежелательного трафика (что вам почти всегда следует делать), для этого руководства вам понадобится брандмауэр для управления частью трафика, поступающего на сервер. Некоторые правила брандмауэра должны быть изменены, чтобы включить маскировку, концепцию iptables, которая обеспечивает динамическую трансляцию сетевых адресов (NAT) на лету для правильной маршрутизации клиентских подключений.

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

  1. ip route | grep default

Ваш общедоступный интерфейс — это строка, найденная в выводе этой команды, которая следует за словом \dev. Например, этот результат показывает интерфейс с именем eth0, который выделен ниже:

Output
default via 203.0.113.1 dev eth0 onlink

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

  1. sudo nano /etc/ufw/before.rules

Правила UFW обычно добавляются с помощью команды ufw. Однако правила, перечисленные в файле before.rules, считываются и применяются до загрузки обычных правил UFW. В верхней части файла добавьте выделенные ниже строки. Это установит политику по умолчанию для цепочки POSTROUTING в таблице nat и замаскирует любой трафик, исходящий из VPN. Не забудьте заменить eth0 в строке -A POSTROUTING на интерфейс, который вы нашли в приведенной выше команде:

#
# 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:

  1. sudo nano /etc/default/ufw

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

DEFAULT_FORWARD_POLICY="ACCEPT"

Сохраните и закройте файл, когда закончите.

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

Если вы забыли добавить порт SSH, следуя предварительному руководству, добавьте его и здесь:

  1. sudo ufw allow 1194/udp
  2. sudo ufw allow OpenSSH

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

  1. sudo ufw disable
  2. sudo ufw enable

Теперь ваш сервер настроен для правильной обработки трафика OpenVPN.

Шаг 7 — Запуск и включение службы OpenVPN

Наконец-то вы готовы запустить службу OpenVPN на своем сервере. Это делается с помощью утилиты systemd systemctl.

Запустите сервер OpenVPN, указав имя файла конфигурации в качестве переменной экземпляра после имени файла модуля systemd. Файл конфигурации для вашего сервера называется /etc/openvpn/server.conf, поэтому добавьте @server в конец вашего файла модуля при его вызове:

  1. sudo systemctl start openvpn@server

Дважды проверьте, успешно ли запущена служба, набрав:

  1. sudo systemctl status openvpn@server

Если все прошло хорошо, ваш вывод будет выглядеть примерно так:

Output
● openvpn@server.service - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/openvpn@.service; 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/openvpn@server.service └─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, набрав:

  1. ip addr show 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

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

  1. sudo systemctl enable openvpn@server

Теперь ваша служба OpenVPN запущена и работает. Однако, прежде чем вы сможете начать его использовать, вы должны сначала создать файл конфигурации для клиентской машины. В этом руководстве уже рассказывалось, как создавать пары сертификат/ключ для клиентов, и на следующем шаге мы продемонстрируем, как создать инфраструктуру, которая будет легко генерировать файлы конфигурации клиента.

Шаг 8 — Создание инфраструктуры конфигурации клиента

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

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

  1. mkdir -p ~/client-configs/files

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

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

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

  1. nano ~/client-configs/base.conf

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

. . .
# 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
. . .

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

proto udp

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

# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

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

# 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 непосредственно в файл конфигурации клиента:

# 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:

cipher AES-256-CBC
auth SHA256

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

key-direction 1

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

# 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:

  1. nano ~/client-configs/make_config.sh

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

#!/bin/bash

# First argument: Client identifier

KEY_DIR=/home/sammy/client-configs/keys
OUTPUT_DIR=/home/sammy/client-configs/files
BASE_CONFIG=/home/sammy/client-configs/base.conf

cat ${BASE_CONFIG} \
    <(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

Сохраните и закройте файл, когда закончите.

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

  1. chmod 700 ~/client-configs/make_config.sh

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

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

Шаг 9 — Генерация клиентских конфигураций

Если вы следовали руководству, вы создали клиентский сертификат и ключ с именами client1.crt и client1.key соответственно на шаге 4. Вы можете создать файл конфигурации для этих учетных данных, перейдя в каталог ~/client-configs и запустив сценарий, созданный в конце предыдущего шага:

  1. cd ~/client-configs
  2. sudo ./make_config.sh client1

Это создаст файл с именем client1.ovpn в вашем каталоге ~/client-configs/files:

  1. ls ~/client-configs/files
Output
client1.ovpn

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

Хотя конкретные приложения, используемые для выполнения этой передачи, будут зависеть от операционной системы вашего устройства и ваших личных предпочтений, надежным и безопасным методом является использование SFTP (протокол передачи файлов SSH) или SCP (безопасное копирование) на серверной части. Это позволит передавать файлы аутентификации VPN вашего клиента по зашифрованному соединению.

Вот пример команды SFTP с использованием примера client1.ovpn, который вы можете запустить на своем локальном компьютере (macOS или Linux). Он помещает файл .ovpn в ваш домашний каталог:

  1. sftp sammy@your_server_ip:client-configs/files/client1.ovpn ~/

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

  • WinSCP
  • Как использовать SFTP для безопасной передачи файлов на удаленный сервер
  • Как использовать Filezilla для безопасной передачи файлов и управления ими на вашем VPS

Шаг 10 — Установка конфигурации клиента

В этом разделе рассказывается, как установить клиентский профиль VPN в Windows, macOS, Linux, 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) и выберите Подключиться.

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

Отключитесь от VPN таким же образом: зайдите в апплет на панели задач, щелкните правой кнопкой мыши значок апплета OpenVPN, выберите профиль клиента и нажмите «Отключить».

macOS

Установка

Страница загрузок Tunnelblick. Дважды щелкните загруженный файл .dmg и следуйте инструкциям по установке.

Ближе к концу процесса установки Tunnelblick спросит, есть ли у вас файлы конфигурации. Для простоты ответьте «Нет» и дайте Tunnelblick закончить. Откройте окно Finder и дважды щелкните client1.ovpn. Tunnelblick установит профиль клиента. Требуются административные привилегии.

Подключение

Запустите Tunnelblick, дважды щелкнув Tunnelblick в папке «Приложения». После запуска Tunnelblick в строке меню в правом верхнем углу экрана появится значок Tunnelblick для управления соединениями. Щелкните значок, а затем пункт меню «Подключиться», чтобы инициировать VPN-подключение. Выберите подключение client1.

линукс

Установка

Если вы используете Linux, существует множество инструментов, которые вы можете использовать в зависимости от вашего дистрибутива. Ваша среда рабочего стола или оконный менеджер также могут включать в себя утилиты подключения.

Однако наиболее универсальный способ подключения — просто использовать программное обеспечение OpenVPN.

В Ubuntu или Debian вы можете установить его так же, как и на сервере, набрав:

  1. sudo apt update
  2. sudo apt install openvpn

В CentOS вы можете включить репозитории EPEL, а затем установить их, набрав:

  1. sudo yum install epel-release
  2. sudo yum install openvpn

Настройка

Проверьте, включает ли ваш дистрибутив скрипт /etc/openvpn/update-resolv-conf:

  1. ls /etc/openvpn
Output
update-resolv-conf

Затем отредактируйте переданный файл конфигурации клиента OpenVPN:

  1. nano client1.ovpn

Если вам удалось найти файл update-resolv-conf, раскомментируйте три строки, добавленные вами для настройки параметров DNS:

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Если вы используете CentOS, измените директиву group с nogroup на nobody, чтобы соответствовать доступным группам дистрибутива:

group nobody

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

Теперь вы можете подключиться к VPN, просто указав команду openvpn в файле конфигурации клиента:

  1. 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 готов к использованию с новым профилем. Запустите подключение, переместив кнопку «Подключить» в положение «Вкл.». Отключите, сдвинув ту же кнопку в положение Off.

Переключатель VPN в разделе «Настройки» нельзя использовать для подключения к VPN. Если вы попытаетесь, вы получите уведомление о подключении только с помощью приложения OpenVPN.

Андроид

Установка

Откройте магазин Google Play. Найдите и установите Android OpenVPN Connect, официальное клиентское приложение Android OpenVPN.

Вы можете перенести профиль .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:

  1. cd EasyRSA-3.0.4/

Затем запустите скрипт easyrsa с параметром revoke, за которым следует имя клиента, которого вы хотите отозвать:

  1. ./easyrsa revoke client2

Вам будет предложено подтвердить отзыв, введя 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

После подтверждения действия ЦС полностью аннулирует сертификат клиента. Однако ваш сервер OpenVPN в настоящее время не имеет возможности проверить, были ли отозваны сертификаты каких-либо клиентов, и клиент по-прежнему будет иметь доступ к VPN. Чтобы исправить это, создайте список отзыва сертификатов (CRL) на своем компьютере CA:

  1. ./easyrsa gen-crl

Это создаст файл с именем crl.pem. Безопасно перенесите этот файл на ваш сервер OpenVPN:

  1. scp ~/EasyRSA-3.0.4/pki/crl.pem sammy@your_server_ip:/tmp

На сервере OpenVPN скопируйте этот файл в каталог /etc/openvpn/:

  1. sudo cp /tmp/crl.pem /etc/openvpn

Затем откройте файл конфигурации сервера OpenVPN:

  1. sudo nano /etc/openvpn/server.conf

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

crl-verify crl.pem

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

Наконец, перезапустите OpenVPN, чтобы реализовать отзыв сертификата:

  1. sudo systemctl restart openvpn@server

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

Чтобы отозвать дополнительных клиентов, выполните следующие действия:

  1. Отзовите сертификат с помощью команды ./easyrsa revoke client_name
  2. Создать новый список отзыва сертификатов.
  3. Перенесите новый файл crl.pem на сервер OpenVPN и скопируйте его в каталог /etc/openvpn, чтобы перезаписать старый список.
  4. Перезапустите службу OpenVPN.

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

Заключение

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

Чтобы настроить больше клиентов, вам нужно всего лишь выполнить шаги 4 и 9–11 для каждого дополнительного устройства. Чтобы отозвать доступ к клиентам, просто выполните шаг 12.