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

Полное руководство по настройке безопасного сервера OpenVPN в Ubuntu 20.04

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

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

VPN имеет множество применений в повседневной жизни, например, безопасное подключение к общедоступной сети Wi-Fi, которая часто взламывается, или обход географических ограничений на определенных веб-сайтах путем подключения к VPN, находящейся в стране, которая разрешена веб-сайтом.

OpenVPN - это широко используемая реализация VPN, которая позволяет использовать широкий спектр конфигураций и опций. Он использует протокол Secure Sockets Layer (SSL) для шифрования данных и предварительных общих ключей, имени пользователя / пароля или сертификатов для аутентификации VPN-клиента. В этой статье мы увидим, как настроить VPN-сервер и VPN-клиент в Ubuntu 20.04.

Установка

OpenVPN доступен в официальных репозиториях Ubuntu в пакете openvpn. Этот пакет устанавливает как сервер OpenVPN, так и клиент.

sudo apt установить openvpn

Как упоминалось ранее, OpenVPN использует сертификаты SSL для шифрования данных между сервером и клиентом. Нам необходимо создать собственный центр сертификации (ЦС) для выдачи сертификатов для VPN. Обратите внимание, что это должно быть установлено на другом компьютере, чем тот, на котором установлен OpenVPN; причина в том, что если он находится на том же сервере и если он будет скомпрометирован, злоумышленник может получить доступ к закрытому ключу и, таким образом, атаковать VPN-соединение.

Мы будем использовать инструмент под названием «Easy-RSA» для настройки центра сертификации. Чтобы установить его, запустите следующее на машине CA, машине сервера OpenVPN и машине клиента, поскольку для настройки CA требуется конфигурация на всех трех из них.

sudo apt install easy-rsa

Теперь мы сначала настроим центр сертификации на машине CA и выполним некоторые необходимые шаги настройки для этого же на машине сервера Open VPN.

Настройка центра сертификации

Первоначальная настройка на машине CA

Теперь этот пакет устанавливает команду под названием Make-Cadir который используется для создания папки для конфигурации центра сертификации. Давайте создадим с его помощью папку и войдем в нее.

make-cadir cert_authority && cd cert_authority

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

Сохраните и выйдите из файла. Если вы используете редактор vim, нажмите Esc, тип : wq и нажмите Входить для сохранения и выхода.

Далее мы запускаем Easyrsa в каталоге, чтобы настроить инфраструктуру открытого ключа (PKI), которая будет использоваться для генерации открытого ключа и сертификатов.

./easyrsa init-pki

На следующем шаге будет сгенерирован ключ CA и сертификат. Когда команда запрашивает пароль, введите пароль для ключа CA. Кроме того, при появлении запроса введите обычное имя. Если вы оставите это поле пустым, будет использоваться имя по умолчанию Easy-RSA CA name.

./easyrsa build-ca

Как видно из вывода, сертификат и ключ были сгенерированы. Этот ключ будет использоваться для подписи сертификатов клиента и сервера, поэтому его нельзя трогать / изменять.

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

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

Мы уже установили Easy RSA на сервер. Теперь выполните три шага на сервере, которые мы ранее выполняли на компьютере CA, а именно. создание каталога CA с помощью Make-Cadir и войдя внутрь, изменив переменные в варс файл и создание PKI с помощью ./easyrsa init-pki команда.

Затем нам нужно запустить команду для генерации запроса сертификата сервера и ключа.

./easyrsa gen-req сервер nopass

Обратите внимание, что мы передали опцию нет прохода чтобы команда не предлагала нам ввести пароль для ключа сервера. Он по-прежнему будет запрашивать общее имя для сервера, в которое вы можете ввести что угодно, или оставить его пустым для имени по умолчанию (сервер) быть использованным.

Переместите сгенерированный ключевой файл внутрь / и т.д. / openvpn каталог.

sudo mv pki / частный / server.key / etc / openvpn

Отправьте запрос сертификата на машину CA. Мы будем использовать команду scp для этого.

scp pki / reqs / server.req пользователь @ CA_MACHINE_HOSTNAME: / каталог

На скриншоте выше хост 45.79.125.41 - это машина CA. Мы скопировали сертификат в корневой каталог /.

Теперь сертификат сервера скопирован на машину CA. Следующий шаг - вернуться к машине CA и подписать этот сертификат.

Подписание сертификата сервера в ЦС

Во-первых, давайте проверим, был ли скопирован файл запроса сертификата с сервера на машину CA. Перейдите в каталог, в который мы скопировали файл (в моем примере / root), и запустите ls.

: ~ # cd / root && ls cert_authority server.req

Как видим, файл server.req настоящее. Затем перейдите в каталог CA и импортируйте этот запрос.

cd cert_authority ./easyrsa import-req /root/server.req server

Чтобы подписать этот запрос, выполните следующую команду.

./easyrsa sign-req server сервер

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

Введите фразу да, и пароль для ключа CA при появлении запроса.

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

rm /root/server.req scp pki / выданный / server.crt [email protected]: / root scp pki / ca.crt [email protected]: / root

Далее нам нужно выполнить еще несколько шагов, чтобы обеспечить безопасное соединение VPN.

Генерация параметров ЦТ

Обмен ключами DH (Диффи-Хеллмана) - это алгоритм, обеспечивающий безопасный обмен криптографическими ключами по незащищенному каналу. Сначала переместим полученный сертификат и публичный сертификат ЦС в / и т.д. / openvpn.

mv /root/ca.crt /root/server.crt / etc / openvpn

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

./easyrsa gen-dh

Теперь переместите сгенерированный файл в / и т.д. / openvpn.

mv /root/cert_authority/pki/dh.pem / etc / openvpn

Создание ключей TA

OpenVPN использует еще одну дополнительную меру безопасности, используя ключ аутентификации TLS. Чтобы сгенерировать ключ аутентификации TLS, запустите:

openvpn --genkey --secret tls_auth.key

И переместите ключ в / и т.д. / openvpn.

mv tls_auth.key / etc / openvpn

На этом настройка ключа сервера и центра сертификации завершена. Теперь перейдем к собственно настройке VPN-сервера.

Конфигурация сервера OpenVPN

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

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

Откройте файл с помощью vim или любого другого редактора по вашему выбору.

cd / etc / openvpn vim server.conf

Мы должны ввести общие имена ключей и сертификатов, которые мы сгенерировали ранее. Перейти к строке № 78. Поскольку мы использовали все имена по умолчанию, мы оставляем их без изменений. Затем проверьте имя файла параметров DH в строке 85. Мы использовали имя dh.pem, поэтому давайте изменим его.

Затем давайте изменим привилегии для сервера OpenVPN. Перейдите к строкам 274 и 275 и удалите ведущий ; раскомментировать это.

Аналогичным образом перейдите к строке 192 и удалите точку с запятой. Эта директива позволяет трафику всех клиентов проходить через VPN.

Сохраните и выйдите из файла.

Измените владельца папки / etc / openvpn на root.

sudo chown -R корень: корень / etc / openvpn

Настройка сети и брандмауэра

Нам нужно разрешить IP-пересылку на сервере, чтобы разрешить пересылку пакетов от и к VPN-клиенту. Раскомментируйте строку 28 на /etc/sysctl.conf:

Сохраните и выйдите из файла.

Начать сначала systemctl чтобы эти изменения произошли.

sudo sysctl -p

Нам необходимо настроить преобразование сетевых адресов (NAT) на сервере с помощью брандмауэра UFW, чтобы разрешить VPN-клиенту доступ в Интернет с использованием IP-адреса VPN-сервера. Во-первых, давайте включим пересылку пакетов в конфигурации брандмауэра. Открытым / и т.д. / по умолчанию / ufw и измените переменную в строке 19 на ACCEPT.

Сохраните и выйдите из файла.

Теперь добавьте в файл следующие правила /etc/ufw/before.rules перед фильтр строка в файле.

* nat: POSTROUTING ACCEPT [0: 0] -A POSTROUTING -s 10.8.0.0/8 -o -j MASQUERADE COMMIT

Введите свой сетевой интерфейс вместо . Вы можете увидеть свой сетевой интерфейс с помощью команды ifconfig.

Разрешите трафик для службы OpenVPN на брандмауэре и разрешите порт 1194.

sudo ufw разрешить openvpn && sudo ufw разрешить 1194

Перезагрузите службу брандмауэра.

sudo ufw перезагрузить

Теперь мы можем перезапустить демон сервера Open VPN, запустив:

sudo service openvpn перезапуск

Включите его запуск во время загрузки, запустив:

sudo systemctl включить openvpn

Сервер OpenVPN настроен и запущен. Теперь перейдем к запросу сертификата клиента, генерации ключа и другой настройке.

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

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

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

Перейдите в папку CA на сервере и запустите следующее:

cd ~ / cert_authority ./easyrsa gen-req client nopass

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

Теперь скопируем сгенерированный запрос сертификата клиента на машину CA.

scp pki / reqs / client.req [email protected]: / корень

Давайте импортируем этот запрос в машину CA:

./easyrsa import-req /root/client.req клиент

А теперь подпишем:

./easyrsa sign-req client клиент

Входитьда когда будет предложено продолжить. При запросе введите пароль для ключа CA.

Теперь мы можем удалить запрошенный файл для клиента и скопировать запрос обратно на сервер VPN.

rm /root/client.req scp pki / выданный / client.crt [email protected]: / root

Давайте создадим папку под названием клиент для хранения всех файлов, связанных с клиентом, на сервере VPN. Мы переместим клиентский ключ и сертификат в эту папку.

mkdir ~ / клиент sudo mv ~ / client.crt ~ / cert_authority / pki / private / client.key ~ / client

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

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

Открыть файл client.conf. В строке 42 введите имя хоста или IP-адрес вашего серверного компьютера вместо мой-сервер-1.

Раскомментируйте строки 61 и 62, удалив начальную точку с запятой, чтобы понизить уровень привилегий для файла.

Затем закомментируйте строки 88-90 и 108. Причина в том, что мы хотим добавить содержимое упомянутых файлов вручную, а не использовать расположение файлов. Это делается для того, чтобы файл конфигурации клиента позже был передан клиенту, где у нас фактически не будет файлов с клиентским ключом и сертификатом; следовательно, мы копируем их содержимое в сам файл конфигурации.

Добавьте следующее в файл конфигурации клиента. Введите содержимое соответствующих файлов в указанные теги.

 # Вставить сюда содержимое файла ca.crt # Вставить сюда содержимое файла client.crt # Вставить сюда содержимое файла client.key key-direction 1 # Вставить сюда содержимое файла tls_auth.key 

Сохраните и выйдите из файла. Переименуйте этот файл из client.conf к client.ovpn, поскольку последний является расширением, необходимым для файлов конфигурации, которые можно импортировать как сетевые конфигурации.

Теперь перенесите файл client.ovpn клиенту, то есть локальной машине.

Бегать scp на вашем клиентском компьютере для передачи файла с сервера на ваш локальный компьютер.

scp пользователь @ IP-адрес_сервера: / путь_к_файлу локальный_путь_падения

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

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

sudo openvpn --config client.ovpn

И это единственная команда, которую нужно запустить для запуска VPN-клиента.

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

Перейдите в Настройки »Сеть на вашем клиентском компьютере.

Нажать на + в разделе VPN и выберите «Импортировать из файла…» из вариантов.

Нажмите «Добавить», чтобы начать использовать VPN.

Обратите внимание, что в разделе «Шлюз» это IP-адрес сервера.

Наконец, нажмите кнопку «VPN клиента», чтобы включить VPN на машине.

Установка VPN-соединения может занять несколько секунд. Во время настройки в верхнем левом углу экрана появится новый логотип прогресса для VPN, а после настройки он изменится на логотип VPN.

Чтобы проверить, правильно ли работает VPN, выполните следующее:

curl //ipinfo.io/ip

Он должен вернуть IP-адрес вашего сервера. Или вы также можете проверить свой IP-адрес, просто выполнив поиск «Мой IP» в Google. Он должен отображать IP-адрес вашего VPN-сервера, если наша настройка VPN работает правильно.

Вывод

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

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

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

Категория: Linux