Настройка сервера OpenVPN в CentOS 7

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

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

OpenVPN – это полнофункциональное открытое средство VPN SSL, которое поддерживает широкий спектр конфигураций. В этом мануале вы научитесь настраивать OpenVPN на вашем выделенном сервере CentOS 7 и открывать доступ клиентам.

Требования

1: Установка OpenVPN

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

Обновите индекс пакетов:

sudo yum update -y

Extra Packages for Enterprise Linux (EPEL) – это дополнительный репозиторий проекта Fedora, содержащий нестандартные, но популярные пакеты. OpenVPN недоступен в репозиториях CentOS по умолчанию, но доступен в 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 xfz /tmp/easyrsa

Это создаст на вашем сервере новый каталог под названием easy-rsa-old-2.3.3. Создайте новый подкаталог в /etc/openvpn и назовите его easy-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

Передайте права на каталог своему пользователю с правами sudo:

sudo chown 8host /etc/openvpn/easy-rsa/

Когда эти программы будут установлены и перенесены в нужные точки системы, вы сможете настроить OpenVPN на стороне сервера.

2: Настройка OpenVPN

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

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

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

Откройте новый файл с помощью текстового редактора. Чтобы установить nano, введите такую команду:

sudo nano /etc/openvpn/server.conf

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

Найдите раздел redirect-gateway и удалите точку с запятой в начале строки redirect-gateway, чтобы раскомментировать ее. Это позволит клиенту перенаправить свой трафик через сервер 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

Затем раскомментируйте строку 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, а затем сгенерируйте статический ключ шифрования с помощью следующей команды:

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

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

3: Генерирование ключей и сертификатов

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

Для начала создайте каталог для хранения ключей и сертификатов.

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

По умолчанию переменные сертификатов хранятся в файле 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: Organizational Unit – название команды и отдела, для которого предназначен сертификат.

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

. . .
# 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="8host"
export KEY_EMAIL="8host@example.com"
export KEY_EMAIL=8host@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

Запустите скрипт 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, вы увидите значения по умолчанию, которые можно принять, просто нажав Ввод. Кроме того, вам будет предложено ввести пароль и опционально название компании. Если вы введете пароль для ключей и сертификатов, его будут запрашивать у клиента при подключении к VPN. Если вы не хотите устанавливать такой пароль, просто оставьте эту строку пустой и нажмите Enter и Y, чтобы зафиксировать изменения.

Теперь нужно сгенерировать ключ Диффи-Хеллмана.

./build-dh

Эта процедура займет несколько минут.

Теперь скопируйте ключи и сертификаты сервера в каталог openvpn:

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

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

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

4: Маршрутизация

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

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

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

Затем добавьте сервис 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
openvpn

Затем настройте маскарадинг и снова сохраните параметр:

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

Убедитесь, что маскарадинг настроен:

sudo firewall-cmd --query-masquerade
yes

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

8HOST=$(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 $8HOST -j MASQUERADE

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

sudo firewall-cmd --reload

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

Откройте sysctl.conf:

sudo nano /etc/sysctl.conf

Добавьте в начало файла такую строку:

net.ipv4.ip_forward = 1

Перезапустите сетевой сервис:

sudo systemctl restart network.service

5: Запуск OpenVPN

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

sudo systemctl -f enable openvpn@server.service

Затем запустите сервис OpenVPN:

sudo systemctl start openvpn@server.service

Убедитесь, что сервис OpenVPN активен.

sudo systemctl status openvpn@server.service
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.

sudo nano 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-адрес; порт 1194 можно оставить.
  • Убедитесь, что пути к вашим ключам и файлам сертификатов указаны верно.

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

Windows

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

macOS

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

Linux

В Linux нужно установить OpenVPN из официального репозитория системы. Запустить OpenVPN можно с помощью команды:

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

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

Заключение

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

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

Читайте также: Как защитить сервер: 7 мер безопасности

Tags: , ,