Ubuntu vps openvpn своими руками

Содержание
  1. Как настроить OpenVPN Server на Ubuntu 20.04
  2. Центр сертификации
  3. OpenVPN и Easy-RSA
  4. PKI для OpenVPN
  5. Сертификат и закрытый ключ OpenVPN
  6. Подписание запроса сертификата
  7. Криптография OpenVPN
  8. Генерация сертификатов и ключей
  9. Настройка OpenVPN
  10. Конфигурация сети на Сервере VPN
  11. Изменение конфигурации сетевого экрана
  12. Запуск OpenVPN
  13. Конфигурация клиентов
  14. Создание клиента
  15. OpenVPN
  16. Содержание
  17. OpenVPN
  18. Варианты применения данной статьи
  19. Исходные данные
  20. Настройка OpenVPN
  21. Установка
  22. Создание сервера
  23. Создание ключей и сертификатов
  24. Создание файла конфигурации сервера
  25. Настройка маршрутизации на стороне сервера
  26. Включаем ipv4_forwarding
  27. Создание клиента
  28. Создание ключей и сертификатов
  29. Создание файла конфигурации клиента
  30. ИЛИ единый файл конфигурации клиента client.ovpn с сертификатами и ключами для импорта
  31. Настройка маршрутизации на стороне клиента
  32. Включаем ipv4_forwarding
  33. Настройка выхода в интернет с IP сервера
  34. Настройки сервера
  35. Настройки клиента
  36. Отзыв сертификата
  37. Отключение автозапуска OpenVPN
  38. Тест производительности OpenVPN
  39. Источники

Как настроить OpenVPN Server на Ubuntu 20.04

4312 просмотров 6 2021-02-04 2021-03-09

Когда, защищая свою сеть от несанкционированного доступа, вы подключаете сетевой экран, очень часто приходится решать задачи по обеспечению доступа в вашу защищённую сеть извне, например, с вашего домашнего компьютера или с рабочих станций, находящихся в удалённых сетях. Для реализации такого доступа без необходимости изменения конфигурации брандмауэра и без потерь в обеспечении защищённости ваших ресурсов существует технология Virtual Private Network (VPN). При этом бесплатной реализацией VPN является сервис с открытым кодом OpenVPN. Далее о том, как настроить OpenVPN Server на Ubuntu 20.04.

Чтобы это сделать, вы должны иметь два сервера установленной ОС Ubuntu 20.04. Помимо сервера с установленным и настроенным ПО OpenVPN (Сервер VPN), вам понадобится ещё один сервер, на котором будет развёрнут Центр Сертификации (в данном руководстве это будет Сервер ЦС).

Несмотря на то, что и ПО OpenVPN, и ЦС можно установить на один сервер, или даже вынести ЦС на клиентский компьютер, с которого предполагается осуществлять подключение к вашей закрытой сети, официальная документация рекомендует разместить ЦА на отдельном ресурсе из-за угрозы предоставления злоумышленнику доступа к секретному ключу вашего ЦС. Если это произойдёт, он сможет подписывать добытым ключом новые сертификаты, и, таким образом, получит доступ к вашему Серверу VPN. Также, для упрощения настройки VPN, рекомендуется включить аутентификацию пользователей с использованием пароля на каждом из серверов, в случае, если она у вас отключена. Всё дело в том, что при настройке ваших VPS, вы можете столкнуться со сложностями при транспортировке файлов с одного сервера на другой.

Центр сертификации

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

Для начала на Сервере ЦС запустите установку утилиты easy-rsa :

После чего, необходимо создать каталог

И установить соответствующие права:

После чего, запустите на исполнение скрипт easyrsa :

Таким образом, вы создали директорию “инфраструктуры открытых ключей” (Public Key Infrastructure или сокращённо PKI).

Теперь всё готово для создания Центра Сертификации, а значит, пора переходить к созданию секретного ключа и сертификата. Для этого создайте файл vars . Он должен располагаться в директории

/easy-rsa . Если вы используете редактор nano , наберите:

Скопируйте в этот файл следующий текст:

В этих строках необходимо отредактировать значения, которые относятся к вашей закрытой сети, при этом, не оставляйте пустых значений. Перед выходом из файла его нужно сохранить (для этого в nano нажмите Ctrl+X , затем Y и Enter ).

Далее, запустите скрипт easyrsa в командной строке:

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

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

Файл ca.crt – это открытый ключ ЦС. Он будет использоваться клиентами и серверами для проверки при авторизации.

Теперь ваш центр сертификации подготовлен к работе.

OpenVPN и Easy-RSA

На Сервере VPN необходимо запустить установку пакета OpenVPN и утилиты Easy-RSA:

Далее, необходимо создать каталог

И установите соответствующего владельца на эту папку с соответствующими правами:

Читайте также:  Как сделать мундштук для трубки своими руками

PKI для OpenVPN

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

Сначала создайте файл vars в директории

/easy-rsa , например, с помощью редактора nano :

Скопируйте в него следующее:

Сохраните файл и закройте его (в nano для этого нажмите Ctrl+X , затем Y и Enter ).

Теперь необходимо создать каталог PKI . Сделайте это при помощи скрипта easyrsa :

Сертификат и закрытый ключ OpenVPN

Теперь всё необходимое для генерации закрытых ключей и запросов на подписание сертификатов установлено на Сервере VPN.

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

/easy-rsa . Это нужно сделать на Сервере VPN.

Далее запустите easyrsa , где server – CN вашего Сервера VPN (вместо server вы можете использовать любую последовательность символов):

Таким образом, вы создали файл запроса сертификата server.req и секретный ключ.

Этот файл нужно скопировать в /etc/openvpn/server :

Подписание запроса сертификата

На этом этапе необходимо выполнить подписание сертификата server . Сначала скопируйте файл server.req на сервер ЦС для подписания:

Здесь, Your-user – имя вашей учётной записи, server – CN вашего Сервера VPN, X.X.X.X – IP-адрес Сервера ЦС.

Далее, подключитесь к вашему Серверу ЦС, переключитесь в папку

/easy-rsa и запустите импорт запроса server.req при помощи easyrsa :

Теперь необходимо запустить подписание запроса при помощи скрипта easyrsa используя опцию sign-req и такой тип запроса как server :

Для подтверждения надёжности источника запроса наберите Yes , после чего нажмите Enter .

И наконец, файл server.crt , в котором находится открытый ключ шифрования, и файл ca.crt , содержащий собственный доверенный сертификат, скопируйте на Сервер VPN:

В данном случае, Your-user – имя вашей учётной записи, server – CN вашего Сервера VPN, X.X.X.X – IP-адрес Сервера VPN.

После чего на Сервере VPN эти файлы скопируйте из /tmp в /etc/openvpn/server :

Криптография OpenVPN

Чтобы повысить уровень безопасности следует добавить дополнительный секретный ключ для использования сервером и клиентами при помощи OpenVPN tls-crypt . Для создания публичного tls-crypt ключа запустите:

Файл ta.key нужно будет скопировать в директорию /etc/openvpn/server/ :

Теперь вы готовы создавать сертификаты клиентов вашего VPN и ключи для подключения к OpenVPN.

Генерация сертификатов и ключей

Здесь вам нужно создать директории для хранения сертификатов клиентов и файлов ключей, а также, назначить им соответствующие права, например:

После чего запустите скрипт easyrsa используя опции gen-req и nopass , а также, с использованием CN клиента:

И скопируйте client-1.key в

После чего файл client-1.req скопируйте на Сервер ЦС:

А на сервере ЦС запустите импорт запроса client-1.req :

Теперь этот запрос необходимо подписать, используя тип запроса client :

Таким образом, вы сгенерировали сертификат клиента client-1.crt . Его необходимо передать на Сервер VPN:

И на Сервере VPN нужно скопировать его в папку

Далее, ca.crt и ta.key скопируйте в каталог

/clients/keys/ с соответствующими правами:

Настройка OpenVPN

На данном шаге произведите некоторые настройки конфигурации Сервера VPN:

  • Скопируйте server.conf в директорию OpenVPN:
  • Откройте этот файл для редактирования, например, с помощью nano :
  • В разделе HMAC закомментируйте строку tls-auth и после неё вставьте строку tls-crypt ta.key ​​​:

  • Найдите в том же файле строку cipher AES-256-CBC , закомментируйте её и добавьте строки cipher AES-256-GCM и auth SHA256 :

  • Теперь найдите текст либо dh dh2048.pem ,​​​ либо dh dh.pem и закомментируйте его, так как в вашем случае нет необходимости использовать файл Диффи-Хеллмана. После закомментированной строки вставьте строку dh none :

  • И для того, чтобы OpenVPN запускался без привилегий, снимите комментарий перед user nobody и group nogroup :

Сохраните изменения в файле, закройте его.

Конфигурация сети на Сервере VPN

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

После чего добавьте строку:

Перед закрытием файла сохраните внесённые изменения.

Для применения новой настройки наберите:

Изменение конфигурации сетевого экрана

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

Читайте также:  Как сделать цифру пиньяту своими руками

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

Его можно увидеть после параметра dev :

Теперь откройте /etc/ufw/before.rules :

В начало файла скопируйте строки:

Сохраните внесённые изменения и закройте файл.

Откройте файл /etc/default/ufw :

В строке DEFAULT_FORWARD_POLICY поменяйте значение DROP на значение ACCEPT :

Сохраните изменения в файле и закройте его.

Следующими командами откройте UDP-трафик на порту 1194 и добавьте в UFW протокол OpenSSH, если вы не сделали этого ранее:

Запуск OpenVPN

При помощи systemctl произведите запуск службы OpenVPN c включением его в автозагрузку:

Проверьте корректность запуска службы:

Вывод команды должен выглядеть так:

Конфигурация клиентов

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

Это будет полезно с точки зрения автоматизации ваших действий при организации доступа для каждого из клиентов.

Создайте структуру директорий, где будут сохраняться файлы:

Скопируйте шаблон клиентской конфигурации в папку clients :

В строке remote замените порт 1194 на нужный вам, если меняли номер порта, который прослушивает Сервер VPN:

Должен быть правильно указан протокол:

Снимите комментарий со строк:

Закомментируйте следующие строки:

А строку относящуюся к tls-auth , наоборот, нужно раскомментировать:

Следующие строки должны совпадать с соответствующими строками, прописанными в файле /etc/openvpn/server.conf :

cipher AES-256-GCM
auth SHA256

Также добавьте строки, которые нужно будет раскомментировать только для Linux-клиентов:

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

Плюс ко всему, добавьте строки настроек для клиентов, которые планируют использовать systemd-resolved :

; script-security 2
; up /etc/openvpn/update-systemd-resolved
; down /etc/openvpn/update-systemd-resolved
; down-pre
; dhcp-option DOMAIN-ROUTE

Сохраните изменения в файле, закройте его.

Теперь необходимо создать скрипт make_config.sh . Он создаст базовую клиентскую конфигурацию, которая будет сохранена в директории

Скрипт должен содержать:

#!/bin/bash
# First argument: Client identifier
KEY_DIR=

Сохраните скрипт, закройте его и назначьте ему соответствующие права:

Создание клиента

Итак, вы создали сертификат клиента client-1.crt и файл ключа client-1.key . Теперь можно создать клиентский файл конфигурации. Для это нужно запустить на исполнение скрипт

В результате скрипт создаст файл

Такой файл необходимо передать клиенту для установки на устройство, которое он будет использовать для подключения к закрытой сети через Сервер VPN. При этом, на стороне клиента должно быть развёрнуто программное обеспечение OpenVPN, к которому нужно подключить полученнный из ЦС файл с расширением ovpn . Например, если рабочая станция клиента работает под управлением ОС Windows, достаточно с сайта OpenVPN скачать дистрибутив Windows-приложения, установить его и скопировать файл сертификата .ovpn в одну из папок, указанных приложением при первом запуске. Это позволит клиенту осуществлять извне работу с ресурсами, расположенными внутри вашей сети, без изменений в конфигурации сетевого экрана и не понижая при этом уровень защищённости сети.

Следует отметить, что в данном руководстве в качестве сервера ЦС использовалась виртуальная машина, на которой также, как и на сервере OpenVPN, развёрнута ОС Ubuntu 20.04. На самом деле, в качестве сервера ЦС вы можете использовать как и ваш VPS, на котором вы настроили серверный сегмент VPN (что не является хорошим вариантом с точки зрения соблюдения мер информационной безопасности), но и любой компьютер или сервер, находящийся за пределами вашей закрытой сети. Во втором варианте, вам нужно продумать организацию безопасного трансфера файлов ключей и сертификатов между рабочей станцией с настроенным ЦС и сервером VPN.

Источник

OpenVPN

Содержание

Просьба к редакторам тоже там отписываться

OpenVPN

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

Варианты применения данной статьи

Исходные данные

Локальная сеть 1

Локальная сеть 2

Настройка OpenVPN

Установка

И на сервере и на клиенте ставим один и тот же пакет.

Создание сервера

Создание ключей и сертификатов

Защита соединения в OpenVPN в данном случае строится на использовании сертификатов и ключей для сервера и для клиентов.

Читайте также:  Блок питание с предохранителем своими руками

Переходим в созданную директорию, где и займёмся генерацией ключей и сертификатов

Редактируем файл переменных

Здесь можно заполнить например так:

копируем конфиг openssl

Очищаем от старых сертификатов и ключей папку keys и создаем серийный и индексные файлы для новых ключей

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

Создаем ключ сервера

В конце соглашаемся с запросом на подпись и добавление сертификата в базу.

Создаем ключ Диффи-Хеллмана

Cоздаем ключ для tls-аутификации

Создание файла конфигурации сервера

Создадим директорию для клиентских конфигов

Можно запускать наш сервер OpenVPN

Смотрим список интерфейсов

Если среди прочих видим

значит VPN-сервер завелся. Если нет, то смотрим лог

Настройка маршрутизации на стороне сервера

Если сервер имеет «белый» IP то никакой маршрутизации на стороне сервера настраивать не нужно. Если сервер находится в локальной сети за NAT роутера то необходимо настроить маршрутизацию.
Для того, чтобы клиенты могли достучаться до сервера нужно пробросить порты с роутера на сервер. В разных моделях это делается по разному. Суть в том, чтобы стучась на внешний порт, например 12345 1) , клиенты попадали на порт OpenVPN-сервера 1194 (или другой, который мы задали для нашего сервера). Кроме того устройствам в локальной сети нужно сообщить, что для доступа к сети за OpenVPN-сервером нужно обращаться к нему. Но проще задать этот маршрут на роутере, который обслуживает локалку.

Создаем файл в каталоге ccd с тем же именем, что и ключ для клиента, т.е. /etc/openvpn/ccd/client

Включаем ipv4_forwarding

В /etc/sysctl.conf расскомментируем #net.ipv4.ip_forward=1 после чего

Создание клиента

Создание ключей и сертификатов

Переходим в созданную директорию, где и замёмся генерацией ключей и сертификатов

Создаем ключ клиента

Если хотим защитить ключ паролем, то генерируем его другой командой

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

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

/etc/openvpn/client.conf

ИЛИ единый файл конфигурации клиента client.ovpn с сертификатами и ключами для импорта

Можно запускать наш клиент OpenVPN

Настройка маршрутизации на стороне клиента

Машина с openvpn уже готова работать с сервером в чём можно убедится

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

Включаем ipv4_forwarding

Также как в случае с сервером.

Настройка выхода в интернет с IP сервера

Настройки сервера

Если же вы хотите организовать доступ из VPN сети в интернет с IP адреса сервера, то вам нужно настроить на сервере NAT. Сделать это можно следующей командой (на сервере):

Здесь мы указали, что сеть 10.8.0.0/24 будет выходить наружу через интерфейс eth0.

Для того что бы настройки iptables сохранились после перезагрузки нужно их дополнительно сохранить:

Настройки клиента

К конфиге клиента client.conf нужно добавить строчку

Отзыв сертификата

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

Скрипт revoke-full создаст CRL-файл (certificate revocation list, список отозванных сертификатов) с именем crl.pem в подкаталоге keys. Файл должен быть скопирован в каталог, в котором сервер OpenVPN может получить к нему доступ. Ранее в конфиге мы прописали, что этот файл должен находится в /etc/openvpn, туда и копируем.

Отключение автозапуска OpenVPN

Тест производительности OpenVPN

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

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

Источники

© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.

Источник

Оцените статью