Как стать автором
Обновить
71.23
Слёрм
Учебный центр для тех, кто работает в IT

Как настроить OpenVPN на Debian 11. Часть 2

Время на прочтение10 мин
Количество просмотров8.6K
Автор оригинала: Mark Drake, Justin Ellingwood, and Kent Shultz

Когда вы настраиваете удалённый доступ, важно не только предоставить всем сотрудникам подключение к нужным сервисам, но и позаботиться о безопасности. В этом помогает VPN — виртуальная частная сеть. 

В первой части мы запустили OpenVPN на Debian 11. Однако, прежде чем начать его использовать, нужно создать файл конфигурации для клиентской машины. Во второй части разберём, как создать инфраструктуру, которая будет генерировать файлы конфигурации клиента. А также отдельно рассмотрим, как установить клиентский VPN-профиль на Windows, macOS, Linux, iOS и Android.

Шаг 1: создание инфраструктуры конфигурации клиента

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

Начнём с создания нового каталога на сервере OpenVPN, где будем хранить конфигурационные файлы клиента в каталоге client-configs, который создали ранее:

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

Внутри найдём директиву remote. Она указывает клиенту общедоступный IP-адрес вашего OpenVPN. Если вы решите изменить порт, который прослушивает сервер OpenVPN, нужно будет изменить 1194 на выбранный порт:

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

Затем раскомментируем директивы user  и group , удалив «;» в начале каждой строки:

Найдём директивы, которые задают файлы ca, cert и key  Закомментируем эти директивы:

Аналогичным образом закомментируем директиву tls-auth:

Зеркально повторим настройки cipher  и auth, которые мы установили в файле /etc/openvpn/server.conf:

Затем добавим директивы key-direction  в файл. Нужно установить значение «1», чтобы VPN правильно функционировал на клиентском компьютере:

Наконец, добавим несколько закомментированных строк. Хотя мы можем включить эти директивы в каждый конфигурационный файл клиента, нужно включить их только для клиентов Linux, которые поставляются с файлом /etc/openvpn/update-resolv-conf. Скрипт использует утилиту resolvconf для обновления информации DNS для клиентов Linux.

Если клиент работает под управлением Linux и имеет файл /etc/openvpn/update-resolv-conf, раскомментируем эти строки после создания конфигурационного файла. Сохраним изменения. Затем введём простой скрипт, который создаст новый конфигурационный файл, содержащий наш сертификат, ключ, файлы шифрования и базовую конфигурацию в каталоге the ~/client-configs/files. Откроем новый файл make_config.sh в каталоге ~/client-configs:

nano ~/client-configs/make_config.sh

Внутрь добавим следующее содержимое, убедившись, что изменили sammy на учётную запись пользователя без прав root на нашем сервере:

#!/bin/bash

# First argument: Client identifier

KEY_DIR=/home/sammy/client-configs/keys
OUTPUT_DIR=/home/sammy/client-configs/files
BASE_CONFIG=/home/sammy/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, соберёт все файлы сертификатов и ключей, которые мы делали для клиента, извлечёт их содержимое, добавит к копии файла базовой конфигурации и экспортирует всё содержимое в новый конфигурационный файл клиента. Вся необходимая информация будет храниться в одном месте. Плюс этого в том, что если нам когда-нибудь понадобится добавить клиента, мы сможем просто запустить скрипт и быстро создать конфигурационный файл, содержащий всю информацию в одном легко распространяемом файле.

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

Шаг 2: создание клиентских конфигураций

В первой части мы создали сертификат клиента и ключ с именами client1.crt и client1.key. Теперь сгенерируем конфигурационный файл для этих учётных данных, перейдя в каталог ~/client-configs и запустив скрипт, созданный в конце предыдущего шага:

cd ~/client-configs
sudo ./make_config.sh client1

Это создаст файл с именем client1.ovpn  в каталоге ~/client-configs/files:

ls ~/client-configs/files

Нужно перенести этот файл на устройство, которое вы планируете использовать в качестве клиента. Это может быть локальный компьютер или мобильное устройство.

Хотя выбор приложения для выполнения этой передачи зависит от операционной системы и личных предпочтений, наиболее надёжными и безопасными методами считаются SFTP (SSH file transferprotocol) и SCP (Secure Copy) на серверной части. Они позволяют передавать файлы аутентификации VPN клиента по зашифрованному соединению.

Пример SFTP-команды, которую вы можете запустить с локального компьютера (macOS или Linux):

sftp sammy@your_server_ip:client-configs/files/client1.ovpn ~/

Инструменты и руководства по безопасной передаче файлов с сервера на локальный компьютер:

Шаг 3: установка конфигурации клиента

На этом шаге разберём, как установить клиентский VPN-профиль на Windows, macOS, Linux, iOS и Android. Инструкции не зависят друг от друга, поэтому можете смело переходить к той, которая применима к вашему устройству.

Windows

Установка

Загрузим клиентское приложение OpenVPN для Windows со страницы OpenVPN’s Downloads. Выберем соответствующую версию установщика для вашей версии Windows.

Примечание: для установки OpenVPN требуются права администратора.

После установки OpenVPN скопируем файл .ovpn в:

Возможно, перенести файл в это расположение, не удастся если вы не используете программу передачи файлов (например, WinSCP) от имени администратора. Можно либо запустить его от имени администратора, либо перенести в домашний каталог пользователя, не являющегося администратором, а затем скопировать в :\Program Files\OpenVPN\config локально.

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

Мы должны запускать OpenVPN от имени администратора даже с административными учётными записями. Для этого выбираем Run as administrator каждый раз, когда используем VPN. Это значит, что обычным пользователям нужно будет ввести пароль администратора, чтобы использовать OpenVPN. Однако обычные пользователи не могут должным образом подключиться к серверу, если приложение OpenVPN на клиенте не имеет прав администратора — нужны повышенные привилегии.

Чтобы настроить приложение OpenVPN на запуск от имени администратора, щёлкнем правой кнопкой мыши на его ярлык и перейдём в Properties. В нижней части вкладки Compatibility нажмёмкнопку Change settings for all users. В новом окне установим флажок Run this program as an administrator и нажмём Apply.

Подключение

Каждый раз при запуске графического интерфейса OpenVPN Windows будет спрашивать, хотим ли мы разрешить программе вносить изменения в компьютер. Нажмём Yes. Запуск клиентского приложения OpenVPN только помещает апплет в системный трей, чтобы вы могли подключать и отключать VPN по мере необходимости. Но это не создаёт VPN-соединение.

Как только OpenVPN запущен, инициируем подключение. Для этого зайдём в апплет в системном трее и щёлкнем правой кнопкой мыши на значок апплета OpenVPN. Это откроет контекстное меню. Выберем client1 в верхней части меню (это наш профиль client1.ovpn) и нажмём Connect.

При установлении соединения откроется окно состояния с выводом логов, а после подключения клиента появится сообщение.

Отключиться от VPN можно тем же способом: перейти в апплет в системном трее, щелкнуть правой кнопкой мыши на значок апплета OpenVPN, выбрать профиль клиента и нажать Disconnect.

macOS

Установка

Tunnelblick — бесплатный OpenVPN-клиент с открытым исходным кодом для macOS. Загрузим последний образ диска со страницы Tunnelblick Downloads. Далее нужно дважды щёлкнуть на загруженный файл .dmg и следовать инструкциям для установки.

Ближе к концу установки Tunnelblick спросит, есть ли у вас какие-либо конфигурационные файлы. Ответ: I have configuration files. После Tunnelblick должен завершить работу. Откроем окно Finder идважды щёлкнем client1.ovpn. Tunnelblick установит профиль клиента. 

Подключение

Запустим Tunnelblick, дважды щёлкнув значок Tunnelblick в папке Applications. Как только Tunnelblick будет запущен, в строке меню в правом верхнем углу экрана появится значок Tunnelblick для управления подключениями. Нажмём на значок, а затем на Connect client1, чтобы инициировать VPN-соединение.

Linux

Установка

Если вы используете Linux, выбор инструмента зависит от вашего дистрибутива. Однако самый универсальный способ подключения — просто использовать программное обеспечение OpenVPN.

В 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

Затем отредактируем конфигурационный файл клиента OpenVPN:

nano client1.ovpn

Если вам удалось найти файл update-resolv-conf, раскомментируйте три добавленные строки, чтобы изменить настройки DNS:

Если используете CentOS, измените директиву group  с nogroup на nobody , чтобы она соответствовала доступным группам дистрибутива:

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

Теперь можем подключиться к VPN, просто указав команду openvpn в конфигурационном файле клиента:

sudo openvpn --config client1.ovpn

Это должно подключить нас к VPN.

iOS

Установка

В App Store найдём и установим OpenVPN Connect. Затем, следуя подсказкам из этой статьи Apple, перенесём файл client1.ovpn  с локального компьютера на устройство iOS.

Теперь запустим приложение OpenVPN на iOS. Он должен увидеть, что есть новый профиль, готовый к импорту. Нажмите ADD, чтобы добавить его.

Подключение

OpenVPN готов к использованию с новым профилем. Начнём подключение, нажав CONNECT. Когда сделаем это, iOS сообщит, что OpenVPN хочет добавить конфигурации VPN через настройки системы. Нажмём Allow и подтвердим изменения, используя FaceID или TouchID.

 

Android

Установка

Откроем Google Play Store. Найдём и установим Android OpenVPN Connect — официальное клиентское приложение Android OpenVPN.

Мы можем перенести профиль .ovpn, подключив устройство Android к компьютеру через USB и скопировав файл. В качестве альтернативы, если есть устройство чтения SD-карт, можно извлечь SD-карту устройства, скопировать на неё профиль, а затем вставить карту обратно в устройство Android.

Подключение

Когда запускаем приложение OpenVPN, первым открывается экран Import Profile. Нажмём на вкладку FILE, а затем BROWSE, чтобы найти и выбрать файл client1.ovpn.

Когда выберем файл, приложение предложит импортировать профиль. Нажмём ОК.

На экране Imported Profile установим флажок Connect after import, а затем нажмём ADD в правом верхнем углу.

Нас спросят, доверяем ли мы приложению OpenVPN. Выберем OK, чтобы инициировать подключение. Чтобы отключиться от VPN, нужно переключить переключатель на странице профиля.

Шаг 4: тестирование VPN-соединения 

Примечание: этот метод будет работать только в том случае, если вы решили отправлять изменения DNS для перенаправления трафика через VPN (описывается на шаге 4 в первой части.

Не включая VPN, откроем браузер и перейдём в DNSLeakTest

Сайт вернёт IP-адрес, назначенный интернет-провайдером. Чтобы проверить настройки DNS через тот же веб-сайт, нажмите на Extended Test (расширенный тест) — он сообщит, какие DNS-серверы вы используете.

Теперь подключим клиент OpenVPN к серверу OpenVPN и обновим браузер. Должен появиться совершенно другой IP-адрес (вашего VPN-сервера) — именно так вы предстаёте перед миром. Extended Test DNSLeakTest’s проверит настройки DNS и подтвердит, что теперь вы используете DNS-преобразователи, предоставляемые вашей VPN.

Шаг 5: отзыв клиентских сертификатов

Иногда может понадобиться отозвать сертификат клиента, чтобы предотвратить дальнейший доступ к серверу OpenVPN. Чтобы сделать это, перейдём в каталог ~/easy-rsa  на CA машине:

cd ~/easy-rsa

Затем запустим скрипт easyrsa с опцией revoke, за которой следует имя клиента, которое нужно отозвать:

./easyrsa revoke client2

Будет предложено подтвердить действие. Нажмём yes:

Если закрытый ключ CA защищён парольной фразой, введём её при появлении запроса.

После подтверждения действия CA полностью аннулирует сертификат клиента. Однако в настоящее время на сервере OpenVPN нет возможности проверить, были ли отозваны сертификаты каких-либо клиентов, и клиент по-прежнему будет иметь доступ к VPN. Чтобы исправить это, создадим список отозванных сертификатов (CRL) на машине CA:

./easyrsa gen-crl

Это сгенерирует файл с именем crl.pem. Перенесём его на сервер OpenVPN:

scp ~/easy-rsa/pki/crl.pem sammy@your_server_ip:/tmp

На сервере OpenVPN скопируем этот файл в каталог /etc/openvpn/:

sudo cp /tmp/crl.pem /etc/openvpn

Далее откройте конфигурационный файл сервера OpenVPN:

sudo nano /etc/openvpn/server.conf

В нижней части файла добавим опцию crl-verify, которая даст указание серверу OpenVPN проверять список отозванных сертификатов при каждой попытке подключения:

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

Наконец, перезапустим OpenVPN, чтобы реализовать отзыв сертификата:

sudo systemctl restart openvpn@server

Клиент больше не имеет возможности подключаться к серверу, используя старые учётные данные.

Чтобы отозвать дополнительных клиентов:

  • отменим сертификат с помощью команды ./easyrsa revoke client_name;

  • создадим новый CRL

  • перенесём новый файл crl.pem на сервер OpenVPN и скопируем его в каталог etc/openvpn, чтобы перезаписать старый список;

  • перезапустим сервис OpenVPN.

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

Заключение

Теперь удалённые члены вашей команды могут безопасно подключаться к внутренним ресурсам, как если бы они напрямую использовали частную сеть. А вы — можете рассмотреть возможность переноса данных, в настоящее время доступных в открытом интернете и защищённых чем-то менее надежным (например, базовой аутентификацией HTTP), в частную сеть и за VPN. Так, всего один сервер и программное обеспечение с открытым исходным кодом помогают сделать большой шаг к защите инфраструктуры.

Умения приобретаются на практике

Курс «Aдминистрирование Linux Mega» системного инженера Платона Платонова поможет разобраться не только во всех «фишках» контроля прав, но повысить владение Linux до уровня «бог» за 5 недель. Это самая хардовая и самая «прикладная» программа в духе Слерм + Southbridge: 12 часов теории, 48 часов практики на стендах, 9 масштабных тем и несчитанное количество реальных кейсов. 

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

Принять вызов ⬅️

Теги:
Хабы:
Всего голосов 11: ↑8 и ↓3+5
Комментарии7

Публикации

Информация

Сайт
slurm.io
Дата регистрации
Дата основания
Численность
51–100 человек
Местоположение
Россия
Представитель
Антон Скобин