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

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


Введение

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

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

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

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

Предпосылки

Для выполнения этого урока вам понадобятся:

  • Два сервера Debian 11: один для размещения вашей службы OpenVPN, а другой – для вашего центра сертификации (ЦС).
  • Пользователь без полномочий root с правами sudo на обоих серверах. Вы можете следовать нашему руководству по начальной настройке сервера Debian 11, чтобы настроить пользователя с соответствующими разрешениями. В этом руководстве также будет установлен брандмауэр, который предполагается установленным на обоих серверах в этом руководстве.
  • Easy-RSA установлен на обоих серверах. Это утилита, которую вы будете использовать для управления сертификатами для вашей VPN. Выполните шаги 1–2 этого руководства на своем VPN-сервере и выполните шаги 1–3 на сервере ЦС.

Хотя технически возможно запустить ЦС с вашего сервера OpenVPN или локального компьютера, более безопасно хранить ЦС, а именно его закрытый ключ, на отдельном сервере, который не подключен к Интернету постоянно. Поскольку вы, вероятно, планируете держать свой VPN-сервер подключенным к Интернету 24/7, он может быть более уязвим для злоумышленников. Вы не хотите хранить закрытый ключ вашего ЦС на таком общедоступном сервере, потому что, если злоумышленник получит доступ к закрытому ключу, он может использовать его для подписи новых сертификатов, предоставляя им доступ к вашей VPN. Согласно официальной документации OpenVPN, вы должны разместить ЦС на отдельном сервере, предназначенном для импорта и подписи запросов на сертификаты.

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

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

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

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

  1. sudo apt update
  2. sudo apt install openvpn

Вот и все. Поскольку вы уже установили Easy-RSA на обоих серверах в качестве предварительного условия, а также инициализировали ЦС, вы готовы сгенерировать сертификат VPN-сервера.

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

На сервере OpenVPN перейдите в каталог /easy-rsa в домашнем каталоге пользователя без полномочий root и запустите скрипт easyrsa с gen-req, за которым следует общее имя машины. Это может быть что угодно, но может быть полезно сделать это чем-то описательным. В этом руководстве общим именем сервера OpenVPN будет просто \сервер. Не забудьте также указать параметр nopass. В противном случае файл запроса будет защищен паролем, что может привести к проблемы с разрешениями позже:

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

  1. cd ~/easyrsa
  2. ./easyrsa gen-req server nopass

Сценарий предложит вам ввести общее имя, которое вы хотите отобразить в запросе на подпись сертификата (CSR). По умолчанию отображается любое имя, которое вы передали ./easyrsa gen-req (например, server). Введите ENTER, чтобы принять имя по умолчанию, или введите другое.

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

  1. sudo cp ~/easy-rsa/pki/private/server.key /etc/openvpn/

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

  1. scp ~/easy-rsa/pki/reqs/server.req sammy@your_CA_ip:/tmp

Затем на своем компьютере ЦС перейдите в каталог ~/easy-rsa:

  1. cd ~/easy-rsa

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

  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 825 days:

subject=
    commonName                = server


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

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

Затем передайте подписанный сертификат обратно на ваш VPN-сервер, используя безопасный метод:

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

Также перенесите файл ca.crt на свой VPN-сервер:

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

Вашему серверу OpenVPN нужен ca.crt, чтобы он знал, что может доверять объекту, подписавшему server.crt.

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

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

Затем перейдите в каталог ~/easy-rsa:

  1. cd ~/easy-rsa

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

  1. ./easyrsa gen-dh

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

  1. sudo openvpn --genkey secret ta.key

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

  1. sudo cp ~/easy-rsa/ta.key /etc/openvpn/
  2. sudo cp ~/easy-rsa/pki/dh.pem /etc/openvpn/

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

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

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

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

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

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

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

  1. chmod -R 700 ~/client-configs

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

  1. cd ~/easy-rsa
  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 перейдите в каталог ~/easy-rsa и импортируйте запрос сертификата:

  1. cd ~/easy-rsa
  2. ./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

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

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

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

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

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

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

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

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

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

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

  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, определяющую параметры Диффи-Хеллмана. Из-за некоторых недавних изменений, внесенных в Easy-RSA, имя файла для ключа Диффи-Хеллмана может отличаться от того, что указано в примере файла конфигурации сервера. При необходимости измените имя файла, указанное здесь, удалив 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

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

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

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

cert server.crt
key server.key

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

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

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

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

Настройте параметры 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 11, указанному в предварительных требованиях, у вас должен быть установлен брандмауэр UFW. Независимо от того, используете ли вы брандмауэр для блокировки нежелательного трафика (что вам почти всегда следует делать), для этого руководства вам понадобится брандмауэр для управления частью трафика, поступающего на сервер. Некоторые правила брандмауэра должны быть изменены, чтобы включить маскировку, концепцию iptables, которая обеспечивает динамическую трансляцию сетевых адресов (NAT) на лету для правильной маршрутизации клиентских подключений.

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

  1. ip route | grep default

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

Output
default via 203.0.113.1 dev eth0 proto static

Когда у вас есть интерфейс, связанный с вашим маршрутом по умолчанию, откройте файл /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.

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

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

  1. sudo systemctl start openvpn@server

Это запустит службу openvpn, используя /etc/openvpn/server.conf в качестве файла конфигурации. Например, если бы вместо этого вы указали openvpn@server2, systemd использовала бы имя файла /etc/openvpn/server2.conf при запуске службы.

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

  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 Wed 2022-12-21 03:39:24 UTC; 29s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Main PID: 3371 (openvpn) Status: "Initialization Sequence Completed" Tasks: 1 (limit: 3587) Memory: 1.2M CGroup: /system.slice/system-openvpn.slice/openvpn@server.service └─3371 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --config /etc/openvpn/server.conf --writepid /run/openvpn/

Вы также можете проверить, доступен ли интерфейс OpenVPN tun0, набрав:

  1. ip addr show tun0

Это выведет настроенный интерфейс:

Output
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 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 inet6 fe80::dd60:3a78:b0ca:1659/64 scope link stable-privacy valid_lft forever preferred_lft forever

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

  1. sudo systemctl enable openvpn@server

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

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

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

Начните с создания нового каталога на вашем сервере 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, соберет все файлы сертификатов и ключей, которые вы создали для своего клиента, извлечет их содержимое и добавит их к копии базовой конфигурации. файл и экспортировать все это содержимое в новый файл конфигурации клиента. Это означает, что вместо того, чтобы отдельно управлять конфигурацией клиента, сертификатом и файлами ключей, вся необходимая информация хранится в одном месте. Преимущество этого заключается в том, что если вам когда-нибудь понадобится добавить клиент в будущем, вы можете просто запустить этот сценарий из центрального места, чтобы быстро создать файл конфигурации, содержащий всю необходимую информацию в одном легко распространяемом файле.

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

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

Если вы следовали руководству, вы создали клиентский сертификат и ключ с именами client1.crt и client1.key соответственно на шаге 3. Вы можете создать файл конфигурации для этих учетных данных, перейдя в каталог ~/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 ~/

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

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

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

В этом разделе рассказывается, как установить клиентский профиль VPN в Windows, macOS, Linux, iOS и Android. Ни одна из этих клиентских инструкций не зависит друг от друга, поэтому не стесняйтесь переходить к тому, что применимо к вашему устройству.

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

Окна

Установка

Загрузите клиентское приложение OpenVPN для Windows со страницы загрузок OpenVPN. Выберите соответствующую версию установщика для вашей версии Windows.

Примечание. Для установки OpenVPN требуются права администратора.

После установки OpenVPN скопируйте файл .ovpn в:

C:\Program Files\OpenVPN\config

Возможно, вам не удастся передать файл напрямую в это место, если вы не используете программу передачи файлов (например, WinSCP) в качестве администратора. Вы можете либо запустить его от имени администратора, либо перенести файл в домашний каталог пользователя, не являющегося администратором, а затем скопировать его локально в 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 для управления подключениями. Щелкните значок, а затем пункт меню Подключить клиент1, чтобы инициировать VPN-подключение.

линукс

Установка

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

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

В 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

Установка

В App Store для iPhone или iPad найдите и установите эту статью поддержки от Apple, чтобы перенести файл client1.ovpn с локального компьютера на устройство iOS, специально скопировав его в приложение OpenVPN.

Теперь запустите приложение OpenVPN на устройстве iOS. Он должен увидеть, что есть новый профиль, готовый к импорту. Нажмите ДОБАВИТЬ, чтобы добавить его.

Подключение

Теперь OpenVPN готов к использованию с новым профилем. Начните подключение, нажав ПОДКЛЮЧИТЬСЯ. Когда вы это сделаете, iOS сообщит вам, что OpenVPN хочет добавить конфигурации VPN через настройки вашей системы. Нажмите «Разрешить» и используйте FaceID или TouchID для авторизации изменений.

Примечание. Переключатель VPN в разделе «Настройки» > «Основные» > «VPN и управление устройствами» > «VPN» может успешно включать и выключать ваше соединение, но лучше всего использовать переключатель в приложении OpenVPN Connect.

Андроид

Установка

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

Вы можете перенести профиль .ovpn, подключив устройство Android к компьютеру через USB и скопировав файл. В качестве альтернативы, если у вас есть устройство чтения SD-карт, вы можете извлечь SD-карту устройства, скопировать на нее профиль, а затем вставить карту обратно в устройство Android.

Подключение

Когда вы запускаете приложение OpenVPN, оно начинается с экрана «Импорт профиля». Коснитесь вкладки ФАЙЛ, а затем коснитесь ОБЗОР, чтобы найти и выбрать файл client1.ovpn.

После выбора файла приложение предложит вам импортировать профиль. Коснитесь ОК.

На экране «Импортированный профиль» установите флажок «Подключиться после импорта», а затем нажмите «ДОБАВИТЬ» в правом верхнем углу.

Вас спросят, доверяете ли вы приложению OpenVPN. Выберите OK, чтобы инициировать подключение. Чтобы отключиться от VPN, переключите переключатель на странице профиля.

Шаг 10 — Тестирование вашего VPN-подключения (необязательно)

Примечание. Этот метод проверки вашего VPN-подключения будет работать только в том случае, если вы решили направить весь свой трафик через VPN на шаге 4 в необязательном разделе «Отправить изменения DNS для перенаправления всего трафика через VPN».

После того, как все установлено, простая проверка подтверждает, что все работает правильно. Не включив VPN-подключение, откройте браузер и перейдите к DNSLeakTest.

Сайт вернет IP-адрес, назначенный вашим интернет-провайдером, и то, как вы выглядите для остального мира. Чтобы проверить настройки DNS через тот же веб-сайт, нажмите «Расширенный тест», и он сообщит вам, какие DNS-серверы вы используете.

Теперь подключите клиент OpenVPN к вашему серверу OpenVPN и обновите браузер. Теперь должен появиться совершенно другой IP-адрес (адрес вашего VPN-сервера), и именно так вы выглядите в мире. Опять же, расширенный тест DNSLeakTest проверит ваши настройки DNS и подтвердит, что вы теперь используете резолверы DNS, навязанные вашей VPN.

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

Шаг 11 — Отзыв клиентских сертификатов

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

Для этого перейдите в каталог ~/easy-rsa на вашем компьютере CA:

  1. cd ~/easy-rsa

Затем запустите скрипт 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) на своем компьютере ЦС (при необходимости снова введите парольную фразу ЦС):

  1. ./easyrsa gen-crl

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

  1. scp ~/easy-rsa/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 вы можете подумать о переносе определенных ресурсов, которые в настоящее время доступны в открытом Интернете — возможно, защищенных чем-то менее надежным (например, базовой HTTP-аутентификацией), чем инфраструктура с открытым ключом, которую вы только что настроили, — в вашу частную сеть. сети и за VPN. Имея всего один сервер и некоторое программное обеспечение с открытым исходным кодом, вы сделали большой шаг к защите своих критически важных данных и инфраструктуры.

Еще один инструмент безопасности и конфиденциальности, похожий на VPN, — это веб-прокси. Как и VPN, веб-прокси действует как посредник между конечными пользователями и интернет-ресурсом, к которому они хотят получить доступ, обеспечивая анонимность конечных пользователей. Хотя веб-прокси предназначен только для веб-трафика и не обеспечивает шифрование, он может быть полезным инструментом для вашей команды, когда VPN не нужен. Если вам интересно, ознакомьтесь с нашим руководством Как настроить прокси-сервер Squid для частных подключений в Ubuntu 22.04.