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

В этом руководстве вы настроите сервер OpenVPN на сервере Ubuntu 18.04, а затем настроите доступ к нему из Windows, macOS, iOS и / или Android. В этом руководстве все этапы установки и настройки будут максимально простыми для каждой из этих установок.

Шаг 1 - Установка OpenVPN и EasyRSA

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

  •   sudo apt update
     sudo apt install openvpn 

OpenVPN - это TLS / SSL VPN. Это означает, что он использует сертификаты для шифрования трафика между сервером и клиентами. Для выдачи доверенных сертификатов вы создадите свой собственный простой центр сертификации (CA). Для этого мы загрузим последнюю версию EasyRSA, которую мы будем использовать для построения нашей инфраструктуры открытых ключей CA (PKI), из официального репозитория проекта GitHub.

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

Чтобы приступить к созданию инфраструктуры CA и PKI, wget загрузите последнюю версию EasyRSA как на своем компьютере CA, так и на сервере OpenVPN . Чтобы получить последнюю версию, перейдите на страницу « Релизы» официального проекта EasyRSA GitHub , скопируйте ссылку на скачивание для файла, оканчивающегося на .tgz, и вставьте его в следующую команду:

  •  wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz
     Затем распакуйте архив:
      cd ~
     tar xvf EasyRSA-3.0.4.tgz 

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

Шаг 2 - Конфигурирование переменных EasyRSA и построение CA

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

  •  На вашем компьютере CA перейдите в каталог EasyRSA:
     cd ~/EasyRSA-3.0.4/
     Внутри этого каталога находится файл с именем vars.example.
     Сделайте копию этого файла и назовите копию vars без расширения файла:
     cp vars.example vars
     Откройте этот новый файл с помощью предпочитаемого вами текстового редактора: 
     nano vars
     Найдите настройки, которые устанавливают значения по умолчанию
     для новых сертификатов. Это будет выглядеть примерно так: 
     #set_var EASYRSA_REQ_COUNTRY    "RU"
     #set_var EASYRSA_REQ_PROVINCE   "Moskow"
     #set_var EASYRSA_REQ_CITY       "Moskow"
     #set_var EASYRSA_REQ_ORG        "Copyleft Certificate Co"
     #set_var EASYRSA_REQ_EMAIL      "me@example.net"
     #set_var EASYRSA_REQ_OU         "My Organizational Unit"
     Раскомментируйте эти строки и обновите выделенные
     значения так, как вам удобно, но не оставляйте их пустыми: 
     set_var EASYRSA_REQ_COUNTRY    "RU"
     set_var EASYRSA_REQ_PROVINCE   "Moskow"
     set_var EASYRSA_REQ_CITY       "Moskow"
     set_var EASYRSA_REQ_ORG        "Digitbox"
     set_var EASYRSA_REQ_EMAIL      "admin@example.com"
     set_var EASYRSA_REQ_OU         "Community"
     В каталоге EasyRSA находится скрипт, easyrsa
     который вызывается для выполнения различных задач, связанных с
     созданием и управлением ЦС. Запустите этот сценарий с init-pki
     возможностью запуска инфраструктуры открытого ключа на сервере CA: 
     ./easyrsa init-pki  

После этого easyrsaснова вызовите скрипт, следуя за ним с build-caопцией. Это создаст ЦС и создаст два важных файла - ca.crtи ca.key- которые составляют открытую и закрытую стороны сертификата SSL.

  • ca.crtэто файл открытого сертификата CA, который в контексте OpenVPN сервер и клиент используют для информирования друг друга о том, что они являются частью одной и той же сети доверия, а не того, кто выполняет атаку «человек посередине». По этой причине вашему серверу и всем вашим клиентам потребуется копия ca.crtфайла.
  • ca.keyэто закрытый ключ, который машина CA использует для подписи ключей и сертификатов для серверов и клиентов. Если злоумышленник получит доступ к вашему ЦС и, в свою очередь, к вашему ca.keyфайлу, он сможет подписывать запросы на сертификаты и получать доступ к вашему VPN, нарушая его безопасность. Вот почему ваш ca.keyфайл должен быть только на вашем компьютере CA, и в идеале ваш компьютер CA должен оставаться в автономном режиме, если не подписывает запросы на сертификат в качестве дополнительной меры безопасности.
  •  Если вы не хотите, чтобы при каждом взаимодействии
     с вашим ЦС запрашивался пароль, вы можете запустить build-ca
     команду с nopass параметром, например так:
     ./easyrsa build-ca nopass
     В выводе вам будет предложено подтвердить общее имя для вашего CA:
     Output
     . . .
     Common Name (eg: your user, host, or server name) [Easy-RSA CA]:  

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

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

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

  •  Начните с перехода в каталог EasyRSA на вашем сервере OpenVPN :
     cd EasyRSA-3.0.4/
     Оттуда запустите easyrsaскрипт с init-pki опцией.
     Хотя вы уже выполнили эту команду на компьютере CA, необходимо выполнить ее здесь,
     потому что ваш сервер и CA будут иметь отдельные каталоги PKI:
     ./easyrsa init-pki
     ./easyrsa gen-req server nopass
     Это создаст закрытый ключ для сервера и файл
     запроса сертификата с именем server.req. Скопируйте ключ сервера в /etc/openvpn/каталог: 
     sudo cp ~/EasyRSA-3.0.4/pki/private/server.key /etc/openvpn/
     Используя безопасный метод (например, SCP, в нашем примере ниже),
     перенесите server.req файл на компьютер CA.
    
     
     scp ~/EasyRSA-3.0.4/pki/reqs/server.req sammy@your_CA_ip:/tmp
     Затем на вашем компьютере CA перейдите в каталог EasyRSA: 
     cd EasyRSA-3.0.4/
     Используя easyrsa скрипт снова, импортируйте server.req файл,
     следуя пути к файлу с его общим именем: 
     ./easyrsa import-req /tmp/server.req server
     Затем подпишите запрос, запустив easyrsa сценарий с
     sign-req параметром, затем тип запроса и общее имя. Тип запроса может быть
     client либо server, либо , поэтому для запроса сертификата сервера OpenVPN
     обязательно используйте server тип запроса: 
     ./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 3650 days:
    
     subject=
        commonName                = server
    
    
     Type the word 'yes' to continue, or any other input to abort.
     Confirm request details: yes
     Затем перенесите подписанный сертификат обратно на VPN-сервер безопасным способом: 
     scp pki/issued/server.crt sammy@your_server_ip:/tmp
     Перед выходом из системы CA также перенесите ca.crt файл на сервер: 
     scp pki/ca.crt sammy@your_server_ip:/tmp
     Затем войдите в свой OpenVPN сервер и скопировать
     server.crt и ca.crt файлы в /etc/openvpn/каталоге: 
     sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/
     Затем перейдите в каталог EasyRSA: 
     cd EasyRSA-3.0.4/
     Оттуда создайте сильный ключ Диффи-Хеллмана
     для использования во время обмена ключами, набрав: 
     ./easyrsa gen-dh
     Это может занять несколько минут. Как только это произойдет,
     сгенерируйте подпись HMAC, чтобы усилить возможности проверки целостности TLS на сервере: 
     openvpn --genkey --secret ta.key
     Когда команда завершится, скопируйте два новых файла в свой /etc/openvpn/каталог: 
     sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/
     sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/  

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

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

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

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

  •  Начните с создания структуры каталогов в
     вашем домашнем каталоге для хранения сертификата клиента и файлов ключей:
     mkdir -p ~/client-configs/keys
     Поскольку вы будете хранить пары сертификатов / ключей ваших
     клиентов и файлы конфигурации в этом каталоге, вы должны заблокировать
     его разрешения сейчас в качестве меры безопасности:
     chmod -R 700 ~/client-configs
     Затем перейдите обратно в каталог EasyRSA и запустить
     easyrsa скрипт с gen-reqи nopassо пциями, а также с общим названием для клиента: 
     cd ~/EasyRSA-3.0.4/
     ./easyrsa gen-req client1 nopass
     Нажмите, ENTER чтобы подтвердить общее имя. Затем
     скопируйте client1.key файл в /client-configs/keys/каталог, который вы создали ранее: 
     cp pki/private/client1.key ~/client-configs/keys/
     Затем перенесите client1.req файл на
     компьютер CA, используя безопасный метод: 
     scp pki/reqs/client1.req sammy@your_CA_ip:/tmp
     Войдите на свой компьютер CA, перейдите в
     каталог EasyRSA и импортируйте запрос сертификата: 
     ssh sammy@your_CA_ip
     cd EasyRSA-3.0.4/
     ./easyrsa import-req /tmp/client1.req client1
     Затем подпишите запрос, как вы сделали для сервера в
     предыдущем шаге. На этот раз, однако, обязательно укажите client тип запроса: 
     ./easyrsa sign-req client client1
     В yesответ на приглашение введите, чтобы подтвердить, что
     вы намерены подписать запрос сертификата и что он поступил из надежного источника:
     Это создаст файл сертификата клиента с именем client1.crt.
     Передайте этот файл обратно на сервер:
     scp pki/issued/client1.crt sammy@your_server_ip:/tmp
     Вернитесь по SSH на ваш сервер OpenVPN и скопируйте сертификат
     клиента в /client-configs/keys/каталог: 
     cp /tmp/client1.crt ~/client-configs/keys/
     Затем скопируйте ca.crtи ta.key файлы в /client-configs/keys/каталоге , а также: 
     cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/
     sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/  

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

Шаг 1 - Настройка службы 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
     Откройте файл конфигурации сервера в предпочитаемом вами текстовом редакторе:  
     sudo nano /etc/openvpn/server.conf
     Найдите раздел HMAC, ища tls-auth директиву.
     Эта строка уже должна быть раскомментирована, но если нет, удалите « ; »,
     чтобы раскомментировать ее. Ниже этой строки добавьте key-direction параметр,
     установив значение «0»:  
     tls-auth ta.key 0 # This file is secret
     key-direction 0
     Затем найдите раздел о криптографических шифрах,
     отыскивая закомментированные cipher строки. AES-256-CBCШифра предлагает
     хороший уровень шифрования и хорошо поддерживается. Опять же, эта
     строка уже должна быть закомментирована, но если это не так,
     просто удалите « ; », предшествующий ей:  
     cipher AES-256-CBC
     Ниже этого добавьте auth директиву, чтобы
     выбрать алгоритм дайджеста сообщения HMAC. Для этого SHA256хороший выбор:  
     auth SHA256
     Затем найдите строку, содержащую dh директиву,
     которая определяет параметры Диффи-Хеллмана. Из-за некоторых недавних
     изменений, внесенных в EasyRSA, имя файла для ключа Диффи-Хеллмана
     может отличаться от того, которое указано в примере файла конфигурации
     сервера. При необходимости измените указанное здесь имя файла, удалив
     его 2048так, чтобы оно совпадало с ключом, сгенерированным на предыдущем шаге:  
     dh dh.pem
     И, наконец, найти userи group настройки и удалить
     « ; » в начале каждого раскомментировать эти строки:  
     user nobody
     group nogroup  

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

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

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

  •  Отрегулируйте настройки IP-адреса вашего
     сервера по умолчанию, изменив /etc/sysctl.conf файл:
     sudo nano /etc/sysctl.conf
     Внутри ищите закомментированную строку, которая
     устанавливает net.ipv4.ip_forward. Удалите символ « # » в начале строки,
     чтобы раскомментировать этот параметр:
     net.ipv4.ip_forward=1
     Чтобы прочитать файл и настроить значения для текущего сеанса, введите: 
     sudo sysctl -p
     Прежде чем открыть файл конфигурации брандмауэра
     для добавления правил маскировки, вы должны сначала найти общедоступный
     сетевой интерфейс вашего компьютера. Для этого введите: 
     ip route | grep default
     Когда у вас есть интерфейс, связанный с вашим маршрутом
     по умолчанию, откройте /etc/ufw/before.rules файл, чтобы добавить
     соответствующую конфигурацию: 
     sudo nano /etc/ufw/before.rules
     Правила UFW обычно добавляются с помощью ufw оманды. Правила,
     перечисленные в before.rules файле, тем не менее, читаются и вводятся в действие
     перед загрузкой обычных правил UFW. В верхней части файла добавьте выделенные
     строки ниже. Это установит политику по умолчанию для POSTROUTING цепочки в nat
     таблице и маскирует любой трафик, поступающий из VPN. Не забудьте заменить
     wlp11s0в -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 wlp11s0 (change to the interface you discovered!)
     -A POSTROUTING -s 10.8.0.0/8 -o wlp11s0 -j MASQUERADE
     COMMIT
     # END OPENVPN RULES
    
     # Don't delete these required lines, otherwise there will be errors
     *filter
     Далее вам нужно указать UFW, что по умолчанию также
     разрешено переадресовывать пакеты. Для этого откройте /etc/default/ufw файл: 
     sudo nano /etc/default/ufw
     Внутри найдите DEFAULT_FORWARD_POLICY
     директиву и измените значение с DROPна ACCEPT:  
     DEFAULT_FORWARD_POLICY="ACCEPT"  

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

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

Ваш сервер теперь настроен для правильной обработки трафика OpenVPN.

Хостинг провайдер © Digitbox