Как установить и настроить сервер OpenVPN в CentOS 7
OpenVPN - это полнофункциональное VPN-решение Secure Socket Layer (SSL) с открытым исходным кодом, которое поддерживает широкий спектр конфигураций. В этом руководстве вы настроите OpenVPN на сервере CentOS 7, а затем настроите его так, чтобы он был доступен с клиентского компьютера.
Как установить Drupal 8 на Ubuntu/Debian
Шаг 1 - Установка OpenVPN
Для начала мы установим OpenVPN на сервер. Мы также установим Easy RSA, инструмент управления инфраструктурой с открытым ключом, который поможет нам настроить внутренний центр сертификации (CA) для использования с нашей VPN. Мы также будем использовать Easy RSA для генерации наших пар ключей SSL позже для защиты VPN-соединений.
Для работы данной CMS необходимо установка специальных модулей php. С помощью последующих действий установите их: apt-get update apt-get install php7.0-gd Войдите на сервер как пользователь не-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 на странице релизов проекта : wget -O /tmp/easyrsa https://github.com/OpenVPN/easy-rsa-old/archive/2.3.3.tar.gz Затем распакуйте сжатый файл tar: tar xfz /tmp/easyrsa Это создаст новый каталог на вашем сервере с именем . Создайте новый подкаталог и назовите его :easy-rsa-old-2.3.3/etc/openvpneasy-rsa sudo mkdir /etc/openvpn/easy-rsa Скопируйте извлеченные файлы Easy RSA в новый каталог: sudo cp -rf easy-rsa-old-2.3.3/easy-rsa/2.0/* /etc/openvpn/easy-rsa Затем измените владельца каталога на пользователя без полномочий root: sudo chown myname /etc/openvpn/easy-rsa/
После того, как эти программы установлены и перемещены в нужные места в вашей системе, следующим шагом является настройка конфигурации OpenVPN на стороне сервера.
Шаг 2 - Настройка OpenVPN
Как и многие другие широко используемые инструменты с открытым исходным кодом, вам доступны десятки вариантов конфигурации. В этом разделе мы предоставим инструкции по настройке базовой конфигурации сервера OpenVPN.
OpenVPN имеет несколько примеров файлов конфигурации в своем каталоге документации. Сначала скопируйте образец server.conf файла в качестве отправной точки для вашего собственного файла конфигурации. sudo cp /usr/share/doc/openvpn-2.4.4/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: 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 чтобы сделать это), а затем сгенерируйте ключ статического шифрования с помощью следующей команды: sudo openvpn --genkey --secret /etc/openvpn/myvpn.tlsauth
Теперь, когда ваш сервер настроен, вы можете перейти к настройке ключей SSL и сертификатов, необходимых для безопасного подключения к вашему VPN-соединению.
Шаг 3 - Генерация ключей и сертификатов
Easy RSA использует набор скриптов, поставляемых вместе с программой, для генерации ключей и сертификатов. Чтобы избежать переконфигурации каждый раз, когда вам нужно создать сертификат, вы можете изменить конфигурацию Easy RSA, чтобы определить значения по умолчанию, которые он будет использовать для полей сертификата, включая вашу страну, город и предпочитаемый адрес электронной почты.
Мы начнем процесс генерации ключей и сертификатов с создания каталога, в котором Easy RSA будет хранить любые ключи и сертификаты, которые вы генерируете: sudo mkdir /etc/openvpn/easy-rsa/keys Переменные сертификата по умолчанию установлены в vars файле in /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
Это должно быть название «Подразделения организации», к которому вы принадлежите, обычно название вашего отдела или группы
Остальные переменные могут быть безопасно проигнорированы вне конкретных случаев использования. После внесения изменений файл должен выглядеть следующим образом:
. . . # 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="RU" export KEY_PROVINCE="MS" export KEY_CITY="Moskow" export KEY_ORG="Digitbox" export KEY_EMAIL="myname@example.com" export KEY_EMAIL=myname@example.com export KEY_CN=openvpn.example.com export KEY_NAME="server" export KEY_OU="Community" . . . Чтобы начать генерировать ключи и сертификаты, перейдите в easy-rsa каталог и sourceв новые переменные, которые вы установили в vars файле: cd /etc/openvpn/easy-rsa source ./vars Запустите clean-all скрипт Easy RSA, чтобы удалить все ключи и сертификаты, уже находящиеся в папке, и сгенерировать центр сертификации: ./clean-all Затем создайте центр сертификации с помощью build-ca сценария. Вам будет предложено ввести значения для полей сертификата, но если вы установите переменные в vars файле ранее, все ваши параметры уже будут установлены в качестве значений по умолчанию. Вы можете нажать, ENTER чтобы принять значения по умолчанию для каждого: ./build-ca Этот скрипт генерирует файл с именем ca.key. Это закрытый ключ, используемый для подписи сертификатов вашего сервера и клиентов. Если он потерян, вы больше не сможете доверять никаким сертификатам из этого центра сертификации, и если кто-либо сможет получить доступ к этому файлу, он может подписать новые сертификаты и получить доступ к вашей VPN без вашего ведома. По этой причине OpenVPN рекомендует хранить ca.keyв месте, которое может быть максимально автономным, и его следует активировать только при создании новых сертификатов. Затем создайте ключ и сертификат для сервера, используя build-key-server скрипт: ./build-key-server server Как и при построении ЦС, вы увидите значения, которые вы установили в качестве значений по умолчанию, чтобы вы могли нажать 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 Поскольку мы настроим здесь только одного клиента, мы назвали его client, но вы можете изменить его на более описательное имя, если хотите: cd /etc/openvpn/easy-rsa ./build-key client Наконец, скопируйте версионный файл конфигурации 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
Теперь, когда все необходимые ключи и сертификаты созданы для вашего сервера и клиента, вы можете перейти к настройке маршрутизации между двумя компьютерами.
Шаг 5 - Маршрутизация
Итак, вы установили OpenVPN на свой сервер, настроили его и сгенерировали ключи и сертификаты, необходимые клиенту для доступа к VPN. Однако вы еще не предоставили OpenVPN каких-либо инструкций о том, куда отправлять входящий веб-трафик от клиентов. Вы можете указать, как сервер должен обрабатывать клиентский трафик, установив некоторые правила брандмауэра и конфигурации маршрутизации.
Предполагая, что вы выполнили предварительные условия в начале этого урока, на вашем сервере уже должен быть установлен и запущен firewalld. Чтобы разрешить OpenVPN через брандмауэр, вам нужно знать, какая у вас активная зона firewalld. Найдите это с помощью следующей команды:
sudo firewall-cmd --get-active-zones Затем добавьте openvpn службу в список служб, разрешенных firewalld в вашей активной зоне, а затем сделайте этот параметр постоянным, повторно выполнив команду, но с --permanent добавленной опцией: sudo firewall-cmd --zone=trusted --add-service openvpn sudo firewall-cmd --zone=trusted --add-service openvpn --permanent Вы можете проверить правильность добавления службы с помощью следующей команды: sudo firewall-cmd --list-services --zone=trusted Затем добавьте маскарад к текущему экземпляру среды выполнения, а затем добавьте его снова с --permanent возможностью добавления маскарада ко всем будущим экземплярам: sudo firewall-cmd --add-masquerade sudo firewall-cmd --permanent --add-masquerade Вы можете проверить, что маскарад был добавлен правильно с этой командой: sudo firewall-cmd --query-masquerade Затем перешлите маршрутизацию в вашу подсеть OpenVPN. Вы можете сделать это, сначала создав переменную ( SHARK в нашем примере), которая будет представлять основной сетевой интерфейс, используемый вашим сервером, а затем используя эту переменную для постоянного добавления правила маршрутизации: SHARK=$(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 $SHARK -j MASQUERADE Обязательно внесите эти изменения в правила брандмауэра, перезагрузив firewalld: sudo firewall-cmd --reload Открыть sysctl.confдля редактирования: sudo nano /etc/sysctl.conf Затем добавьте следующую строку вверху файла: net.ipv4.ip_forward = 1 Наконец, перезапустите сетевую службу, чтобы переадресация IP вступила в силу: sudo systemctl restart network.service С правилами маршрутизации и брандмауэра мы можем запустить службу OpenVPN на сервере.
Шаг 6 - Запуск OpenVPN
OpenVPN управляется как сервис systemd systemctl. Мы настроим OpenVPN для запуска при загрузке, чтобы вы могли подключаться к вашей VPN в любое время, пока ваш сервер работает. Для этого включите сервер OpenVPN, добавив его в systemctl: sudo systemctl -f enable openvpn@server.service Затем запустите службу OpenVPN: sudo systemctl start openvpn@server.service Дважды проверьте, что служба OpenVPN активна, с помощью следующей команды. Вы должны увидеть active (running)в выводе: sudo systemctl status openvpn@server.service
Мы завершили настройку на стороне сервера для OpenVPN. Далее вы настроите свой клиентский компьютер и подключитесь к серверу OpenVPN.
Шаг 4 - Настройка клиента
Независимо от операционной системы вашего клиентского компьютера, ему потребуется локально сохраненная копия сертификата CA и ключ клиента и сертификат, сгенерированные на шаге 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, рассказывающий, как подключиться к серверу:
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_ipIP-адреса вашего сервера; порт 1194может остаться прежним
- Убедитесь, что пути к вашему ключу и файлам сертификатов правильные
Теперь этот файл может использоваться любым клиентом OpenVPN для подключения к вашему серверу. Ниже приведены инструкции для конкретной операционной системы по подключению вашего клиента:
Заключение
Теперь у вас должна быть полностью работающая виртуальная частная сеть, работающая на вашем сервере OpenVPN. Вы можете просматривать веб-страницы и загружать контент, не беспокоясь о том, что злоумышленники отслеживают вашу деятельность.