- Как настроить OpenVPN Server на Ubuntu 20.04
- Центр сертификации
- OpenVPN и Easy-RSA
- PKI для OpenVPN
- Сертификат и закрытый ключ OpenVPN
- Подписание запроса сертификата
- Криптография OpenVPN
- Генерация сертификатов и ключей
- Настройка OpenVPN
- Конфигурация сети на Сервере VPN
- Изменение конфигурации сетевого экрана
- Запуск OpenVPN
- Конфигурация клиентов
- Создание клиента
- OpenVPN
- Содержание
- OpenVPN
- Варианты применения данной статьи
- Исходные данные
- Настройка OpenVPN
- Установка
- Создание сервера
- Создание ключей и сертификатов
- Создание файла конфигурации сервера
- Настройка маршрутизации на стороне сервера
- Включаем ipv4_forwarding
- Создание клиента
- Создание ключей и сертификатов
- Создание файла конфигурации клиента
- ИЛИ единый файл конфигурации клиента client.ovpn с сертификатами и ключами для импорта
- Настройка маршрутизации на стороне клиента
- Включаем ipv4_forwarding
- Настройка выхода в интернет с IP сервера
- Настройки сервера
- Настройки клиента
- Отзыв сертификата
- Отключение автозапуска OpenVPN
- Тест производительности OpenVPN
- Источники
Как настроить 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.
Источник