Поиск по сайту:

Как установить и настроить сервер OpenVPN в CentOS 7


Введение

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

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

OpenVPN — это полнофункциональное VPN-решение Secure Socket Layer (SSL) с открытым исходным кодом, которое поддерживает широкий спектр конфигураций. В этом руководстве вы настроите OpenVPN на сервере CentOS 7, а затем настроите его так, чтобы он был доступен с клиентского компьютера.

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

См. эту страницу для получения дополнительной информации.

Предпосылки

Чтобы следовать этому руководству, вам понадобятся:

  • Один сервер CentOS 7 с пользователем без полномочий root и брандмауэром, настроенным с помощью firewalld, чего вы можете достичь с помощью наших дополнительных рекомендуемых шагов для новых серверов CentOS 7.
  • Домен или поддомен, разрешающий ваш сервер, который вы можете использовать для сертификатов. Чтобы настроить это, вам сначала нужно добавить запись DNS через панель управления DigitalOcean. Обратите внимание, что простое добавление записи A будет соответствовать требованиям этого руководства.
  • Клиентский компьютер, который вы будете использовать для подключения к вашему серверу OpenVPN. Для целей этого руководства рекомендуется использовать локальный компьютер в качестве клиента OpenVPN.

Имея эти предварительные условия, вы готовы приступить к установке и настройке сервера OpenVPN в CentOS 7.

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

Для начала установим OpenVPN на сервер. Мы также установим Easy RSA, инструмент управления инфраструктурой открытых ключей, который поможет нам настроить внутренний центр сертификации (CA) для использования с нашей VPN. Позже мы также будем использовать Easy RSA для создания пар ключей SSL для защиты VPN-соединений.

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

  1. sudo yum update -y

Репозиторий Extra Packages for Enterprise Linux (EPEL) — это дополнительный репозиторий, управляемый проектом Fedora, содержащий нестандартные, но популярные пакеты. OpenVPN недоступен в репозиториях CentOS по умолчанию, но доступен в EPEL, поэтому установите EPEL:

  1. sudo yum install epel-release -y

Затем обновите списки пакетов еще раз:

  1. sudo yum update -y

Затем установите OpenVPN и wget, которые мы будем использовать для установки Easy RSA:

  1. sudo yum install -y openvpn wget

С помощью wget загрузите Easy RSA. Для целей этого руководства мы рекомендуем использовать easy-rsa-2, поскольку для этой версии доступно больше документации. Вы можете найти ссылку для скачивания последней версии easy-rsa-2 на странице релизов проекта:

  1. wget -O /tmp/easyrsa https://github.com/OpenVPN/easy-rsa-old/archive/2.3.3.tar.gz

Затем распакуйте сжатый файл с помощью tar:

  1. tar xfz /tmp/easyrsa

Это создаст новый каталог на вашем сервере с именем easy-rsa-old-2.3.3. Создайте новый подкаталог в /etc/openvpn и назовите его easy-rsa:

  1. sudo mkdir /etc/openvpn/easy-rsa

Скопируйте извлеченные файлы Easy RSA в новый каталог:

  1. sudo cp -rf easy-rsa-old-2.3.3/easy-rsa/2.0/* /etc/openvpn/easy-rsa

Затем измените владельца каталога на пользователя sudo без полномочий root:

sudo chown sammy /etc/openvpn/easy-rsa/

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

Шаг 2 — Настройка OpenVPN

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

В каталоге документации OpenVPN есть несколько примеров файлов конфигурации. Сначала скопируйте пример файла server.conf в качестве отправной точки для вашего собственного файла конфигурации.

  1. sudo cp /usr/share/doc/openvpn-2.4.4/sample/sample-config-files/server.conf /etc/openvpn

Откройте новый файл для редактирования в текстовом редакторе по вашему выбору. В нашем примере мы будем использовать nano, который вы можете загрузить с помощью команды yum install nano, если он еще не установлен на вашем сервере:

  1. sudo nano /etc/openvpn/server.conf

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

Для начала найдите и раскомментируйте строку, содержащую push redirect-gateway def1 bypass-dhcp. Это скажет вашему клиенту перенаправить весь свой трафик через ваш сервер OpenVPN. Имейте в виду, что включение этой функции может вызвать проблемы с подключением к другим сетевым службам, таким как SSH:

push "redirect-gateway def1 bypass-dhcp"

Поскольку ваш клиент не сможет использовать DNS-серверы по умолчанию, предоставленные вашим интернет-провайдером (поскольку его трафик будет перенаправлен), вам необходимо сообщить ему, какие DNS-серверы он может использовать для подключения к OpenVPN. Вы можете выбрать разные DNS-серверы, но здесь мы будем использовать общедоступные DNS-серверы Google с IP-адресами 8.8.8.8 и 8.8.4.4.

Установите это, раскомментировав обе строки push dhcp-option DNS ... и обновив IP-адреса:

push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

Мы хотим, чтобы OpenVPN запускался без привилегий после запуска, поэтому нам нужно указать ему работать с пользователем и группой, состоящей из никого. Чтобы включить это, раскомментируйте строки user Nobody и group Nobody:

user nobody
group nobody

Затем раскомментируйте строку topology subnet. Это вместе со строкой server 10.8.0.0 255.255.255.0 под ней настраивает вашу установку OpenVPN для работы в качестве подсети и сообщает клиентскому компьютеру, какой IP-адрес он должен использовать. В этом случае сервер станет 10.8.0.1, а первый клиент станет 10.8.0.2:

topology subnet

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

remote-cert-eku "TLS Web Client Authentication"

Наконец, OpenVPN настоятельно рекомендует пользователям включить аутентификацию TLS, криптографический протокол, который обеспечивает безопасную связь по компьютерной сети. Для этого вам потребуется сгенерировать статический ключ шифрования (в нашем примере он называется myvpn.tlsauth, хотя вы можете выбрать любое имя). Перед созданием этого ключа закомментируйте строку в файле конфигурации, содержащую tls-auth ta.key 0, поставив перед ней точку с запятой. Затем добавьте tls-crypt myvpn.tlsauth в строку ниже:

;tls-auth ta.key 0
tls-crypt myvpn.tlsauth

Сохраните и выйдите из файла конфигурации сервера OpenVPN (в nano нажмите CTRL - X, Y, затем ENTER, чтобы сделать это), а затем сгенерируйте статический ключ шифрования с помощью следующей команды:

  1. sudo openvpn --genkey --secret /etc/openvpn/myvpn.tlsauth

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

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

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

Мы начнем процесс создания ключей и сертификатов с создания каталога, в котором Easy RSA будет хранить любые созданные вами ключи и сертификаты:

  1. sudo mkdir /etc/openvpn/easy-rsa/keys

Переменные сертификата по умолчанию установлены в файле vars в /etc/openvpn/easy-rsa, поэтому откройте этот файл для редактирования:

  1. sudo nano /etc/openvpn/easy-rsa/vars

Прокрутите файл до конца и измените значения, начинающиеся с export KEY_, чтобы они соответствовали вашей информации. Самые важные из них:

  • KEY_CN: здесь введите домен или субдомен, который разрешается на ваш сервер.
  • KEY_NAME: здесь необходимо ввести server. Если вы введете что-то еще, вам также придется обновить файлы конфигурации, которые ссылаются на server.key и server.crt.

Другие переменные в этом файле, которые вы можете изменить:

  • KEY_COUNTRY: для этой переменной введите двухбуквенное сокращение страны вашего проживания.
  • KEY_PROVINCE: это должно быть название или аббревиатура штата, в котором вы проживаете.
  • KEY_CITY: введите здесь название города, в котором вы живете.
  • KEY_ORG: это должно быть название вашей организации или компании.
  • KEY_EMAIL: введите адрес электронной почты, который вы хотите подключить к сертификату безопасности.
  • KEY_OU: это должно быть название \организационного подразделения, к которому вы принадлежите, обычно либо название вашего отдела, либо группы.

Остальные переменные можно смело игнорировать за пределами конкретных случаев использования. После внесения изменений файл должен выглядеть так:

. . .

# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="US"
export KEY_PROVINCE="NY"
export KEY_CITY="New York"
export KEY_ORG="DigitalOcean"
export KEY_EMAIL="sammy@example.com"
export KEY_EMAIL=sammy@example.com
export KEY_CN=openvpn.example.com
export KEY_NAME="server"
export KEY_OU="Community"
. . .

Сохраните и закройте файл.

Чтобы начать генерировать ключи и сертификаты, перейдите в каталог easy-rsa и source в новые переменные, которые вы установили в файле vars:

  1. cd /etc/openvpn/easy-rsa
  2. source ./vars

Запустите скрипт Easy RSA clean-all, чтобы удалить все ключи и сертификаты, уже находящиеся в папке, и сгенерировать центр сертификации:

  1. ./clean-all

Затем создайте центр сертификации с помощью сценария build-ca. Вам будет предложено ввести значения для полей сертификата, но если вы установили переменные в файле vars ранее, все ваши параметры уже будут установлены по умолчанию. Вы можете нажать ENTER, чтобы принять значения по умолчанию для каждого из них:

  1. ./build-ca

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

Затем создайте ключ и сертификат для сервера с помощью скрипта build-key-server:

  1. ./build-key-server server

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

Последней частью создания ключей и сертификатов сервера является создание файла обмена ключами Диффи-Хеллмана. Для этого используйте скрипт build-dh:

  1. ./build-dh

Это может занять несколько минут.

Когда ваш сервер завершит создание файла обмена ключами, скопируйте ключи и сертификаты сервера из каталога keys в каталог openvpn:

  1. cd /etc/openvpn/easy-rsa/keys
  2. sudo cp dh2048.pem ca.crt server.crt server.key /etc/openvpn

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

Поскольку здесь мы настроим только один клиент, мы назвали его client, но вы можете изменить его на более описательное имя, если хотите:

  1. cd /etc/openvpn/easy-rsa
  2. ./build-key client

Наконец, скопируйте файл конфигурации OpenSSL с версией, openssl-1.0.0.cnf, с именем без версии, openssl.cnf. В противном случае может возникнуть ошибка, из-за которой OpenSSL не может загрузить конфигурацию, поскольку не может определить ее версию:

  1. cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf

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

Шаг 4 — Маршрутизация

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

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

  1. sudo firewall-cmd --get-active-zones
Output
trusted Interfaces: tun0

Затем добавьте службу openvpn в список служб, разрешенных firewalld в вашей активной зоне, а затем сделайте этот параметр постоянным, выполнив команду еще раз, но с --permanent добавлен вариант:

  1. sudo firewall-cmd --zone=trusted --add-service openvpn
  2. sudo firewall-cmd --zone=trusted --add-service openvpn --permanent

Вы можете проверить правильность добавления службы с помощью следующей команды:

  1. sudo firewall-cmd --list-services --zone=trusted
Output
openvpn

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

  1. sudo firewall-cmd --add-masquerade
  2. sudo firewall-cmd --permanent --add-masquerade

Вы можете проверить правильность добавления маскарада с помощью этой команды:

  1. sudo firewall-cmd --query-masquerade
Output
yes

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

  1. SHARK=$(ip route get 8.8.8.8 | awk 'NR==1 {print $(NF-2)}')
  2. sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $SHARK -j MASQUERADE

Обязательно внесите эти изменения в правила брандмауэра, перезагрузив firewalld:

  1. sudo firewall-cmd --reload

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

Откройте sysctl.conf для редактирования:

  1. sudo nano /etc/sysctl.conf

Затем добавьте следующую строку вверху файла:

net.ipv4.ip_forward = 1

Наконец, перезапустите сетевую службу, чтобы IP-переадресация вступила в силу:

  1. sudo systemctl restart network.service

Установив правила маршрутизации и брандмауэра, мы можем запустить службу OpenVPN на сервере.

Шаг 5 — Запуск OpenVPN

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

  1. sudo systemctl -f enable openvpn@server.service

Затем запустите службу OpenVPN:

  1. sudo systemctl start openvpn@server.service

Дважды проверьте, активна ли служба OpenVPN, с помощью следующей команды. Вы должны увидеть active (running) в выводе:

  1. sudo systemctl status openvpn@server.service
Output
● openvpn@server.service - OpenVPN Robust And Highly Flexible Tunneling Application On server Loaded: loaded (/usr/lib/systemd/system/openvpn@.service; enabled; vendor preset: disabled) Active: **active (running)** since Wed 2018-03-14 15:20:11 EDT; 7s ago Main PID: 2824 (openvpn) Status: "Initialization Sequence Completed" CGroup: /system.slice/system-openvpn.slice/openvpn@server.service └─2824 /usr/sbin/openvpn --cd /etc/openvpn/ --config server.conf . . .

Мы завершили настройку серверной части для OpenVPN. Далее вы настроите свою клиентскую машину и подключитесь к серверу OpenVPN.

Шаг 6 — Настройка клиента

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

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

/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/client.crt
/etc/openvpn/easy-rsa/keys/client.key
/etc/openvpn/myvpn.tlsauth

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

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

  1. sudo nano client.ovpn

Затем добавьте следующие строки в client.ovpn. Обратите внимание, что многие из этих строк отражают строки, которые мы раскомментировали или добавили в файл server.conf или которые уже были в нем по умолчанию:

client
tls-client
ca /path/to/ca.crt
cert /path/to/client.crt
key /path/to/client.key
tls-crypt /path/to/myvpn.tlsauth
remote-cert-eku "TLS Web Client Authentication"
proto udp
remote your_server_ip 1194 udp
dev tun
topology subnet
pull
user nobody
group nobody

При добавлении этих строк обратите внимание на следующее:

  • Вам нужно будет изменить первую строку, чтобы она отражала имя, которое вы дали клиенту в своем ключе и сертификате; в нашем случае это просто client
  • Вам также необходимо обновить IP-адрес с your_server_ip на IP-адрес вашего сервера; порт 1194 может остаться прежним
  • Убедитесь, что пути к файлам ключей и сертификатов указаны правильно.

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

Окна:

В Windows вам понадобятся официальные двоичные файлы OpenVPN Community Edition, которые поставляются с графическим интерфейсом. Поместите файл конфигурации .ovpn в соответствующий каталог, C:\Program Files\OpenVPN\config, и нажмите «Подключиться» в графическом интерфейсе. Графический интерфейс OpenVPN в Windows должен запускаться с правами администратора.

макОС:

В macOS приложение с открытым исходным кодом Tunnelblick предоставляет интерфейс, аналогичный графическому интерфейсу OpenVPN в Windows, и поставляется с OpenVPN и необходимыми драйверами TUN/TAP. Как и в случае с Windows, единственный необходимый шаг — поместить файл конфигурации .ovpn в каталог ~/Library/Application Support/Tunnelblick/Configurations. Кроме того, вы можете дважды щелкнуть файл .ovpn.

Линукс:

В Linux вам следует установить OpenVPN из официальных репозиториев вашего дистрибутива. Затем вы можете вызвать OpenVPN, выполнив:

  1. sudo openvpn --config ~/path/to/client.ovpn

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

Заключение

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

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