Введение
Виртуальная частная сеть (VPN) позволяет вам пересекать ненадежные сети так же безопасно и надежно, как и в частной сети.
В сочетании с соединениями HTTPS эта конфигурация помогает защитить беспроводные входы в систему и транзакции. Вы можете обойти географические ограничения, цензуру, ваше местоположение и любой незашифрованный HTTP-трафик.
OpenVPN — это полное VPN-решение Secure Socket Layer (SSL) с открытым исходным кодом, которое может содержать широкий спектр конфигураций. В этом руководстве мы настроим OpenVPN на сервере Ubuntu 18.04 LTS.
Предпосылки
Для этого руководства вам понадобится сервер Ubuntu 18.04 для службы OpenVPN. Перед запуском этого руководства необходимо настроить пользователя без полномочий root с привилегиями sudo. Вы можете следовать нашему руководству по начальной настройке Ubuntu 18.04, чтобы настроить пользователя с соответствующими разрешениями.
Вам потребуется отдельный компьютер для работы в качестве центра сертификации (ЦС) . Хотя можно использовать свой собственный VPN-сервер или локальный компьютер в качестве ЦС, хотя это не рекомендуется, поскольку это открывает вашу VPN для некоторых уязвимостей безопасности. Согласно официальной документации OpenVPN, вам необходимо разместить ЦС на отдельном компьютере, предназначенном для импорта и подписи запросов на сертификаты. По этой причине в этом руководстве предполагается, что ЦС находится на отдельном сервере Ubuntu 18.04, на котором также есть пользователь без полномочий root с привилегиями sudo.
Обратите внимание, что если вы отключите аутентификацию по паролю при настройке этих серверов, вы можете столкнуться с трудностями при передаче файлов. Чтобы решить эту проблему, вы можете повторно включить аутентификацию по паролю на каждом сервере. Кроме того, вы можете сгенерировать пару ключей SSH для каждого сервера, а затем добавить открытый ключ SSH сервера OpenVPN в файл author_keys сервера ЦС и наоборот.
Серверы, используемые в этом примере, различаются следующим образом:
Server VPN: IP_SERVER_VPN
Server CA: IP_SERVER_CA
Подключение к серверу
Чтобы получить доступ к серверу, вам нужно знать IP-адрес. Вам также потребуется ваше имя пользователя и пароль для аутентификации. Чтобы подключиться к серверу как root , введите следующую команду:
ssh root@IP_DEL_SERVER
Далее вам нужно будет ввести пароль пользователя root.
Если вы не используете пользователя root, вы можете войти под другим именем пользователя с помощью той же команды, а затем изменить root на свое имя пользователя :
ssh nome_utente@IP_DEL_SERVER
Затем вам будет предложено ввести пароль пользователя.
Стандартный порт для подключения по ssh — 22 , если ваш сервер использует другой порт, вам нужно будет указать его с помощью параметра -p , после чего введите следующую команду:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Теперь вы подключены к своему серверу и готовы начать установку OpenVPN на Ubuntu 18.04 LTS.
Установите OpenVPN и EasyRSA
Обновите индекс пакетов VPN-сервера и установите OpenVPN. OpenVPN доступен в репозиториях Ubuntu по умолчанию, поэтому вы можете использовать apt для установки:
sudo apt update
sudo apt install openvpn
OpenVPN — это TLS/SSL VPN. Это означает, что он использует сертификаты для шифрования трафика между сервером и клиентами. Мы будем использовать последнюю версию EasyRSA для создания нашей инфраструктуры открытых ключей CA (PKI).
Мы построим ЦС на отдельном сервере. Управление ЦС с отдельного сервера помогает предотвратить доступ неавторизованных пользователей к VPN.
Загрузите последнюю версию EasyRSA как на сервер ЦС, так и на сервер OpenVPN . Чтобы получить последнюю версию, перейдите на официальную страницу проекта на GitHub EasyRSA , скопируйте ссылку для скачивания файла, оканчивающуюся на .tgz , затем загрузите его с помощью команды wget :
VPN- сервер :
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz
Затем распакуйте архив с помощью команды tar :
cd ~
cd ~
tar xvf EasyRSA-nix-3.0.5.tgz
tar xvf EasyRSA-nix-3.0.5.tgz
Необходимое программное обеспечение было успешно установлено на сервере OpenVPN и сервере ЦС .
Настройте EasyRSA и ЦС
EasyRSA устанавливается с файлом конфигурации, который можно редактировать для ЦС.
Подключиться к серверу ЦС
На сервере ЦС перейдите в каталог EasyRSA с помощью команды cd :
cd ~/EasyRSA-3.0.5/
Внутри этого каталога есть файл с именем vars.example . Сделайте копию этого файла и назовите копии vars без расширения файла:
cp vars.example vars
Откройте файл vars
с помощью тестового редактора, в этом уроке мы используем nano :
nano vars
Найдите следующие настройки:
...
#set_var EASYRSA_REQ_COUNTRY "US"
#set_var EASYRSA_REQ_PROVINCE "California"
#set_var EASYRSA_REQ_CITY "San Francisco"
#set_var EASYRSA_REQ_ORG "Copyleft Certificate Co"
#set_var EASYRSA_REQ_EMAIL "[email protected]"
#set_var EASYRSA_REQ_OU "My Organizational Unit"
...
Раскомментируйте эти строки и измените значения на свои, не оставляйте их пустыми:
...
set_var EASYRSA_REQ_COUNTRY "US"
set_var EASYRSA_REQ_PROVINCE "NewYork"
set_var EASYRSA_REQ_CITY "New York City"
set_var EASYRSA_REQ_ORG "Noviello"
set_var EASYRSA_REQ_EMAIL "[email protected]"
set_var EASYRSA_REQ_OU "Community"
...
Когда закончите, сохраните и закройте файл.
Внутри каталога EasyRSA есть скрипт easyrsa , который вызывается для выполнения ряда функций, связанных с созданием и управлением ЦС. Запустите этот сценарий с параметром init-pki , чтобы запустить инфраструктуру открытого ключа на сервере ЦС:
./easyrsa init-pki
Вы должны получить выходное сообщение, подобное следующему:
. . .
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/TUO_NOME_UTENTE/EasyRSA-3.0.5/pki
После этого снова вызовите скрипт easyrsa, указав за ним опцию build-ca . Это построит ЦС и создаст два важных файла — ca.crt и ca.key — которые составляют общедоступную и частную стороны SSL-сертификата.
ca.crt — это общедоступный файл сертификата ЦС, который в контексте OpenVPN. Вашему серверу и всем вашим клиентам потребуется копия этого файла.
не хотите, чтобы пароль запрашивался каждый раз, когда вы взаимодействуете с ЦС, вы можете запустить команду build-ca с параметром nopass , например:ca.key — это закрытый ключ, используемый сервером ЦС для подписи ключей и сертификатов для серверов и клиентов. Этот файл .key должен находиться только на вашем сервере CA, и в идеале ваш сервер CA должен оставаться в автономном режиме, когда вы не подписываете запросы на сертификат, в качестве дополнительной меры безопасности.
./easyrsa build-ca nopass
Вы должны получить выходное сообщение, подобное следующему:
. . .
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
Общее имя — это имя, используемое для ссылки на этот сервер в контексте центра сертификации. Вы можете ввести любую строку символов для общего имени ЦС, но для простоты нажмите клавишу ВВОД , чтобы принять имя по умолчанию.
Создайте сертификат и ключ сервера
Теперь, когда у вас есть готовый ЦС, вы можете сгенерировать закрытый ключ и запрос сертификата с вашего VPN-сервера, а затем передать запрос в ЦС для подписи, создав требуемый сертификат.
Подключиться к VPN-серверу
Войдите в каталог EasyRSA на сервере OpenVPN:
cd EasyRSA-3.0.5/
Запустите скрипт easyrsa с параметром init-pki . Хотя вы уже выполнили эту команду на сервере ЦС, вам нужно запустить ее здесь, потому что ваш VPN-сервер и ЦС будут иметь отдельные каталоги PKI:
./easyrsa init-pki
Затем он снова вызывает сценарий easyrsa , на этот раз с параметром gen-req , за которым следует общее имя сервера. Это может быть любое имя. В этом руководстве общее имя сервера OpenVPN будет просто « сервер ». Убедитесь, что вы также включили опцию nopass . В противном случае файл запроса будет защищен паролем, что впоследствии может привести к проблемам с авторизацией:
ВНИМАНИЕ: если вы выберете здесь имя, отличное от « сервер », которое мы будем использовать в остальной части руководства, вам нужно будет осторожно изменить некоторые команды, которые появятся.
Затем выполните следующую команду:
./easyrsa gen-req server nopass
Это создаст закрытый ключ для сервера и файл запроса сертификата с именем server.req . Скопируйте ключ сервера в каталог /etc/openvpn/ командой cp :
sudo cp ~/EasyRSA-3.0.5/pki/private/server.key /etc/openvpn/
Используя безопасный метод (например, SCP в нашем примере ниже), передайте файл server.req на сервер ЦС:
scp ~/EasyRSA-3.0.5/pki/reqs/server.req TUO_NOME_UTENTE@IP_SERVER_CA:/tmp
Подключиться к серверу ЦС
Далее на сервере ЦС переходим в директорию EasyRSA:
cd EasyRSA-3.0.5/
Снова используя скрипт easyrsa, импортируйте файл server.req , следуя пути к файлу с его общим именем:
./easyrsa import-req /tmp/server.req server
Затем подпишите запрос, запустив скрипт easyrsa с параметром sign-req , за которым следует тип запроса и обычное имя. Тип запроса может быть клиентским или серверным, поэтому для запроса сертификата сервера OpenVPN обязательно используйте тип запроса сервера:
./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
Если вы зашифровали свой ключ CA, вам будет предложено ввести пароль на этом этапе.
Затем передайте подписанный сертификат на ваш VPN-сервер безопасным способом:
scp pki/issued/server.crt TUO_NOME_UTENTE@IP_SERVER_VPN:/tmp
Перед отключением от CA-сервера также передайте на сервер файл ca.crt :
scp pki/ca.crt TUO_NOME_UTENTE@IP_SERVER_VPN:/tmp
Подключиться к VPN-серверу
Войдите снова на VPN-сервер и скопируйте файлы server.crt и ca.crt в каталог /etc/openvpn/ :
sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/
Затем перейдите в каталог EasyRSA:
cd EasyRSA-3.0.5/
Создайте ключ Диффи-Хеллмана для использования при обмене ключами, набрав:
./easyrsa gen-dh
закончите, сгенерируйте подпись HMAC, чтобы усилить возможности проверки целостности TLS сервера:Это может занять несколько минут.
openvpn --genkey --secret ta.key
Теперь скопируйте два новых файла в каталог /etc/openvpn/ :
sudo cp ~/EasyRSA-3.0.5/ta.key /etc/openvpn/
sudo cp ~/EasyRSA-3.0.5/pki/dh.pem /etc/openvpn/
Все необходимые сертификаты и ключевые файлы для вашего сервера сгенерированы.
Генерация сертификата клиента и пары ключей
Мы сгенерируем один клиентский ключ и пару сертификатов. Если у вас несколько клиентов, вы можете повторить этот процесс для каждого из них. Обратите внимание, однако, что уникальное значение имени должно быть передано сценарию для каждого клиента. В этом руководстве первая пара сертификат/ключ называется client1 .
Начните с создания структуры каталогов с помощью команды mkdir внутри домашнего каталога для хранения сертификата клиента и файлов ключей:
mkdir -p ~/client-configs/keys
Поскольку в этом каталоге хранятся сертификаты, ключи и файлы конфигурации клиента, вам необходимо заблокировать разрешения в качестве меры безопасности с помощью команды chmod :
chmod -R 700 ~/client-configs
Затем вернитесь в каталог EasyRSA и запустите скрипт easyrsa с параметрами gen-req и nopass вместе с общим именем для клиента:
cd ~/EasyRSA-3.0.5/
./easyrsa gen-req client1 nopass
Нажмите ENTER , чтобы подтвердить общее имя. Затем скопируйте файл client1.key в созданную ранее директорию /client-configs/keys/ :
cp pki/private/client1.key ~/client-configs/keys/
Затем передайте файл client1.req на сервер ЦС безопасным способом:
scp pki/reqs/client1.req TUO_NOME_UTENTE@IP_SERVER_CA:/tmp
Подключиться к серверу ЦС
Войдите на сервер ЦС , войдите в каталог EasyRSA и импортируйте запрос сертификата:
cd EasyRSA-3.0.5/
./easyrsa import-req /tmp/client1.req client1
Затем подпишите запрос, как вы сделали это для сервера на предыдущем шаге. Однако на этот раз обязательно укажите тип клиентского запроса:
./easyrsa sign-req client client1
В командной строке введите « да », чтобы подтвердить, что вы намерены подписать запрос на сертификат и что он получен из надежного источника:
Вы должны получить выходное сообщение, подобное следующему:
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Это создаст файл сертификата клиента с именем client1.crt . Перенесите этот файл на сервер VPN :
scp pki/issued/client1.crt TUO_NOME_UTENTE@IP_SERVER_VPN:/tmp
Подключиться к VPN-серверу
Снова подключитесь к VPN-серверу и скопируйте клиентский сертификат в каталог /client-configs/keys/ :
cp /tmp/client1.crt ~/client-configs/keys/
Далее также скопируйте файлы ca.crt и ta.key в каталог /client-configs/keys/ :
cp ~/EasyRSA-3.0.5/ta.key ~/client-configs/keys/
sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/
Сертификаты и ключи сервера и клиента были сгенерированы и сохранены в соответствующих каталогах на сервере.
Настройте службу OpenVPN
Теперь, когда и сертификаты, и сертификаты клиента и сервера созданы, вы можете приступить к настройке службы OpenVPN для использования этих учетных данных.
Начните с копирования образца файла конфигурации OpenVPN в каталог конфигурации, а затем извлеките его с помощью команды gzip , чтобы использовать его в качестве основы для вашей конфигурации:
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
Затем найдите раздел о криптографических шифрах, выполнив поиск закомментированных строк шифра. Шифрование AES -256-CBC предлагает хороший уровень шифрования и хорошо поддерживается. Опять же, эта строка уже должна быть раскомментирована, но если это не так, просто удалите ;
ее, поставив перед ней:
cipher AES-256-CBC
Ниже добавьте директиву auth для выбора алгоритма дайджеста сообщения HMAC. Для этого SHA256 — хороший выбор:
auth SHA256
Затем найдите строку, содержащую директиву dh , определяющую параметры Диффи-Хеллмана. Из-за некоторых недавних изменений в EasyRSA имя файла для ключа Диффи-Хеллмана может отличаться от имени, указанного в образце файла конфигурации сервера. При необходимости измените имя файла, указанного здесь, удалив 2048, чтобы оно совпадало с ключом, сгенерированным на предыдущем шаге:
dh dh.pem
Наконец, найдите настройки пользователя и группы и удалите в ;
начале каждого комментария эти строки:
user nobody
group nogroup
Изменения, внесенные в образец файла server.conf до этого момента, необходимы для работы OpenVPN. Изменения, описанные ниже, являются необязательными, хотя они также необходимы для многих распространенных случаев использования.
(Необязательно) Измените DNS, чтобы перенаправить весь трафик через VPN.
Приведенные выше настройки создадут VPN-соединение между двумя машинами, но не заставят любое соединение использовать туннель. Если вы хотите использовать VPN для маршрутизации всего трафика, вы, вероятно, захотите отправить настройки DNS на клиентские компьютеры.
В файле server.conf есть некоторые директивы , которые необходимо изменить, чтобы включить эту функцию. Найдите раздел redirect-gateway и удалите точку с запятой ";" с начала строки redirect-gateway, чтобы раскомментировать ее:
push "redirect-gateway def1 bypass-dhcp"
Чуть ниже найдите раздел dhcp-option . Снова удалите ";" перед обеими строками, чтобы раскомментировать их:
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
Это поможет клиентам перенастроить свои настройки DNS, чтобы использовать VPN-туннель в качестве шлюза по умолчанию.
(Необязательно) Измените порт и протокол
По умолчанию сервер OpenVPN использует порт 1194 и протокол UDP для приема клиентских подключений. Если вам нужно использовать другой порт. Если вы не используете такое программное обеспечение, как Apache, Nginx или подобное, вы также можете использовать популярный порт 443 , поскольку это обычно разрешено правилами брандмауэра.
#opzionale
port 443
Часто протокол ограничен этим портом. Если это так, измените протокол с UDP на TCP:
#opzionale
proto tcp
Если вы передаете протокол TCP, вам нужно будет изменить значение директивы notify-exit-notify с 1 на 0 , так как эта директива используется только UDP. Если этого не сделать при использовании TCP, при запуске службы OpenVPN возникнут ошибки:
#opzionale
explicit-exit-notify 0
Если вам не нужно использовать другой порт и протокол, лучше оставить эти два параметра по умолчанию.
(Необязательно) Укажите учетные данные не по умолчанию
Если ранее вы выбрали другое имя во время выполнения команды ./build-key-server , измените строки сертификата и ключей, которые вы видите, чтобы они указывали на соответствующие файлы .crt и .key . Если вы использовали имя по умолчанию, " сервер ", оно уже задано правильно:
cert server.crt
key server.key
Когда закончите, сохраните и закройте файл.
После того, как вы внесли все необходимые изменения в конфигурацию OpenVPN вашего сервера для вашего конкретного случая использования, вы можете начать вносить некоторые изменения в сеть вашего сервера.
Настроить серверную сеть
Есть некоторые аспекты сетевой конфигурации сервера, которые необходимо изменить, чтобы 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
Вы должны получить выходное сообщение, подобное следующему:
net.ipv4.ip_forward = 1
Некоторые правила брандмауэра необходимо изменить, чтобы включить masquerading — концепцию iptables, которая обеспечивает динамическую динамическую трансляцию адресов «на лету» для правильной маршрутизации клиентских подключений.
Прежде чем открывать файл конфигурации брандмауэра для добавления правил маскировки, вы должны сначала найти общедоступный сетевой интерфейс вашего компьютера. Для этого введите:
ip route | grep default
Ваш публичный интерфейс — это строка в выводе этой команды, следующая за словом « dev ». Например, этот результат показывает интерфейс с именем wlp11s0 , который выделен ниже:
Вы должны получить выходное сообщение, подобное следующему:
default via 203.0.113.1 dev wlp11s0 proto static
Когда у вас есть интерфейс, связанный с вашим маршрутом по умолчанию, откройте файл /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 . Если порт и/или протокол были изменены, замените выбранные здесь значения.
Если вы забыли добавить порт SSH, добавьте его и здесь:
sudo ufw allow 1194/udp
sudo ufw allow OpenSSH
После добавления этих правил отключите и снова включите UFW, чтобы перезапустить его и загрузить изменения из любых файлов, которые вы редактировали:
sudo ufw disable
sudo ufw enable
Теперь ваш сервер настроен для правильной обработки трафика OpenVPN.
Запустите и активируйте службу OpenVPN
Запустите сервер OpenVPN, указав имя файла конфигурации в качестве переменной экземпляра после имени файла диска systemd. Файл конфигурации для вашего сервера называется /etc/openvpn/server.conf , поэтому при вызове добавьте @server в конец файла диска:
sudo systemctl start openvpn@server
Дважды проверьте, успешно ли запущена служба, набрав:
sudo systemctl status openvpn@server
Если все прошло хорошо, результат будет выглядеть так:
● [email protected] - OpenVPN connection to server
Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
Active: active (running) since Tue 2018-01-02 15:30:05 EDT; 47s ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Process: 5852 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid (code=exited, sta
Main PID: 5856 (openvpn)
Tasks: 1 (limit: 512)
CGroup: /system.slice/system-openvpn.slice/[email protected]
└─5856 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid
Вы также можете проверить, доступен ли интерфейс OpenVPN tun0 с помощью команды ip :
ip addr show tun0
Это создаст настроенный интерфейс:
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lft forever
После запуска службы включите ее автоматический запуск при запуске:
sudo systemctl enable openvpn@server
Теперь ваша служба OpenVPN запущена и работает. Однако, прежде чем вы сможете начать его использовать, вы должны сначала создать файл конфигурации для клиентского компьютера. Мы уже рассмотрели, как создавать пары сертификат/ключ для клиентов, и на следующем шаге мы продемонстрируем, как создать инфраструктуру, которая легко генерирует файлы конфигурации клиента.
Создайте инфраструктуру конфигурации клиента
Каждый клиент должен иметь свою собственную конфигурацию, и каждый из них должен соответствовать параметрам, указанным в файле конфигурации сервера. Сначала вам нужно будет создать «базовый» файл конфигурации, а затем создать сценарий, который позволит вам создавать уникальные файлы конфигурации клиента, сертификаты и ключи, если это необходимо.
Начните с создания нового каталога, в котором вы будете сохранять файлы конфигурации клиента внутри созданного ранее каталога конфигурации клиента:
mkdir -p ~/client-configs/files
Затем скопируйте пример файла конфигурации клиента в каталог client-configs , чтобы использовать его в качестве базовой конфигурации:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
Откройте следующий файл:
nano ~/client-configs/base.conf
Внутри найдите удаленную директиву . Это сообщает клиенту адрес сервера OpenVPN — общедоступный IP-адрес сервера OpenVPN. Если вы решили изменить порт, который слушает сервер OpenVPN, вам также потребуется изменить 1194 на выбранном порту:
. . .
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote your_server_ip 1194
. . .
Убедитесь, что протокол соответствует значению, которое вы используете в конфигурации сервера:
proto udp
Затем раскомментируйте директивы пользователя и группы , удалив ;
в начале каждой строки:
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup
Найдите директивы, которые устанавливают ca , cert и key . Закомментируйте эти директивы, так как вы будете добавлять сертификаты и ключи в сам файл:
# SSL/TLS parms.
# See the server config file for more
# description. It's best to use
# a separate .crt/.key file pair
# for each client. A single ca
# file can be used for all clients.
#ca ca.crt
#cert client.crt
#key client.key
Аналогичным образом закомментируйте директиву tls-auth , так как вы будете добавлять ta.key непосредственно в файл конфигурации клиента:
# If a tls-auth key is used on the server
# then every client must also have the key.
#tls-auth ta.key 1
Добавьте или измените параметры шифрования и аутентификации в файле /etc/openvpn/server.conf :
cipher AES-256-CBC
auth SHA256
Затем добавьте директиву key-direction где- нибудь в файле. 1
Для правильной работы VPN на клиентском сервере необходимо установить значение :
key-direction 1
Наконец, добавьте несколько закомментированных строк. Хотя вы можете включать эти директивы в каждый файл конфигурации клиента, их следует включать только для клиентов Linux, которые поставляются с файлом /etc/openvpn/update-resolv-conf . Этот сценарий использует утилиту resolvconf для обновления информации DNS для клиентов Linux.
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
Если ваш клиент работает под управлением Linux и имеет файл /etc/openvpn/update-resolv-conf , раскомментируйте эти строки из файла конфигурации клиента после его создания.
Сохраните и закройте файл.
Далее создайте простой скрипт, который соберет базовую конфигурацию с ее сертификатами, ключами и файлами шифрования, а затем поместит сгенерированную конфигурацию в каталог ~/client-configs/files . Откройте новый файл с именем make_config.sh в каталоге ~/client-configs :
nano ~/client-configs/make_config.sh
Внутри добавьте следующее содержимое:
#!/bin/bash
# First argument: Client identifier
KEY_DIR=~/client-configs/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
cat ${BASE_CONFIG} \
<(echo -e '<ca>') \
${KEY_DIR}/ca.crt \
<(echo -e '</ca>\n<cert>') \
${KEY_DIR}/${1}.crt \
<(echo -e '</cert>\n<key>') \
${KEY_DIR}/${1}.key \
<(echo -e '</key>\n<tls-auth>') \
${KEY_DIR}/ta.key \
<(echo -e '</tls-auth>') \
> ${OUTPUT_DIR}/${1}.ovpn
Сохраните и закройте файл.
Прежде чем продолжить, обязательно пометьте этот файл как исполняемый, набрав:
chmod 700 ~/client-configs/make_config.sh
Этот сценарий создает копию созданного вами файла base.conf , собирает все сертификаты и файлы ключей, которые вы создали для своего клиента, извлекает их содержимое, добавляет их в копию базового файла конфигурации и экспортирует все это содержимое в новый файл конфигурации клиента. Это означает, что вместо того, чтобы управлять конфигурацией клиента, сертификатом и файлами ключей по отдельности, вся необходимая информация хранится в одном месте. Преимущество этого заключается в том, что если вам понадобится добавить клиента в будущем, вы можете просто запустить этот сценарий, чтобы быстро создать файл конфигурации и убедиться, что вся важная информация хранится в одном легкодоступном месте.
Обратите внимание, что каждый раз, когда вы добавляете нового клиента, вам нужно будет генерировать новые ключи и сертификаты.
Генерация клиентских конфигураций
Если вы следовали инструкциям, вы создали сертификат клиента и ключи client1.crt и client1.key соответственно . Вы можете сгенерировать файл конфигурации для этих учетных данных, перейдя в каталог ~/client-configs и запустив скрипт, который вы запустили в конце предыдущего шага:
cd ~/client-configs
sudo ./make_config.sh client1
Это создаст файл с именем client1.ovpn в вашем каталоге ~/client-configs/files :
ls ~/client-configs/files
Вы должны получить следующее выходное сообщение:
client1.ovpn
Вам необходимо перенести этот файл на устройство, которое вы собираетесь использовать в качестве клиента. Например, это может быть ваш локальный компьютер или мобильное устройство.
Конкретные приложения, используемые для выполнения этой передачи, будут зависеть от операционной системы устройства и личных предпочтений. Надежным и безопасным методом является использование SFTP (протокол передачи файлов SSH) или SCP (безопасное копирование) на серверной части. Это позволит передавать файлы аутентификации VPN клиента по зашифрованному соединению.
Вот пример команды SFTP, использующей пример client1.ovpn , который вы можете запустить со своего локального компьютера (macOS или Linux). Поместите файл .ovpn в свой домашний каталог:
sftp TUO_NOME_UTENTE@IP_SERVER_VPN:client-configs/files/client1.ovpn ~/
Установка и настройка клиента
В этом разделе объясняется, как установить клиентский профиль VPN в Windows, macOS, Linux.
Соединение OpenVPN будет иметь то же имя, что и имя файла .ovpn . Что касается этого руководства, это означает, что соединение называется client1.ovpn и соответствует первому сгенерированному файлу клиента.
Установка для Windows
Загрузите клиентское приложение OpenVPN для Windows со страницы загрузки OpenVPN . Выберите соответствующую версию установки для вашей версии Windows.
Примечание: OpenVPN требует прав администратора.
После установки OpenVPN скопируйте файл .ovpn в:
C:\Program Files\OpenVPN\config
Когда вы запускаете OpenVPN, он автоматически увидит профиль и сделает его доступным.
Вы должны запускать OpenVPN от имени администратора каждый раз, когда он используется, даже из административной учетной записи. Чтобы сделать это без необходимости щелкать правой кнопкой мыши и выбирать « Запуск от имени администратора» каждый раз, когда вы используете VPN, вам необходимо предварительно настроить это из учетной записи администратора. Это также означает, что обычным пользователям потребуется ввести пароль администратора для использования OpenVPN. С другой стороны, обычные пользователи не могут правильно подключиться к серверу, если приложение OpenVPN на клиенте не имеет прав администратора, поэтому требуются повышенные привилегии.
Чтобы приложение OpenVPN всегда запускалось от имени администратора, щелкните правой кнопкой мыши значок ярлыка и перейдите в « Свойства » . В нижней части вкладки « Совместимость » нажмите кнопку, чтобы изменить настройки для всех пользователей. В новом окне выберите Запустить эту программу от имени администратора.
Всякий раз, когда вы запускаете графический интерфейс OpenVPN, Windows спросит, хотите ли вы разрешить программе вносить изменения в ваш компьютер. Щелкните Да . Запуск клиентского приложения OpenVPN помещает апплет только в системный трей, чтобы вы могли подключаться и отключаться от VPN по мере необходимости; на самом деле он не устанавливает соединение vpn.
После запуска OpenVPN инициируйте соединение, перейдя в апплет на панели задач и щелкнув правой кнопкой мыши значок апплета OpenVPN . Это открывает контекстное меню. Выберите client1 в верхней части меню (это ваш профиль client1.ovpn ) и выберите Подключиться .
Откроется окно состояния, показывающее выходные данные журнала, когда соединение будет установлено, и сообщение будет отображаться после подключения клиента.
Отключитесь от VPN таким же образом: перейдите в апплет на панели задач, щелкните правой кнопкой мыши значок апплета OpenVPN , выберите профиль клиента и нажмите « Отключить » .
Установка для macOS
Tunnelblick — это бесплатный клиент OpenVPN с открытым исходным кодом для macOS. Вы можете загрузить последний образ диска со страницы загрузок Tunnelblick . Дважды щелкните загруженный файл .dmg и следуйте инструкциям по установке.
Ближе к концу процесса установки Tunnelblick спросит, есть ли у вас файл конфигурации. Выберите файл конфигурации и дайте Tunnelblick закончить. Откройте окно Finder и дважды щелкните client1.ovpn . Tunnelblick установит профиль клиента. Требуются административные привилегии .
Запустите Tunnelblick, дважды щелкнув значок Tunnelblick в папке «Приложения». После запуска Tunnelblick в строке меню в правом верхнем углу экрана появится значок Tunnelblick для проверки подключений. Щелкните значок, а затем пункт меню Подключить клиент1 , чтобы запустить VPN-подключение.
Установка для Linux
Если вы используете Linux, существует множество инструментов, которые вы можете использовать в зависимости от вашего дистрибутива. Среда рабочего стола или оконный менеджер также могут включать в себя утилиты подключения.
Однако наиболее универсальным способом подключения является простое использование программного обеспечения OpenVPN .
В Ubuntu или Debian вы можете установить его так же, как и на сервере, набрав:
sudo apt update
sudo apt install openvpn
В CentOS вы можете включить репозитории EPEL , а затем установить их, набрав:
sudo yum install epel-release
sudo yum install openvpn
Проверьте, есть ли в вашем дистрибутиве скрипт /etc/openvpn/update-resolv-conf :
ls /etc/openvpn
Вы должны получить следующее выходное сообщение:
update-resolv-conf
Затем отредактируйте переданный файл конфигурации клиента OpenVPN:
nano client1.ovpn
Если вам удалось найти файл update-resolv-conf , раскомментируйте три добавленные строки для корректировки настроек DNS:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Если вы используете CentOS, измените директиву группы с nogroup на Nobody , чтобы она соответствовала доступным группам дистрибутива:
group nobody
Сохраните и закройте файл.
Теперь вы можете подключиться к VPN, просто указав команду openvpn в файле конфигурации клиента:
sudo openvpn --config client1.ovpn
Это должно подключить вас к вашему VPN.
Отзыв клиентских сертификатов
Иногда сертификат клиента может потребоваться отозвать, чтобы предотвратить дальнейший доступ к VPN-серверу.
Для этого перейдите в каталог EasyRSA на сервере ЦС:
cd EasyRSA-3.0.5/
Затем запустите скрипт easyrsa с опцией отзыва , за которой следует имя клиента, которого вы хотите отозвать:
./easyrsa revoke client2
Это попросит вас подтвердить отзыв, введя yes .
Вы должны получить следующее выходное сообщение:
Please confirm you wish to revoke the certificate with the following subject:
subject=
commonName = client2
Type the word 'yes' to continue, or any other input to abort.
Continue with revocation: yes
После подтверждения действия ЦС полностью аннулирует сертификат клиента. Однако ваш сервер OpenVPN в настоящее время не имеет возможности проверить, были ли отозваны клиентские сертификаты, и клиент по-прежнему будет иметь доступ к VPN. Чтобы исправить это, создайте список отзыва сертификатов (CRL) на сервере ЦС:
./easyrsa gen-crl
Это создаст файл с именем crl.pem. Безопасно перенесите этот файл на ваш сервер OpenVPN:
scp ~/EasyRSA-3.0.5/pki/crl.pem TUO_NOME_UTENTE@IP_SERVER_VPN:/tmp
На вашем сервере OpenVPN скопируйте этот файл в каталог /etc/openvpn/ :
sudo cp /tmp/crl.pem /etc/openvpn
Затем откройте файл конфигурации сервера OpenVPN:
sudo nano /etc/openvpn/server.conf
Внизу файла добавьте параметр crl-verify , который даст указание серверу OpenVPN проверять созданный нами список отзыва сертификатов каждый раз при попытке подключения:
crl-verify crl.pem
Сохраните и закройте файл.
Наконец, перезапустите OpenVPN, чтобы реализовать отзыв сертификата:
sudo systemctl restart openvpn@server
Клиент больше не сможет подключаться к серверу, используя старые учетные данные.
Вывод
Установка и настройка OpenVPN на Ubuntu 18.04 LTS завершена.