Установка и настройка OpenVPN на Debian 12

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

Подготовка к настройке OpenVpn

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

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

Наконец, обратите внимание: если вы отключите аутентификацию по паролю при настройке этих серверов, вы можете столкнуться с трудностями при передаче файлов между ними далее в этом руководстве. Чтобы решить эту проблему, вы можете повторно включить аутентификацию по паролю на каждом сервере. В качестве альтернативы вы можете создать пару ключей SSH для каждого сервера , а затем добавить открытый ключ SSH сервера OpenVPN в файл авторизованных_ключей компьютера CA и наоборот. Инструкции по выполнению любого из этих решений см. в разделе «Как настроить ключи SSH в Debian 12».

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

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

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

  sudo apt update

  sudo apt install openvpn
Установим службу сертификации на обоих серверах.

  sudo apt install easy-rsa
Убедитесь, что вы вошли в систему как пользователь non-root user , и создайте директорию easy-rsa . Не используйте sudo для запуска следующих команд, поскольку обычные пользователи должны иметь возможность управления и взаимодействия с ЦС без повышенного уровня прав.

  mkdir ~/easy-rsa
Будет создана новая директория easy-rsa в домашней папке. Мы используем эту директорию для создания символических ссылок, указывающих на файлы пакета easy-rsa , установленные на предыдущем шаге. Эти файлы находятся в папке /usr/share/easy-rsa на сервере ЦС. Создайте символические ссылки с помощью команды ln :

  ln -s /usr/share/easy-rsa/* ~/easy-rsa/
Чтобы ограничить доступ к созданной директории PKI, используйте команду chmod для предоставления доступа к ней только владельцу:

  chmod 700 ~/easy-rsa
Затем инициализируйте PKI в директории easy-rsa:

  cd ~/easy-rsa && ./easyrsa init-pki
После выполнения указаний этого раздела у нас будет директория, содержащая все необходимые файлы для создания Центра сертификации. На следующем шаге мы создадим закрытый ключ и публичный сертификат для ЦС. Прежде чем создавать закрытый ключ и сертификат ЦС, необходимо добавить новые переменные в файл: ~/easy-rsa/pki/vars и заполнить его значениями по умолчанию. Используйте команду cd для перехода в директорию ~/easy-rsa/pki/ , а затем отредактируйте файл vars с помощью nano или другого предпочитаемого текстового редактора:

  cd ~/easy-rsa/pki/ && vim vars
Открыв файл, вставьте следующие строки в конец файла и измените каждое значение в кавычках для отражения информации о вашей организации. При этом важно, чтобы ни одно значение не оставалось пустым :

  set_var EASYRSA_REQ_COUNTRY    "RU"
  set_var EASYRSA_REQ_PROVINCE   "MOSCOW"
  set_var EASYRSA_REQ_CITY       "MOSCOW City"
  set_var EASYRSA_REQ_ORG        "DTGP"
  set_var EASYRSA_REQ_EMAIL      "[email protected]"
  set_var EASYRSA_REQ_OU         "IT"
После завершения редактирования сохраните и закройте файл. Если вы используете nano, вы можете сделать это, нажав CTRL+X , а затем Y и ENTER для подтверждения.

  cd ~/easy-rsa && ./easyrsa build-ca
В выводе вы увидите несколько строк о версии OpenSSL, и вам будет предложено ввести парольную фразу для вашей пары ключей. Обязательно выберите надежный пароль и запишите его в безопасном месте. Вам нужно будет вводить парольную фразу каждый раз, когда вам понадобится взаимодействовать с центром сертификации, например, чтобы подписать или отозвать сертификат.

Вам также будет предложено подтвердить общее имя (CN) вашего центра сертификации.
CN — это имя, используемое для обозначения этого компьютера в контексте центра сертификации.
Вы можете ввести любую строку символов в качестве общего имени ЦС, но для простоты нажмите ENTER, чтобы принять имя по умолчанию.
Теперь у нас имеется два важных файла, ~/easy-rsa/pki/ca.crt и ~/easy-rsa/pki/private/ca.key. Эти файлы соответствуют публичному и частному компонентам Центра сертификации. ca.crt — файл публичного сертификата ЦС. Пользователи, серверы и клиенты будут использовать этот сертификат для подтверждения единой сети доверия. Копия этого файла должна иметься у всех пользователей и серверов, использующих ваш ЦС. Все стороны будут использовать публичный сертификат для подтверждения подлинности системы и предотвращения атак через посредника.

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

Теперь у нас имеется копия файла ca.crt на второй системе Linux, и мы можем импортировать сертификат в хранилище сертификатов операционной системы.

В системах под управлением Debian и Ubuntu для импорта сертификата нужно использовать следующие команды:

  cp /tmp/ca.crt /usr/local/share/ca-certificates/
update-ca-certificates
Чтобы импортировать сертификат сервера ЦС в систему на базе CentOS, Fedora или RedHat, скопируйте и вставьте содержимое файла в файл /tmp/ca.crt, как описано в предыдущем примере. Затем скопируйте сертификат в директорию /etc/pki/ca-trust/source/anchors/ и запустите команду update-ca-trust.

sudo cp /tmp/ca.crt /etc/pki/ca-trust/source/anchors/
update-ca-trust
Теперь вторая (любая) система Linux будет доверять любому сертификату, подписанному нашим сервером ЦС.

Перейдем к созданию ЦС.

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

На сервере OpenVPN перейдите в каталог /easy-rsa в домашнем каталоге пользователя без полномочий root и запустите сценарий easyrsa с параметром gen-req , за которым следует общее имя для машины.
Это может быть что угодно, но полезно сделать это чем-то описательным.
В этом руководстве общим именем сервера OpenVPN будет просто server . Обязательно включите опцию nopass . В противном случае файл запроса будет защищен паролем, что в дальнейшем может привести к проблемам с разрешениями:
Примечание
Примечание. Если вы выберете здесь имя, отличное от server , вам придется изменить некоторые инструкции, приведенные ниже. Например, при копировании сгенерированных файлов в каталог /etc/openvpn вам придется подставить правильные имена. Вам также придется позже изменить файл /etc/openvpn/server.conf , чтобы он указывал на правильные файлы .crt и .key .

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

Это создаст закрытый ключ для сервера и файл запроса сертификата с именем server.req . На выходе дожно получиться так:

-----
Common Name (eg: your user, host, or server name) [server]:
* Notice:

Keypair and certificate request completed. Your files are:
req: /home/user/easy-rsa/pki/reqs/server.req
key: /home/user/easy-rsa/pki/private/server.key
Скопируйте ключ сервера в каталог /etc/openvpn/ :

  sudo cp ~/easy-rsa/pki/private/server.key /etc/openvpn/
Любым удобным вам способом, например, используя scp перенесите сертификат на CA сервер (предварительно лучше сгенерировать ключи для доступа без пароля. Как это сделать, читайте в другом руководстве на нашем сайте.):

  scp ~/easy-rsa/pki/reqs/server.req sammy@your_CA_ip:/tmp
Далее на CA сервере перейдите в папку ~/easy-rsa Используя сценарий easyrsa , импортируйте файл server.req , следуя пути к файлу с общим именем, которое вы указали при создании CSR:

  ./easyrsa import-req /tmp/server.req server
Если все прошло успешно, вывод будет таким:

* Notice:
Using Easy-RSA configuration from: /home/user/easy-rsa/pki/vars

* Notice:
Using SSL: openssl OpenSSL 3.0.9 30 May 2023 (Library: OpenSSL 3.0.9 30 May 2023)

* Notice:

  The request has been successfully imported with a short name of: server
You may now use this name to perform signing operations on this request.

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

  ./easyrsa sign-req server server
В выводе вам будет предложено подтвердить, что запрос поступил из надежного источника. Введите «yes» и нажмите ENTER , чтобы подтвердить это. Если вы зашифровали свой ключ CA во время выполнения руководства, указанного в предварительных требованиях, на этом этапе вам будет предложено ввести парольную фразу. Успешная подпись выглядит так:

Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'server'
Certificate is to be certified until Dec 17 14:57:18 2025 GMT (825 days)

Write out database with 1 new entries
  Data Base Updated

* Notice:
Certificate created at: /home/user/easy-rsa/pki/issued/server.crt
Затем передайте подписанный сертификат обратно на VPN-сервер безопасным способом:

  scp pki/issued/server.crt sammy@your_server_ip:/tmp
Также перенесите ca.crt на VPN server

  scp pki/ca.crt sammy@your_server_ip:/tmp
Вашему серверу OpenVPN необходим файл ca.crt , чтобы он знал, что может доверять объекту, подписавшему файл server.crt .
Затем на вашем сервере OpenVPN скопируйте файлы server.crt и ca.crt в каталог /etc/openvpn/ :

  sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/
Перейдите в директорию easy-rsa

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

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

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

  sudo cp ~/easy-rsa/ta.key /etc/openvpn/
  sudo cp ~/easy-rsa/pki/dh.pem /etc/openvpn/
При этом все файлы сертификатов и ключей, необходимые вашему серверу, были сгенерированы. Вы готовы создать соответствующие сертификаты и ключи, которые ваш клиентский компьютер будет использовать для доступа к вашему серверу OpenVPN.

Шаг 3 — Создание сертификата клиента и пары ключей

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

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

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

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

  chmod -R 700 ~/client-configs
Затем вернитесь в каталог ~/easy-rsa и запустите сценарий easyrsa с параметрами gen-req и nopass, а также с общим именем клиента:

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

  cp pki/private/client1.key ~/client-configs/keys/
Затем перенесите файл client1.req на компьютер центра сертификации безопасным способом:

  scp pki/reqs/client1.req sammy@your_CA_ip:/tmp
На вашем компьютере CA перейдите в каталог ~/easy-rsa и импортируйте запрос сертификата:

cd ~/easy-rsa
./easyrsa import-req /tmp/client1.req client1
Затем подпишите запрос, как вы это сделали для сервера на предыдущем шаге. Однако на этот раз обязательно укажите тип клиентского запроса:

  ./easyrsa sign-req client client1
В командной строке введите «yes», чтобы подтвердить, что вы намерены подписать запрос на сертификат и что он поступил из надежного источника:

Output
Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes
Опять же, если вы зашифровали свой ключ CA, вам будет предложено ввести здесь парольную фразу. При этом будет создан файл сертификата клиента с именем client1.crt. Перенесите этот файл обратно на сервер:

  scp pki/issued/client1.crt sammy@your_server_ip:/tmp
На вашем сервере OpenVPN скопируйте сертификат клиента в каталог /client-configs/keys/:

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

sudo cp ~/easy-rsa/ta.key ~/client-configs/keys/
sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/
При этом сертификаты и ключи вашего сервера и клиента были сгенерированы и сохранены в соответствующих каталогах на вашем сервере. С этими файлами еще необходимо выполнить несколько действий, но они будут выполнены на шаге 8. А пока вы можете перейти к настройке OpenVPN на своем сервере.

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

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

  sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/
Откройте файл конфигурации сервера в предпочитаемом вами текстовом редакторе:

  sudo nano /etc/openvpn/server.conf
  
Найдите раздел HMAC, выполнив поиск директивы tls-auth.
Эта строка уже должна быть раскомментирована, но если это не так, удалите «;» чтобы раскомментировать его.

  tls-auth ta.key 0 # This file is secret
Затем найдите раздел, посвященный криптографическим шифрам, ища закомментированные строки шифра. Шифр 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 сервера нашей компании проекта безопасный-ДНС.рф. Наши сервера сконфигурированы безопасно, мы мягко режем рекламу, фишинг серверы - обновляем фильтры каждый день.

У нас также есть платная подписка на DNS сервисы, всего за 120р/мес. Вы сможете настроить любые фильтры, блокировать любой трафик, а также включить опции "Безопасный интернет", "Детский интрернет", "Интернет без порно".

Мы пускаем не всех. Наши DNS не публичны. Они для "своих". Чтобы начать ими пользоваться, нужно иметь аккаунт и зарегистрировать свой роутер/телефон/любое устройство БЕСПЛАТНО на безопасный-ДНС.рф.
Узнайте больше о безопасных серверах DTGP
Это поможет клиентам перенастроить параметры DNS для использования VPN-туннеля в качестве шлюза по умолчанию.

Настройте порт и протокол (необязательно)

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

# ОПЦИОНАЛЬНО!
port 443
Часто протокол также ограничивается этим портом. Если да, измените протокол с UDP на TCP:

# ОПЦИОНАЛЬНО!
proto tcp
Если вы переключите протокол на TCP, вам нужно будет изменить значение директивы явного выхода-уведомления explicit-exit-notify с 1 на 0, поскольку эта директива используется только UDP. Если этого не сделать при использовании TCP, это приведет к ошибкам при запуске службы OpenVPN:

# ОПЦИОНАЛЬНО!
explicit-exit-notify 0
Если у вас нет необходимости использовать другой порт и протокол, можно оставить эти три параметра по умолчанию.

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

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

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

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

Существуют некоторые аспекты сетевой конфигурации сервера, которые необходимо настроить, чтобы OpenVPN мог правильно маршрутизировать трафик через VPN. Первым из них является переадресация IP — метод определения того, куда следует направлять IP-трафик. Настройте параметры переадресации IP-адресов вашего сервера по умолчанию, изменив файл /etc/sysctl.conf:

  sudo vim /etc/sysctl.conf
Внутри найдите закомментированную строку, которая устанавливает net.ipv4.ip_forward. Удалите символ «#» в начале строки, чтобы раскомментировать этот параметр:

  net.ipv4.ip_forward=1
Сохраните и закройте файл, когда закончите. Чтобы прочитать файл и настроить значения для текущего сеанса, введите:

sudo sysctl -p
Вывод команды выгдядит так:

Output
net.ipv4.ip_forward = 1
Если вы следовали нашему руководству по первоначальной установке сервера Debian 12, указанному в предварительных требованиях, у вас должен быть установлен брандмауэр UFW. Независимо от того, используете ли вы брандмауэр для блокировки нежелательного трафика (что вам следует делать почти всегда), для этого руководства вам понадобится брандмауэр для управления частью трафика, поступающего на сервер. Некоторые правила брандмауэра необходимо изменить, чтобы включить маскировку — концепцию iptables, которая обеспечивает динамическую трансляцию сетевых адресов (NAT) «на лету» для правильной маршрутизации клиентских подключений.

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

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

Output
default via 203.0.113.1 dev eth0 proto static
Если у вас есть интерфейс, связанный с вашим маршрутом по умолчанию, откройте файл /etc/ufw/before.rules, чтобы добавить соответствующую конфигурацию:

sudo vim /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.11.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

# Don't delete these required lines, otherwise there will be errors
*filter
. . .
Сохраните и закройте файл, когда закончите.

Далее вам нужно указать UFW, чтобы он также разрешал пересылаемые пакеты по умолчанию. Для этого откройте файл /etc/default/ufw:

sudo vim /etc/default/ufw
  
Внутри найдите директиву DEFAULT_FORWARD_POLICY и измените значение с DROP на ACCEPT:

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

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

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

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

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

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

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

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

  sudo systemctl status openvpn@server
Вы должны увидеть примерно следующее:
[email protected] - OpenVPN connection to server
     Loaded: loaded (/lib/systemd/system/[email protected]; enabled-runtime; preset: enabled)
     Active: active (running) since Thu 2023-09-14 19:53:41 MSK; 10s ago
       Docs: man:openvpn(8)
             https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
             https://community.openvpn.net/openvpn/wiki/HOWTO
   Main PID: 2772 (openvpn)
     Status: "Initialization Sequence Completed"
      Tasks: 1 (limit: 10)
     Memory: 1.4M
        CPU: 11ms
     CGroup: /system.slice/system-openvpn.slice/[email protected]
             └─2772 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --config /etc/openvpn/server.conf --write>

сен 14 19:53:41 vpn ovpn-server[2772]: Socket Buffers: R=[212992->212992] S=[212992->212992]
сен 14 19:53:41 vpn ovpn-server[2772]: UDPv4 link local (bound): [AF_INET][undef]:1194
сен 14 19:53:41 vpn ovpn-server[2772]: UDPv4 link remote: [AF_UNSPEC]
сен 14 19:53:41 vpn ovpn-server[2772]: UID set to nobody
сен 14 19:53:41 vpn ovpn-server[2772]: GID set to nogroup
сен 14 19:53:41 vpn ovpn-server[2772]: Capabilities retained: CAP_NET_ADMIN
сен 14 19:53:41 vpn ovpn-server[2772]: MULTI: multi_init called, r=256 v=256
сен 14 19:53:41 vpn ovpn-server[2772]: IFCONFIG POOL IPv4: base=10.8.0.4 size=62
сен 14 19:53:41 vpn ovpn-server[2772]: IFCONFIG POOL LIST
сен 14 19:53:41 vpn ovpn-server[2772]: Initialization Sequence Completed
Вы также можете проверить, доступен ли интерфейс OpenVPN tun0, набрав:

  ip addr show tun0
Вывод должен быть примерно таким:

3: tun0:  mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 500
    link/none 
    inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::5ea4:c8aa:492d:c26/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever
stan@vpn:~/easy-rsa$ 
  
После запуска службы добавьте ее в автозапуск, чтобы она запускалась автоматически при загрузке системы:

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

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

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

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

    cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
  
Откроем файл:

    vim ~/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
  
Затем раскомментируйте директивы пользователя и группы, удалив «;» в начале каждой строки:

# 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
  
Отразите настройки шифрования и аутентификации, которые вы установили в файле /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:

    vim ~/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 '') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '\n') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '\n') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '\n') \
    ${KEY_DIR}/ta.key \
    <(echo -e '') \
    > ${OUTPUT_DIR}/${1}.ovpn
      
      
Сохраните и закройте файл, когда закончите.

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

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

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

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

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

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

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

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

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

    sftp sammy@your_server_ip:client-configs/files/client1.ovpn ~/
  
Вот несколько программ, которые можно использовать для безопасной загрузки/выгрузки файлов:
  • WinSCP
  • FileZilla
  • Cyberduck

Это руководство поможет Вам настроить сервер OpenVPN на сервере Debian 12. А так же поможет сконфигурировать клиентов для операционных систем на базе Windows, macOS, Linux, iOS и/или Android.

Как создать почту со своим доменом? Установка и настройка почтового сервера CentOS linux (Postfix) Добавление пользователя в Linux, права sudo Crypto Pro на Mac OS Мелкие проблемы и их решения DKIM на Postfix Как заказать российский SSL-сертификат для компаний через Госуслуги Сертификаты Минцифры РФ (российские сертификаты). Как установить? Как восстановить взломанный сервер VmWare *.vmdk CVE-2020-3992 / CryptoLocker Бекап на ЯндексДиск из под Linux Запись образа ISO на флешку в MacOS Как отформатировать и примонтировать зашифрованный диск в Ubuntu / Debian Asterisk подключение модемов Настройка PHP-FPM в связке Apache2 (Ubuntu/Debian) Настройка SSL/TLS соединения MariaDB / MYSQL Собираем почту с других почтовых ящиков с помощью fetchmail Как посмотреть и очистить очередь сообщений POSTFIX Резервная копия (Backup) виртуальных машин ProxMox по NFS (CentOS / Debian 12 / Ubuntu) Установка и настройка OpenVPN на Debian 12 ASTERISK 19, 20, 21 REALTIME на DEBIAN 12 Установка ASTERISK 20 / 21 из исходников на Debian/Ubuntu/Centos nginx debian12
Оставьте комментарий, задайте вопрос