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

Вступление

Https://en.wikipedia.org/wiki/Virtual_private_network[Virtual Private Network] (VPN) позволяет обходить ненадежные сети, как если бы вы были в частной сети. Это дает вам возможность безопасного и надежного доступа к Интернету со своего смартфона или ноутбука при подключении к ненадежной сети, например, к Wi-Fi в отеле или кафе.

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

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

Предпосылки

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

  • Один сервер CentOS 7 с пользователем без полномочий root и брандмауэром, настроенным с помощью firewalld, чего вы можете достичь с помощью нашего https://www.digitalocean.com/community/tutorials/initial-server-setup-with-centos-7 [Начальная установка сервера с CentOS 7] и руководство https://www.digitalocean.com/community/tutorials/additional-recommended-steps-for-new-centos-7-serversAddd рекомендуемые шаги для новых серверов CentOS 7] ,

  • Домен или поддомен, который разрешается на ваш сервер, который вы можете использовать для сертификатов. Чтобы настроить это, вам сначала нужно будет register имя домена и затем add запись DNS через панель управления DigitalOcean. Обратите внимание, что простое добавление записи A будет соответствовать требованиям этого урока.

  • Клиентский компьютер, который вы будете использовать для подключения к вашему серверу OpenVPN. Для целей данного руководства рекомендуется использовать локальный компьютер в качестве клиента OpenVPN.

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

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

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

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

sudo yum update -y

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

sudo yum install epel-release -y

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

sudo yum update -y

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

sudo yum install -y openvpn wget

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

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

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

tar xfz /tmp/easyrsa

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

sudo mkdir /etc/openvpn/easy-rsa

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

sudo cp -rf easy-rsa-old-/easy-rsa//* /etc/openvpn/easy-rsa

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

sudo chown  /etc/openvpn/easy-rsa/

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

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

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

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

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

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

sudo nano /etc/openvpn/server.conf

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

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

/etc/openvpn/server.conf

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-адреса:

/etc/openvpn/server.conf

push "dhcp-option DNS "
push "dhcp-option DNS "

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

/etc/openvpn/server.conf

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 +:

/etc/openvpn/server.conf

topology subnet

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

/etc/openvpn/server.conf

remote-cert-eku "TLS Web Client Authentication"

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

/etc/openvpn/server.conf

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

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

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

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

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

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

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

sudo mkdir

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

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 +: это должно быть название «Подразделения», к которому вы принадлежите, обычно название вашего отдела или команды.

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

/ И т.д. / OpenVPN / легко и РКА / вары

. . .

# 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=""
export KEY_PROVINCE=""
export KEY_CITY=""
export KEY_ORG=""
export KEY_EMAIL=""
export KEY_EMAIL=
export KEY_CN=
export KEY_NAME=""
export KEY_OU=""
. . .

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

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

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

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

./clean-all

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

./build-ca

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

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

./build-key-server server

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

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

./build-dh

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

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

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

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

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

cd /etc/openvpn/easy-rsa
./build-key

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

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

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

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

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

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

sudo firewall-cmd --get-active-zones
Outputtrusted
 Interfaces: tun0

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

sudo firewall-cmd --zone=trusted --add-service openvpn
sudo firewall-cmd --zone=trusted --add-service openvpn --permanent

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

sudo firewall-cmd --list-services --zone=trusted
Outputopenvpn

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

sudo firewall-cmd --add-masquerade
sudo firewall-cmd --permanent --add-masquerade

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

sudo firewall-cmd --query-masquerade
Outputyes

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

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

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

sudo firewall-cmd --reload

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

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

sudo nano /etc/sysctl.conf

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

/etc/sysctl.conf

net.ipv4.ip_forward = 1

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

sudo systemctl restart network.service

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

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

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

sudo systemctl -f enable [email protected]

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

sudo systemctl start [email protected]

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

sudo systemctl status [email protected]
Output● [email protected] - OpenVPN Robust And Highly Flexible Tunneling Application On server
  Loaded: loaded (/usr/lib/systemd/system/[email protected]; 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/[email protected]
          └─2824 /usr/sbin/openvpn --cd /etc/openvpn/ --config server.conf
. . .

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

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

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

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

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

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

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

sudo nano client.ovpn

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

client.ovpn

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

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

  • Вам нужно изменить первую строку, чтобы отразить имя, которое вы дали клиенту в вашем ключе и сертификате; в нашем случае это просто ++

  • Вам также необходимо обновить IP-адрес с ++ до IP-адреса вашего сервера; порт + 1194 + может остаться прежним

  • Убедитесь, что пути к вашему ключу и файлам сертификатов правильные

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

  • Windows: *

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

  • MacOS: *

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

  • Linux *

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

sudo openvpn --config

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

Заключение

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

Есть несколько шагов, которые вы можете предпринять, чтобы настроить свою установку OpenVPN еще больше, например, настроить клиент для автоматического подключения к VPN или настроить клиентские правила и политики доступа. Для этих и других настроек OpenVPN вы должны обратиться к the официальной документации OpenVPN. Если вы заинтересованы в других способах защиты себя и своих компьютеров в Интернете, ознакомьтесь с нашей статьей на https://www.digitalocean.com/community/tutorials/7-security-measures-to-protect-your- серверы [7 мер безопасности для защиты ваших серверов].

Related