Настройка openvpn linux клиента: Вы заблудились на сайте компьютерного мастера
OpenVPN: Клиент — Установка & Настройка — Linux
В этой статье я показываю, как установить клиент OpenVPN в RPM/DEB-based Linux дистрибутивах и настроить его на подключение к OpenVPN-серверу.
В частности, я покажу пример конфигурационного файла OpenVPN-клиента, который я использую для подключения к OpenVPN-серверу с аутентификацией по сертификатами и логину/паролю, как создать systemd
-сервис для OpenVPN-клиента и как настроить его автозагрузку.
Установка Клиента OpenVPN
Используйте одну из приведенных ниже команд, в зависимости от вашего дистрибутива Linux, для установки OpenVPN.
Fedora/CentOS/RedHat:
$ sudo yum install openvpn
Ubuntu/Debian/Raspbian:
$ sudo apt install openvpn
Настройка Клиента OpenVPN
Создайте конфигурационный файл OpenVPN-клиента и сохраните его в директории /etc/openvpn/client/
.
Примеры Конфигов OpenVPN: В зависимости от вашего дистрибутива Linux, если вы установили OpenVPN из RPM или DEB пакета, то папку с примерами конфигов (sample-config-files
) можно найти в /usr/share/doc/packages/openvpn
(Fedora/CentOS/RedHat) или /usr/share/doc/openvpn
(Ubuntu/Debian/Raspbian).
Пример конфига OpenVPN-клиента:
$ cat /etc/openvpn/client/connect-sample.conf client tls-client ca /etc/openvpn/keys/connect-sample-ca.crt cert /etc/openvpn/keys/connect-sample.crt key /etc/openvpn/keys/connect-sample.key auth-user-pass /etc/openvpn/keys/connect-sample-creds.conf dev tun proto tcp-client remote <openvpn-server-fqdn> <port> resolv-retry infinite nobind persist-key persist-tun cipher AES-256-CBC auth SHA1 verb 4 redirect-gateway autolocal # Redirect all the traffic into the tunnel
В вышеприведенном примере мой OpenVPN-клиент настроен на подключение к OpenVPN-серверу с аутентификаций по сертификатам и username/password.
Создайте папку для сертификатов и файла с учетными данными:
$ sudo mkdir /etc/openvpn/keys
Сохраните username/password в /etc/openvpn/keys/connect-sample-creds.conf
:
$ cat /etc/openvpn/keys/connect-sample-creds.conf <username> <password>
Поместите сертификаты в папку /etc/openvpn/keys/
и установите более строгие права:
$ sudo chmod 0600 /etc/openvpn/keys/* $ sudo ls -al /etc/openvpn/keys/ total 16 -rw------- 1 pi pi 1224 Apr 18 20:49 connect-sample-ca.crt -rw------- 1 pi pi 24 Apr 18 21:55 connect-sample-creds.conf -rw------- 1 pi pi 1237 Apr 18 20:49 connect-sample.crt -rw------- 1 pi pi 1704 Apr 18 20:50 connect-sample.key
Запустите сервис OpenVPN-клиента:
$ sudo systemctl start openvpn-client@connect-sample
Для настройки автоматического запуска OpenVPN-клиента, выполните:
$ sudo systemctl enable openvpn-client@connect-sample
Устранение Неполадок при Подключении
Узнать публичный IP-адрес:
$ curl ifconfig.co
Проверить статус сервиса OpenVPN-клиента:
$ systemctl status openvpn-client@connect-sample
Проверить логи:
$ journalctl -u openvpn-client@connect-sample
OpenVPN-сервер c интернет-туннелированием на Ubuntu 12/Debian 7
OpenVPN — открытая реализация технологии виртуальных частных сетей (VPN — Virtual Private Network), предназначенной для создания защищенных виртуальных локальных сетей между группой территориально удаленных клиентов поверх публичного канала передачи данных (интернет). Этот инструмент отлично подходит для таких задач, как безопасное сетевое подключение извне к серверу без предоставления публичного интернет-доступа к нему. Безопасность соединения достигается за счет шифрования канала с помощью OpenSSL.
Содержание:
Как это работает?
После завершения настройки OpenVPN сервер сможет принимать и перенаправлять внешние защищенные SSL сетевые подключения к созданному при запуске VPN-сервиса виртуальному сетевому удаптеру (tun/tap), не затрагивая правила обработки трафика других интерфейсов (внешний интернет-адаптер и др.) Благодаря этой технологии вы можете обеспечить себе доступ к удаленному серверу и находящейся в его локальной сети группе устройств даже в том случае, если основной интернет-адаптер этого сервера не принимает входящие подключения из публичных сетей и/или не осуществляет их маршрутизацию до необходимых машин, находящихся в его LAN-сети.
При необходимости вы также можете настроить маршрутизацию интернет-трафика OpenVPN-клиентов через VPN-сервер (необходимые для этого действия описаны в данной инструкции). При такой переадресации обрабатывающий VPN-подключения хост будет выполнять и функцию прокси-сервера (Proxy) — унифицировать правила сетевой активности пользователей и осуществлять туннелирование клиентского интернет-трафика от своего имени.
Требования к системе
Прежде чем приступить к установке OpenVPN, убедитесь что на вашем сервере корректно настроены необходимые базовые параметры, приведенные ниже. (если вы используете виртуальный сервер 1cloud.ru, эти три пункта уже выполнены и их можно пропустить):
- Сервер имеет хотя бы один статичный внешний IP-адрес (в качестве альтернативы вы можете воспользоваться DynamicDNS-сервисами, автоматически обновляющими информацию о текущем IP-адресе устройства, например, DynDNS)
- Разрешена загрузка пакетов ПО из официальных репозиториев. Чтобы проверить это, откройте на сервере файл /etc/apt/sources.list и убедитесь в том, что сетевые адреса вида «deb http://…» присутствуют и не закомментированы (отсутствует # в начале строки с url репозитория). Так, например, выглядит добавленное в sources.list американское зеркало репозиториев Ubuntu Precise:
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://us.archive.ubuntu.com/ubuntu/ precise main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ precise main restricted - Верно указаны сетевые параметры:hostname, ip-адрес (адреса) вашего сервера и его параметры DNS (последний параметр потребуется для маршрутизации интернет-трафика клиентов). Найти перечисленные сетевые настройки можно в файле /etc/hosts.
Для обеспечения приемлемого уровня безопасности машины рекомендуем также предварительно ознакомиться с содержанием нашей вводной статьи по конфигурации инструментов безопасности Linux.
Установка OpenVPN на сервер
Чтобы установить пакет openvpn на сервер, необходимо последовательно выполнить приведенные ниже команды:
- Обновить репозитории пакетов:
apt-get update
- Загрузить доступные обновления для установленных программ:
apt-get upgrade
- Установить пакет openvpn:
apt-get install openvpn
- OpenVPN включает в себя набор средств шифрования easy-rsa. Для нормальной работы демона скрипты easy-rsa следует разместить в директории /etc/openvpn:
cd /etc/openvpn/ && make-cadir easy-rsa
Подготовка публичных ключей (PKI — Public Key Infrastructure)
На данном этапе нужно сгенерировать и подписать пары пользовательских и серверных ключей. Для заверения созданных пар мы будем использовать центр сертификации (CA — Certificate Authority), находящийся на самом VPN -сервере. Итак, создадим CA:
- Перейти в папку /etc/openvpn/easy-rsa:
cd /etc/openvpn/easy-rsa
- Создать символьную ссылку openssl-1.0.0.cnf -> openssl.cnf:
ln -s openssl-1.0.0.cnf openssl.cnf
- Инициализировать скрипт vars:
source ./vars
- В ответ вы получите следующее уведомление: NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
- Запустить скрипт clean-all:
./clean-all
- Выполнить скрипт build-ca для создания центра сертификации. В ответ на появляющиеся запросы введите необходимую информацию (латинскими символами). Если вы не укажите собственные значения для каких-то из требуемых полей, будет использовано значение по-умолчанию [представленное в квадратных скобках]:
./build-ca
- Теперь можно перейти к генерации пары публичного сертификата/секретного ключа VPN-сервера.
Генерация ключа/сертификата сервера
- Сгенерируйте ключ:
./build-key-server server
Заполните информацию по аналогии с build-ca. Поля «Company Name» и «Challenge Password» могут быть оставлены пустыми. - После успешной генерации ключа появится запрос на его подписание центром сертификации. Введите yes для подтверждения.
Генерация клиентских ключей
- Создайте пару ключей для пользователя:
./build-key client1
Примечание: созданный файл ключа client1.key по умолчаню незашифрован. Это позволяет любому пользователю, имеющему доступ к этому файлу, подключиться к вашей виртуальной частной сети. Для устранения этой особенности вы можете использовать команду ./build-key-pass client1 вместо ./build-key client1 . В этом случае ключ будет зашифрован выбранным вами паролем. - Повторите процедуру генерации для каждого из будущих клиентов VPN, заменив client1 на желаемое имя. Внимание: имена ключей должны быть уникальными.
Вы можете сгенерировать клиентские ключи и позднее. Для этого потребуется повторно инициализировать скрипт vars (команда source ./vars), а затем запустить процедуру генерации необходимого ключа.
Установка параметров протокола Диффи-Хеллмана
Параметры протокола Диффи-Хеллмана определяют метод обмена данными между сервером и клиентами OpenVPN. Создав файл .pem, мы укажем параметры, в соответствии с которыми сервер будет инициировать защищенные соединения с пользователями.
Сгенерировать .pem файл следует с помощью команды: ./build-dh
В ответ будет отображен набор случайных символов, говорящий о том, что идет процесс генерации. После завершения процедуры в директории etc/openvpn/easy-rsa/keys появится файл dh2024.pem.
Перемещение ключей и сертификатов
После генерации ключей необходимо перенести их в директории, используемые серверным/клиентскими приложениями OpenVPN.
На сервере:
- Перейдите в директорию, в которой хранятся созданные ключи:
cd /etc/openvpn/easy-rsa/keys
- Скопируйте сертификат и ключ центра сертификации (CA), файл параметров DH, ключ и сертификат vpn-сервера в каталог /etc/openvpn:
cp ca.crt ca.key dh2024.pem server.crt server.key /etc/openvpn
ВАЖНО: Перечисленные выше файлы — основа работоспособности и безопасности VPN. Их компрометация может иметь неблагоприятные последствия. Храните их в надежном хранилище и не передавайте эти файлы по небезопасным каналам.
На клиентском устройстве:
Скопируйте файлы ca.crt, client1.crt, client1.key в используемую приложением OpenVPN папку клиентского устройства (например, для Linux это /etc/openvpn)
Конфигурация сервера и клиента OpenVPN
В этом разделе инструкции мы создадим два файла конфигурации. Первый — файл настроек для OpenVPN-сервера, второй — параметры vpn-подключения для клиентского устройства. Для каждого клиента OpenVPN необходимо использовать свой собственный файл конфигурации (исключение — подключение нескольких пользователей с использованием одной общей для всех пары ключей).
Настройки сервера:
- В качестве отправной точки в настройке вы можете использовать образец файла конфигурации OpenVPN-сервера, содержащий список доступных параметров работы программы и подробные пояснения этих параметров. Скопируйте этот документ в директорию /etc/openvpn/ для его редактирования и последующего запуска сервера VPN:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz >/etc/openvpn/server.conf
- Скопированный на предыдущем этапе файл server.conf является вполне работоспособной конфигурацией. Ее достаточно для нормальной работы сервера, если вам не требуется туннелирование всего клиентского интернет-трафика через VPN-сервер или другие специфические опции.
Единственное, на что обязательно нужно обратить внимание — имена и пути файлов сертификата сервера (.crt) и его ключа (.key), а также сертификата CA (.crt).
Имена ключей, находящихся в директории /etc/openvpn должны полностью совпадать с именами ключей в конфиге server.conf. Проверить это можно с помощью следующих команд:- Узнаем имена файлов ключей (два файла .crt и один .key) в папке /etc/openvpn с помощью команды:
ls /etc/openvpn
- Проверяем, соответствуют ли отобразившимся выше названиям файлов имена ключей в файле /etc/openvpn/server.conf (после блока # SSL/TLS root certificate (ca), certificate (cert), and private key (key)):
nano /etc/server.conf
В случае, если имена отличаются, внесите соответствующие корректировки в файл конфига (не в имена файлов в папке openvpn) и сохраните его (CTRL+X). - Перезапускаем OpenVPN для применения изменений:
/etc/init.d/openvpn restart
- Узнаем имена файлов ключей (два файла .crt и один .key) в папке /etc/openvpn с помощью команды:
Настройки клиента:
- Копируем образец файла конфигурации клиента в любую удобную директорию (в нашем случае домашнюю директорию пользователя (home), от имени которого выполняем команды:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/client.conf.gz >/home/1cloud
- Переходим в папку keys и копируем необходимые файлы ключей (в нашем случае: client1.key, client1.crt, ca.crt) в эту же директорию (/home/1cloud):
cd /etc/openvpn/easy-rsa/keys
>cp client1.key client1.crt ca.crt /home/1cloud
- Открываем конфиг клиента:
nano /home/1cloud/client.conf
- Находим блок # The hostname/IP and port of the server и вместо example.com указываем IP адрес OpenVPN-сервера:
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote example.com 1194 - В этом же файле находим блок #SSL/TLS parms. и проверяем названия файлов ключей пользователя (аналогично тому, как делали это в конфиге сервера):
# SSL/TLS parms.
# See the server config file for more
# description. Its 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 client1.crt
key client1.key - Сохраняем файл конфигурации клиента (CTRL+X).
- Теперь необходимо перенести пользовательские файлы client.conf, client1.key, client1.crt, ca.crt на клиентское устройство, с которого вы будете подключаться к VPN-серверу. Сделать это можно через FTP, SCP или просто создав на пользовательском устройстве (через nano на Linux, через блокнот на Windows) файлы с идентичными именами и полностью скопировать в них содержимое исходных документов с удаленного сервера.
Внимание! Некоторые клиентские приложения OpenVPN (например на Andoid и IOS) работают с расширением файла конфигурации .ovpn, а не .conf. Если вы столкнетесь с этой проблемой — просто переименуйте файл настроек клиента соответствующим образом.
Размещаем перенесенные файлы в папке, с которой работает используемое вами приложение OpenVPN (см. документацию к программе). - Подключаемся к серверу. После успешного подключения на клиентском устройстве активируется виртуальный сетевой адаптер. Проверить это на Linux можно с помощью команды ifconfig (должен отображаться адаптер TUN), на ОС с графическим интерсейсом проверить корректность подключения можно непосредственно в программе подключения к VPN.
Внимание! Так как мы еще не настроили туннелировние всего интернет-трафика через VPN-сервер, доступ в интернет на клиентском устройстве после подключения его к виртуальной частной сети перестанет функионировать. Инструкция по маршрутизации интернет-трафика пользователей через VPN сервер представлена ниже.Б.
Туннелирование всего трафика клиентов виртуальной частной сети через VPN-сервер
В данной конфигурации мы настроим маршрутизацию всего трафика пользователей VPN через OpenVPN-сервер с сохранением SSL-шифрования от клиента до сервера.
- На сервере откройте файл конфигурации OpenVPN server.conf:
nano /etc/openvpn/server.conf
- Расскоментируйте представленную ниже строку конфига (удалите символ ; в начале строки):
push "redirect-gateway def1 bypass-dhcp"
- Сохраните и закройте файл (CTRL+X)
- Откройте файл /etc/sysctl.conf:
nano /etc/sysctl.conf
- Расскоментируйте или добавьте представленную ниже строку в открытом файле, чтобы убедиться, что переадресация IPv4-трафика разрешена:
net.ipv4.ip_forward=1
- Сохраните и закройте файл (CTRL+X)
- Введите команду для применения изменений в текущей сессии:
echo 1 > /proc/sys/net/ipv4/ip_forward
- Последовательно введите следующие команды (одна строка=одна команда), для настройки фаерволла iptables на форвардинг трафика через VPN:
iptables -A FORWARD -m state —state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
iptables -A FORWARD -i tap+ -j ACCEPT - Добавьте такой же список правил iptables в файл /etc/rc.local , чтобы они применялись при каждом запуске системы:
nano /etc/rc.local
Содержание файла:#!/bin/sh -e
#
# [...]
#
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
iptables -A FORWARD -i tap+ -j ACCEPT
exit 0
Сохраните и закройте документ (CTRL+X) - Приведенные выше параметры активируют переадресацию всего клиентского трафика, кроме DNS-запросов, через VPN-сервер. Для форваринга DNS-запросов вам необходимо установить пакет dnsmasq и внести изменения в файл /etc/openvpn/server.conf
- Установим dnsmasq:
Если вы используете Ubuntu 12.04:apt-get install dnsmasq && dpkg-reconfigure resolvconf
Появится мастер настройки. На первом пункте (prepare /etc/resolv.conf for dynamic updates) отвечаем yes, затем no (Append original file to dynamic file?)
Если вы используете Debian 7:apt-get install dnsmasq resolvconf
- Теперь нужно отредактировать dnsmasq:
nano /etc/dnsmasq.conf
Убедитесь, что указанные ниже параметры раскомментированы или добавлены в файл:listen-address=10.8.0.1
bind-interfaces - Далее необходимо добавить в файл /etc/network/interfaces информацию об используемых dns-серверах. Возможно, в вашем случае эта информация уже присутствует (как например в случае с серверами, арендованными в 1cloud.ru), если же нет — добавьте ее следующим образом:
Откройте файл конфигурации интерфейсов:nano /etc/network/interfaces
Добавьте строку dns-nameservers с указанием адресов используемых вами DNS-серверов (например одного сервера вашего интернет провайдера и одного публичного сервера google: 8.8.8.8):# The primary network interface
auto eth0
iface eth0 inet dhcp
dns-nameservers 77.88.8.8 8.8.8.8 - При стандартных настройках утилита dnsmasq запускается до старта виртуального tun адаптера OpenVPN. Это приводит к ошибкам и завершению dnsmasq. Для устранения этой проблемы, необходимо добавить в файл /etc/rc.local строку с командой, перезапускающей dnsmasq после инициализации OpenVPN. Разместить эту строку в файле следует после параметров iptables, указанных нами ранее:
nano /etc/rc.local
Содержимое файла:...
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
iptables -A FORWARD -i tap+ -j ACCEPT
/etc/init.d/dnsmasq restart
exit 0 - Последнее, что необходимо сделать — расскоментировать строку, разрешающую клиентам OpenVPN использовать DNS серверы, в файле /etc/openvpn/server.conf:
nano /etc/openvpn/server.conf
Содержимое файла:....
push "dhcp-option DNS 10.8.0.1" - Перезапускаем сервер для применения всех настроек и проверки их корректности:
reboot
Проверка OpenVPN-соединения
На этом настройку OpenVPN сервера на Ubuntu/Debian сервере можно считать завершенной. Для проверки соединения и туннелирования трафика через VPN-сервер вы можете воспользоваться любым интернет-сервисом, отображающим ваш IP-адрес (например, этот) — при корректной настройке на странице будет отображен адрес VPN-сервера.
P. S. Другие инструкции:
Поделиться в соцсетях:
Спасибо за Вашу оценку!
К сожалению, проголосовать не получилось. Попробуйте позже
ru
191014
Санкт-Петербург
ул. Кирочная, 9
+7(812)313-88-33
235
70
1cloud ltd
2018-12-07
Настройка OpenVPN-сервера с туннелированием интернет-трафика на Ubuntu 12.04 / Debian 7
191014
Санкт-Петербург
ул. Кирочная, 9
+7(812)313-88-33
235
70
1cloud ltd
2018-12-07
Настройка OpenVPN-сервера с туннелированием интернет-трафика на Ubuntu 12.04 / Debian 7
600
auto
Установка и настройка сервера OpenVPN в Ubuntu 20.04
Введение
Виртуальная частная сеть (VPN) позволит вам работать в незащищенных сетях, как если бы вы находились в частной сети. Она предоставляет возможность получить безопасный и защищенный доступ к сети Интернет со смартфона или ноутбука при подключении к недоверенной сети, например Wi-Fi в отеле или в кафе.
В сочетании с соединениями HTTPS данная схема позволяет защитить учетные данные и транзакции в беспроводной сети. Вы можете обойти географические ограничения и цензуру и скрыть свое местоположение, а также любой незашифрованный трафик HTTP при работе в незащищенной сети.
OpenVPN — это полнофункциональное решение VPN с открытым исходным кодом, которое использует протокол TLS и позволяет использовать широкий круг конфигураций. В этом обучающем руководстве мы установим OpenVPN на сервере Ubuntu 20.04 и настроим его для доступа с клиентского компьютера.
Примечание. Если вы планируете настроить сервер OpenVPN на DigitalOcean Droplet, то мы, как и многие поставщики хостинга, будем взимать плату за превышение лимита пропускной способности. По этой причине необходимо следить за объемом трафика, который обрабатывает ваш сервер.
Дополнительную информацию можно найти на этой странице.
Предварительные требования
Для данного обучающего руководства вам потребуется следующее:
Примечание. Хотя технически возможно использовать ваш сервер OpenVPN или ваш локальный компьютер в качестве центра сертификации, делать это не рекомендуется, поскольку это открывает ваш VPN для ряда уязвимостей. Согласно официальной документации OpenVPN, вы должны разместить ЦС на отдельном компьютере, который будет отвечать за импорт и подписание запросов сертификатов. По этой причине в данном обучающем модуле предполагается, что ваш ЦС располагается на отдельном сервере Ubuntu 20.04, где также имеются пользователь без привилегий root с привилегиями sudo и базовый брандмауэр.
Помимо этого вам потребуется клиентский компьютер, который вы будете использовать для подключения к вашему серверу OpenVPN. В этом обучающем руководстве мы будем называть его клиентом OpenVPN. В целях данного руководства рекомендуется использовать ваш локальный компьютер в качестве клиента OpenVPN.
После выполнения всех предварительных требований вы можете начать установку и настройку сервера OpenVPN в Ubuntu 20.04.
Примечание. Обратите внимание, что если вы отключите аутентификацию с помощью пароля при настройке этих серверов, то можете столкнуться с трудностями при передаче файлов между ними, как предусматривается последующими разделами этого обучающего руководства. Чтобы устранить эту проблему, вам нужно будет заново включить аутентификацию с помощью пароля на каждом сервере. Также вы можете сгенерировать пару ключей SSH для каждого сервера и добавить публичный ключ SSH сервера OpenVPN в файл authorized_keys
на компьютере ЦС, и наоборот. Дополнительные инструкции по этим решениям можно найти в обучающем модуле Настройка ключей SSH в Ubuntu 20.04.
Шаг 1 — Установка OpenVPN и Easy-RSA
Первый шаг этого руководства подразумевает установку OpenVPN и Easy-RSA. Easy-RSA — это инструмент управления инфраструктурой открытых ключей (PKI), который вы будете использовать на сервере OpenVPN для генерации запроса сертификата, который вы затем будете проверять и подписывать на сервере ЦС.
Для начала обновите указатель пакетов сервера OpenVPN и установите OpenVPN и Easy-RSA. Оба пакета доступны в репозиториях Ubuntu по умолчанию, и поэтому вы можете использовать apt
для установки:
- sudo apt update
- sudo apt install openvpn easy-rsa
Далее вам потребуется создать новую директорию на сервере OpenVPN от имени вашего пользователя non-root user с названием ~/easy-rsa
:
Теперь вам нужно создать символьную ссылку из скрипта easyrsa
, установленного пакетом в директории ~/easy-rsa
, которую вы только что создали:
- ln -s /usr/share/easy-rsa/* ~/easy-rsa/
Примечание. Хотя другие руководства могут предписывать скопировать файлы пакета easy-rsa
в директорию PKI, в этом обучающем руководстве мы используем подход на основе символьных ссылок. Таким образом, любые изменения пакета easy-rsa
будут автоматически отражаться в ваших скриптах PKI.
В заключение убедитесь, что владельцем директории является ваш пользователь non-root user с привилегиями sudo, и ограничьте доступ с помощью команды chmod
:
- sudo chown sammy ~/easy-rsa
- chmod 700 ~/easy-rsa
После установки этих программ и их перемещения в нужные локации в вашей системе следующим шагом будет создание инфраструктуры открытых ключей (PKI) на сервере OpenVPN, чтобы вы могли запрашивать и управлять сертификатами TLS для клиентов и других серверов, которые будут подключаться к вашему VPN.
Шаг 2 — Создание PKI для OpenVPN
Прежде чем вы сможете создавать закрытый ключ и сертификат вашего сервера OpenVPN, вам нужно создать локальную директорию инфраструктуры открытых ключей на сервере OpenVPN. Вы будете использовать эту директорию для управления запросами сертификата сервера и клиентов, вместо того чтобы получать их прямо на сервере ЦС.
Для создания директории PKI на сервере OpenVPN вам нужно указать в файле vars
ряд значений по умолчанию. Используйте команду cd
для перехода в каталог easy-rsa
, а затем создайте и отредактируйте файл vars
с помощью nano или другого предпочитаемого текстового редактора:
После открытия файла вставьте следующие две строки:
~/easy-rsa/vars
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"
Эти две строки потребуются вам в файле vars
на сервере OpenVPN, поскольку он не будет использоваться в качестве ЦС. Они будут гарантировать, что ваши закрытые ключи и запросы сертификата будут настроены для использования современной криптографии на эллиптических кривых (Elliptic Curve Cryptography, ECC) при генерации ключей и защищенных подписей для ваших клиентов и сервера OpenVPN.
Под настройкой использования ECC для ваших серверов OpenVPN и ЦС подразумевается, что, когда клиент и сервер будут пытаться установить общий симметричный ключ, они будут использовать алгоритмы эллиптической кривой для обмена. Использование ECC для обмена ключами значительно быстрее, чем использование простого алгоритма Диффи — Хеллмана с классическим алгоритмом RSA, поскольку числа намного меньше, а вычисления выполняются быстрее.
Справка: когда клиенты подключаются к OpenVPN, они используют асимметричное шифрование (также известное как открытый/закрытый ключ) для выполнения TLS-рукопожатия. Однако при передаче шифрованного VPN-трафика сервер и клиенты используют симметричное шифрование, которое также известно как шифрование общедоступного ключа.
Симметричное шифрование требует гораздо меньшего количества вычислений по сравнению с асимметричным: используемые числа гораздо меньше, и современные процессоры имеют инструкции для выполнения оптимизированного симметричного шифрования. Для переключения с асимметричного на симметричное шифрование сервер OpenVPN и клиент будут использовать алгоритм Диффи — Хеллмана на эллиптических кривых для согласования общего секретного ключа в максимально короткие сроки.
После добавления в файл vars
данных вы можете перейти к созданию директории PKI. Для этого воспользуйтесь скриптом easyrsa
с опцией init-pki
. Хотя вы уже использовали эту команду на сервере ЦС в соответствии с предварительными требованиями, необходимо запустить ее здесь, поскольку сервер OpenVPN и сервер ЦС имеют разные директории PKI.
Обратите внимание, что на сервере OpenVPN не нужно создавать центр сертификации. Ваш сервер ЦС отвечает за валидацию и подпись сертификатов. PKI на вашем сервере VPN используется только в качестве удобного и централизованного места хранения запросов сертификата и публичных сертификатов.
После инициализации PKI на сервере OpenVPN вы можете перейти к следующему шагу и создать запрос сертификата и закрытого ключа сервера OpenVPN.
Шаг 3 — Создание запроса сертификата и закрытого ключа сервера OpenVPN
Теперь, когда на вашем сервере OpenVPN установлено все необходимое, на следующем шаге мы сгенерируем закрытый ключ и запрос подписи сертификата на вашем сервере OpenVPN. После этого вы передадите запрос в ваш центр сертификации для подписи, создав необходимый сертификат. После подписи сертификата вы передадите его назад на сервер OpenVPN и установите его для использования на сервере.
Для начала перейдите в директорию ~/easy-rsa
на сервере OpenVPN, используя вашего пользователя non-root user:
Теперь вы можете вызвать easyrsa
с опцией gen-req
, за которой необходимо указать стандартное имя для компьютера. Вы можете использовать любое стандартное имя, но лучше всего выбрать запоминающийся вариант. В этом обучающем руководстве для сервера OpenVPN будет использоваться стандартное имя server
. Обязательно добавьте опцию nopass
. Без этого файл запроса будет защищен паролем, что впоследствии может привести к проблемам с разрешениями.
Примечание. Если вы выберете любое другое имя, а не server
, вы должны будете следовать некоторым из приведенных ниже инструкций с изменениями. Например, при копировании сгенерированных файлов в директорию /etc/openvpn
вам нужно будет указать правильные имена. Позднее вам нужно будет изменить файл etc/openvpn/server.conf
, чтобы он указывал на соответствующие файлы .crt
и .key
.
- ./easyrsa gen-req server nopass
Output
Common Name (eg: your user, host, or server name) [server]:
Keypair and certificate request completed. Your files are:
req: /home/sammy/easy-rsa/pki/reqs/server.req
key: /home/sammy/easy-rsa/pki/private/server.key
В результате будет создан закрытый ключ для сервера и файл запроса сертификата с именем server.req
. Скопируйте ключ сервера в директорию /etc/openvpn/server
:
- sudo cp /home/sammy/easy-rsa/pki/private/server.key /etc/openvpn/server/
В результате выполнения этих шагов вы успешно создали закрытый ключ для вашего сервера OpenVPN. Также вы создали запрос на подпись сертификата для сервера OpenVPN. Запрос на подпись сертификата теперь готов к подписи в вашем центре сертификации. В следующем разделе этого обучающего руководства вы узнаете, как подписать запрос на подпись сертификата с помощью закрытого ключа вашего сервера ЦС.
Шаг 4 — Подпись запроса сертификата сервера OpenVPN
На предыдущем шаге вы создали запрос на подпись сертификата (CSR) и закрытый ключ для сервера OpenVPN. Теперь сервер ЦС должен узнать о сертификате server
и выполнить его валидацию. После подтверждения сертификата сервером ЦС и его отправки назад на сервер OpenVPN клиенты, которые доверяют вашему ЦС, также смогут доверять серверу OpenVPN.
На сервере OpenVPN от имени вашего пользователя non-root user воспользуйтесь запросом на передачу или другим методом передачи для копирования запроса сертификата server.req
на сервер ЦС для подписи:
- scp /home/sammy/easy-rsa/pki/reqs/server.req sammy@your_ca_server_ip:/tmp
Если вы выполнили предварительное требование обучающего модуля «Установка и настройка Центра сертификации (ЦС) в Ubuntu 20.04», следующим шагом будет войти на сервер ЦС как пользователь без привилегий root, которого вы создали для управления ЦС. Вы использовали команду cd
для перехода в каталог ~/easy-rsa
, где вы создали и импортируйте запрос сертификата с помощью скрипта easyrsa
:
- cd ~/easy-rsa
- ./easyrsa import-req /tmp/server.req server
Output
. . .
The request has been successfully imported with a short name of: server
You may now use this name to perform signing operations on this request.
Далее подпишите запрос, запустив скрипт easyrsa
с опцией sign-req
и указанием типа запроса и стандартного имени. В качестве типа запроса может использоваться client
или server
. Поскольку мы работаем с запросом сертификата сервера OpenVPN, необходимо использовать тип запроса server
:
- ./easyrsa sign-req server server
В выводе вам будет нужно подтвердить, что запрос поступил из надежного источника. Введите yes
, а затем нажмите ENTER
для подтверждения:
Output
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
. . .
Certificate created at: /home/sammy/easy-rsa/pki/issued/server.crt
Обратите внимание, что если вы зашифровали закрытый ключ ЦС, вам будет предложено ввести пароль в данный момент.
В результате выполнения этих шагов вы успешно подписали запрос сертификата сервера OpenVPN с помощью закрытого ключа сервера ЦС. Полученный файл server.crt
содержит открытый ключ шифрования сервера OpenVPN, а также новую подпись от сервера ЦС. Смысл подписи состоит в том, чтобы сообщить всем, кто доверяет серверу ЦС, что они также могут доверять серверу OpenVPN при подключении к нему.
Для завершения настройки сертификатов скопируйте файлы server.crt
и ca.crt
с сервера ЦС на сервер OpenVPN:
- scp pki/issued/server.crt sammy@your_vpn_server_ip:/tmp
- scp pki/ca.crt sammy@your_vpn_server_ip:/tmp
Теперь вернитесь на ваш сервер OpenVPN, скопируйте файлы из /tmp
в /etc/openvpn/server
:
- sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/server
Теперь ваш сервер OpenVPN почти готов к принятию подключений. На следующем шаге вы выполните ряд дополнительных шагов для повышения безопасности сервера.
Шаг 5 — Настройка криптографических материалов OpenVPN
В качестве дополнительного уровня безопасности мы добавим дополнительный общий секретный ключ, который будет использовать сервер и все клиенты, с помощью директивы OpenVPN tls-crypt
. Эта опция используется, чтобы «затемнить» сертификат TLS, используемый, когда сервер и клиент первоначально подключаются друг к другу. Также она используется сервером OpenVPN для выполнения быстрых проверок входящих пакетов: если пакет подписан с помощью предварительно предоставленного ключа, сервер обрабатывает его, если подпись отсутствует, сервер понимает, что пакет получен из непроверенного источника, и может отклонить его, не выполняя дополнительную работу по расшифровке.
Эта опция поможет убедиться, что ваш сервер OpenVPN может справляться с неудостоверенным трафиком, сканированием портов и DoS-атаками, которые могут связывать ресурсы сервера. Она также затрудняет выявление сетевого трафика OpenVPN.
Для получения предварительно предоставленного ключа tls-crypt
запустите следующую команду на сервере OpenVPN в директории ~/easy-rsa
:
- cd ~/easy-rsa
- openvpn --genkey --secret ta.key
В результате вы получите файл с именем ta.key
. Скопируйте его в директорию /etc/openvpn/server/
:
- sudo cp ta.key /etc/openvpn/server
После получения этих файлов на сервере OpenVPN вы можете переходить к созданию клиентских сертификатов и файлов ключей для ваших пользователей, которые вы будете использовать для подключения к VPN.
Шаг 6 — Создание сертификата клиента и пары ключей
Хотя вы можете сгенерировать закрытый ключ и запрос сертификата на клиентской системе и отправить их в ЦС для подписания, в этом обучающем руководстве мы рассмотрим процесс генерирования запроса сертификата на сервере OpenVPN. Преимущество этого подхода заключается в том, что мы можем создать скрипт, который будет автоматически генерировать файлы конфигурации клиентов, содержащие все необходимые ключи и сертификаты. Благодаря этому вам не нужно будет передавать ключи, сертификаты и файлы конфигурации на клиентские системы, и процесс подключения к VPN ускорится.
В этом обучающем руководстве мы создадим одну пару из ключа и сертификата для клиентской системы. Если у вас несколько клиентских систем, вы можете повторить этот процесс для каждой такой системы. Обратите внимание, что для каждого клиента в скрипте нужно указать уникальное имя. В этом обучающем руководстве мы будем использовать первую пару сертификат/ключ под именем client1
.
Вначале создайте в домашней директории структуру директорий, где будут храниться файлы сертификатов и ключей клиентской системы:
- mkdir -p ~/client-configs/keys
Поскольку в этой директории будут храниться пары сертификат/ключ ваших клиентов и файлы конфигурации, для нее следует закрыть все разрешения:
- chmod -R 700 ~/client-configs
Вернитесь в директорию EasyRSA и запустите скрипт easyrsa
с опциями gen-req
и nopass
, указав обычное имя клиента:
- cd ~/easy-rsa
- ./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 sammy@your_ca_server_ip:/tmp
Теперь выполните вход на ваш сервер ЦС. Затем перейдите в директорию EasyRSA и импортируйте запрос сертификата:
- cd ~/easy-rsa
- ./easyrsa import-req /tmp/client1.req client1
Затем подпишите запрос, как вы делали это для сервера на предыдущем шаге. Однако в этот раз обязательно укажите тип запроса client
:
- ./easyrsa sign-req client client1
При запросе введите yes
, чтобы подтвердить, что вы планируете подписать запрос сертификата и что он поступил из доверенного источника:
Output
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Если вы зашифровали свой ключ ЦС, вам будет предложено ввести пароль.
В результате будет создан файл клиентского сертификата с именем client1.crt
. Переместите этот файл обратно на сервер.
- scp pki/issued/client1.crt sammy@your_server_ip:/tmp
Вернитесь на ваш сервер OpenVPN, скопируйте клиентский сертификат в директорию ~/client-configs/keys/
:
- cp /tmp/client1.crt ~/client-configs/keys/
Затем скопируйте файлы ca.crt
и ta.key
в директорию ~/client-configs/keys/
и предоставьте соответствующие разрешения для вашего пользователя sudo:
- cp ~/easy-rsa/ta.key ~/client-configs/keys/
- sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
- sudo chown sammy.sammy ~/client-configs/keys/*
В результате вы сгенерировали ключи и сертификаты для сервера и клиента и сохранили их в соответствующих директориях на вашем сервере OpenVPN. С этими файлами еще предстоит выполнить несколько действий, но к ним мы вернемся позднее. Теперь вы можете перейти к настройке OpenVPN.
Шаг 7 — Настройка OpenVPN
Как и во многих широко используемых инструментах с открытым исходным кодом, OpenVPN имеет множество доступных параметров настройки для кастомизации вашего сервера согласно вашим нуждам. В этом разделе мы предоставим инструкции по настройке конфигурации сервера OpenVPN на основе одного из примеров файлов конфигурации, который включен в документацию для этого программного обеспечения.
Вначале скопируйте файл server.conf
в качестве отправной точки для вашего собственного файла конфигурации:
- sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server/
- sudo gunzip /etc/openvpn/server/server.conf.gz
Откройте новый файл для редактирования в текстовом редакторе по вашему выбору. В нашем случае мы будем использовать nano:
- sudo nano /etc/openvpn/server/server.conf
Нам нужно изменить несколько строк в этом файле. Сначала необходимо найти раздел HMAC
в конфигурации, выполнив поиск директивы tls-auth
. Эта строка должна быть разкомментирована. Закомментируйте ее, добавив ;
в начало строки. Затем добавьте после нее новую строку, содержащую только значение tls-crypt ta.key
:
/etc/openvpn/server/server.conf
;tls-auth ta.key 0 # This file is secret
tls-crypt ta.key
Затем найдите раздел криптографических шифров, выполнив поиск строк с текстом cipher
. По умолчанию установлено значение AES-256-CBC
, однако шифр AES-256-GCM
обеспечивает более высокий уровень шифрования, производительности и лучше поддерживается современными клиентами OpenVPN. Мы закомментируем значение по умолчанию, добавив ;
в начало этой строки, а затем добавим другую строку после нее, содержащую обновленное значение AES-256-GCM
:
/etc/openvpn/server/server.conf
;cipher AES-256-CBC
cipher AES-256-GCM
Сразу после этой строки добавьте директиву auth
для выбора алгоритма выборки сообщений HMAC. Для этого хорошо подойдет SHA256
:
/etc/openvpn/server/server.conf
auth SHA256
Затем найдите строку с директивой dh
, которая определяет параметры алгоритма Диффи — Хеллмана. Поскольку мы настроили все сертификаты для использования криптографии на эллиптических кривых, нет необходимости в использовании файла прототипа Диффи — Хеллмана. Закомментируйте существующую строку dh dh3048.pem
или dh dh.pem
. Имя файла для ключа Диффи — Хеллмана может отличаться от того, что перечислено в примере файла конфигурации сервера. Затем добавьте строку после нее с содержанием dh none
:
/etc/openvpn/server/server.conf
;dh dh3048.pem
dh none
Далее нам нужно запустить OpenVPN без привилегий, с которыми он запущен, поэтому нам нужно указать на необходимость запуска с пользователем nobody и группой nogroup. Чтобы активировать эту возможность, найдите и разкомментируйте строки user nobody
и group nogroup
, удалив ;
в начале каждой строки:
/etc/openvpn/server/server.conf
user nobody
group nogroup
(Необязательно) Изменение DNS для перенаправления всего трафика через сеть VPN
Вышеуказанные настройки создадут соединение VPN между вашим клиентом и сервером, но не будут заставлять соединения использовать туннель. Если вы хотите использовать VPN для перенаправления всего вашего клиентского трафика, вам нужно будет передать дополнительные настройки на клиентские компьютеры.
Для начала найдите и разкомментируйте строку push "redirect-gateway def1 bypass-dhcp"
. Она будет сообщать вашему клиенту о необходимости перенаправлять весь трафик через ваш сервер OpenVPN. Обратите внимание, что при активации этой функции могут возникать проблемы с подключением к другим сетевым службам, например SSH:
/etc/openvpn/server/server.conf
push "redirect-gateway def1 bypass-dhcp"
Под этой строкой найдите раздел dhcp-option
. Удалите ;
в начале обеих строк, чтобы разкомментировать эти строки:
/etc/openvpn/server/server.conf
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
Эти строки будут сообщать вашему клиенту о необходимости использования бесплатных интерпретаторов OpenDNS на перечисленных IP-адресах. Если вы предпочитаете использовать другие интерпретаторы DNS, вставьте их на место выделенных IP-адресов.
Это поможет клиентам изменить настройки DNS, чтобы туннель VPN использовался как шлюз по умолчанию.
(Необязательно) Изменение порта и протокола
По умолчанию сервер OpenVPN использует для подключения клиентов порт 1194
и протокол UDP. Если вам потребуется использовать другой порт из-за ограничений сети клиента, вы можете изменить номер порта
. Если вы не храните веб-контент на сервере OpenVPN, вам подойдет порт 443
, поскольку его обычно не запрещают правила брандмауэра.
Чтобы заставить OpenVPN прослушивать порт 443, откройте файл server.conf
и найдите строку, которая выглядит следующим образом:
/etc/openvpn/server/server.conf
port 1194
Измените ее, указав порт 443:
/etc/openvpn/server/server.conf
# Optional!
port 443
Довольно часто этот порт также ограничивает протокол. В этом случае найдите строку proto
под строкой port
и измените протокол с udp
на tcp
:
/etc/openvpn/server/server.conf
# Optional!
proto tcp
Если вы действительно смените протокол на TCP, вам нужно будет изменить значение директивы explicit-exit-notify
с 1
на 0
, поскольку эта директива используется только протоколом UDP. В противном случае при запуске службы OpenVPN возможны ошибки протокола TCP.
Найдите строку explicit-exit-notify
в конце файла и измените значение на 0
:
/etc/openvpn/server/server.conf
# Optional!
explicit-exit-notify 0
Если вам не нужно использовать другие порт и протокол, лучше всего оставить эти настройки без изменений.
(Необязательно) Указание на учетные данные, отличающиеся от используемых по умолчанию
Если вы выбрали другое имя при вводе команды ./easyrsa gen-req server
ранее, измените строки cert
и key
в файле конфигурации server.conf
, чтобы они указывали на соответствующие файлы .crt
и .key
. Если вы использовали имя по умолчанию server
, можно считать, что все уже настроено корректно:
/etc/openvpn/server/server.conf
cert server.crt
key server.key
После завершения редактирования сохраните и закройте файл.
Вы успешно завершили настройку общих параметров OpenVPN. На следующем шаге мы настроим сетевые параметры сервера.
Шаг 8 — Настройка конфигурации сети сервера OpenVPN
Чтобы OpenVPN мог правильно перенаправлять трафик через сеть VPN, необходимо изменить некоторые параметры конфигурации сети сервера. Прежде всего нужно изменить параметр IP forwarding, который определяет необходимость перенаправления IP-трафика. Это необходимо для реализации функций VPN, обеспечиваемых вашим сервером.
Чтобы изменить используемые по умолчанию настройки IP-передачи сервера OpenVPN, откройте файл /etc/sysctl.conf
с помощью nano
или предпочитаемого редактора:
- sudo nano /etc/sysctl.conf
Добавьте следующую строку в конец файла:
/etc/sysctl.conf
net.ipv4.ip_forward = 1
Сохраните файл и закройте его после завершения.
Чтобы прочитать файл и загрузить значения для текущей сессии, введите:
Output
net.ipv4.ip_forward = 1
Теперь ваш сервер OpenVPN сможет перенаправлять входящий трафик из одного сетевого устройства на другое. Эта настройка гарантирует, что сервер сможет направлять трафик от клиентов, подключенных к виртуальному интерфейсу VPN, на другие физические сетевые устройства. Эта конфигурация будет передавать весь веб-трафик от вашего клиента через IP-адрес вашего сервера, а открытый IP-адрес клиента будет фактически скрыт.
На следующем шаге вам нужно настроить ряд правил брандмауэра, чтобы гарантировать корректную передачу входящего и исходящего трафика на вашем сервере OpenVPN.
Шаг 9 — Настройка брандмауэра
К настоящему моменту вы установили OpenVPN на ваш сервер, настроили его и создали ключи и сертификаты, необходимые вашему клиенту для доступа к VPN. Однако вы еще не предоставили OpenVPN какие-либо инструкции о том, куда нужно отправлять входящий веб-трафик от клиентов. Вы можете указать, как сервер должен обрабатывать клиентский трафик, добавив ряд правил брандмауэра и настроив конфигурацию маршрутизации.
Если вы выполнили предварительные требования, указанные в начале этого обучающего модуля, у вас на сервере должен быть установлен и запущен ufw
. Чтобы разрешить OpenVPN через брандмауэр, вам нужно будет включить маскировку. Маскировка — это концепция таблиц iptables, на основе которой выполняется автоматическая трансляция сетевых адресов (NAT) для правильной маршрутизации клиентских соединений.
Прежде чем открыть файл конфигурации брандмауэра для добавления правил маскарадинга, нужно предварительно найти публичный сетевой интерфейс компьютера. Для этого введите:
Строка после слова «dev» в этой команде — это ваш публичный интерфейс. Например, в этом результате показан интерфейс с именем eth0
, который выделен ниже:
Output
default via 159.65.160.1 dev eth0 proto static
Когда у вас будет интерфейс, связанный с маршрутом по умолчанию, откройте файл /etc/ufw/before.rules
, чтобы добавить соответствующую конфигурацию:
- sudo nano /etc/ufw/before.rules
Правила UFW обычно добавляются с помощью команды ufw
. Правила, перечисленные в файле before.rules
, считываются и активируются до загрузки обычных правил UFW. Добавьте в верхнюю часть файла выделенные ниже строки. После этого будет задана политика по умолчанию для цепочки POSTROUTING
в таблице nat
, и любой трафик из VPN будет маскироваться. Обязательно замените eth0
в строке -A POSTROUTING
на интерфейс, определенный с помощью следующей команды:
/etc/ufw/before.rules
#
# 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 eth0 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -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
:
/etc/default/ufw
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 на сервере.
Шаг 10 — Запуск 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 service for server
Loaded: loaded (/lib/systemd/system/[email protected]; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-04-29 15:39:59 UTC; 6s ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Main PID: 16872 (openvpn)
Status: "Initialization Sequence Completed"
Tasks: 1 (limit: 1137)
Memory: 1.0M
CGroup: /system.slice/system-openvpn\x2dserver.slice/[email protected]
└─16872 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --c>
. . .
. . .
Apr 29 15:39:59 ubuntu-20 openvpn[16872]: Initialization Sequence Completed
Мы успешно завершили конфигурацию OpenVPN на стороне сервера. Далее вам нужно будет настроить клиентский компьютер и подключиться к серверу OpenVPN.
Шаг 11 — Создание инфраструктуры конфигурации клиентских систем
Создание файлов конфигурации для клиентов 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
или предпочитаемом текстовом редакторе:
- nano ~/client-configs/base.conf
Найдите в файле директиву remote
. Она указывает клиенту адрес сервера OpenVPN, т. е. публичный IP-адрес вашего сервера OpenVPN. Если вы решили изменить порт, который будет прослушивать сервер OpenVPN, вам нужно будет заменить 1194
на выбранный порт:
~/client-configs/base.conf
. . .
# 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
. . .
Протокол должен соответствовать значениям, используемым в конфигурации сервера:
~/client-configs/base.conf
proto udp
Разкомментируйте директивы user
и group
, удалив символ ;
в начале каждой строки:
~/client-configs/base.conf
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup
Найдите директивы, задающие ca
, cert
и key
. Поставьте знак комментария перед строками этих директив, поскольку вы вскоре добавите сертификаты и ключи в сам файл:
~/client-configs/base.conf
# 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
прямо в файл конфигурации клиента (а сервер настроен на использование tls-crypt
):
~/client-configs/base.conf
# If a tls-auth key is used on the server
# then every client must also have the key.
;tls-auth ta.key 1
Создайте зеркало настроек cipher
и auth
, заданных в файле /etc/openvpn/server/server.conf
:
~/client-configs/base.conf
cipher AES-256-GCM
auth SHA256
Затем добавьте в файл директиву key-direction
. Вы должны задать значение «1», чтобы VPN правильно работала на клиентском компьютере:
~/client-configs/base.conf
key-direction 1
В заключение добавьте несколько закомментированных строк для обработки различных методов, которые клиенты VPN на базе Linux будут использовать для разрешения DNS. Также мы добавим два похожих, но отдельных набора закомментированных строк. Первый набор предназначен для клиентов, которые не используют systemd-resolved
для управления DNS. Эти клиенты используют утилиту resolvconf
для обновления информации DNS для клиентов Linux.
~/client-configs/base.conf
; script-security 2
; up /etc/openvpn/update-resolv-conf
; down /etc/openvpn/update-resolv-conf
Теперь добавьте другой набор строк для клиентов, которые используют systemd-resolved
для разрешения DNS:
~/client-configs/base.conf
; script-security 2
; up /etc/openvpn/update-systemd-resolved
; down /etc/openvpn/update-systemd-resolved
; down-pre
; dhcp-option DOMAIN-ROUTE .
Сохраните файл и закройте его после завершения.
На шаге 13 «Установка конфигурации клиента» этого обучающего модуля вы узнаете, как определять, работает ли разрешение DNS для клиентов Linux, и какой раздел нужно разкомментировать.
Далее создайте простой скрипт, который скомпилирует базовую конфигурацию с соответствующим сертификатом, ключом и файлами шифрования, и поместите сгенерированную конфигурацию в директорию ~/client-configs/files
. Откройте новый файл с именем make_config.sh
в директории ~/client-configs
:
- nano ~/client-configs/make_config.sh
Добавьте в файл следующее:
~/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-crypt>') \
${KEY_DIR}/ta.key \
<(echo -e '</tls-crypt>') \
> ${OUTPUT_DIR}/${1}.ovpn
Сохраните файл и закройте его после завершения.
Прежде чем продолжить, отметьте этот файл как исполняемый, введя следующую команду:
- chmod 700 ~/client-configs/make_config.sh
Этот скрипт создает копию созданного вами файла base.conf
, собирает все созданные вами для клиента файлы сертификатов и ключей, извлекает их содержимое, добавляет их в копию базового файла конфигурации и экспортирует все это в новый файл конфигурации клиента. Это означает, что вся необходимая информация хранится в одном месте, и вам не нужно по отдельности управлять файлами конфигурации клиента, сертификатами и ключами. Преимущество такого метода состоит в том, что если в будущем вам потребуется добавить клиент, вы можете просто запустить этот скрипт, чтобы быстро создать файл конфигурации, а вся важная информация будет храниться в одном удобном для доступа месте.
Учтите, что при добавлении каждого нового клиента вам нужно будет сгенерировать для него новые ключи и сертификаты, прежде чем запускать этот скрипт и генерировать файл конфигурации. На следующем шаге вы сможете потренироваться в использовании этого скрипта.
Шаг 12 — Создание конфигураций клиентов
Если вы следовали указаниям руководства, на шаге 6 вы создали клиентский сертификат и ключ с именами client1.crt
и client1.key
соответственно. Вы можете сгенерировать файл конфигурации для этих учетных данных, перейдя в директорию ~/client-configs
и запустив скрипт, созданный в конце предыдущего шага:
- cd ~/client-configs
- ./make_config.sh client1
При этом файл client1.ovpn
будет создан в директории ~/client-configs/files
:
- ls ~/client-configs/files
Output
client1.ovpn
Этот файл нужно будет переместить на устройство, которое вы планируете использовать в качестве клиента. Например, это может быть ваш локальный компьютер или мобильное устройство.
Хотя конкретные приложения для передачи зависят от операционной системы устройства и ваших предпочтений, один из наиболее надежных и безопасных способов — использовать SFTP (протокол передачи файлов SSH) или SCP (защищенное копирование) на стороне сервера. При этом файлы аутентификации VPN вашего клиента будут передаваться через шифрованное соединение.
Здесь представлен пример команды SFTP, которую можно запустить с локального компьютера (под управлением macOS или Linux). Она будет копировать файл client1.ovpn
, который мы создали на последнем шаге, в вашу домашнюю директорию:
- sftp sammy@openvpn_server_ip:client-configs/files/client1.ovpn ~/
Ниже представлено несколько инструментов и обучающих руководств для безопасной передачи файлов с сервера OpenVPN на локальный компьютер:
Шаг 13 — Установка клиентской конфигурации
В этом разделе рассказывается о том, как установить клиентский профиль VPN в Windows, macOS, Linux, iOS и Android. Эти инструкции не зависят друг от друга, так что вы можете сразу перейти к той, которая относится к вашему устройству.
Подключение 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 для управления соединениями. Нажмите на значок, а затем нажмите на пункт меню Подключить client1, чтобы создать соединение VPN.
Linux
Установка
Если вы используете Linux, существуют различные инструменты в зависимости от вашего дистрибутива. Диспетчер окон или среда рабочего стола также могут содержать утилиты для подключения.
Однако проще всего будет использовать для этой цели программное обеспечение OpenVPN.
В Ubuntu или Debian вы можете установить его так же, как и на сервере, введя следующую команду:
- sudo apt update
- sudo apt install openvpn
В CentOS вы можете активировать репозитории EPEL и выполнить установку, введя следующую команду:
- sudo dnf install epel-release
- sudo dnf install openvpn
Настройка клиентов, использующих
systemd-resolved
Вначале определите, использует ли ваша система systemd-resolved
для разрешения DNS, проверив файл /etc/resolv.conf
:
Output
# This file is managed by man:systemd-resolved(8). Do not edit.
. . .
nameserver 127.0.0.53
options edns0
Если ваша система настроена для использования systemd-resolved
для разрешения DNS , IP-адрес после опции nameserver
будет иметь значение 127.0.0.53
. Также в файле должны быть комментарии, в частности информация о том, как systemd-resolved
управляет файлом. Если у вас отображается не 127.0.0.53
, а другой IP-адрес, то есть вероятность, что ваша система не использует systemd-resolved
. В этом случае вы можете перейти к следующему разделу, предназначенному для настройки клиентов Linux, использующих скрипт update-resolv-conf
.
Для поддержки этих клиентов нужно предварительно установить пакет openvpn-systemd-resolved
. Он содержит скрипты, принудительно запускающие использование systemd-resolved
для разрешения DNS сервером VPN.
- sudo apt install openvpn-systemd-resolved
После установки пакета настройте клиент для его использования и отправки всех запросов DNS через интерфейс VPN. Откройте файл VPN клиента:
Разкомментируйте следующие строки, добавленные вами ранее:
client1.ovpn
script-security 2
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre
dhcp-option DOMAIN-ROUTE .
Настройка клиентов, использующих
update-resolv-conf
Если ваша система не использует systemd-resolved
для управления DNS, проверьте наличие в вашем дистрибутиве скрипта /etc/openvpn/update-resolv-conf
:
Output
update-resolv-conf
Если в вашем клиенте имеется файл update-resolv-conf
, измените ранее переданный файл конфигурации клиента OpenVPN:
Разкомментируйте три добавленные вами строки для изменения настроек DNS:
client1.ovpn
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Если вы используете CentOS, измените директиву group
с nogroup
на nobody
для соответствия доступным группам дистрибутива:
client1.ovpn
group nobody
Сохраните и закройте файл.
Подключение
Теперь для подключения к VPN вы можете просто указать команде openvpn
файл конфигурации клиента:
- sudo openvpn --config client1.ovpn
Эта команда должна установить подключение к вашей VPN.
Примечание. Если ваш клиент использует systemd-resolved
для управления DNS, проверьте правильность применения настроек, запустив команду systemd-resolve --status
:
- systemd-resolve --status tun0
Результат будет выглядеть следующим образом:
Output
Link 22 (tun0)
. . .
DNS Servers: 208.67.222.222
208.67.220.220
DNS Domain: ~.
Если вы видите IP-адреса серверов DNS, настроенные вами на сервере OpenVPN, и настройку ~.
для DNS Domain в выводе, это означает, что вы правильно настроили клиент для управления DNS на сервере VPN. Также вы можете проверить отправку запросов DNS через VPN используя сайт DNS leak test.com или другой подобный сайт.
iOS
Установка
Найдите в магазине приложений iTunes App Store приложение OpenVPN Connect, официальный клиент OpenVPN для iOS, и установите его. Чтобы переместить конфигурацию клиента iOS на устройство, подключите его к компьютеру напрямую.
Здесь описан процесс завершения передачи с помощью iTunes. Откройте iTunes на компьютере и нажмите iPhone > приложения. Прокрутите страницу до раздела Общий доступ к файлам и нажмите на приложение OpenVPN. Пустое окно справа OpenVPN Documents предназначено для общего доступа к файлам. Перетащите файл .ovpn
в окно OpenVPN Documents.
Запустите приложение OpenVPN на iPhone. Вы получите уведомление, что новый профиль готов к импорту. Нажмите зеленый значок плюс, чтобы импортировать его.
Подключение
Приложение OpenVPN готово к использованию нового профиля. Установите соединение, передвинув кнопку Подключиться в положение Вкл. Для отключения передвиньте эту же кнопку в положение Выкл.
Примечание. Переключатель VPN в разделе Настройки нельзя использовать для подключения к VPN. Если вы попробуете сделать это, вы получите уведомление о том, что для подключения нужно использовать приложение OpenVPN.
Android
Установка
Откройте магазин приложений Google Play Store. Найдите приложение Android OpenVPN Connect, официальное клиентское приложение OpenVPN для Android, и установите его.
Вы можете переместить профиль .ovpn
, подключив устройство Android к вашему компьютеру через интерфейс USB и скопировав файл. Если у вас в компьютере есть разъем для SD-карт, вы можете извлечь SD-карту из устройства, скопировать на нее профиль и вставить карту обратно в устройство Android.
Запустите приложение OpenVPN и нажмите меню FILE
, чтобы импортировать профиль.
Затем перейдите в местоположение сохраненного профиля (на снимке экрана используется расположение /storage/emulated/0/openvpn
) и выберите файл .ovpn
. Нажмите кнопку IMPORT
, чтобы завершить импорт этого профиля.
Подключение После добавления профиля вы увидите следующий экран:
Для подключения нажмите кнопку-переключатель рядом с профилем, который вы хотите использовать. Вы увидите статистические данные вашего подключения в режиме реального времени и трафик, проходящий через ваш сервер OpenVPN:
Для отключения просто нажмите кнопку-переключатель слева еще раз. Вам будет предложено подтвердить, что вы хотите отключиться от VPN.
Шаг 14 — Тестирование соединения VPN (необязательно)
Примечание. Этот метод тестирования подключения VPN будет работать только в случае, если вы выбрали перенаправление всего трафика через VPN на шаге 7 при редактировании файла server.conf
для OpenVPN.
После завершения установки нужно провести простую проверку, чтобы убедиться, что все работает нормально. Не активируйте соединение VPN, откройте браузер и перейдите в DNSLeakTest.
Сайт покажет IP-адрес, назначенный вашим интернет-провайдером и видный остальному миру. Чтобы проверить настройки DNS через этот же сайт, нажмите Расширенный тест, и вы увидите, какие серверы DNS вы используете.
Теперь подключите клиент OpenVPN к VPN вашего дроплета и обновите браузер. Вы увидите совершенно другой IP-адрес (адрес вашего сервера VPN), и именно этот адрес будет виден остальному миру. Итак, в приложении DNSLeakTest функция Расширенный тест проверит ваши настройки DNS и подтвердит, что вы используете параметры DNS, заданные вашей VPN.
Шаг 15 — Отзыв сертификатов клиента
Иногда вам может понадобиться отозвать клиентский сертификат, чтобы предотвратить дальнейший доступ к серверу OpenVPN.
Для этго используйте пример из предварительного обучающего модуля «Установка и настройка центра сертификации в 20.04» из раздела «Отзыв сертификата».
После отзыва сертификата для клиента с помощью этих инструкций вам нужно будет скопировать созданный файл crl.pem
на ваш сервер OpenVPN в директорию /etc/openvpn/server
:
- sudo cp /tmp/crl.pem /etc/openvpn/server/
Затем откройте файл конфигурации сервера OpenVPN:
- sudo nano /etc/openvpn/server/server.conf
Добавьте в конце файла опцию crl-verify
, чтобы сервер OpenVPN проверял созданный нами список отзыва сертификатов при каждой попытке подключения:
/etc/openvpn/server/server.conf
crl-verify crl.pem
Сохраните и закройте файл.
Перезапустите OpenVPN, чтобы завершить отзыв сертификата:
- sudo systemctl restart [email protected]
Клиент больше не сможет подключаться к серверу, используя старые учетные данные.
Чтобы запретить доступ другим клиентам, повторите эту процедуру:
- Для отзыва сертификата используется команда
./easyrsa revoke client_name
. - Создайте новый список CRL.
- Переместите новый файл
crl.pem
на сервер OpenVPN и скопируйте его в директорию/etc/openvpn/server/
, чтобы перезаписать старый список. - Перезапустите службу OpenVPN.
С помощью этой процедуры вы можете отозвать любые сертификаты, которые ранее выпустили для вашего сервера.
Заключение
Теперь у вас должна быть полностью готовая к использованию виртуальная частная сеть, запущенная на вашем сервере OpenVPN. Вы можете просматривать веб-ресурсы и загружать контент, не беспокоясь о том, что злоумышленники смогут отслеживать вашу активность.
Для дальнейшей кастомизации вашей установки OpenVPN можно выполнить несколько шагов, например, настроить для вашего клиента автоматическое подключение к VPN или задать специальные правила и политики доступа для конкретного клиента. При выполнении этих действий по кастомизации OpenVPN вы должны ознакомиться с официальной документацией для OpenVPN.
Для настройки большего числа клиентов вам нужно выполнить шаги 6 и 11–13 для каждого дополнительного устройства. Чтобы запретить доступ клиентским системам, следуйте указаниям в шаге 15.
Настройка сервера OpenVPN в Ubuntu 18.04
Предыдущая версия данного обучающего руководства была написана Джастином Эллингвудом
Введение
Хотите организовать безопасный и защищенный доступ к интернету на смартфоне или ноутбуке при подключении к ненадежной сети, например к сети WiFi в гостинице или кафе? Виртуальная частная сеть (VPN) позволит вам конфиденциально и безопасно работать в незащищенных сетях, как если бы вы находились в частной сети. Трафик поступает с сервера VPN и продолжает движение в пункт назначения.
В сочетании с соединениями HTTPS данная схема позволяет защитить учетные данные и транзакции в беспроводной сети. Вы можете обойти географические ограничения и цензуру и скрыть свое местоположение и любой нешифруемый трафик HTTP от незащищенной сети.
OpenVPN — полнофункциональное решение SSL VPN с открытым исходным кодом, поддерживающее широкий ассортимент конфигураций. В этом обучающем модуле вы настроите сервер OpenVPN на сервере Ubuntu 18.04, а затем настроите доступ к нему из Windows, macOS, iOS и/или Android. Приведенные в этом обучающем модуле шаги по установке и настройке максимально упрощены для каждого из вариантов.
Примечание. Если вы планируете настроить сервер OpenVPN на DigitalOcean Droplet, то мы, как и многие поставщики хостинга, будем взимать плату за превышение лимита пропускной способности. По этой причине необходимо следить за объемом трафика, который обрабатывает ваш сервер.
Дополнительную информацию можно найти на этой странице.
Предварительные требования
Чтобы пройти этот обучающий модуль вам потребуется доступ к серверу Ubuntu 18.04, где будет размещаться служба OpenVPN. Перед началом прохождения обучающего модуля вам нужно будет настроить пользователя без привилегий root с привилегиями sudo
. Вы можете воспользоваться нашим руководством Начальная настройка сервера Ubuntu 18.04, чтобы создать пользователя с соответствующими разрешениями. Настоящий обучающий модуль предусматривает использование брандмауэра, описание настройки которого приведено в доступном по ссылке обучающем модуле.
Также вам потребуется отдельный компьютер для выполнения функций центра сертификации (CA). Хоте в качестве центра сертификации технически возможно использовать сервер OpenVPN на локальном компьютере, это делать не рекомендуется, поскольку при этом в вашей сети VPN могут возникнуть некоторые уязвимости системы безопасности. Согласно официальной документации OpenVPN, вы должны разместить CA на отдельном компьютер, который будет отвечать за импорт и подписание запросов сертификатов. По этой причине в данном обучающем модуле предполагается, что ваш CA располагается на отдельном сервере Ubuntu 18.04, где также имеются пользователь без привилегий root с привилегиями sudo
и базовый брандмауэр.
Обратите внимание, что если вы отключите аутентификацию с помощью пароля при настройке этих серверов, вы можете столкнуться с трудностями при передаче файлов между ними, как предусматривается последующими разделами этого обучающего модуля. Чтобы устранить эту проблему, вам нужно будет заново включить аутентификацию с помощью пароля на каждом сервере. Также вы можете сгенерировать пару ключей SSH для каждого сервера и добавить публичный ключ SSH сервера OpenVPN в файл authorized_keys
на компьютере CA, и наоборот. Дополнительные инструкции по этим решениям можно найти в обучающем модуле Настройка ключей SSH в Ubuntu 18.04.
Убедившись в выполнении предварительных требований, вы можете перейти к шагу 1 настоящего обучающего модуля.
Шаг 1 — Установка OpenVPN и EasyRSA
Для начала выполните обновление индекса пакетов вашего сервера VPN и установите OpenVPN. OpenVPN имеется в хранилищах Ubuntu по умолчанию, и поэтому вы можете использовать для установки apt
:
- sudo apt update
- sudo apt install openvpn
OpenVPN — это VPN с TLS/SSL. Это означает, что она использует сертификаты для шифрования трафика между сервером и клиентами. Для выпуска доверенных сертификатов необходимо создать собственный простой центр сертификации (CA). Для этого нужно загрузить последнюю версию EasyRSA, которую мы используем для создания инфраструктуры открытых ключей CA (PKI) из официального репозитория проекта на GitHub.
Как указывалось в предварительных требованиях, мы создадим CA на отдельном сервере. Мы выбрали такой подход, потому что если злоумышленник сможет взломать ваш сервер, он получит доступ к закрытому ключу CA и сможет использовать его для подписания новых сертификатов, предоставляя им доступ к вашей VPN. Соответственно с этим, для управления CA с отдельного компьютера нужно не допустить доступ несанкционированных пользователей к вашей VPN. В качестве дополнительной меры предосторожности рекомендуется выключать сервер CA, когда он не используется для подписания ключей.
Чтобы начать построение CA и инфраструктуры PKI, используйте wget
для загрузки последней версии EasyRSA на систему CA и на сервер OpenVPN. Чтобы получить последнюю версию, откройте страницу Релизы на официальном сервере EasyRSA на проекте GitHub, скопируйте ссылку для загрузки файла с расширением .tgz
и вставьте ее в следующую команду:
- wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz
Затем извлеките tarball:
- cd ~
- tar xvf EasyRSA-3.0.4.tgz
Вы успешно установили все требуемое программное обеспечение на свой сервер и на систему CA. Далее необходимо настроить переменные для EasyRSA и каталог CA, откуда будут генерироваться ключи и сертификаты, необходимые вашему серверу и клиентам для доступа к VPN.
Шаг 2 — Настройка переменных EasyRSA и построение CA
В комплект установки EasyRSA входит файл конфигурации, в котором можно изменять или задавать определенные переменные CA.
Откройте на компьютере CA каталог EasyRSA:
В этом каталоге есть файл с именем vars.example
. Создайте копию этого файла и присвойте ей имя vars
без расширения:
Откройте новый файл в предпочитаемом текстовом редакторе:
Найдите настройки параметров по умолчанию для новых сертификатов. Он будет выглядеть примерно так:
~/EasyRSA-3.0.4/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"
. . .
Уберите значки комментария из этих строк и замените выделенные значения предпочитаемыми, но не оставляйте их пустыми:
~/EasyRSA-3.0.4/vars
. . .
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 "DigitalOcean"
set_var EASYRSA_REQ_EMAIL "[email protected]"
set_var EASYRSA_REQ_OU "Community"
. . .
После завершения редактирования сохраните и закройте файл.
В каталоге EasyRSA имеется скрипт easyrsa
, который вызывается для выполнения разнообразных задач, связанных с построением и управлением CA. Запустите этот скрипт с опцией init-pki
, чтобы запустить инфраструктуру открытых ключей на сервере CA:
Output
. . .
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/sammy/EasyRSA-3.0.4/pki
Затем снова запустите скрипт easyrsa
с опцией build-ca
. В результате будет создан центр сертификации и два важных файла, ca.crt
и ca.key
, представляющие открытую и закрытую части сертификата SSL.
ca.crt
— файл открытой части сертификата CA, который используется сервером и клиентом OpenVPN, чтобы информировать друг друга о том, что они входят в единую сеть доверия и что между ними отсутствует потенциальный злоумышленник в качестве посредника. В связи с этим, копия файлаca.crt
потребуется для вашего сервера и для всех ваших клиентов.ca.key
— закрытый ключ CA, используемый для подписания ключей и сертификатов серверов и клиентов. Если злоумышленник получит доступ к CA и файлуca.key
, он сможет подписывать запросы сертификатов и получать доступ к вашей VPN, что нарушит ее безопасность. Поэтому файлca.key
должен храниться только на компьютере CA, и для дополнительной безопасности компьютер CA следует выключать, когда он не используется для подписывания запросов сертификатов.
Если вы не хотите вводить пароль при каждом взаимодействии с CA, вы можете запустить команду build-ca
с опцией nopass
:
- ./easyrsa build-ca nopass
После выполнения команды вам будет предложено подтвердить обычное имя CA:
Output
. . .
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
Обычное имя — это имя, которое будет использоваться для этой системы в контексте центра сертификации. Вы можете выбрать любое имя CA, но в данном случае проще всего нажать ENTER
, чтобы принять имя по умолчанию.
Теперь ваш центр сертификации установлен и готов подписывать запросы сертификатов.
Шаг 3 — Создание сертификата сервера, ключа и файлов шифрования
Теперь ваш центр сертификации готов к работе, и вы можете сгенерировать закрытый ключ и запрос сертификата с сервера, а затем передать запрос в CA для подписания и создания требуемого сертификата. Также вы можете создать дополнительные файлы для использования в процессе шифрования.
Для начала откройте каталог EasyRSA на сервере OpenVPN:
Запустите на сервере скрипт easyrsa
с опцией init-pki
. Хотя вы уже запускали эту команду в системе с CA, ее необходимо запустить здесь, потому что ваш сервер и центр сертификации используют разные каталоги PKI:
Вызовите скрипт easyrsa
еще раз и используйте опцию gen-req
с обычным именем этого компьютера. Вы можете использовать любое имя, но лучше всего выбрать запоминающийся вариант. В этом обучающем модуле для сервера OpenVPN мы будем использовать обычное имя «сервер». Обязательно добавьте опцию nopass
. Без этого файл запроса будет защищен паролем, что впоследствии может привести к проблемам с разрешениями:
Примечание. Если вы выберете любое другое имя, кроме «server», вы должны будете следовать некоторым из приведенных ниже инструкций с изменениями. Например, при копировании сгенерированных файлов в каталог /etc/openvpn
вам нужно будет указать правильные имена. Позднее вам нужно будет изменить файл etc/openvpn/server.conf
, чтобы он указывал на соответствующие файлы .crt
и .key
.
- ./easyrsa gen-req server nopass
В результате будет создан закрытый ключ для сервера и файл запроса сертификата с именем server.req
. Скопируйте ключ сервера в каталог /etc/openvpn/
:
- sudo cp ~/EasyRSA-3.0.4/pki/private/server.key /etc/openvpn/
Используя безопасный метод (например, SCP как в примере ниже), переместите файл server.req
на компьютер CA:
- scp ~/EasyRSA-3.0.4/pki/reqs/server.req sammy@your_CA_ip:/tmp
Откройте на компьютере CA каталог EasyRSA:
Снова запустите скрипт 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 sammy@your_server_ip:/tmp
Прежде чем выполнять выход из системы на компьютере CA, переместите файл ca.crt
на ваш сервер:
- scp pki/ca.crt sammy@your_server_ip:/tmp
Затем снова выполните вход в систему на сервере OpenVPN и скопируйте файлы server.crt
и ca.crt
в каталог /etc/openvpn/
:
- sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/
После этого перейдите в каталог EasyRSA:
Создайте надежный ключ Диффи-Хеллмана, который будет использоваться при обмене ключами:
Для этого может потребоваться несколько минут. После завершения сгенерируйте подпись HMAC для укрепления возможностей сервера по проверке целостности TLS:
- openvpn --genkey --secret ta.key
Когда команда будет выполнена, скопируйте два новых файла в каталог /etc/openvpn/
:
- sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/
- sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/
Теперь все необходимые вашему серверу сертификаты и файлы ключей сгенерированы. Вы готовы создать соответствующие сертификаты и ключи, которые клиентский компьютер будет использовать для доступа к серверу OpenVPN.
Шаг 4 — Создание сертификата клиента и пары ключей
Хотя вы можете сгенерировать закрытый ключ и запрос сертификата на клиентской системе и отправить их в CA для подписания, в этом обучающем модуле мы рассмотрим процесс генерирования запроса сертификата на сервере. Преимущество этого способа заключается в том, что мы можем создать скрипт, который будет автоматически генерировать файлы конфигурации клиентов, содержащие все необходимые ключи и сертификаты. Благодаря этому вам не нужно будет передавать ключи, сертификаты и файлы конфигурации на клиентские системы, и процесс подключения к VPN ускорится.
В этом обучающем модуле мы создадим одну пару из ключа и сертификата для клиентской системы. Если у вас несколько клиентских систем, вы можете повторить этот процесс для каждой такой системы. Обратите внимание, что для каждого клиента в скрипте нужно указать уникальное имя. В этом обучающем модуле мы будем использовать первую пару сертификат/ключ под именем client1
.
Вначале создайте в домашнем каталоге структуру каталогов, где будут храниться файлы сертификатов и ключей клиентской системы:
- mkdir -p ~/client-configs/keys
Поскольку в этом каталоге будут храниться пары сертификат/ключ ваших клиентов и файлы конфигурации, для него следует закрыть все разрешения:
- chmod -R 700 ~/client-configs
Вернитесь в каталог EasyRSA и запустите скрипт easyrsa
с опциями gen-req
и nopass
, указав обычное имя клиента:
- cd ~/EasyRSA-3.0.4/
- ./easyrsa gen-req client1 nopass
Нажмите ENTER
, чтобы подтвердить обычное имя. Скопируйте файл client1.key
в ранее созданный каталог /client-configs/keys/
:
- cp pki/private/client1.key ~/client-configs/keys/
Затем переместите файл client1.req
на компьютер CA, используя безопасный метод:
- scp pki/reqs/client1.req sammy@your_CA_ip:/tmp
Войдите в систему на компьютере CA, откройте каталог EasyRSA и импортируйте запрос сертификата:
- ssh sammy@your_CA_ip
- cd EasyRSA-3.0.4/
- ./easyrsa import-req /tmp/client1.req client1
Затем подпишите запрос, как сделали это для сервера на предыдущем шаге. Однако в этот раз обязательно укажите тип запроса client
:
- ./easyrsa sign-req client client1
В диалоге введите yes
, чтобы подтвердить, что вы планируете подписать запрос сертификата, и что он поступил из доверенного источника:
Output
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Если вы зашифровали свой ключ CA вам будет предложено ввести пароль.
В результате будет создан файл клиентского сертификата с именем client1.crt
. Переместите этот файл обратно на сервер.
- scp pki/issued/client1.crt sammy@your_server_ip:/tmp
Подключитесь к серверу OpenVPN через SSH и скопируйте клиентский сертификат в каталог /client-configs/keys/
:
- cp /tmp/client1.crt ~/client-configs/keys/
Затем скопируйте файлы ca.crt
и ta.key
в каталог /client-configs/keys/
:
- cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/
- sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/
Теперь вы сгенерировали ключи и сертификаты для сервера и клиента и сохранили их в соответствующих каталогах на вашем сервере. С этими файлами еще предстоит выполнить несколько действий, но к ним мы вернемся позднее. Сейчас же вы можете начать настройку OpenVPN на своем сервере.
Шаг 5 — Настройка службы OpenVPN
Вы сгенерировали сертификаты и ключи для клиента и для сервера, и теперь можете начать настройку службы OpenVPN для использования этих учетных данных.
Прежде всего скопируйте файл с образцом конфигурации OpenVPN в каталог configuration и извлеките его, чтобы использовать в качестве основы:
- 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
. Комментарии из этой строки должны быть уже удалены, но если строка еще закомментирована, уберите символ «;» в начале строки:
/etc/openvpn/server.conf
tls-auth ta.key 0 # This file is secret
Затем найдите раздел криптографических шифров, выполнив поиск строк комментариев с текстом cipher
. Шифр AES-256-CBC
обеспечивает хороший уровень шифрования и хорошо поддерживается. Комментарии из этой строки должны быть уже удалены, но если строка еще закомментирована, уберите символ «;» в начале строки:
/etc/openvpn/server.conf
cipher AES-256-CBC
Добавьте под этой строкой директиву auth
, чтобы выбрать алгоритм обработки сообщений HMAC. Для этого хорошо подойдет SHA256
:
/etc/openvpn/server.conf
auth SHA256
Затем найдите строку с директивой dh
, которая определяет параметры алгоритма Диффи-Хеллмана. В связи с недавними изменениями EasyRSA имя файла ключа Диффи-Хеллмана может отличаться от указанного в файле образца конфигурации сервера. Если потребуется, измените указанное здесь имя файла, удалив цифры 2048
для соответствия ключу, сгенерированному на предыдущем шаге:
/etc/openvpn/server.conf
dh dh.pem
Наконец, найдите настройки user
и group
и удалите «;» из начала каждой строки:
/etc/openvpn/server.conf
user nobody
group nogroup
Внесенные в файл образца server.conf
изменения необходимы для работы OpenVPN. Описанные ниже изменения не обязательны, однако они также необходимы для многих распространенных вариантов использования.
(Необязательно) Изменение DNS для перенаправления всего трафика через сеть VPN
Вышеуказанные настройки создадут соединение VPN между двумя компьютерными системами, но не заставят никакие соединения использовать туннель. Если вы хотите использовать VPN для перенаправления всего вашего трафика, вам нужно будет передать настройки DNS на клиентские компьютеры.
В файле server.conf
имеется несколько директив, которые нужно изменить для активации этой функции. Найдите раздел redirect-gateway
и удалите точку с запятой «;» в начале строки redirect-gateway
, чтобы убрать режим комментария:
/etc/openvpn/server.conf
push "redirect-gateway def1 bypass-dhcp"
Под этой строкой найдите раздел dhcp-option
. Снова удалите символ «;» в начале каждой из строк, чтобы убрать режим комментария:
/etc/openvpn/server.conf
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
Это поможет клиентам изменить настройки DNS, чтобы туннель VPN использовался как шлюз по умолчанию.
(Необязательно) Изменение порта и протокола
По умолчанию сервер OpenVPN использует для подключения клиентов порт 1194
и протокол UDP. Если вам потребуется использовать другой порт из-за ограничений сети клиента, вы можете изменить номер порта
. Если вы не храните веб-контент на сервере OpenVPN, вам подойдет порт 443
, поскольку его обычно не запрещают правила брандмауэра.
/etc/openvpn/server.conf
# Optional!
port 443
Довольно часто этот порт также ограничивает протокол. Если это так, измените значение proto
с UDP на TCP:
/etc/openvpn/server.conf
# Optional!
proto tcp
Если вы действительно смените протокол на TCP, вам нужно будет изменить значение директивы explicit-exit-notify
с 1
на 0
, поскольку эта директива используется только протоколом UDP. В противном случае при запуске службы OpenVPN возможны ошибки протокола TCP :
/etc/openvpn/server.conf
# Optional!
explicit-exit-notify 0
Если вам не нужно использовать другие порт и протокол, лучше всего оставить настройки по умолчанию.
(Необязательно) Указание на учетные данные, отличающиеся от используемых по умолчанию
Если вы выбрали другое имя при использовании команды ./build-key-server
, измените строки cert
и key
так, чтобы они указывали на соответствующие файлы .crt
и .key
. Если вы использовали имя по умолчанию «server», ничего изменять не нужно:
/etc/openvpn/server.conf
cert server.crt
key server.key
После завершения редактирования сохраните и закройте файл.
После внесения необходимых изменений в конфигурацию OpenVPN вашего сервера, вы можете начать вносить изменения в настройки сети сервера.
Шаг 6 — Настройка конфигурации сети сервера
Чтобы OpenVPN мог правильно перенаправлять трафик через сеть VPN, необходимо изменить некоторые параметры конфигурации сети сервера. Прежде всего нужно изменить параметр IP forwarding, который определяет необходимость перенаправления IP-трафика. Это необходимо для реализации функций VPN, обеспечиваемых вашим сервером.
Для изменения настройки переадресации IP по умолчанию на вашем сервере следует отредактировать файл /etc/sysctl.conf
:
- sudo nano /etc/sysctl.conf
Найдите в файле строку комментария с параметром net.ipv4.ip_forward
. Удалите символ «#» из начала строки, чтобы убрать режим комментария для этой настройки:
/etc/sysctl.conf
net.ipv4.ip_forward=1
Сохраните файл и закройте его после завершения.
Чтобы прочитать файл и изменить значения для текущей сессии, введите:
Output
net.ipv4.ip_forward = 1
Если вы следовали указаниям обучающего модуля «Начальная настройка сервера Ubuntu 18.04», указанного в предварительных требованиях, у вас должен быть установлен брандмауэр UFW. Вне зависимости от того, используете ли вы брандмауэр для блокировки нежелательного трафика (что нужно делать почти всегда), в этом обучающем модуле брандмауэр вам потребуется для определенных манипуляций с трафиком, поступающим на сервер. Некоторые правила брандмауэра нужно изменить, чтобы включить маскарадинг (это концепция iptables, обеспечивающая динамическую трансляцию сетевых адресов (NAT) для правильной маршрутизации клиентских соединений.
Прежде чем открыть файл конфигурации брандмауэра для добавления правил маскарадинга, нужно предварительно найти публичный сетевой интерфейс компьютера. Для этого введите:
Публичный интерфейс компьютера показан в результатах выполнения этой команды после слова «dev». Например, в этом результате показан интерфейс с именем wlp11s0
, который выделен ниже:
Output
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
на интерфейс, определенный с помощью следующей команды:
/etc/ufw/before.rules
#
# 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
:
/etc/default/ufw
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.
Шаг 7 — Запуск и активация службы OpenVPN
Теперь вы готовы запустить службу OpenVPN на своем сервере. Для этого нужно использовать утилиту systemd systemctl
.
Запустите сервер OpenVPN, указав имя файла конфигурации в качестве переменной экземпляра после имени файла systemd. Файл конфигурации вашего сервера имеет имя /etc/openvpn/server.conf
, поэтому при его вызове в конец файла нужно добавить @server
:
- sudo systemctl start openvpn@server
Еще раз убедитесь, что служба успешно запущена, введя следующую команду:
- sudo systemctl status openvpn@server
Если все прошло хорошо, результат будет выглядеть примерно следующим образом:
Output
● [email protected] - OpenVPN connection to server
Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
Active: active (running) since Tue 2016-05-03 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
с помощью следующей команды:
Будет выведен настроенный интерфейс:
Output
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 запущена и работает. Прежде чем начать использовать ее, необходимо создать файл конфигурации для клиентской системы. В этом обучающем модуле мы уже говорили о создании пар сертификат/ключ для клиентских систем, и на следующем шаге мы продемонстрируем создание инфраструктуры, которая будет легко генерировать файлы конфигурации клиентских систем.
Шаг 8 — Создание инфраструктуры конфигурации клиентских систем
Создание файлов конфигурации для клиентов 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
. Она указывает клиенту адрес сервера OpenVPN, т. е. публичный IP-адрес вашего сервера OpenVPN. Если вы решили изменить порт, который будет прослушивать сервер OpenVPN, вам нужно будет заменить 1194
на выбранный порт:
~/client-configs/base.conf
. . .
# 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
. . .
Протокол должен соответствовать значениям, используемым в конфигурации сервера:
~/client-configs/base.conf
proto udp
Уберите режим комментариев для директив user
и group
, удалив символ «;» из начала каждой строки:
~/client-configs/base.conf
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup
Найдите директивы, задающие ca
, cert
и key
. Поставьте знак комментария перед строками этих директив, поскольку вы вскоре добавите сертификаты и ключи в сам файл:
~/client-configs/base.conf
# 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
непосредственно из файла конфигурации клиента:
~/client-configs/base.conf
# If a tls-auth key is used on the server
# then every client must also have the key.
#tls-auth ta.key 1
Создайте зеркальное отражение настроек cipher
и auth
, заданных в файле /etc/openvpn/server.conf
:
~/client-configs/base.conf
cipher AES-256-CBC
auth SHA256
Затем добавьте в файл директиву key-direction
. Вы должны задать значение «1», чтобы VPN правильно работала на клиентском компьютере:
~/client-configs/base.conf
key-direction 1
В заключение, добавьте несколько строк комментариев. Хотя вы можете включить эти директивы в каждый файл конфигурации клиента, их нужно включать только для клиентов Linux с файлом /etc/openvpn/update-resolv-conf
. Этот скрипт использует утилиту resolvconf
для обновления данных DNS клиентов Linux.
~/client-configs/base.conf
# 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
Добавьте в файл следующее:
~/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
, собирает все созданные вами для клиента файлы сертификатов и ключей, извлекает их содержимое, добавляет их в копию базового файла конфигурации и экспортирует все это в новый файл конфигурации клиента. Это означает, что вся необходимая информация хранится в одном месте, и вам не нужно по отдельности управлять файлами конфигурации клиента, сертификатами и ключами. Если в будущем вам потребуется добавить клиент, вы можете просто запустить этот скрипт, чтобы быстро создать файл конфигурации. Вся важная информация хранится в одном удобном для доступа месте.
Учтите, что при добавлении каждого нового клиента вам нужно будет сгенерировать для него новые ключи и сертификаты, прежде чем запускать этот скрипт и генерировать файл конфигурации. На следующем шаге вы сможете потренироваться в использовании этого скрипта.
Шаг 9 — Создание конфигураций клиентов
Если вы следовали указаниям руководства, на шаге 4 вы создали клиентский сертификат и ключ с именами client1.crt
и client1.key
соответственно. Вы можете сгенерировать файл конфигурации для этих учетных данных, перейдя в каталог ~/client-configs
и запустив скрипт, созданный в конце предыдущего шага:
- cd ~/client-configs
- sudo ./make_config.sh client1
При этом файл client1.ovpn
будет создан в каталоге ~/client-configs/files
:
- ls ~/client-configs/files
Output
client1.ovpn
Этот файл нужно будет переместить на устройство, которое вы планируете использовать в качестве клиента. Например, это может быть ваш локальный компьютер или мобильное устройство.
Хотя конкретные приложения для передачи зависят от операционной системы устройства и ваших предпочтений, один из наиболее надежных и безопасных способов — использовать SFTP (протокол передачи файлов SSH) или SCP (защищенное копирование) на стороне сервера. При этом файлы аутентификации VPN вашего клиента будут передаваться через шифрованное соединение.
Вот пример команды SFTP с использованием образца client1.ovpn
, который можно запустить с локального компьютера (macOS или Linux). Он помещает файл .ovpn
в домашний каталог:
- sftp sammy@your_server_ip:client-configs/files/client1.ovpn ~/
Вот несколько инструментов и обучающих модулей для безопасной передачи файлов с сервера на локальный компьютер:
Шаг 10 — Установка конфигурации клиентов
В этом разделе рассказывается о том, как установить клиентский профиль VPN в Windows, macOS, Linux, iOS и Android. Эти инструкции не зависят друг от друга, так что вы можете сразу перейти к той, которая относится к вашему устройству.
Подключение 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 для управления соединениями. Нажмите на значок, а затем нажмите на пункт меню Подключить client1, чтобы создать соединение 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
:
Output
update-resolv-conf
Затем отредактируйте перемещенный файл конфигурации клиента OpenVPN:
Если вы нашли файл update-resolv-conf,
уберите значок комментария из начала трех строк, добавленных для изменения настроек DNS:
client1.ovpn
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Если вы используете CentOS, измените директиву group
с nogroup
на nobody
для соответствия доступным группам дистрибутива:
client1.ovpn
group nobody
Сохраните и закройте файл.
Теперь для подключения к VPN вы можете просто указать команде openvpn
файл конфигурации клиента:
- sudo openvpn --config client1.ovpn
Эта команда должна установить подключение к вашей VPN.
iOS
Установка
Найдите в магазине приложений iTunes App Store приложение OpenVPN Connect, официальный клиент OpenVPN для iOS, и установите его. Чтобы переместить конфигурацию клиента iOS на устройство, подключите его к компьютеру напрямую.
Здесь описан процесс завершения передачи с помощью iTunes. Откройте iTunes на компьютере и нажмите iPhone > приложения. Прокрутите страницу до раздела Общий доступ к файлам и нажмите на приложение OpenVPN. Пустое окно справа OpenVPN Documents предназначено для общего доступа к файлам. Перетащите файл .ovpn
в окно OpenVPN Documents.
Запустите приложение OpenVPN на iPhone. Вы получите уведомление, что новый профиль готов к импортированию. Нажмите зеленый значок плюс, чтобы импортировать его.
Подключение
Приложение OpenVPN готово к использованию нового профиля. Установите соединение, передвинув кнопку Подключиться в положение Вкл. Для отключения передвиньте эту же кнопку в положение Выкл.
Примечание. Переключатель VPN в разделе Настройки нельзя использовать для подключения к VPN. Если вы попробуете сделать это, вы получите уведомление о том, что для подключения нужно использовать приложение OpenVPN.
Android
Установка
Откройте магазин приложений Google Play Store. Найдите приложение Android OpenVPN Connect, официальное клиентское приложение OpenVPN для Android, и установите его.
Вы можете переместить профиль .ovpn,
подключив устройство Android к вашему компьютеру через интерфейс USB и скопировав файл. Если у вас в компьютере есть разъем для SD-карт, мы можете извлечь SD-карту из устройства, скопировать на нее профиль и вставить карту обратно в устройство Android.
Запустите приложение OpenVPN и нажмите на меню, чтобы импортировать профиль.
Затем перейдите в местоположение сохраненного профиля (на снимке экрана используется расположение /sdcard/Download/
) и выберите файл. Приложение покажет, что профиль импортирован.
Подключение
Чтобы подключиться, просто нажмите кнопку Подключиться. Вам нужно будет указать, что вы доверяете приложению OpenVPN. Нажмите OK, чтобы установить соединение. Чтобы отключиться от VPN, вернитесь в приложение OpenVPN и выберите пункт Отключиться.
Шаг 11 — Тестирование соединения VPN (необязательно)
Примечание. Этот метод тестирования соединения VPN будет работать, только если вы настроите перенаправление всего трафика через VPN на шаге 5.
После завершения установки нужно провести простую проверку, чтобы убедиться, что все работает нормально. Не активируйте соединение VPN, откройте браузер и перейдите в DNSLeakTest.
Сайт покажет IP-адрес, назначенный вашим интернет-провайдером и видный остальному миру. Чтобы проверить настройки DNS через этот же сайт, нажмите Расширенный тест, и вы увидите, какие серверы DNS вы используете.
Теперь подключите клиент OpenVPN к VPN вашего дроплета и обновите браузер. Вы увидите совершенно другой IP-адрес (адрес вашего сервера VPN), и именно этот адрес будет виден остальному миру. Итак, в приложении DNSLeakTest функция Расширенный тест проверит ваши настройки DNS и подтвердит, что вы используете параметры DNS, заданные вашей VPN.
Шаг 12 — Отзыв сертификатов клиента
Иногда вам может понадобиться отозвать клиентский сертификат, чтобы предотвратить дальнейший доступ к серверу OpenVPN.
Для этого перейдите в каталог EasyRSA на компьютере CA:
Затем запустите скрипт easyrsa
с опцией revoke
, а затем укажите имя клиента, у которого хотите отозвать сертификат:
Система предложит вам подтвердить отзыв сертификата. Введите yes
:
Output
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
После подтверждения действия CA полностью отзовет сертификат клиента. Однако в текущий момент ваш сервер OpenVPN не может проверить, отозваны ли сертификаты каких-либо клиентов, и все клиенты будут иметь доступ к сети VPN. Чтобы устранить эту проблему, нужно создать на компьютере CA список отзыва сертификатов (CRL):
Эта команда генерирует файл crl.pem
. Выполните защищенное перемещение этого файла на ваш сервер OpenVPN:
- scp ~/EasyRSA-3.0.4/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 проверял созданный нами список отзыва сертификатов при каждой попытке подключения:
/etc/openvpn/server.conf
crl-verify crl.pem
Сохраните и закройте файл.
Перезапустите OpenVPN, чтобы завершить отзыв сертификата:
- sudo systemctl restart openvpn@server
Клиент больше не сможет подключаться к серверу, используя старые учетные данные.
Чтобы запретить доступ другим клиентам, повторите эту процедуру:
- Для отзыва сертификата используется команда
./easyrsa revoke client_name
. - Создайте новый список CRL
- Переместите новый файл
crl.pem
на сервер OpenVPN и скопируйте его в каталог/etc/openvpn
, чтобы перезаписать старый список. - Перезапустите службу OpenVPN.
С помощью этой процедуры вы можете отозвать любые сертификаты, которые ранее выпустили для вашего сервера.
Заключение
Теперь вы можете безопасно использовать интернет, защитив данные о своей личности и расположении и свой трафик от снуперов и цензоров.
Для настройки других клиентских систем вам нужно будет повторить шаги 4 и 9-11 для каждого дополнительного устройства. Чтобы запретить доступ клиентским системам, следуйте указаниям в шаге 12.
Настройка OpenVPN руководство и видео в 2021 [АйТи бубен]
OpenVPN — это приложение для создания безопасного IP-туннеля через единый UDP- или Порты TCP-порт 1194. Для обеспечения безопасности управляющего канала и потока данных, OpenVPN использует библиотеку OpenSSL (точнее протоколы SSLv3/TLSv1) т.е. доступны все возможности шифрования, аутентификации и сертификации библиотеки OpenSSL (любой шифр, размер ключа). Также может использоваться пакетная авторизация Алгоритм HMAC для OpenVPN, для обеспечения большей безопасности, и аппаратное ускорение для улучшения производительности шифрования.
OpenVPN используется на Solaris, OpenBSD, FreeBSD, NetBSD, GNU/Linux, Apple Mac OS X и Microsoft Windows.
Предустановленный ключ, — самый простой метод.
С помощью логина и пароля, — может использоваться без создания клиентского сертификата (серверный сертификат все равно нужен).
OpenVPN может использовать статические, предустановленные ключи или обмен динамическими ключами на основе TLS. Он также поддерживает соединения VPN с динамическими удалёнными узлами (DHCP или клиенты dial-up), туннели поверх NAT или через полноценный межсетевой экран (например, Правила iptables в Linux).
Настройки конфигурационного файла клиента идентичны по синтаксису и написанию как для Linux, так и для Windows.
Основные компоненты сети OpenVPN и объекты
Безопасность и шифрование в OpenVPN обеспечивается библиотекой Как пользоваться OpenSSL и протоколом транспортного уровня Transport Layer Security (TLS). Вместо OpenSSL в новых версиях OpenVPN можно использовать библиотеку PolarSSL. Протокол TLS представляет собой усовершенствование протокола защищенной передачи данных уровня защищенных сокетов Secure Socket Layers (SSL сертификаты для для сайта, почты).
В OpenSSL может использоваться симметричная и ассиметричная криптография.
В первом случае перед началом передачи данных на все узлы сети необходимо поместить одинаковый секретный ключ. При этом возникает проблема безопасной передачи этого ключа через небезопасный Интернет.
Во втором случае у каждого участника обмена данными есть два ключа — публичный (открытый) и приватный (секретный).
Публичный ключ используется для зашифрования данных, а приватный — для расшифрования. В основе шифрования лежит довольно сложная математика. Выбранный в SSL/TLS алгоритм зашифрования публичным ключом обеспечивает возможность расшифрования только с помощью приватного ключа.
Приватный ключ секретный, и должен оставаться в пределах узла, на котором он создан. Публичный ключ должен передаваться участникам обмена данными.
Для безопасной передачи данных необходимо идентифицировать стороны, принимающие участие в обмене данными. В противном случае можно стать жертвой так называемой «атаки посредника» (Man in the Middle, MITM). В ходе такой атаки злоумышленник подключается к каналу передачи данных и прослушивает его. Он также может вмешиваться, удалять или изменять данные.
Чтобы обеспечить аутентификацию (проверку подлинности пользователя) протокол TLS использует инфраструктуру публичных ключей (Public Key Infrastructure, PKI) и асимметричную криптографию.
Нужно осознавать, что расшифрование данных без наличия приватного ключа тоже возможно, например, методом последовательного перебора. Хотя такой метод и требует больших вычислительных ресурсов, это только вопрос времени, когда данные смогут быть расшифрованы.
Хотя размер ключа влияет на сложность расшифрования, никакой ключ не дает гарантии полной безопасности данных. Кроме того, существует возможность похищения уже расшифрованных данных и ключей за счет уязвимостей и закладок в операционной системе или прикладном ПО, а также в аппаратном обеспечении серверов и рабочих станций.
Шифрование данных увеличивает трафик и замедляет обмен данными. Чем больше длина ключа, применяемого для шифрования данных, тем труднее будет его подобрать, но и тем заметнее получится замедление обмена данными.
Задача:
- Настроить сервер OpenVPN Ubuntu 18.04.4 LTS в облаке. Выбор Linux сервера для OpenVPN: Облачная технология от DigitalOcean, Цена виртуального сервера 5 долларов в месяц. Колокейшн (дата-центр) выбран Амстердам, прекрасная связь с Украиной в этом центре.
- Создать простую инструкцию для подчиненного сисадмина по управлению сертификатами/ключами: создание, удаление и отзыв сертификатов клиентов OpenVPN
Предоставить доступ удаленным сотрудникам к локальным сетям для работы с бухгалтерским программным обеспечением и для просмотра видеокамер наблюдения.
Подключаемые удаленные офисы:
Офис Московский: 4 локальных сети со шлюзом под управлением Debian GNU/Linux 7.11 (wheezy)
Офис Данилевского: 1 локальная сеть шлюз MikroTik
Офис Гагарина 1: 1 локальная сеть
Клиенты:
Мобильные клиенты на Android
Удаленные клиенты Windows 10
Создание нового сертификата пользователя, под правами обычного пользователя (не root).
cd ~/openvpn-ca source vars ./build-key zabbix
cd ~/client-configs ./make_config.sh zabbix
cp /etc/openvpn/ccd/base.client /etc/openvpn/ccd/zabbix
Шаблон base.client содержит комментированные строки такого содержания
- base.client
$ cat base.client #ifconfig-push 10.8.0.21 10.8.0.22 #push "route 192.168.35.0 255.255.255.0" #push "route 192.168.22.0 255.255.255.0" #push "route 10.90.91.0 255.255.255.0" #iroute 192.168.35.0 255.255.255.0 #iroute 192.168.22.0 255.255.255.0 #iroute 10.90.91.0 255.255.255.0 # all trafic to VPN #push "redirect-gateway def1 bypass-dhcp" #push "dhcp-option DNS 208.67.222.222" #push "dhcp-option DNS 208.67.220.220"
Для отзыва дополнительных сертификатов выполните следующие шаги.
Настройка сетевой конфигурации Linux — сервера для безопасной работы сервера OpenVPN: iptables/UFW, ядро Linux.
Делаем первичную настройку безопасности Ubuntu. Iptables при помощи ufw разрешаем только SSH.
Многим удобнее смотреть, чем читать. Ниже видео версия этого руководства. Настоятельно рекомендую руководство прочитать!
Необходимо настроить сетевую конфигурацию сервера, чтобы OpenVPN мог корректно перенаправлять трафик. Инструкция применима для операционных систем на базе Linux ядра: Debian, Ubuntu, CentOS и т.д..
Разрешим серверу перенаправлять трафик, настройка производится в файле /etc/sysctl.conf:
sudo nano /etc/sysctl.conf
Найдите строку настройки net.ipv4.ip_forward. Удалите “#” из начала строки, чтобы раскомментировать её.
Для применения настроек к текущей сессии наберите команду:
sudo sysctl -p
В общем случае для корректной работы сервера OpenVPN вы должны открыть входящий порт для клиентов и включить NAT Маскарадинг (Masquerading) преобразование, если вы весь трафик клиента, хотите маршрутизировать через VPN.
В моей практике, чаще встречается конфигурация, когда клиентам нужно дать доступ только к локальным сетям, а весь основной трафик идет через обычного провайдер. В этом случае NAT настраивать не надо.
Firewall iptables:
Открываем UDP порт 1194 и разрешаем пакеты приходящие с интерфейса TUN и TAP или tun.
iptables -A INPUT -p udp --dport 1194 -j ACCEPT iptables -A INPUT -i tap+ -j ACCEPT or iptables -A INPUT -i tun+ -j ACCEPT # для динамического IP iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Если вы используете надстройку над iptables UFW, выполните нижеприведенные действия.
Найдите публичный интерфейс сети (public network interface). Для этого наберите команду:
ip route | grep default
Публичный интерфейс должен следовать за словом «dev».
Зная название интерфейса откроем файл /etc/ufw/before.rules и добавим туда соответствующие настройки:
sudo nano /etc/ufw/before.rules
Это файл содержит настройки UFW, которое применяются перед применением правил UFW. Добавьте в начало файла выделенные красным строки. Это настроит правила, применяемые по умолчанию, к цепочке POSTROUTING в таблице nat.
Не забудьте заменить eth0 в строке -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 eth0 -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE COMMIT # END OPENVPN RULES # Don't delete these required lines, otherwise there will be errors *filter . . .
Теперь мы должны сообщить UFW, что ему по умолчанию необходимо разрешать перенаправленные пакеты. Для этого откройте файл /etc/default/ufw. Найдите в файле директиву DEFAULT_FORWARD_POLICY. Мы изменим значение с DROP на ACCEPT:
DEFAULT_FORWARD_POLICY="ACCEPT"
Далее настроим сам файрвол для разрешения трафика в OpenVPN.
Если вы не меняли порт и протокол в файле /etc/openvpn/server.conf, вам необходимо разрешить трафик UDP для порта 1194. Если вы изменили эти настройки, введите указанные вами значения.
sudo ufw allow 1194/udp
Теперь деактивируем и активируем UFW для применения внесённых изменений:
sudo ufw disable sudo ufw enable
Сначала установим OpenVPN на наш сервер. OpenVPN доступен в стандартных репозиториях Ubuntu, мы можем использовать apt для его установки. Также мы установим пакет easy-rsa, который позволит нам настроить наш собственный внутренний центр сертификации (certificate authority, CA) для использования с нашей VPN.
Обновим список пакетов сервера и установим необходимые пакеты следующими командами:
sudo apt update sudo apt full-upgrade sudo apt install openvpn easy-rsa
OpenVPN это виртуальная частная сеть, использующая TLS/SSL. Это означает, что OpenVPN использует сертификаты для шифрования трафика между сервером и клиентами. Для выпуска доверенных сертификатов (trusted certificates) нам потребуется создать наш собственный центр сертификации.
Первый вариант копирования файлов easy-rsa
cp -r /usr/share/easy-rsa /etc/openvpn/ cd /etc/openvpn/easy-rsa
Но я буду использовать второй вариант копирования файлов easy-rsa
Для начала скопируем шаблонную директорию easy-rsa в нашу домашнюю директорию с помощью команды make-cadir:
make-cadir ~/openvpn-ca
Откройте на компьютере CA каталог EasyRSA, для этого перейдем в директорию openvpn-ca для начала настройки центра сертификации:
cd ~/openvpn-ca
В этом каталоге есть файл с именем vars, создайте его копию.
cp vars vars.original
Для настройки переменных нашего центра сертификации нам необходимо отредактировать файл vars. Откройте этот файл в вашем текстовом редакторе:
nano vars
Внутри файла вы найдёте переменные, которые можно отредактировать, и которые задают параметры сертификатов при их создании. Нам нужно изменить всего несколько переменных.
Чтобы в дальнейшем, при создании сертификатов, не появлялась ошибка про отсутствие файла openssl.cnf, вы можете пойти двумя путями. Первый просто переименовать нужный файл.
cp openssl-1.0.0.cnf openssl.cnf
И второй путь, отредактировать в файле vars параметр export KEY_CONFIG:
# This variable should point to # the openssl.cnf file included # with easy-rsa. #export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA` export KEY_CONFIG=$EASY_RSA/openssl-1.0.0.cnf
Перейдите ближе к концу файла и найдите настройки полей, используемые по умолчанию при создании сертификатов. Они должны выглядеть примерно так:
~/openvpn-ca/vars . . . export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="[email protected]" export KEY_OU="MyOrganizationalUnit" . . .
Замените значения, на что-нибудь другое, не оставляйте их не заполненными:
~/openvpn-ca/vars . . . export KEY_COUNTRY="UA" export KEY_PROVINCE="NY" export KEY_CITY="Kharkiv" export KEY_ORG="Mirax" export KEY_EMAIL="[email protected]" export KEY_OU="MyPersonal" . . .
Отредактируйте значение KEY_NAME чуть ниже, которое заполняет поле субъекта сертификатов. Проще всего задать ему имя server, потому что в документации примеры конфигов сервера OpenVPN используют это имя:
~/openvpn-ca/vars export KEY_NAME="server"
Сохраните и закройте файл.
Теперь мы можем использовать заданные нами переменные и утилиты easy-rsa для создания центра сертификации.
Убедитесь, что вы находитесь в директории центра сертификации и используйте команду source к файлу vars:
cd ~/openvpn-ca source vars
Вы должны увидеть следующий вывод:
Вывод
NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/sammy/openvpn-ca/keys
Возможно вам нужно будет переименовать файл:
cp openssl-1.0.0.cnf openssl.cnf
Убедимся, что мы работаем в “чистой среде” выполнив следующую команду:
./clean-all
Теперь мы можем создать наш корневой центр сертификации командой:
./build-ca
Эта команда запустит процесс создания ключа и сертификата корневого центра сертификации. Поскольку мы задали все переменные в файле vars, все необходимые значения будут введены автоматически. Нажимайте ENTER для подтверждения выбора:
В результате будет создан центр сертификации и два важных файла, ca.crt и ca.key, представляющие открытую и закрытую части сертификата SSL.
Теперь у нас есть центр сертификации, который мы сможем использовать для создания всех остальных необходимых нам файлов.
Теперь ваш центр сертификации установлен и готов подписывать запросы сертификатов.
Далее создадим сертификат, пару ключей и некоторые дополнительные файлы, используемые для осуществления шифрования, для нашего сервера.
Начнём с создания сертификата OpenVPN и ключей для сервера. Это можно сделать следующей командой:
Внимание: Если ранее вы выбрали имя, отличное от server, вам придётся немного изменить некоторые инструкции. Например, при копировании созданных файлов в директорию /etc/openvpn вам придётся заменить имена на заданные вами. Вам также придётся изменить файл /etc/openvpn/server.conf для того, чтобы он указывал на корректные .crt и .key файлы.
./build-key-server server
Вывод опять будет содержать значения по умолчанию, переданные этой команде (server), а также значения из файла vars.
Согласитесь со всеми значениями по умолчанию, нажимая ENTER. Не задавайте challenge password. В конце процесса два раза введите y для подписи и подтверждения создания сертификата:
Вывод
. . . Certificate is to be certified until May 1 17:51:16 2026 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
Далее создадим оставшиеся файлы. Мы можем сгенерировать сильные ключи протокола Диффи-Хеллмана, используемые при обмене ключами, командой:
./build-dh
Для завершения этой команды может потребоваться несколько минут.
Далее мы можем сгенерировать подпись HMAC для усиления способности сервера проверять целостность TSL:
openvpn --genkey --secret keys/ta.key
Далее мы можем сгенерировать сертификат и пару ключей для клиента. Вообще это можно сделать и на клиентской машине и затем подписать полученный ключ центром сертификации сервера, но в этой статье для простоты мы сгенерируем подписанный ключ на сервере.
В этой статье мы создадим ключ и сертификат только для одного клиента. Если у вас несколько клиентов, вы можете повторять этот процесс сколько угодно раз. Просто каждый раз передавайте уникальное значение скрипту.
Поскольку мы можем вернуться к этому шагу позже, мы повторим команду source для файла vars. Мы будем использовать параметр client1 для создания первого сертификата и ключа.
Для создания файлов без пароля для облегчения автоматических соединений используйте команду build-key:
cd ~/openvpn-ca source vars ./build-key client1
Для создания файлов, защищённых паролем, используйте команду build-key-pass:
cd ~/openvpn-ca source vars ./build-key-pass client1
В ходе процесса создания файлов все значения по умолчанию будут введены, вы можете нажимать ENTER. Не задавайте challenge password и введите y на запросы о подписи и подтверждении создания сертификата.
Далее настроим конфигурационный файл сервера OpenVPN с использованием созданных ранее файлов.
Копирование файлов в директорию OpenVPN. Нам необходимо скопировать нужные нам файлы в директорию /etc/openvpn.
Сначала скопируем созданные нами файлы. Они находятся в директории ~/openvpn-ca/keys, в которой они и были созданы. Нам необходимо скопировать сертификат и ключ центра сертификации, сертификат и ключ сервера, подпись HMAC и файл Diffie-Hellman:
cd ~/openvpn-ca/keys sudo cp ca.crt ca.key server.crt server.key ta.key dh3048.pem /etc/openvpn
Далее нам необходимо скопировать и распаковать файл-пример конфигурации OpenVPN в конфигурационную директорию, мы будем использовать этот файл в качестве базы для наших настроек:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
Изменения вносимые в скопированный конфигурационный файл /etc/openvpn/server.conf. Приведенные ниже директивы, нужно или добавить или раскомментировать, а директиву cipher заменить.
tls-auth ta.key 0 key-direction cipher AES-128-CBC auth SHA256 user nobody group nogroup
Рабочий конфигурационный файл OpenVPN сервера:
- server.conf
;local a.b.c.d local xxx.xxx.xxx.xxx port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key # This file should be kept secret dh dh3048.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist /var/log/openvpn/ipp.txt ;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100 ;server-bridge push "route 192.168.35.0 255.255.255.0" client-config-dir ccd route 192.168.35.0 255.255.255.0 route 192.168.22.0 255.255.255.0 route 10.90.91.0 255.255.255.0 # маршрут передается всем клиентам push "route 192.168.35.0 255.255.255.0" ;push "redirect-gateway def1 bypass-dhcp" ;push "dhcp-option DNS 208.67.222.222" ;push "dhcp-option DNS 208.67.220.220" client-to-client ;duplicate-cn keepalive 10 120 tls-auth ta.key 0 # This file is secret key-direction 0 cipher AES-128-CBC auth SHA256 ;compress lz4-v2 ;push "compress lz4-v2" ;comp-lzo max-clients 100 user nobody group nogroup persist-key persist-tun status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log ;log-append /var/log/openvpn/openvpn.log verb 3 ;mute 20 explicit-exit-notify 1
Включим сервис OpenVPN с помощью systemd.
При запуске сервера OpenVPN необходимо указать имя нашего файла конфигурации в качестве переменной после имени файла systemd. Файл конфигурации для нашего сервера называется /etc/openvpn/server.conf, поэтому мы добавим @server в конец имени файла при его вызове:
sudo systemctl start openvpn@server
Убедимся, что сервис успешно запущен командой:
sudo systemctl status openvpn@server
Если всё в порядке, настроем сервис на автоматическое включение при загрузке сервера:
sudo systemctl enable openvpn@server
Создание структуры директорий для конфигурационных файлов клиентов. В домашней директории создайте структуру директорий для хранения файлов:
mkdir -p ~/client-configs/files
Поскольку наши файлы конфигурации будут содержать клиентские ключи, мы должны настроить права доступа для созданных директорий:
chmod 700 ~/client-configs/files
Создание базовой конфигурации:
Далее скопируем конфигурацию-пример в нашу директорию для использования в качестве нашей базовой конфигурации:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
Откройте этот файл в вашем текстовом редакторе:
nano ~/client-configs/base.conf
Работающий base.conf. Я привел его одинаковым настройкам с сервером, изменил параметры cipher, auth, key-direction. Основное отличие клиентского файла от серверного в директиве client и задании местонахождения сервера OpenVPN, при помощи директивы remote.
Если ваш клиент работает на Linux и использует файл /etc/openvpn/update-resolv-conf нужно раскомментировать три нижние строчки.
# script-security 2 # up /etc/openvpn/update-resolv-conf # down /etc/openvpn/update-resolv-conf
- base.conf
client dev tun proto udp ;remote xxx.xxx.xxx.xxx 1194 remote vpn8.example.net 1194 resolv-retry infinite nobind #user nobody #group nogroup persist-key persist-tun #ca ca.crt #cert client.crt #key client.key remote-cert-tls server tls-auth ta.key 1 #cipher AES-256-CBC cipher AES-128-CBC auth SHA256 #comp-lzo verb 3 ;mute 20 key-direction 1 # script-security 2 # up /etc/openvpn/update-resolv-conf # down /etc/openvpn/update-resolv-conf
Теперь создадим простой скрипт для генерации файлов конфигурации с релевантными сертификатами, ключами и файлами шифрования. Он будет помещать сгенерированные файла конфигурации в директорию ~/client-configs/files.
Создайте и откройте файл make_config.sh внутри директории ~/client-configs:
nano ~/client-configs/make_config.sh
Вставьте следующие текст в этот файл:
- make_config.sh
~/client-configs/make_config.sh #!/bin/bash # First argument: Client identifier KEY_DIR=~/openvpn-ca/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
Теперь легко и понятно можно генерировать файлы конфигурации клиентов.
Если вы следовали всем шагам этой статьи, вы создали сертификат client1.crt и ключ клиента client1.key командой ./build-key client1 на шаге 7. Вы можете сгенерировать конфигурацию для этих файлов перейдя в директорию ~/client-configs и используя только что созданный нами скрипт:
cd ~/client-configs ./make_config.sh client1
Если всё прошло успешно, мы должны получить файл client1.ovpn в директории ~/client-configs/files:
ls ~/client-configs/files client1.ovpn
Теперь вы должны скопировать или переместить полученный файл конфигурации на клиентское устройство: на компьютер или смартфон.
Для Linux проще всего ставить этот же пакет OpenVPN, но настраивать его клиентом.
sudo apt install openvpn
Пример рабочего конфига для Ubuntu 20.04.1 LTS скачиваем файл (с расширением ovpn) созданный на этапе 10. Копируем его в директорию /etc/openvpn клиента (переименовываем расширение):
cp client1.ovpn client1.conf
Тестируем работу клиента:
sudo openvpn --config client1.conf
Если все ОК — настраиваем автозапуск клиента в Ubuntu. Для Ubuntu 18.04 LTS и выше нужно включить службу OpenVPN для запуска во время загрузки перечитать конфиг systemctl:
sudo systemctl enable openvpn sudo systemctl daemon-reload
Запускаем клиента
sudo systemctl start openvpn
В директории ccd хранятся индивидуальные настройки для каждого клиента. Имя файла должно соответствовать имени сгенерированного клиентского сертификата. Файлы конфигурации клиентов являются текстовыми файлами и содержат команды, выполняемые сервером при подключении клиентов. Обычно файл клиента содержать команды:
добавляет клиенту маршрут к локальной подсети центрального офиса(push «route 192.168.1.0 255.255.255.0»)
определяет адрес локальной подсети, находящейся за клиентом (например iroute 192.168.2.0 255.255.255.0)
привязка к статическому IP (ifconfig-push 192.168.14.21 192.168.14.22), где ifconfig-push <IP-адрес клиента> <IP-адрес сервера>. Выбранные пары IP-адресов, во-первых, должны быть уникальными, во-вторых, должны входить в состав последовательных подсетей, ограниченных маской /30 (255.255.255.252), и, в-третьих, должны находиться в пределах пула IP-адресов, выделенного для виртуальной частной сети (определяется параметром server файла конфигурации сервера OpenVPN).
# mkdir /etc/openvpn/ccd # nano ccd/farm1c push "route 192.168.1.0 255.255.255.0" #push "route 192.168.35.0 255.255.255.0" # static IP ifconfig-push 192.168.14.21 192.168.14.22 #iroute 192.168.2.0 255.255.255.0
Сотрудники увольняются и им нужно запретить доступ к VPN. Значит нужно отозвать их сертификат. Команда revoke-full с именем клиента используется для отзыва ssl сертификата OpenVPN.
Если нет файла .rnd (это файл генератора псевдослучайных чисел) в каталоге пользователя, от имени которого вы создаете сертификаты, выполните командой:
$ cd $ touch .rnd
Переходим в директорию центра сертификации и вводим команды:
$ cd ~/openvpn-ca $ source vars
Отзываем сертификат используя команду revoke-full с именем клиента, например client1.
$ ./revoke-full client1
В результате работы будет создан файл crl.pem в директории keys с необходимой для отзыва сертификата информацией.
Теперь нужно объяснить серверу OpenvPN, где ему брать информацию об отозванных сертификатах, для этого используется директива crl-verify. Сервер OpenVPN будет проверять список отозванных сертификатов из файла каждый раз crl.pem, когда кто-то устанавливает соединение с сервером.
Копируем crl.pem в каталог. В конце файла /etc/openvpn/server.conf задаем путь через директиву crl-verify
crl-verify crl.pem
Перезапускаем сервер OpenVPN
# service openvpn restart
Теперь клиент не сможет устанавливать соединение с сервером OpenVPN используя старый сертификат, в логе сервера будет появляться строка о том что сертификат отозван: VERIFY ERROR: depth=0, error=certificate revoked
Эта процедуру нужно проделывать для отзыва каждого созданного вами сертификата.
Если у вас 2 сервера openvpn, вам следует переименовать crl.pem и в crl-verify задать файл со своим именем. Просто для второго сервера копируем и переименовываем crl.pem например в crltcp.pem. Если вы укажите один и тот же файл для разных OpebVPN серверов — ваши сервера будут падать.
Frequently Asked Questions OpenVPN. Часто задаваемые вопросы по настройке сервера и клиентов OpenVPN
Проблема: Если сервер подключён к ISP при помощи технологии Как работает PPPoE, в этом случае OpenVPN не сможет сделать доступными сети за подключённым клиентом. Не будет отрабатывать команда iroute. Это связано с тем, что PPP прописывает маршрут по умолчанию в таком виде:
# netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0
Т.е. указывается маршрутом по умолчанию интерфейс (ppp0), а не IP адресс, такой записи сервер OpenVPN не понимает, для корректной работы сервера OpenVpn маршрут должен бы вида:
# netstat -rn Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 91.196.96.35 255.255.255.255 UGH 0 0 0 ppp0
Решение: Исправить маршрут по умолчанию можно командой (соответственно указав нужный вам IP)
route add 0/0 gw 91.196.96.35
или в скрипте при загрузке системы, но после поднятия интерфейса ppp0
route del default route add default gw 91.196.96.35 dev ppp0
Окружение: Клиент выходит в интернет с Хостинг VPS/VDS на Ubuntu 14.04.3 LTS + Настройка Dnsmasq Ubuntu установленной в FAQ VirtualBox. Сеть установлена в VirtualBox как сетевой мост. IP получается от Настройка DHCP сервера Linux, FreeBSD на интернет роутере (Netis WF2419R).
Проблема: Не работает push «dhcp-option DNS 10.26.95.254″. Соответственно все Что такое DNS Dnsmasq отсылает основному DNS серверу. Все бы ничего если бы клиенту не нужны локальные Что такое DNS.
Решение: Был доустановлен основной пакет
aptitude install dnsmasq
добавлены описания наших локальных зон (non-public domains) в конфигурационный файл dnsmasq.conf
server=/gaga.lan/10.26.95.254 server=/m86a.lan/10.26.95.254 server=/atlex.lan/10.26.95.254 server=/95.26.10.in-addr.arpa/10.26.95.254 server=/168.192.in-addr.arpa/10.26.95.254 server=/85.161.10.in-addr.arpa/10.26.95.254
В файле /etc/logrotate.d/openvpn прописываем настройки для приложения logrotate, ключевой параметр copytruncate (чтобы не перегружать OpenVPN и заставить его писать данные в тот же лог файл)
- openvpn
etc/openvpn/servers/vpnluxor/logs/openvpn.log { daily rotate 8 compress delaycompress missingok copytruncate notifempty create 640 root }
Для управления сертификатами/клиентами сервера OpenVPN при помощи веб-интерфейса существует не так много программ:
Файл | Машина | Назначение | Доступ |
ca.crt | Сервер и клиенты | Сертификат корневого СА | Публичный |
ca.key | Только на сервере | Необходим для подписи других сертификатов | Секретный |
dh{n}.pem | Только на сервере | Diffie Hellman параметры | Публичный |
vpnspar.crt | Только на сервере | Сертификат сервера | Публичный |
vpnspar.key | Только на сервере | Ключ сервера | Секретный |
darkfire.crt | Только на клиенте | Сертификат клиента | Публичный |
darkfire.key | Только на клиенте | Ключ клиента | Секретный |
Подборка руководств по настройке сервера и клиентов OpenVPN.
В этом разделе приведены как ссылки на мои руководства по настройке OpenVPN, так и на руководства других авторов, которым я доверяю.
Расширение границ VPN для включения дополнительных машин из подсетей на стороне клиента или сервера. Включение нескольких машин на стороне сервера при использовании маршрутизируемого VPN (dev tun)
Поскольку VPN действует только в режиме точка-точка, может возникнуть желание расширить границы VPN так, чтобы клиенты могли связываться с другими машинами в сети сервера, а не только с самим сервером.
Чтобы проиллюстрировать это примером, предположим, что в локальной сети на стороне сервера используется подсеть 10.66.0.0/24 и для пула VPN-адресов используется 10.8.0.0/24, о чем говорится в директиве server в файле конфигурации OpenVPN-сервера.
Во-первых, вы должны сообщить VPN-клиентам, что подсеть 10.66.0.0/24 доступна через VPN. Это легко можно сделать с помощью следующих директив в конфигурационном файле сервера:
push "route 10.66.0.0 255.255.255.0"
Далее, необходимо настроить на LAN— шлюзе в сети сервера маршрут для маршрутизации пакетов, предназначенных для подсети VPN-клиентов (10.8.0.0/24) через OpenVPN-сервер (это необходимо только тогда, когда сервер OpenVPN и LAN-шлюз – разные машины).
Убедитесь, что вы включили пересылку для IP (ip-forwarding) (параметр ядра net.ipv4.ip_forward должен быть равен 1) и TUN/TAP на машине OpenVPN-сервера.
Проталкивание изменений DNS для перенаправления всего трафика через VPN.
Сделанные нами настройки создают VPN соединение между двумя машинами, но они не заставляют эти машины использовать VPN соединение. Если вы хотите использовать VPN соединение для всего своего трафика, вам необходимо протолкнуть (push) настройки DNS на клиентские машины.
Для этого вам необходимо раскомментировать несколько директив. Найдите секцию redirect-gateway и удалите “;” из начала строки для расскоментирования redirect-gateway:
/etc/openvpn/server.conf
push "redirect-gateway def1 bypass-dhcp"
Чуть ниже находится секция dhcp-option. Удалите “;” для обеих строк:
/etc/openvpn/server.conf
push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220"
Это позволит клиентам сконфигурировать свои настройки DNS для использования VPN соединения в качестве основного.
Как Настроить VPN-сервер Linux с OpenVPN – Пошаговое Руководство
VPS
access_time
10 декабря, 2020
hourglass_empty
7мин. чтения
Аббревиатура VPN обозначает виртуальную частную сеть. Одной из программ VPN с открытым исходным кодом является OpenVPN. OpenVPN может работать как VPN-сервер Linux. На базовом уровне VPN создаёт защищённое соединение “точка-точка”. Хороший VPN для Linux – один из лучших способов защиты в Интернете или открытой сети. В этом руководстве мы покажем вам, как настроить собственный VPN-сервер Linux с помощью OpenVPN. Сделайте свой VPS безопасным!
Прокачайте ваш проект, воспользовавшись скидками на VPS-хостинг в Hostinger! Большой выбор планов, как для учебных, так и для крупных коммерческих проектов.
К предложению
Зачем использовать VPN-сервер Linux?
VPN имеет определённые преимущества. Некоторые из них выделены ниже:
- Безопасность. VPN обеспечивает более надёжную защиту, поскольку все данные зашифрованы. Это обеспечивает дополнительную безопасность по сравнению с брандмауэрами.
- Удалённый доступ. Чтобы обеспечить высокий уровень безопасности многие организации, правительственные и оборонные учреждения разрешают удалённый доступ только через их VPN.
- ISP шифрование. ISP означает провайдер услуг Интернета. Если вы используете общедоступное соединение Wi-Fi, интернет-провайдер может прочитать все ваши незашифрованные данные. Используя VPN, вы можете сохранить свои данные в безопасности, зашифровав их.
- Анонимность. VPN позволяет пользователям сохранять анонимность просмотров в Интернете. IP-адреса не отслеживаются.
- Изменение IP-адреса. VPN позволяет пользователям изменять свои IP-адреса. В некоторых случаях это используется в регионах с ограничениями на основе местоположения.
- Разблокировка сайтов. Некоторые сайты могут блокироваться в определённых географических регионах. VPN обеспечивает анонимность, поэтому часто используется для обхода интернет-цензуры и разблокировки веб-сайтов.
- Регулирование. Определённые интернет-провайдеры регулируют пропускную способность пользователя в зависимости от содержимого. Этого можно избежать с помощью VPN.
На более высоком уровне, с помощью шифрования, VPN делает ваши транзакции безопасными.
Рассказав о преимуществах VPN, мы логически подходим к части, где покажем, как происходит установка и настройка OpenVPN в Linux. Мы расскажем о настройке VPN-сервера Linux через OpenVPN и о том, как подключить его к Windows, Android и другим устройствам. Если же на этом этапе вы хотите узнать больше о протоколе OpenVPN, мы предлагаем вам прочитать обзор OpenVPN.
Предусловия:
- У вас должны быть права доступа root или sudo
- OpenVPN не должен быть предварительно установлен
- Брандмауэр должен разрешать трафик TCP через порт 943 и трафик UDP через порт 1194. Мы рекомендуем использовать UFW. Ознакомьтесь с нашим руководством по UFW, чтобы узнать всё необходимое
Настройка VPN-сервера Linux с Сервером Доступа OpenVPN
Во-первых, давайте обновим систему. Для CentOS:
yum -y update
Для Ubuntu и Debian обновите индексы, используя:
sudo apt update
Для установки OpenVPN вам потребуется пакет net-tools. Установите его, если он не был предварительно установлен. Пакет net-tools содержит ifcfg, необходимый для установки сервера OpenVPN.
Вы можете установить его для CentOS, используя:
sudo yum install net-tools
Для Ubuntu и Debian используйте следующую команду:
sudo apt install net-tools
Вы можете скачать клиент OpenVPN для вашего дистрибутива с веб-сайта OpenVPN. Получить ссылку можно здесь и использовать её вместе с командой curl. Пример команды curl для Ubuntu показан ниже:
curl -O http://swupdate.openvpn.org/as/openvpn-as-2.5.2-Debian9.amd_64.deb
Команда curl для CentOS:
curl -O http://swupdate.openvpn.org/as/openvpn-as-2.7.3-CentOS7.x86_64.rpm
Здесь вы можете добавить URL к вашему дистрибутиву. Убедитесь, что загружена правильная установка, напечатав контрольную сумму файла SHA256. Для этого используйте следующую команду:
sha256sum openvpn-as-*
Эта команда распечатает контрольную сумму:
6354ac41be811829e60b028d3a7a527e839232d7f782c1d29bb4d8bd32bf24d5 openvpn-as-2.7.3-CentOS7.x86_64.rpm
Вы можете сравнить контрольную сумму загруженного бинарного файла с контрольной суммой, представленной на сайте. Если контрольная сумма совпадает, установите ранее загруженный бинарный файл.
Для установки в CentOS используйте:
sudo rpm --install openvpn-as-*.rpm
Аналогично, для установки в Ubuntu и Debian введите следующую команду в командной строке:
sudo dpkg -i openvpn-as-*.deb
Установка OpenVPN займёт некоторое время. После завершения установки вы увидите интерфейс Администратора и детали интерфейса Клиента. Пользователь openvpn будет создан по умолчанию во время установки. Вы можете задать пароль для этого пользователя, используя:
passwd openvpn
Это действие установит новый пароль. Запомните его, так как он будет использоваться для входа в систему. Используйте URL администратора для входа и завершения процесса установки OpenVPN. В нашем случае URL администратора – https://31.220.111.160:943/admin. Обычно URL – это просто ваш VPS-адрес, порт: 943 с /admin в конце, как в примере.
Вы увидите следующий экран:
Имя пользователя, как упоминалось ранее, openvpn, а пароль – тот, который вы только что установили для этого пользователя. Как только вы войдёте в систему, вы увидите страницу с условиями. Прочитайте их и нажмите кнопку Agree (Cогласен), чтобы продолжить. На следующей странице, вы найдёте информацию о настройках и состоянии сервера.
Настройки по умолчанию вполне адекватны и позволяют MacOS, Linux, Windows, Android и iOS подключиться к VPN-серверу Linux. Если вы хотите изменить какие-либо настройки, обязательно нажмите Apply (Применить) и Update Running Server (Обновить запущенный сервер), чтобы активировать изменения.
Это завершает установку по умолчанию. Далее мы настроим туннель OpenVPN.
Настройка VPN-сервера Linux с OpenVPN для Туннелирования
Включите переадресацию IP в вашем ядре с помощью следующей команды:
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.d/99-sysctl.conf
Это активирует переадресацию трафика через IPv4. Чтобы применить эти изменения, используйте следующую команду:
sudo sysctl -p
OpenVPN не поддерживает одновременные туннели через IPv6 и IPv4, поэтому вы можете отключить IPv6, используя:
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
Чтобы отключить IPv6 вручную, добавьте следующие параметры, которые будут установлены при загрузке. Эти параметры должны быть добавлены в файл 99-sysctl.conf, расположенный в /etc/sysctl.d/. Просто используйте команду cd для доступа к папке и предпочитаемый текстовый редактор для редактирования файла. Не забудьте сохранить изменения!
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 net.ipv6.conf.eth0.disable_ipv6 = 1
Далее вы можете активировать новые настройки, используя:
sysctl -p
Далее, в файле hosts, расположенном в /etc/ прокомментируйте строку разрешения IPv6, как показано ниже:
::1 localhost ip6-localhost ip6-loopback
Таким образом, мы отключили IPv6. Затем снова войдите в систему по URL сервера Администратора и перейдите в настройки VPN.
В разделе Маршрутизация (Routing), напротив опции “Должны ли VPN-клиенты иметь доступ к частным подсетям (непубличным сетям на стороне сервера)?” должно быть указано “Нет”.
Напротив опции “Должен ли интернет-трафик клиента маршрутизироваться через VPN?” должно быть указано “Да”.
Чтобы избежать утечки DNS, измените настройки распознавателя DNS. Выберите “Клиенты должны использовать те же DNS-сервера, что и Access Server хост.”
Сохраните эти настройки и не забудьте нажать на Update Running Server (Обновить запущенный сервер). Вы можете перезапустить сервер OpenVPN, используя вкладку Status (Состояние) в консоли администратора. Отсюда вы можете остановить сервер, а затем запустить его снова.
На этом наша настройка сервера OpenVPN завершена. Далее мы можем проверить клиентские установки.
Как Подключить VPN-сервер Linux к Другим Устройствам с OpenVPN
Теперь, когда ваш сервер запущен и работает, мы можем подключить к нему несколько устройств! Мы рассмотрим наиболее популярные варианты операционной системы:
Установка и Подключение Клиента OpenVPN на Windows
Откройте URL-адрес клиента OpenVPN, вы сможете показывать ссылки на клиентские загрузки на разных операционных системах.
Выберите версию Windows и запустите установку.
После завершения установки вам будет предложено ввести имя пользователя и пароль OpenVPN. IP-адрес сервера будет заполнен автоматически.
Вы можете использовать значок OpenVPN на панели задач Windows для отключения, повторного подключения и просмотра состояния подключения.
Установка и Подключение Клиента OpenVPN на MacOS
Подключитесь к пользовательскому интерфейсу Клиента OpenVPN и щёлкните по ссылке, чтобы загрузить программное обеспечение OpenVPN для MacOS. После загрузки этого пакета откроется окно со значком пакета установщика.
Следуйте стандартной процедуре установки приложения MacOS.
Дважды щёлкните по иконке этого установщика и нажмите “Открыть”, чтобы запустить установку.
После завершения установки вы увидите иконку OpenVPN на панели задач macOS. Вы можете щёлкнуть правой клавишей мыши по иконке, чтобы увидеть доступные опции и подключиться к OpenVPN.
После того, как вы выберите опцию “Подключиться к”, вы увидите всплывающее окно с запросом имени пользователя и пароля OpenVPN. Здесь вы должны ввести учётные данные и нажать “Подключиться”, чтобы установить соединение с VPN-сервером Linux.
Установка и Подключение Клиента OpenVPN на Linux
Установка клиента на Linux немного отличается. Загрузите и установите клиентское программное обеспечение OpenVPN в CentOS, используя следующую команду:
sudo yum install OpenVPN
Аналогично, вы можете установить клиентское программное обеспечение OpenVPN на Debian или Ubuntu, используя следующую команду:
sudo apt-get install openvpn
Откройте клиентский интерфейс OpenVPN и загрузите соответствующий профиль для вашей ОС. Кроме того, вы можете использовать команду wget или curl и указать URL-адрес для загрузки программного обеспечения.
Скопируйте загруженный профиль в папку /etc/openvpn и переименуйте его в client.conf. Запустите сервис туннелей OpenVPN, где вам будет предложено ввести имя пользователя и пароль. Начните операцию с помощью:
sudo service openvpn start
Вы можете использовать ipconfig или ip addr, чтобы просмотреть сетевые подключения. Как только интерфейс VPN станет доступным, вы увидите, что интерфейс tun0 добавлен в существующий список, показанный в выводе.
Установка и Подключение Клиента OpenVPN на Android
Сначала перейдите в магазин Google Play и найдите OpenVPN Connect. Установите приложение OpenVPN Connect.
Открыв, вы увидите три параметра: Частный туннель (Private Tunnel), Сервер доступа (Access Server) и Профиль OVPN (OVPN Profile).
Выберите Access Server и заполните все данные вручную:
- Title – укажите предпочитаемое имя подключения.
- Access Server Hostname – IP-адрес вашего VPN-сервера Linux
- Port – порт 934 вашего VPN-сервера Linux
- Username – имя пользователя, установленное на вашем сервере (openvpn по умолчанию)
- Password – пароль, который вы задали в консоли при настройке VPN-сервера Linux в терминальной среде
Или же вы можете импортировать файл .ovpn для профиля. Вы можете получить профиль подключения из клиентского интерфейса.
Установка и Подключение Клиента OpenVPN на iOS
Как и в случае с Android, вы можете установить программное обеспечение OpenVPN из App Store.
Завершите установку и откройте только что установленное приложение. Оно попросит вас заполнить данные профиля или загрузить файл профиля, как и версия Android.
Как только они будут добавлены, вы можете начать использовать OpenVPN на вашем iPhone или iPad.
Настройки Сжатия VPN-сервера Linux
Если вы подключены к VPN, а Интернет не работает, вы можете проверить журналы OpenVPN по адресу /var/log/openvpnas.log в VPS. Если вы обнаружите записи, аналогичные приведённым ниже, вы, скорее всего, столкнулись с проблемой сжатия:
2019-03-23 18:24:05+0800 [-] OVPN 11 OUT: 'Mon Mar 23 08:59:05 2016 guest/123.45.67.89:55385 Bad compression stub decompression header byte: 251'
Чтобы решить эту проблему, вы можете отключить сжатие. Это можно сделать из интерфейса Администратора. Откройте интерфейс Администратора и нажмите на опцию Advanced VPN.
Перейдите к настройкам сжатия по умолчанию (Default Compression Settings). Здесь отключите опцию Поддержка сжатия на клиентских VPN-соединениях (Support compression on client VPN connection).
Примените изменения и нажмите на опцию Update Running Server. Проблема должна исчезнуть.
Добавление Пользователей на VPN-сервер Linux c OpenVPN
Бесплатный клиент OpenVPN поддерживает двух пользователей. Чтобы создать больше пользователей, вам придётся выбрать любой из платных планов. Вы можете добавить дополнительных пользователей из интерфейса администратора. Перейдите во вкладку “Управление пользователями” и нажмите ссылку “Права пользователя”.
Введите новое имя пользователя, как показано ниже:
Настройте дополнительные параметры для нового пользователя, нажав на ссылку «Дополнительные параметры». Здесь вы можете добавить пароль и другие детали.
Сохраните эти настройки и нажмите на “Обновить запущенный сервер” (Update Running Server).
Настройка Профилей Автоматического Входа для VPN-сервера Linux с OpenVPN
С OpenVPN, вы также можете настроить профили автоматического входа. Как результат весь ваш нелокальный трафик будет маршрутизироваться через VPN автоматически. Если вы хотите вручную включить или отключить VPN, вы можете использовать закрытые профили Пользователя или Сервера.
Чтобы настроить автоматический вход в систему, откройте интерфейс Администратора и выберите ссылку “Права пользователя” (User Permissions). Здесь установите флажок напротив “Разрешить автоматический вход” (Allow Auto-login).
Как Проверить Linux VPN-сервер с Запущенным OpenVPN
Чтобы проверить, работает ли OpenVPN должным образом, подключите VPN-клиент и проверьте свой IP-адрес. Вы можете воспользоваться сайтом проверки утечки DNS в браузере. Он должен показать вам IPv4-адрес сервера OpenVPN.
Далее вы можете выбрать Расширенный тест. В результате вы должны получить IP-адреса для DNS-резольвера, который вы выбрали для своего клиентского устройства.
Вы также можете подтвердить, что трафик не использует IPv6. Чтобы проверить это, воспользуйтесь сайтом проверки IPv6. На странице результатов вы должны увидеть IP-адрес сервера и сообщение о том, что IPv6-адрес не был обнаружен.
В Завершение
В этом руководстве вы узнали, как настроить VPN-сервер Linux с OpenVPN и как подключить его с помощью различных клиентов, таких как Windows, Linux, Android, iPhone или iPad и MacOS.
Теперь, когда вы знаете главные нюансы, вы можете безопасно пользоваться Интернетом с помощью своего нового Linux VPN-сервера. Чтобы узнать больше, прочитайте официальное руководство OpenVPN, которое можно найти в интерфейсе администратора. На этом мы завершаем вашу первую конфигурацию OpenVPN в режиме server-client. Наслаждайтесь безопасным Интернетом с помощью OpenVPN!
Настройка OpenVPN в Ubuntu
Настоящая частная виртуальная сеть или Virtual Private Network (VPN) — это зашифрованное соединенный туннель между двумя сетями, который соединяет две доверенные точки. Это не веб-протокол HTTPS, который считает доверенными всех клиентов. К VPN могут подключиться только те клиенты, которые имеют специальные ключи доступа.
Понятие VPN в наши дни стало очень растянутым, после появления частных виртуальных сетей, которые доверяют всем и распространения HTTPS. Многие из сетей VPN представляют собой коммерческие решения с минимальным количеством настроек для обеспечения удаленного доступа сотрудников. Но не все доверяют этим решениям. Частная виртуальная сеть соединяет две сети в одну, например, сеть офиса и домашнюю сеть работника. Сервер VPN необходим для того чтобы сервер и клиент могли пройти аутентификацию друг с другом.
Настройка аутентификации сервера и клиента требует много работы, и поэтому коммерческие решения с минимумом настроек проигрывают в этом плане. Но на самом деле не так уж трудно установить сервер OpenVPN. Вам понадобится два узла в разных сетях, чтобы организовать тестовое окружение, например, можно использовать несколько виртуальных машин или реальные серверы. Как вы уже поняли, в этой статье будет рассмотрена настройка OpenVPN в Ubuntu для создания полноценной частной виртуальной сети.
Установка OpenVPN
На обеих машинах должен быть установлен OpenVPN, это довольно популярная программа, поэтому вы можете установить ее из официальных репозиториев. Также нам понадобится Easy-RSA для работы с секретными ключами. Для установки программ в Ubuntu используйте такую команду:
sudo apt install openvpn easy-rsa
Оба пакеты должны быть установлены как на сервере, так и на клиенте. Они понадобятся для настройки программы. Первый этап статьи установка и настройка openvpn завершен.
Настройка центра сертификации
Первое что нужно сделать, это создать правильную инфраструктуру для открытых ключей на сервере. Сервером мы считаем ту машину, к которой будут подключаться пользователи. Собственный центр сертификации дает несколько преимуществ, у вас будет собственный орган сертификации, который упростит распространение ключей и управление ими. Например, вы можете отозвать сертификаты клиента на сервере. Также теперь не нужно хранить все клиентские сертификаты, центру сертификации будет достаточно знать, что сертификат подписан CA. Кроме сложной системы ключей, вы можете использовать статические ключи, если нужно предоставить доступ только нескольким пользователям.
Обратите внимание, что все секретные ключи должны находится в надежном месте. В OpenVPN открытый ключ называется сертификатом и имеет расширение .crt, а закрытый ключ так и называется ключом, его расширение — .key.
Сначала создайте папку для хранения сертификатов Easy-RSA. Фактически, конфигурация OpenVPN выполняется вручную, так что папку можно разместить где угодно:
sudo mkdir /etc/openvpn/easy-rsa
Затем скопируем в эту папку все необходимые скрипты easy-rsa:
sudo cp -R /usr/share/easy-rsa /etc/openvpn/
Далее нам нужно создать центр сертификации в этой папке. Для этого перейдите в нее и выполните такие команды:
cd /etc/openvpn/easy-rsa/
sudo -i
# source ./vars
# ./clear-all
# ./build-ca
Первой командной мы переключаемся в консоль от имени суперпользователя, второй загружаем переменные окружения из файла ./vars. Команда ./clear-all создает папку keys если ее нет и очищает ее содержимое. И последняя команда инициализирует наш центр сертификации. Теперь в папке .keys появились все необходимые ключи:
Настройка сертификатов клиента
Дальше нужно повторить процедуру копирования скриптов управления RSA, как мы это делали на сервере:
sudo cp -R /usr/share/easy-rsa /etc/openvpn/
Теперь нам нужно скопировать сертификат, файл с расширением .crt в папку /etc/openvpn на всех клиентах. Например, скачаем этот файл для нашего клиента с помощью scp:
sudo scp пользователь@хост:/etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/easy-rsa/keys
Только теперь можно создать свой секретный ключ на основе сертификата CA:
cd /etc/openvpn/easy-rsa/
sudo -i
# source ./vars
# build-req Sergiy
Обратите внимание, что ca.crt должен лежать в папке с ключами, иначе ничего не сработает. Теперь утилита создаст ключ, на основе которого, вы сможете подключиться к OpenVPN серверу, но вам еще осталось подписать его на сервере. Отправьте полученный .csr файл на сервер с помощью того же самого scp:
scp /etc/openvpn/easy-rsa/keys/Sergiy.csr пользователь@хост:~/
Затем уже на сервере в папке /etc/openvpn/easy-rsa нужно выполнить команду подписи сертификата:
./sign-req ~/Sergiy
Подпись сертификата нужно подтвердить. Затем программа сообщит что он был подписан и добавлен в базу данных. В папке с сертификатом csr появится файл .crt, который нужно вернуть назад на клиентскую машину:
sudo scp пльзователь@хост:/home/Sergiy.crt /etc/openvpn/easy-rsa/keys
Только после этого сервер и клиент имеют все необходимые ключи для подключения и установки связи. Осталось еще несколько настроек. Если вы планируете использовать шифрование TLS, то необходимо создать на сервере набор данных Диффи-Хафмана, для этого используйте команду:
./build-dh
Дальше будет рассмотрена настройка OpenVPN для сервера и клиента, осталось совсем немного до получения рабочей конфигурации.
Настройка OpenVPN
Теперь настройка сервера OpenVPN. По умолчанию, в папке конфигурационных файлов OpenVPN ничего нет. Их нужно создать самостоятельно в зависимости от того, что планируется настраивать, сервер или клиент. Нужный файл конфигурации OpenVPN можно найти по адресу /usr/share/doc/openvpn/examples/sample-config-files/. Сначала создадим конфигурационный файл для сервера:
zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
Здесь вам нужно настроить несколько параметров:
port и proto — порт и протокол, по которым будет работать программа;
port 1194
proto udp
Все созданные ключи нужно прописать в конфигурационном файле. Наши ключи хранятся по адресу /etc/openvpn/easy-rsa/keys:
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/ca.crt
key /etc/openvpn/easy-rsa/keys/ca.key
dh /etc/openvpn/easy-rsa/keys/dh.pem
Настраиваем диапазон адресов для виртуальной сети, наш сервер будет доступен по первому из них — 10.8.0.1:
server 10.8.0.0 255.255.255.0
После завершения настройки сохраните изменения в файле, вы можете либо вставить всю эту конфигурацию себе или отредактировать файл с примером. Готовые рабочие настройки сервера:
port 1194
proto udp
comp-lzo
dev tun
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/ca.crt
dh /etc/openvpn/easy-rsa/2.0/keys/dh3048.pem
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
Настройка сервера OpenVPN завершена. Дальше необходимо запустить OpenVPN сервер. Это можно сделать прямо из командной строки, просто укажите адрес конфигурационного файла:
openvpn /etc/openvpn/server.conf
Дальше нам нужно настроить компьютер клиента. Вы можете аналогично скопировать конфигурационный файл из директории с примерами, только на этот раз его не нужно распаковывать:
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/client.conf
Вы можете создать несколько конфигурационных файлов клиента для подключения к разным серверам. Откройте конфигурационный файл и измените в нем такие параметры:
remote — это ваш адрес сервера OpenVPN, адрес и порт должны совпадать с настроенными на сервере, например:
remote 194.67.215.125 1194
ca — ключ, который вы получили от центра сертификации, мы расположили его в папке /etc/openvpn/.
cert и key — это открытый и секретный ключи клиента, с помощью них вы и будете подключаться к серверу. Как вы помните, мы сохранили их в папке /etc/openvpn/easy-rsa/keys/.
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/Sergiy.crt
key /etc/openvpn/easy-rsa/keys/Sergiy.key
Остальные настройки можно оставить как есть. Вот файл настройки целиком, который вы можете скопировать:
client
dev tun
proto udp
remote 194.67.215.125 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/Sergiy.crt
key /etc/openvpn/easy-rsa/keys/Sergiy.key
tls-auth ta.key 1
comp-lzo
verb 3
Сохраните настройки, теперь клиент готов к подключению. Обратите внимание, что конфигурационные файлы должны максимально совпадать, отсутствие определенных опций в одном из файлов может привести к ошибкам. Это не значит, что файлы будут идентичны, но основные параметры openvpn должны быть одинаковыми. Вам осталось запустить OpenVPN на этой машине используя этот конфигурационный файл:
openvpn /etc/openvpn/client.conf
Готово, теперь все работает, если вы выполните ifconfig, то увидите что был добавлен интерфейс tun0:
ifconfig
Также вы можете попробовать выполнить ping адреса 10.8.0.1, именно этот адрес мы настроили для нашего сервера OpenVPN, пакеты ping будут нормально отправляться. Если пакеты не идут, или еще что-то не работает, обратите внимание на вывод обеих программ, возможно, возникли какие-либо ошибки или предупреждения, также убедитесь, что брандмауэр сервера разрешает доступ извне по udp для порта 1194. Еще можно запустить сервер или клиент, настроив в конфиге уровень подробности на максимум verb 9. Очень часто это помогает понять почему что-то не работает. Но вы еще не можете направлять трафик через туннель. Для этого нужно разрешить форвардинг и добавить несколько правил iptables. Сначала разрешаем транзит пакетов на сервере:
sysctl -w net.ipv4.ip_forward=1
Затем добавьте такие правила. Разрешаем всем подключаться к нашему серверу:
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
Разрешаем пользователям OpenVPN доступ к интернету:
iptables -I FORWARD -i tun0 -o eth0 -j ACCEPT
# iptables -I FORWARD -i eth0 -o tun0 -j ACCEPT
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
В этой статье мы рассмотрели как выполняется установка и настройка OpenVPN Ubuntu, а также как настроить openvpn для работы с аутентификацией по ключу.
Организация частных виртуальных сетей может быть очень полезной не только в организациях, но и скажем для обмена данными между двумя вашими компьютерами или для повышения безопасности в сети.
Источник: losst.ru
Руководство по подключению Linux для OpenVPN Access Server
Выбор клиентского программного обеспечения
Для подключения к серверу доступа OpenVPN из Linux требуется клиентская программа. Он будет захватывать трафик, который вы хотите отправить через туннель OpenVPN, шифровать его и передавать на сервер OpenVPN. И, конечно же, обратное, чтобы расшифровать обратный трафик.
Обсуждаемые пакеты Linux
Сервер доступа OpenVPN | openvpn-as | ||
Клиент OpenVPN 3 Linux | openvpn3 | ||
OpenVPN с открытым исходным кодом | openvpn 0 |
Класс | Виртуальный диапазон IP-адресов | Разрешенный доступ к локальной сети | Общие названия |
Сотрудники | 10.8.0.0/24 | Samba / почтовый сервер на 10.66.4.4 | [переменная] |
Системные администраторы | 10.8.1.0 / 24 | Вся подсеть 10.66.4.0/24 | системный администратор |
Подрядчики | 10.8.2.0/24 | Сервер подрядчика по адресу 10.66.4.12 | подрядчик1, подрядчик2 |
Теперь давайте переведем эту карту в конфигурацию сервера OpenVPN. Прежде всего, убедитесь, что вы выполнили описанные выше действия, чтобы сделать подсеть 10.66.4.0/24 доступной для всех клиентов (пока мы настроим маршрутизацию, чтобы разрешить клиентский доступ ко всем 10.66.4.0 / 24, мы наложим ограничения доступа с помощью правил брандмауэра для реализации приведенной выше таблицы политик).
Сначала определите статический номер устройства для нашего интерфейса tun , чтобы мы могли ссылаться на него позже в наших правилах брандмауэра:
dev tun0
В файле конфигурации сервера определите пул IP-адресов сотрудников:
сервер 10.8.0.0 255.255.255.0
Добавьте маршруты для диапазонов IP-адресов системного администратора и подрядчика:
маршрут 10.8.1.0 255.255.255.0 маршрут 10.8.2.0 255.255.255.0
Поскольку мы будем назначать фиксированные IP-адреса для конкретных системных администраторов и подрядчиков, мы будем использовать каталог конфигурации клиента:
каталог конфигурации клиента ccd
Теперь поместите специальные файлы конфигурации в подкаталог ccd , чтобы определить фиксированный IP-адрес для каждого VPN-клиента, не являющегося сотрудником.
ccd / sysadmin1
ifconfig-push 10.8.1.1 10.8.1.2
ccd / подрядчик1
ifconfig-push 10.8.2.1 10.8.2.2
ccd / подрядчик2
ifconfig-push 10.8.2.5 10.8.2.6
Каждая пара адресов ifconfig-push представляет конечные IP-точки виртуального клиента и сервера. Они должны быть взяты из последовательных подсетей / 30 для совместимости с клиентами Windows и драйвером TAP-Windows. В частности, последний октет IP-адреса каждой пары конечных точек должен быть взят из этого набора:
[1, 2] [5, 6] [9, 10] [13, 14] [17, 18] [21, 22] [25, 26] [29, 30] [33, 34] [37, 38] [41, 42] [45, 46] [49, 50] [53, 54] [57, 58] [61, 62] [65, 66] [69, 70] [73, 74] [77, 78] [81, 82] [85, 86] [89, 90] [93, 94] [97, 98] [101,102] [105,106] [109,110] [113,114] [117,118] [121,122] [125,126] [129,130] [133,134] [137,138] [141 142] [145 146] [149 150] [153 154] [157 158] [161 162] [165 166] [169 170] [173 174] [177 178] [181 182] [185 186] [189 190] [193 194] [197 198] [201 202] [205 206] [209 210] [213 214] [217 218] [221 222] [225 226] [229 230] [233 234] [237 238] [241 242] [245 246] [249 250] [253 254]
На этом настройка OpenVPN завершена.Последний шаг — добавить правила брандмауэра для завершения политики доступа. В этом примере мы будем использовать правила брандмауэра в синтаксисе Linux iptables :
# Правило сотрудников iptables -A ВПЕРЕД -i tun0 -s 10.8.0.0/24 -d 10.66.4.4 -j ПРИНЯТЬ # Правило системного администратора iptables -A ВПЕРЕД -i tun0 -s 10.8.1.0/24 -d 10.66.4.0/24 -j ПРИНЯТЬ # Правило подрядчика iptables -A ВПЕРЕД -i tun0 -s 10.8.2.0/24 -d 10.66.4.12 -j ПРИНЯТЬ
Использование альтернативных методов аутентификации
OpenVPN 2.0 и более поздних версий включают функцию, которая позволяет серверу OpenVPN безопасно получать имя пользователя и пароль от подключающегося клиента и использовать эту информацию в качестве основы для аутентификации клиента.
Чтобы использовать этот метод аутентификации, сначала добавьте в конфигурацию клиента директиву auth-user-pass . Он направит клиент OpenVPN запросить у пользователя имя пользователя / пароль, передав его на сервер по безопасному каналу TLS.
Затем настройте сервер на использование подключаемого модуля проверки подлинности, который может быть сценарием, общим объектом или DLL.Сервер OpenVPN будет вызывать плагин каждый раз, когда VPN-клиент пытается подключиться, передавая ему имя пользователя / пароль, введенные на клиенте. Плагин аутентификации может контролировать, разрешает ли сервер OpenVPN клиенту соединение, возвращая значение ошибки (1) или успеха (0).
Использование подключаемых модулей сценариев
Плагины
Script можно использовать, добавив директиву auth-user-pass-verify в файл конфигурации на стороне сервера. Например:
auth-user-pass-verify auth-pam.pl через-файл
будет использовать Perl-скрипт auth-pam.pl для аутентификации имени пользователя и пароля подключающихся клиентов. См. Описание auth-user-pass-verify на странице руководства для получения дополнительной информации.
Сценарий auth-pam.pl включен в дистрибутив исходного файла OpenVPN в подкаталог sample-scripts . Он будет аутентифицировать пользователей на сервере Linux с помощью модуля аутентификации PAM, который, в свою очередь, может реализовать теневой пароль, аутентификацию RADIUS или LDAP. auth-pam.pl в первую очередь предназначен для демонстрационных целей. Для реальной аутентификации PAM используйте плагин общего объекта openvpn-auth-pam , описанный ниже.
Использование общих объектов или подключаемых модулей DLL
Плагины общих объектов или DLL обычно представляют собой скомпилированные модули C, которые загружаются сервером OpenVPN во время выполнения. Например, если вы используете пакет OpenVPN на основе RPM в Linux, плагин openvpn-auth-pam должен быть уже собран. Чтобы использовать его, добавьте это в файл конфигурации на стороне сервера:
плагин / usr / share / openvpn / plugin / lib / openvpn-auth-pam.так что войдите
Это укажет серверу OpenVPN проверить имя пользователя / пароль, введенные клиентами с использованием модуля login PAM.
Для реального производственного использования лучше использовать плагин openvpn-auth-pam , потому что он имеет несколько преимуществ перед скриптом auth-pam.pl :
- Общий объект openvpn-auth-pam Плагин использует модель выполнения с разделенными привилегиями для повышения безопасности. Это означает, что сервер OpenVPN может работать с ограниченными привилегиями, используя директивы user nobody , group nobody и chroot , и по-прежнему сможет аутентифицироваться в файле теневых паролей, доступном только для чтения root.
- OpenVPN может передавать имя пользователя / пароль плагину через виртуальную память, а не через файл или среду, что лучше для локальной безопасности на сервере.
- Скомпилированные на C подключаемые модули обычно работают быстрее, чем скрипты.
Если вам нужна дополнительная информация о разработке собственных подключаемых модулей для использования с OpenVPN, см. Файлы README в подкаталоге plugin исходного дистрибутива OpenVPN.
Чтобы собрать подключаемый модуль openvpn-auth-pam в Linux, перейдите в каталог plugin / auth-pam в исходном дистрибутиве OpenVPN и запустите make .
Использование аутентификации по имени пользователя и паролю как единственная форма аутентификации клиента
По умолчанию, использование auth-user-pass-verify или подключаемого модуля проверки имени пользователя / пароля на сервере включит двойную аутентификацию, требуя, чтобы аутентификация как по сертификату клиента, так и по имени пользователя / паролю прошла успешно, чтобы клиент мог быть аутентифицированным.
Хотя это не рекомендуется с точки зрения безопасности, также можно отключить использование клиентских сертификатов и принудительно выполнить только аутентификацию по имени пользователя и паролю.На сервере:
клиент-сертификат не требуется
В таких конфигурациях обычно следует также установить:
имя пользователя как общее имя
, который сообщает серверу использовать имя пользователя для целей индексации, поскольку он будет использовать общее имя клиента, который аутентифицировался через сертификат клиента.
Обратите внимание, что client-cert-not-required не устраняет необходимость в сертификате сервера, поэтому клиент, подключающийся к серверу, который использует client-cert-not-required , может удалить cert и ключ директивы из файла конфигурации клиента, но не директива ca , потому что клиенту необходимо проверить сертификат сервера.
Как добавить двухфакторную аутентификацию в конфигурацию OpenVPN с использованием клиентских смарт-карт
См. Также статью: Смарт-карта OpenVPN HOWTO
О двухфакторной аутентификации
Двухфакторная аутентификация — это метод аутентификации, который сочетает в себе два элемента: то, что у вас есть, и то, что вы знаете.
Что-то у вас должно быть устройством, которое нельзя дублировать; таким устройством может быть криптографический токен, содержащий закрытый секретный ключ.Этот закрытый ключ создается внутри устройства и никогда не покидает его. Если пользователь, владеющий этим токеном, пытается получить доступ к защищенным службам в удаленной сети, процесс авторизации, который предоставляет или запрещает доступ к сети, может с высокой степенью уверенности установить, что пользователь, ищущий доступ, физически владеет известным сертифицированным токеном. .
Что-то, что вы знаете, может быть паролем, представленным криптографическому устройству. Без правильного пароля вы не сможете получить доступ к закрытому секретному ключу.Еще одна особенность криптографических устройств — запретить использование закрытого секретного ключа, если неправильный пароль был представлен более разрешенного количества раз. Такое поведение гарантирует, что если пользователь потеряет свое устройство, то его использование другим человеком будет невозможным.
Криптографические устройства обычно называются «смарт-картами» или «токенами» и используются вместе с PKI (инфраструктурой открытых ключей). Сервер VPN может проверить сертификат X.509 и убедиться, что пользователь владеет соответствующим секретным секретным ключом.Поскольку устройство не может быть дублировано и требует действующего пароля, сервер может аутентифицировать пользователя с высокой степенью уверенности.
Двухфакторная аутентификация намного надежнее аутентификации на основе пароля, потому что в худшем случае только один человек может использовать криптографический токен. Пароли можно угадать, и они могут быть открыты другим пользователям, поэтому в худшем случае бесконечное количество людей может попытаться получить несанкционированный доступ, когда ресурсы защищены с использованием аутентификации только по паролю.
Если вы храните секретный закрытый ключ в файле, ключ обычно зашифровывается паролем. Проблема с этим подходом заключается в том, что зашифрованный ключ подвергается атакам дешифрования или шпионскому / вредоносному ПО, запущенному на клиентском компьютере. В отличие от использования криптографического устройства, файл не может стереть себя автоматически после нескольких неудачных попыток дешифрования.
Что такое PKCS # 11?
Этот стандарт определяет API, называемый Cryptoki, для устройств, которые хранят криптографическую информацию и выполняют криптографические функции.Cryptoki, произносится как «криптографический ключ» и сокращенно от интерфейса криптографического токена, следует простому объектно-ориентированному подходу, решая задачи технологической независимости (любого типа устройства) и совместного использования ресурсов (несколько приложений имеют доступ к нескольким устройствам), предоставляя приложениям общее логическое представление устройства, называемое криптографическим токеном.
Источник: RSA Security Inc. https://www.emc.com/emc-plus/rsa-labs/standards-initiatives/pkcs-11-cryptographic-token-interface-standard.htm.
Подводя итог, PKCS # 11 — это стандарт, который может использоваться прикладным программным обеспечением для доступа к криптографическим токенам, таким как смарт-карты и другие устройства. Большинство поставщиков устройств предоставляют библиотеку, реализующую интерфейс поставщика PKCS # 11 — эта библиотека может использоваться приложениями для доступа к этим устройствам. PKCS # 11 — это кроссплатформенный бесплатный стандарт, не зависящий от производителя.
Поиск библиотеки поставщика PKCS # 11
Первое, что вам нужно сделать, это найти библиотеку провайдера, она должна быть установлена вместе с драйверами устройств.У каждого поставщика есть своя библиотека. Например, поставщик OpenSC PKCS # 11 находится в /usr/lib/pkcs11/opensc-pkcs11.so в Unix или в opensc-pkcs11.dll в Windows.
Как настроить криптографический токен
Вы должны следовать процедуре регистрации:
- Инициализировать токен PKCS # 11.
- Сгенерировать пару ключей RSA на токене PKCS # 11.
- Создайте запрос сертификата на основе пары ключей, для этого вы можете использовать OpenSC и OpenSSL.
- Отправьте запрос сертификата в центр сертификации и получите сертификат.
- Загрузите сертификат в маркер, отмечая при этом, что атрибуты id и label сертификата должны совпадать с атрибутами закрытого ключа.
Настроенный маркер — это маркер, который имеет объект закрытого ключа и объект сертификата, причем оба имеют одинаковые атрибуты id и label.
Простая утилита регистрации — Easy-RSA 2.0, которая является частью серии OpenVPN 2.1.Следуйте инструкциям, указанным в файле README, а затем используйте pkitool для регистрации.
Инициализируйте токен с помощью следующей команды:
$ ./pkitool --pkcs11-слоты / usr / lib / pkcs11 / $ ./pkitool --pkcs11-init / usr / lib / pkcs11 /
Зарегистрируйте сертификат, используя следующую команду:
$ ./pkitool --pkcs11 / usr / lib / pkcs11 / client1
Как изменить конфигурацию OpenVPN для использования криптографических токенов
У вас должен быть OpenVPN 2.1 или выше, чтобы использовать функции PKCS # 11.
Определите правильный объект
Каждый провайдер PKCS # 11 может поддерживать несколько устройств. Для просмотра списка доступных объектов вы можете использовать следующую команду:
$ openvpn --show-pkcs11-ids / usr / lib / pkcs11 / Следующие объекты доступны для использования. Каждый объект, показанный ниже, может использоваться как параметр для --pkcs11-id, пожалуйста, не забудьте использовать одинарные кавычки. Сертификат DN: / CN = Пользователь1 Серийный номер: 490B82C4000000000075 Серийный идентификатор: aaaa / bbb / 41545F5349474E415455524581D2A1A1B23C4AA4CB17FAF7A4600
Каждая пара сертификат / закрытый ключ имеет уникальную строку «Сериализованный идентификатор».Строка сериализованного идентификатора запрошенного сертификата должна быть указана для параметра pkcs11-id с использованием одинарных кавычек.
pkcs11-id 'aaaa / bbb / 41545F5349474E415455524581D2A1A1B23C4AA4CB17FAF7A4600'
Использование OpenVPN с PKCS # 11
Типичный набор опций OpenVPN для PKCS # 11
pkcs11-провайдеры / usr / lib / pkcs11 / pkcs11-id 'aaaa / bbb / 41545F5349474E415455524581D2A1A1B23C4AA4CB17FAF7A4600'
Будет выбран объект, соответствующий строке pkcs11-id.
Расширенные параметры OpenVPN для PKCS # 11
pkcs11-провайдеры /usr/lib/pkcs11/provider1.so /usr/lib/pkcs11/provider2.so pkcs11-id 'aaaa / bbb / 41545F5349474E415455524581D2A1A1B23C4AA4CB17FAF7A4600' pkcs11-контактный кэш 300 демон auth-retry nointeract удержание управления сигнал управления управление 127.0.0.1 8888 управление-запрос-пароли
Это загрузит двух провайдеров в OpenVPN, будет использовать сертификат, указанный в опции pkcs11-id , и использовать интерфейс управления для запроса паролей.Демон вернется в состояние удержания при наступлении события, когда к токену будет невозможно получить доступ. Токен будет использоваться в течение 300 секунд, после чего пароль будет повторно запрошен, сеанс будет отключен, если сеанс управления отключится.
Рекомендации по реализации PKCS # 11
Многие поставщики PKCS # 11 используют потоки, чтобы избежать проблем, вызванных реализацией LinuxThreads (setuid, chroot), настоятельно рекомендуется обновить glibc до Native POSIX Thread Library (NPTL), если вы собираетесь использовать PKCS #. 11.
OpenSC PKCS # 11 провайдер
Поставщик OpenSC PKCS # 11 находится в /usr/lib/pkcs11/opensc-pkcs11.so в Unix или в opensc-pkcs11.dll в Windows.
Разница между PKCS # 11 и Microsoft Cryptographic API (CryptoAPI)
PKCS # 11 — это бесплатный кроссплатформенный стандарт, независимый от производителя. CryptoAPI — это специальный API Microsoft. Большинство поставщиков смарт-карт поддерживают оба интерфейса. В среде Windows пользователь должен выбрать, какой интерфейс использовать.
Текущая реализация OpenVPN, использующая MS CryptoAPI (опция cryptoapicert ), работает хорошо, пока вы не используете OpenVPN как службу. Если вы хотите запустить OpenVPN в административной среде с помощью службы, реализация не будет работать с большинством смарт-карт по следующим причинам:
- Большинство поставщиков смарт-карт не загружают сертификаты в хранилище локального компьютера, поэтому реализация не сможет получить доступ к сертификату пользователя.
- Если клиент OpenVPN работает как служба без прямого взаимодействия с конечным пользователем, служба не может запросить у пользователя пароль для смарт-карты, что приведет к сбою процесса проверки пароля на смарт-карте.
Используя интерфейс PKCS # 11, вы можете использовать смарт-карты с OpenVPN в любой реализации, поскольку PKCS # 11 не имеет доступа к магазинам Microsoft и не обязательно требует прямого взаимодействия с конечным пользователем.
Маршрутизация всего клиентского трафика (включая веб-трафик) через VPN
Обзор
По умолчанию, когда клиент OpenVPN активен, через VPN будет проходить только сетевой трафик к сайту сервера OpenVPN и от него.Например, общий просмотр веб-страниц будет осуществляться с помощью прямых подключений в обход VPN.
В некоторых случаях такое поведение может быть нежелательным — вы можете захотеть, чтобы VPN-клиент туннелировал весь сетевой трафик через VPN, включая общий просмотр веб-страниц в Интернете. Хотя этот тип конфигурации VPN снижает производительность клиента, он дает администратору VPN больший контроль над политиками безопасности, когда клиент одновременно подключен к общедоступному Интернету и VPN.
Реализация
Добавьте следующую директиву в файл конфигурации сервера:
push "redirect-gateway def1"
Если ваша настройка VPN осуществляется через беспроводную сеть, где все клиенты и сервер находятся в одной беспроводной подсети, добавьте локальный флаг :
push "локальный def1 шлюз перенаправления"
Передача клиентам опции redirect-gateway приведет к тому, что весь сетевой трафик IP, исходящий на клиентских машинах, будет проходить через сервер OpenVPN.Сервер необходимо настроить так, чтобы он каким-то образом обрабатывал этот трафик, например, путем преобразования его в Интернет с помощью NAT или маршрутизации через прокси-сервер HTTP на сайте.
В Linux вы можете использовать такую команду для NAT трафика клиента VPN в Интернет:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Эта команда предполагает, что подсеть VPN — это 10.8.0.0/24 (взято из директивы server в конфигурации сервера OpenVPN) и что локальный интерфейс Ethernet — eth0 .
Когда используется шлюз перенаправления , клиенты OpenVPN будут маршрутизировать DNS-запросы через VPN, и VPN-серверу потребуется их обрабатывать. Это может быть выполнено путем передачи адреса DNS-сервера подключающимся клиентам, который заменит их обычные настройки DNS-сервера в течение времени, когда VPN активен. Например:
push "dhcp-option DNS 10.8.0.1"
настроит клиентов Windows (или клиентов, отличных от Windows с некоторыми дополнительными сценариями на стороне сервера) для использования 10.8.0.1 в качестве их DNS-сервера. Любой адрес, доступный для клиентов, может использоваться в качестве адреса DNS-сервера.
Предупреждения
Перенаправление всего сетевого трафика через VPN не совсем без проблем. Вот несколько типичных ошибок, о которых следует знать:
- Многие клиентские машины OpenVPN, подключенные к Интернету, будут периодически взаимодействовать с DHCP-сервером, чтобы продлить аренду своих IP-адресов. Параметр redirect-gateway может помешать клиенту достичь локального DHCP-сервера (поскольку сообщения DHCP будут маршрутизироваться через VPN), что приведет к потере аренды IP-адреса.
- Существуют проблемы с отправкой DNS-адресов клиентам Windows.
- Скорость просмотра веб-страниц на клиенте будет заметно ниже.
Для получения дополнительной информации о механизме директивы redirect-gateway см. Страницу руководства.
Запуск сервера OpenVPN на динамическом IP-адресе
Хотя клиенты OpenVPN могут легко получить доступ к серверу через динамический IP-адрес без какой-либо специальной настройки, все становится более интересным, когда сам сервер находится на динамическом адресе.Хотя у OpenVPN нет проблем с обработкой ситуации с динамическим сервером, требуется некоторая дополнительная настройка.
Первый шаг — получить динамический DNS-адрес, который можно настроить так, чтобы он «следил» за сервером при каждом изменении IP-адреса сервера. Доступно несколько поставщиков услуг динамического DNS, например dyndns.org.
Следующим шагом является настройка механизма, при котором каждый раз при изменении IP-адреса сервера динамическое DNS-имя будет быстро обновляться с новым IP-адресом, позволяя клиентам находить сервер по его новому IP-адресу.Для этого есть два основных способа:
- Используйте устройство маршрутизатора NAT с поддержкой динамического DNS (например, Linksys BEFSR41 ). Большинство недорогих устройств NAT-маршрутизатора, которые широко доступны, имеют возможность обновлять динамическое DNS-имя каждый раз, когда от ISP получена новая аренда DHCP. Эта установка идеальна, когда сервер OpenVPN представляет собой машину с одним сетевым адаптером внутри брандмауэра.
- Используйте клиентское приложение динамического DNS, такое как ddclient, для обновления динамического адреса DNS при изменении IP-адреса сервера.Эта установка идеальна, когда машина, на которой запущен OpenVPN, имеет несколько сетевых адаптеров и действует как межсетевой экран / шлюз для всего сайта. Чтобы реализовать эту настройку, вам необходимо настроить сценарий, который будет запускаться вашим клиентским программным обеспечением DHCP каждый раз, когда происходит изменение IP-адреса. Этот сценарий должен (а) запустить ddclient , чтобы уведомить вашего поставщика динамических DNS о вашем новом IP-адресе, и (б) перезапустить демон сервера OpenVPN.
Клиент OpenVPN по умолчанию распознает изменение IP-адреса сервера, если в конфигурации клиента используется удаленная директива , которая ссылается на динамическое DNS-имя.Обычная цепочка событий состоит в том, что (а) клиент OpenVPN не может своевременно получать сообщения поддержки активности со старого IP-адреса сервера, вызывая перезапуск, и (б) перезапуск вызывает повторное изменение имени DNS в директиве remote . разрешено, что позволяет клиенту повторно подключиться к серверу по его новому IP-адресу.
Дополнительную информацию можно найти в FAQ.
Подключение к серверу OpenVPN через HTTP-прокси.
OpenVPN поддерживает соединения через прокси-сервер HTTP со следующими режимами аутентификации:
- Без аутентификации прокси
- Базовая проверка подлинности прокси-сервера
- Проверка подлинности прокси NTLM
Прежде всего, использование прокси-сервера HTTP требует, чтобы вы использовали TCP в качестве протокола передачи туннеля.Поэтому добавьте следующее в конфигурацию клиента и сервера:
протокол протокола TCP
Убедитесь, что все строки proto udp в файлах конфигурации удалены.
Затем добавьте директиву http-proxy в файл конфигурации клиента (полное описание этой директивы см. На странице руководства).
Например, предположим, что у вас есть прокси-сервер HTTP в клиентской локальной сети по адресу 192.168.4.1 , который прослушивает соединения на порту 1080 .Добавьте это в конфигурацию клиента:
http-прокси 192.168.4.1 1080
Предположим, прокси-сервер HTTP требует базовой проверки подлинности:
http-прокси 192.168.4.1 1080 stdin базовый
Предположим, прокси-сервер HTTP требует проверки подлинности NTLM:
http-прокси 192.168.4.1 1080 stdin ntlm
Два приведенных выше примера аутентификации заставят OpenVPN запрашивать имя пользователя / пароль из стандартного ввода.Если вместо этого вы хотите поместить эти учетные данные в файл, замените stdin именем файла и поместите имя пользователя в строку 1 этого файла и пароль в строку 2.
Подключение к общему ресурсу Samba через OpenVPN
Этот пример предназначен для демонстрации того, как клиенты OpenVPN могут подключаться к общему ресурсу Samba через маршрутизируемый туннель dev tun . Если вы используете мост Ethernet ( dev tap ), вам, вероятно, не нужно следовать этим инструкциям, поскольку клиенты OpenVPN должны видеть серверные машины в своем сетевом окружении.
В этом примере мы предположим, что:
- серверная LAN использует подсеть 10.66.0.0/24 ,
- пул IP-адресов VPN использует 10.8.0.0/24 (как указано в директиве server в файле конфигурации сервера OpenVPN),
- , сервер Samba имеет IP-адрес 10.66.0.4 и
- , сервер Samba уже настроен и доступен из локальной сети.
Если серверы Samba и OpenVPN работают на разных машинах, убедитесь, что вы следовали разделу о расширении возможностей VPN за счет включения дополнительных машин.
Затем отредактируйте файл конфигурации Samba ( smb.conf ). Убедитесь, что хосты разрешают директиву разрешить подключение клиентов OpenVPN из подсети 10.8.0.0/24 . Например:
хостов позволяют = 10.66.0.0/24 10.8.0.0/24 127.0.0.1
Если вы используете серверы Samba и OpenVPN на одном компьютере, вам может потребоваться отредактировать директиву interfaces в файле smb.conf , чтобы также прослушивать подсеть интерфейса TUN 10.8.0.0 / 24 :
интерфейсов = 10.66.0.0/24 10.8.0.0/24
Если вы используете серверы Samba и OpenVPN на одном компьютере, подключитесь с клиента OpenVPN к общему ресурсу Samba, используя имя папки:
\ 10.8.0.1 \ Sharename
Если серверы Samba и OpenVPN находятся на разных машинах, используйте имя папки:
\ 10.66.0.4 \ sharename
Например, из окна командной строки:
чистое использование z: \ 10.66.0.4 \ sharename / ПОЛЬЗОВАТЕЛЬ: myusername
Реализация конфигурации балансировки нагрузки / аварийного переключения
Клиент
Конфигурация клиента OpenVPN может ссылаться на несколько серверов для балансировки нагрузки и переключения при отказе. Например:
удаленный server1.mydomain удаленный server2.mydomain удаленный server3.mydomain
укажет клиенту OpenVPN попытаться установить соединение с server1, server2 и server3 в указанном порядке.Если существующее соединение разорвано, клиент OpenVPN повторит попытку последнего подключенного сервера и, если это не удастся, перейдет к следующему серверу в списке. Вы также можете указать клиенту OpenVPN рандомизировать свой список серверов при запуске, чтобы клиентская нагрузка была вероятностно распределена по пулу серверов.
удаленно-случайный
Если вы также хотите, чтобы из-за сбоев разрешения DNS клиент OpenVPN перешел на следующий сервер в списке, добавьте следующее:
resolv-retry 60
Параметр 60 указывает клиенту OpenVPN попытаться разрешить каждое удаленное DNS-имя в течение 60 секунд, прежде чем перейти к следующему серверу в списке.
Список серверов также может относиться к нескольким демонам сервера OpenVPN, запущенным на одном компьютере, каждый из которых прослушивает соединения на другом порту, например:
удаленный smp-server1.mydomain 8000 удаленный smp-server1.mydomain 8001 удаленный smp-server2.mydomain 8000 удаленный smp-server2.mydomain 8001
Если ваши серверы являются многопроцессорными машинами, запуск нескольких демонов OpenVPN на каждом сервере может быть выгодным с точки зрения производительности.
OpenVPN также поддерживает директиву remote , относящуюся к DNS-имени, которое имеет несколько записей A в конфигурации зоны для домена. В этом случае клиент OpenVPN будет случайным образом выбирать одну из записей A каждый раз при разрешении домена.
Сервер
Самый простой подход к конфигурации балансировки нагрузки / переключения при отказе на сервере — использовать эквивалентные файлы конфигурации на каждом сервере в кластере, за исключением использования разных пулов виртуальных IP-адресов для каждого сервера.Например:
сервер1
сервер 10.8.0.0 255.255.255.0
сервер2
сервер 10.8.1.0 255.255.255.0
сервер3
сервер 10.8.2.0 255.255.255.0
Повышение безопасности OpenVPN
Один из часто повторяемых принципов сетевой безопасности заключается в том, что нельзя доверять одному компоненту безопасности настолько, чтобы его отказ стал причиной катастрофического нарушения безопасности.OpenVPN предоставляет несколько механизмов для добавления дополнительных уровней безопасности для защиты от такого исхода.
tls-auth
Директива tls-auth добавляет дополнительную подпись HMAC ко всем пакетам подтверждения SSL / TLS для проверки целостности. Любой пакет UDP, не имеющий правильной подписи HMAC, может быть отброшен без дальнейшей обработки. Подпись tls-auth HMAC обеспечивает дополнительный уровень безопасности, превышающий уровень, обеспечиваемый SSL / TLS. Может защитить от:
- DoS-атаки или наводнение порта на UDP-порту OpenVPN.
- Сканирование портов для определения того, какие UDP-порты сервера находятся в состоянии прослушивания.
- Уязвимости переполнения буфера в реализации SSL / TLS.
- инициации установления связи SSL / TLS с неавторизованных машин (хотя такие рукопожатия в конечном итоге не могут пройти аутентификацию, tls-auth может отключить их на гораздо более раннем этапе).
Использование tls-auth требует, чтобы вы сгенерировали общий секретный ключ, который используется в дополнение к стандартному сертификату / ключу RSA:
openvpn --genkey --secret ta.ключ
Эта команда сгенерирует статический ключ OpenVPN и запишет его в файл ta.key . Этот ключ следует скопировать по уже существующему защищенному каналу на сервер и все клиентские машины. Его можно разместить в том же каталоге, что и файлы RSA .key и .crt .
В конфигурации сервера добавить:
tls-auth ta.key 0
В конфигурации клиента добавить:
tls-auth ta.ключ 1
прото udp
Хотя OpenVPN позволяет использовать протокол TCP или UDP в качестве VPN-соединения, протокол UDP обеспечивает лучшую защиту от DoS-атак и сканирования портов, чем TCP:
протокол протокола udp
пользователь / группа (только не для Windows)
OpenVPN был очень тщательно разработан, чтобы позволить отбрасывать привилегии root после инициализации, и эту функцию всегда следует использовать в Linux / BSD / Solaris.Без привилегий root запущенный демон сервера OpenVPN предоставляет злоумышленнику гораздо менее заманчивую цель.
пользователь никто группа никто
Непривилегированный режим (только Linux)
В Linux OpenVPN можно запускать совершенно непривилегированно. Эта конфигурация немного сложнее, но обеспечивает лучшую безопасность.
Для работы с этой конфигурацией OpenVPN должен быть настроен для использования интерфейса iproute, это делается путем указания –enable-iproute2 для скрипта настройки.Пакет sudo также должен быть доступен в вашей системе.
Эта конфигурация использует возможность Linux для изменения разрешения устройства tun, чтобы непривилегированный пользователь мог получить к нему доступ. Он также использует sudo для выполнения iproute, чтобы можно было изменить свойства интерфейса и таблицу маршрутизации.
Конфигурация OpenVPN:
- Напишите следующий сценарий и поместите его в: / usr / local / sbin / unpriv-ip:
#! / Bin / sh sudo / sbin / ip $ *
- Выполните visudo и добавьте следующее, чтобы разрешить пользователю «user1» выполнить / sbin / ip:
user1 ALL = (ALL) NOPASSWD: / sbin / ip
- Вы также можете включить группу пользователей с помощью следующей команды:
% пользователей ALL = (ALL) NOPASSWD: / sbin / ip
- Добавьте в конфигурацию OpenVPN следующее:
разработчик tunX / tapX iproute / usr / местные / sbin / unpriv-ip
- Обратите внимание, что вы должны выбрать постоянный X и указать tun или tap не одновременно.
- В качестве пользователя root добавьте постоянный интерфейс и разрешите пользователю и / или группе управлять им, выполните следующие действия: создайте tunX (замените своим собственным) и разрешите пользователям user1 и group доступ к нему.
openvpn --mktun --dev tunX --type tun --user user1 --group users
- Запустите OpenVPN в контексте непривилегированного пользователя.
Можно добавить дополнительные ограничения безопасности, изучив параметры в сценарии / usr / local / sbin / unpriv-ip.
chroot (только не для Windows)
Директива chroot позволяет заблокировать демон OpenVPN в так называемой chroot jail , где демон не сможет получить доступ к какой-либо части файловой системы хост-системы, за исключением определенного каталога, указанного в качестве параметра для директива. Например,
chroot jail
заставит демон OpenVPN перейти в подкаталог jail при инициализации, а затем переориентирует свою корневую файловую систему в этот каталог, чтобы после этого демон не мог получить доступ к любым файлам за пределами jail и его дерева подкаталогов .Это важно с точки зрения безопасности, потому что даже если бы злоумышленник смог скомпрометировать сервер с помощью эксплойта вставки кода, эксплойт был бы заблокирован для большей части файловой системы сервера.
Предостережения: поскольку chroot переориентирует файловую систему (только с точки зрения демона), необходимо поместить все файлы, которые могут понадобиться OpenVPN после инициализации, в каталог jail , например:
- файл crl-verify или
- каталог client-config-dir .
Большие ключи RSA
Размер ключа RSA управляется переменной KEY_SIZE в файле easy-rsa / vars , которая должна быть установлена до создания любых ключей. В настоящее время по умолчанию установлено 1024, это значение может быть разумно увеличено до 2048 без отрицательного влияния на производительность VPN-туннеля, за исключением немного более медленного квитирования повторного согласования SSL / TLS, которое происходит один раз для каждого клиента в час, и гораздо более медленного одноразового подтверждения Диффи. Процесс генерации параметров Хеллмана с помощью сценария easy-rsa / build-dh .
Симметричные ключи большего размера
По умолчанию OpenVPN использует Blowfish , 128-битный симметричный шифр.
OpenVPN автоматически поддерживает любой шифр, который поддерживается библиотекой OpenSSL, и, как таковой, может поддерживать шифры с ключами большого размера. Например, 256-битную версию AES (Advanced Encryption Standard) можно использовать, добавив следующее в файлы конфигурации сервера и клиента:
шифр AES-256-CBC
Сохранить корневой ключ (
ок.ключ ) на автономном компьютере без сетевого подключения
Одним из преимуществ безопасности использования PKI X509 (как это делает OpenVPN) является то, что корневой ключ CA ( ca. key ) не обязательно должен присутствовать на сервере OpenVPN. В среде с высоким уровнем безопасности вам может потребоваться специально назначить машину для целей подписания ключей, обеспечить хорошую физическую защиту машины и отключить ее от всех сетей. При необходимости можно использовать дискеты для перемещения файлов ключей вперед и назад.Такие меры крайне затрудняют злоумышленнику кражу корневого ключа, за исключением физического кражи машины для подписи ключей.
Сертификаты отзыва
Отзыв сертификата означает аннулирование ранее подписанного сертификата, чтобы его больше нельзя было использовать для целей аутентификации.
Типичные причины отзыва сертификата:
- Закрытый ключ, связанный с сертификатом, взломан или украден.
- Пользователь зашифрованного закрытого ключа забывает пароль на ключе.
- Вы хотите прекратить доступ пользователя VPN.
Пример
В качестве примера мы отзовем сертификат client2 , который мы сгенерировали выше в разделе «генерация ключей» HOWTO.
Сначала откройте оболочку или окно командной строки и перейдите в каталог easy-rsa , как вы это делали в разделе «Генерация ключей» выше. В Linux / BSD / Unix:
../vars ./revoke-full client2
В Windows:
варов revoke-full client2
Вы должны увидеть следующий результат:
Используя конфигурацию из /root/openvpn/20/openvpn/tmp/easy-rsa/openssl.cnf ОТЛАДКА [load_index]: unique_subject = "да" Отзыв сертификата 04. База данных обновлена Используя конфигурацию из /root/openvpn/20/openvpn/tmp/easy-rsa/openssl.cnf ОТЛАДКА [load_index]: unique_subject = "да" клиент2.crt: /C=KG/ST=NA/O=OpenVPN-TEST/CN=client2/[email protected] ошибка 23 при поиске глубины 0: сертификат отозван
Обратите внимание на «ошибку 23» в последней строке. Это то, что вы хотите увидеть, поскольку это указывает на то, что проверка сертификата отозванного сертификата не удалась.
Сценарий revoke-full создаст файл CRL (список отзыва сертификатов) с именем crl.pem в подкаталоге keys . Файл должен быть скопирован в каталог, в котором сервер OpenVPN может получить к нему доступ, затем проверка CRL должна быть включена в конфигурации сервера:
crl-verify crl.pem
Теперь все подключающиеся клиенты будут проверять свои клиентские сертификаты по списку отзыва сертификатов, и любое положительное совпадение приведет к разрыву соединения.
CRL Примечания
- Когда опция crl-verify используется в OpenVPN, файл CRL будет перечитываться каждый раз, когда подключается новый клиент или существующий клиент повторно согласовывает соединение SSL / TLS (по умолчанию один раз в час). Это означает, что вы можете обновлять файл CRL во время работы демона сервера OpenVPN, а новый CRL немедленно вступает в силу для вновь подключающихся клиентов.Если клиент, чей сертификат вы отзываете, уже подключен, вы можете перезапустить сервер с помощью сигнала (SIGUSR1 или SIGHUP) и сбросить все клиенты, или вы можете telnet к интерфейсу управления и явно убить конкретный объект экземпляра клиента на сервере, не мешая другие клиенты.
- Хотя директива crl-verify может использоваться как на сервере OpenVPN, так и на клиентах, обычно нет необходимости распространять файл CRL клиентам, если сертификат сервера не был отозван.Клиентам не нужно знать о других клиентских сертификатах, которые были отозваны, потому что клиенты не должны принимать прямые подключения от других клиентов в первую очередь.
- Файл CRL не является секретным и должен быть доступен для чтения всем, чтобы демон OpenVPN мог читать его после того, как были отброшены привилегии root.
- Если вы используете директиву chroot , обязательно поместите копию файла CRL в каталог chroot, поскольку в отличие от большинства других файлов, которые читает OpenVPN, файл CRL будет прочитан после выполнения вызова chroot, а не до .
- Распространенная причина, по которой необходимо отозвать сертификаты, заключается в том, что пользователь шифрует свой закрытый ключ паролем, а затем забывает его. Отозвав исходный сертификат, можно сгенерировать новую пару сертификат / ключ с исходным общим именем пользователя.
Важное примечание о возможной атаке «Человек посередине», если клиенты не проверяют сертификат сервера, к которому они подключаются.
Чтобы избежать возможной атаки Man-in-the-Middle, когда авторизованный клиент пытается подключиться к другому клиенту, выдавая себя за сервер, убедитесь, что клиенты используют какую-то проверку сертификата сервера.В настоящее время для этого существует пять различных способов, перечисленных в порядке предпочтения:
- [OpenVPN 2.1 и выше] Создайте сертификаты сервера с конкретным использованием ключей и расширенным использованием ключей. RFC3280 определяет, что для TLS-соединений должны быть предоставлены следующие атрибуты:
Mode Использование ключа Использование расширенного ключа Клиент цифровая подпись Аутентификация веб-клиента TLS ключ Соглашение цифровая Подпись, ключ Договор Сервер цифровая подпись, ключ шифрования Аутентификация веб-сервера TLS цифровая Подпись, ключ Договор Сертификаты сервера можно создать с помощью сценария build-key-server (дополнительную информацию см. В документации easy-rs).Это будет обозначать сертификат как сертификат только для сервера путем установки правильных атрибутов. Теперь добавьте следующую строку в конфигурацию вашего клиента:
удаленный сервер сертификатов tls
- [OpenVPN 2.0 и ниже] Создайте сертификаты сервера с помощью сценария build-key-server (дополнительную информацию см. В документации easy-rsa). Это обозначит сертификат как сертификат только для сервера, установив nsCertType = server.Теперь добавьте следующую строку в конфигурацию вашего клиента:
сервер нс-сертификата
Это заблокирует подключение клиентов к любому серверу, в сертификате которого отсутствует обозначение сервера nsCertType =, даже если сертификат был подписан файлом ca в файле конфигурации OpenVPN.
- Используйте директиву tls-remote на клиенте, чтобы принять / отклонить соединение с сервером на основе общего имени сертификата сервера.
- Используйте сценарий или подключаемый модуль tls-verify , чтобы принять / отклонить соединение с сервером на основе пользовательской проверки сведений о субъекте X509, встроенных в сертификат сервера.
- Подписывайте сертификаты сервера с одним ЦС и сертификаты клиента с другим ЦС. Директива конфигурации клиента ca должна ссылаться на файл CA, подписывающего сервер, тогда как директива конфигурации сервера ca должна ссылаться на файл CA, подписывающий клиента.
Клиент OpenVPN 3 для Linux
Фон
Проект OpenVPN 3 Linux — это новый клиент, созданный на основе базовой библиотеки OpenVPN 3, которая также используется в различных клиентах OpenVPN Connect и OpenVPN для Android (необходимо включить на странице настроек в приложении).
Этот клиент построен на совершенно другой архитектуре в отношении использования. Он в значительной степени основан на D-Bus и позволяет непривилегированным пользователям запускать и управлять своими собственными туннелями VPN прямо из коробки. Системные администраторы, желающие большего контроля, также могут контролировать и ограничивать этот доступ, как путем усиления политики OpenVPN 3 D-Bus по умолчанию, так и за счет упрощения функций в OpenVPN 3 Linux.
Несмотря на то, что название проекта содержит «Linux», это не означает, что он ограничен только Linux.Любая платформа, на которой есть D-Bus, теоретически должна поддерживать этот клиент. Но поскольку D-Bus чаще всего используется в среде Linux, это, естественно, будет основным направлением проекта.
Примечания к выпуску хранятся в тегах git в репозитории проекта git. Их также можно посмотреть здесь: https://github.com/OpenVPN/openvpn3-linux/releases (разверните тег, чтобы увидеть полный текст)
Установка в качестве коннектора для OpenVPN Cloud
Установка клиента OpenVPN 3 в качестве коннектора для облачного хоста OpenVPN или сети была упрощена и задокументирована здесь.
Установка для Debian и Ubuntu
Выполните следующие действия, чтобы установить клиент OpenVPN 3 в Linux для Debian и Ubuntu:
Откройте Терминал, нажав
ctrl + alt + T
Введите в Терминал следующую команду:
sudo apt install apt-transport-https
. Это сделано для того, чтобы ваш apt поддерживал транспорт https. Введите пароль root, как предложеноВведите в Терминал следующую команду:
sudo wget https: // swupdate.openvpn.net/repos/openvpn-repo-pkg-key.pub
. Это установит ключ репозитория OpenVPN, используемый пакетами OpenVPN 3 Linux.
Введите в Терминал следующую команду:
sudo apt-key add openvpn-repo-pkg-key.pub
Введите в Терминал следующую команду:
sudo wget -O /etc/apt/sources.list.d/openvpn3.list https://swupdate.openvpn.net/community/openvpn3/repos/openvpn3-$DISTRO.list
. Это установит правильный репозиторий.Замените $ DISTRO на имя выпуска в зависимости от вашего дистрибутива Debian / Ubuntu (таблицу названий выпусков для каждого дистрибутива можно найти ниже). В этом случае выбираетсяfocal
, поскольку используется Ubuntu 20.04Введите в Терминал следующую команду:
sudo apt update
Введите в Терминал следующую команду:
sudo apt install openvpn3
. Это, наконец, установит пакет OpenVPN 3
Распространение | Выпуск | Название выпуска ($ DISTRO) |
---|---|---|
Debian | 9 | stretch |
Debian | 10 | buster | 16.04 | xenial |
Ubuntu | 18.04 | bionic |
Ubuntu | 19.10 | eoan |
Ubuntu | 20.04 | focal |
Установка для Linux Fedora, Red Hat Enterprise , CentOS или Scientific Linux
Пакеты для этих дистрибутивов предоставляются через репозиторий Fedora Copr. Поддерживаемые версии:
Распространение | Версии выпуска |
---|---|
Fedora | 30, 31, 32 |
Red Hat Enterprise Linux / CentOS | 7, 8 |
Для установки Клиент OpenVPN 3 для Fedora, Red Hat Enterprise Linux, CentOS или Scientific Linux, выполните следующие действия:
- Откройте терминал, набрав терминал в строке поиска.
- Если вы используете Red Hat Enterprise Linux или его клоны, вам необходимо сначала установить репозиторий Fedora EPEL.Вот список команд для каждой версии:
(исходную статью о Fedora EPEL можно найти здесь)
RHEL / CentOS 6:sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release -latest-6.noarch.rpm
RHEL / CentOS 7:sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
На RHEL 7 это рекомендуется также включить репозитории optional, extras и HA, поскольку пакеты EPEL могут зависеть от пакетов из этих репозиториев:sudo subscription-manager repos --enable "rhel - * - optional-rpms" --enable "rhel - * - extras-rpms "--enable" rhel-ha-for-rhel - * - server-rpms "
RHEL / CentOS 8:sudo yum install https: // dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
В RHEL 8 также требуется включить репозиторий codeready-builder-for-rhel-8 — $ {ARCH} -rpms, поскольку Пакеты EPEL могут зависеть от пакетов из него: sudo ARCH = $ (/ bin / arch), за которым следует sudo subscription-manager repos --enable "codeready-builder-for-rhel-8 - $ {ARCH} -rpms"
Вкл. CentOS 8 рекомендуется также включить репозиторий PowerTools, поскольку пакеты EPEL могут зависеть от пакетов из него:sudo dnf config-manager --set-enabled PowerTools
- Сначала необходимо установить модуль yum copr, выполнив следующую команду :
sudo yum install yum-plugin-copr
. Примечание. В выпусках Fedora обычно предустановлен модуль yum / dnf copr. - Когда доступен модуль Copr, пора включить репозиторий OpenVPN 3 Copr, выполнив следующую команду:
sudo yum copr enable dsommers / openvpn3
- Наконец, клиент OpenVPN 3 Linux можно установить, выполнив следующую команду :
sudo yum install openvpn3-client
Использование профиля .ovpn
Обратите внимание, что к этому моменту вы должны были загрузить файл.ovpn на вашу машину.
Обязательные команды
Для запуска одноразового профиля конфигурации введите в Терминал следующую команду:
openvpn3 session-start --config $ {MY_CONFIGURATION_FILE}. Важно: «Профиль однократной конфигурации» означает, что файл конфигурации анализируется, загружается и удаляется из диспетчера конфигурации сразу после попытки запуска сеанса VPN. После этого подхода файл конфигурации недоступен для повторного использования.Это достигается путем передачи файла конфигурации непосредственно команде openvpn3 session-start
.Чтобы импортировать файл конфигурации для повторного использования и начать сеанс VPN, введите в Терминал следующую команду:
openvpn3 config-import --config $ {MY_CONFIGURATION_FILE}
. Примечание: при таком подходе импортированный файл конфигурации можно использовать несколько раз, и доступ к самому файлу конфигурации не требуется для запуска туннелей VPN.По умолчанию импортированные профили конфигурации доступны только пользователю, импортировавшему файл конфигурации. Но OpenVPN 3 Linux также предоставляет функцию списка контроля доступа через openvpn3 config-acl для предоставления доступа определенным или всем пользователям в системе. Важно: загружает профиль конфигурации и сохраняет его только в памяти. Это означает, что при перезагрузке системы профиль конфигурации не сохраняется. Если в приведенную выше командную строку добавлен аргумент –persistent, профиль конфигурации будет сохранен на диск в каталоге, доступном только пользователю OpenVPN.При каждом запуске Configuration Manager файлы конфигурации, импортированные с параметром –persistent, также будут загружаться автоматически.Чтобы начать новый сеанс VPN из импортированного профиля конфигурации, выполните следующую команду:
openvpn3 session-start --config $ {CONFIGURATION_PROFILE_NAME}
. Примечание: Когда профиль конфигурации доступен через openvpn3 configs-list, его можно легко запустить через openvpn3 session-start, используя имя профиля конфигурации (обычно имя файла, используемое во время импорта)
Дополнительные команды
- Чтобы вывести список всех доступных профилей конфигурации, выполните следующую команду:
openvpn3 configs-list
. Важно: файл конфигурации обычно содержит общие параметры для подключения к определенному серверу, независимо от самого устройства. OpenVPN 3 Linux также поддерживает установку дополнительных настроек для конкретного хоста в профиле конфигурации. Это осуществляется через интерфейс `openvpn3 config-manage`. Любые настройки здесь также будут сохранены при загрузке, если профиль конфигурации был импортирован с аргументом--persistent
. - Обратите внимание, что можно использовать путь D-Bus к профилю конфигурации:
openvpn3 session-start --config-path / net / openvpn / v3 / configuration /...
. Примечание: в любом из этих случаев необходим доступ к профилю конфигурации на диске. Пока профили конфигурации доступны черезopenvpn3 configs-list
, все необходимое для запуска сеанса VPN должно присутствовать.
Управление запущенным сеансом
- После запуска сеанса VPN его следует увидеть в списке сеансов:
openvpn3 sessions-list
- Используя openvpn3 session-manage, можно сделать несколько вещей, но чаще всего это –disconnect или –перезапустить наиболее часто используемые альтернативы.
openvpn3 session-manage --config $ {CONFIGURATION_PROFILE_NAME} --restart
. Это отключает и снова подключается к серверу, повторно устанавливая соединение. $ {CONFIGURATION_PROFILE_NAME} — это имя конфигурации, отображаемое в списке сеансов openvpn3 - Также можно использовать путь D-Bus к сеансу:
openvpn3 session-manage --session-path / net / openvpn / v3 / sessions / ..... - отключить
. Эта команда выше отключит запущенный сеанс.Как только эта операция будет завершена, она будет удалена из обзора списка сеансов openvpn3. Важно: вы сможете начать новый сеанс с этим или другим профилем OpenVPN только после того, как отключитесь от текущего сеанса с помощью команды на этом шаге. - Также возможно получить статистику туннелей в реальном времени из запущенных сеансов. :
openvpn3 session-stats --config $ {CONFIGURATION_PROFILE_NAME}
илиopenvpn3 session-stats --session-path / net / openvpn / v3 / sessions /...
- А чтобы получать события журнала в реальном времени по мере их возникновения, выполните следующую команду:
openvpn3 log --config $ {CONFIGURATION_PROFILE_NAME}.
Это может быть довольно тихим, поскольку он не предоставляет никаких событий журнала из прошлого. Выполните openvpn3 session-manage –restart с другого терминала, и события журнала будут происходить. Вы можете повысить уровень журнала с помощью –log-level 6. Допустимые уровни журнала — от 0 до 6, где 6 — самый подробный. Примечание. сеансов VPN также принадлежат пользователю, который их запустил.Но диспетчер сеансов также предоставляет свою собственную функцию списка управления доступом черезopenvpn3 session-acl
Изменение профиля OpenVPN для сеанса VPN с автозагрузкой
Обратите внимание, что каждый раз, когда вы запускаете сеанс, он загружается автоматически при запуске системы. Чтобы изменить профиль автоматически загружаемого сеанса OpenVPN, выполните следующие действия:
- Запустите команду:
sudo openvpn3 sessions-list
. Он покажет информацию о вашем активном сеансе.Проверьте значение параметра Path - Запустите команду:
sudo openvpn3 session-manage --session-path YOUR_PATH --disconnect
, где YOUR_PATH — значение параметра Path из шага 1 - Запустите команду:
список сеансов sudo openvpn3
. Вы не должны видеть никаких активных сеансов. - Выполните команду:
sudo openvpn3 configs-list
. Он покажет информацию о ваших активных конфигурациях. Проверьте имя, присвоенное вашей активной конфигурации.В данном случае это OpenVPN Cloud - Выполните команду:
sudo openvpn3 config-remove --config "YOUR_CONFIG_NAME"
, где YOUR_CONFIG_NAME — имя файла конфигурации из шага 4. Вам будет предложено подтвердить удаление конфигурации. ВведитеYES
(в верхнем регистре) для подтверждения - Выполните команду:
sudo openvpn3 configs-list
. Вы не должны видеть никаких активных конфигураций. - Выполните команду:
sudo nano / etc / openvpn3 / autoload / connector.conf
. Это профиль, на который будет дан ответ. Обратите внимание, что он использует регионeu-central
- Нажмите
ctrl + End
, затем удерживайтеctrl + shift + ↑
, пока не будет выделен весь файл, и, наконец, нажмитеctrl + K
- Откройте профиль OpenVPN вы хотите использовать вместо существующего. Нажмите
ctrl + A
, а затемctrl + C
. Обратите внимание, что он использует областьca-east
- Вернитесь в Терминал, нажмите правую кнопку мыши и выберите Вставить. Обратите внимание на разницу между старым и новым профилем
- После замены профиля нажмите
ctrl + X
и подтвердите изменения, набравy
и нажав Enter - Вы можете запустить
cat / etc / openvpn3 / autoload / connector.conf
для проверки сохранения изменений - Выполните команду:
sudo openvpn3 config-import --config /etc/openvpn3/autoload/connector.conf --name "OpenVPN Cloud"
- Запустить команда:
sudo openvpn3 session-start --config "OpenVPN Cloud"
- Выполните команду:
sudo openvpn3 sessions-list
.Он покажет, что новый сеанс активен и подключен к регионуca-east
, региону нового профиля - Перезагрузите компьютер и проверьте, действительно ли профиль автозапуска был изменен. Просто запустите команду
sudo openvpn3 sessions-list
еще раз. Действительно, теперь для нового профиля настроена автозагрузка!
Настройка клиентов Linux для подключения к серверу OpenVPN
Если вы настроили сервер OpenVPN для обеспечения безопасного доступа удаленных сотрудников, вы выиграли половину битвы.Следующим шагом будет подготовка систем ваших пользователей (или ваших) к подключению обратно к базовому кораблю. Не волнуйтесь, Linux легко настроить для подключения к серверу OpenVPN, это займет всего несколько шагов.
Хотя это не так просто, как навести и щелкнуть графический интерфейс, клиент OpenVPN не так уж и сложен в настройке и запуске. Это будет основной темой данной статьи; но для удобства мы добавим упоминание о нескольких хороших инструментах с графическим интерфейсом, которые также могут справиться с этой задачей. Для получения информации о том, как настроить сервер OpenVPN, ознакомьтесь с предыдущей статьей «Установка и настройка сервера OpenVPN в Linux.”
Установка
На клиенте необходимо установить OpenVPN. Устанавливаемый пакет, как и ожидалось, — openvpn. Чтобы установить на Ubuntu, выполните следующие простые шаги:
- Откройте окно терминала.
- Запустите
sudo apt-get install openvpn
. - Введите пароль sudo и нажмите Enter.
- Примите все необходимые зависимости и дождитесь завершения установки.
Вы не поверите, но на этом установка OpenVPN закончилась.
Конфигурация клиента
Как обсуждалось в предыдущей статье, сертификаты будут созданы (на сервере) специально для клиентской машины. В каталог клиента / etc / openvpn
необходимо безопасно скопировать следующие файлы:
-
/etc/openvpn/ca.crt
-
/etc/openvpn/ta.key
-
/etc/openvpn/easy-rsa/keys/hostname.crt
(где hostname — это имя хоста клиента). -
/etc/openvpn/easy-rsa/keys/hostname.key
(где hostname — имя хоста клиента).
Скопируйте эти файлы с помощью такого инструмента, как scp
, с сервера на клиент. Если у сервера нет прямого доступа к клиенту, просто поместите их на флешку и скопируйте оттуда.
Первым шагом в настройке клиента является копирование образца файла конфигурации клиента в соответствующий каталог с помощью команды sudo cp / usr / share / doc / openvpn / examples / sample-config-files / client.конф / и т.д. / openvpn
. Теперь, когда файл готов, пора внести несколько изменений. Откройте /etc/openvpn/client.conf
с помощью текстового редактора (например, Nano или vi) и взгляните на следующий раздел:
разработчик тап
удаленный vpn.example.com 1194
сертификат hostname.crt
ключ hostname.key
tls-auth ta.key 1
Внесите изменения где:
- vpn.example.com — это адрес сервера OpenVPN.
- 1194 — это порт, настроенный на сервере OpenVPN.
- hostname. * — это фактическое имя сертификата и имен ключевых файлов.
Хотите верьте, хотите нет, но это все. Единственный оставшийся шаг — перезапустить OpenVPN с помощью команды sudo /etc/init.d/openvpn restart
. После перезапуска этой службы удаленная локальная сеть должна быть доступна. Проверьте, чтобы убедиться в этом, выполнив эхо-запрос известного адреса в локальной сети за VPN.
Инструменты графического интерфейса для подключения к OpenVPN
И KDE, и GNOME предлагают плагины для своих апплетов сетевого менеджера, которые позволяют VPN-соединение с сервером OpenVPN.Необходимые плагины:
- KDE: сетевой менеджер-openvpn-kde
- GNOME: сетевой менеджер-openvpn-gnome
Скорее всего, эти плагины не будут установлены в дистрибутив по умолчанию. Быстрый поиск с помощью утилиты «Добавить / удалить программное обеспечение» позволит установить любой плагин. После установки использовать апплеты сетевого менеджера довольно просто, просто выполните следующие действия (я продемонстрирую использование апплета сетевого менеджера KDE):
- Откройте апплет диспетчера сети, щелкнув значок сети в области уведомлений (также известный как системный лоток.)
- Нажмите кнопку «Управление подключениями».
- Выберите вкладку VPN.
- Нажмите кнопку «Добавить», чтобы открыть раскрывающийся список типа VPN.
- Выберите OpenVPN из списка.
- Заполните необходимую информацию на вкладке OpenVPN (имя подключения, шлюз, тип подключения, расположение файлов сертификата). См. Рисунок 1 для иллюстрации этой вкладки.
- Если необходим статический IP-адрес, установите его, выбрав «Вручную» в раскрывающемся списке «Метод» (на вкладке «IP-адрес»).
- Нажмите ОК, чтобы сохранить настройки и закрыть окно «Параметры подключения».
Если этот клиент должен быть всегда подключен, можно установить флажок «Подключаться автоматически».
Теперь, чтобы подключиться к серверу OpenVPN, используя апплет сетевого менеджера KDE, сделайте следующее:
- Щелкните апплет диспетчера сети.
- Нажмите кнопку «Виртуальная частная сеть» во всплывающем меню.
- Выберите только что созданное соединение OpenVPN.
- Разрешить соединению согласовывать аутентификацию.
После согласования аутентификации VPN-соединение будет указано как Connected в апплете управления сетью. Теперь сеть VPN должна быть доступна.
Клиент Gadmin OpenVPN
Если используется альтернативный рабочий стол или инструмент сетевого менеджера KDE или GNOME не соответствует требованиям, есть еще один инструмент, который отлично справляется с подключением к серверу OpenVPN. Этот инструмент — Gadmin OpenVPN Client.Этот инструмент можно легко установить из Synaptic, Ubuntu Software Center, PackageKit и других. После установки остается лишь запустить инструмент (если его нет в структуре меню на рабочем столе, Gadmin OpenVPN Client можно запустить с помощью команды sudo gadmin-openvpn-client
.)
Когда инструмент откроется, первое, что нужно сделать, это ввести информацию о соединении (см. Рисунок 2).
Не нажимайте сначала кнопку «Добавить»!
Обязательно прокрутите вниз и введите всю необходимую информацию, в том числе:
- Имя соединения: удобочитаемое имя соединения.
- Адрес сервера: Адрес сервера OpenVPN.
- Порт сервера: порт, настроенный на сервере.
- CA cert / Cert / Key / DH Key / TA key: расположение сертификатов, созданных на сервере и затем размещенных на клиенте. Эта конфигурация находится в нижней части экрана конфигурации.
После того, как все это настроено, нажмите кнопку «Добавить», и соединение будет добавлено. Чтобы установить соединение, выберите используемое VPN-соединение, а затем нажмите кнопку «Активировать», что запустит процесс согласования сертификата.После завершения процесса согласования сеть VPN должна быть доступна.
Как и ожидалось, существует множество способов подключения к серверу OpenVPN. И хотя это далеко не исчерпывающий ресурс (в вашем инструменте добавления / удаления программного обеспечения можно найти больше инструментов с графическим интерфейсом), с помощью приведенного выше руководства соединение может быть выполнено как из командной строки, так и из графического интерфейса. Обратите внимание: если у вас есть пользователи Windows и Mac, у OpenVPN также есть клиенты для них.
Командная строка
— Как автоматически запустить openvpn (клиент) в Ubuntu CLI?
Я немного застрял на этом и в итоге написал все инструкции по настройке с помощью systemd вручную.
Это сработало для меня с использованием Ubuntu 16.10 и openvpn 2.3.11
Настройка vpn для запуска из bash
В этих примерах используется expressvpn, но большинство из них будет работать так же
Загрузите файл конфигурации ovpn вашего провайдера vpn, например my_express_vpn_amsterdam_2 . овпн
переместите это в / etc / openvpn /
и переименуйте его так, чтобы он закончился в .conf
sudo mv ~ / Downloads / my_express_vpn_amsterdam_2.ovpn / etc / openvpn / a Amsterdam-2.конф
Ваш провайдер VPN предоставит вам имя пользователя и пароль для подключения через openvpn. Сохраните имя пользователя, а затем пароль, каждое в отдельной строке
судо vim /etc/openvpn/express-vpn-crednetials.txt
# добавить эти строки
ВАШЕ_VPN_USERNAME
ВАШ_VPN_PASSWORD
# сохраняем файл
теперь отредактируйте /etc/openvpn/amsterdam-2.conf
найдите строку с надписью auth-user-pass
и замените ее на путь к вашему файлу учетных данных
auth-user-pass / etc / openvpn / express-vpn-crednetials.текст
Проверьте свою конфигурацию! Запустите openvpn так
sudo openvpn --config /etc/openvpn/amsterdam-2.conf
openvpn должен подключаться без запроса имени пользователя или пароля
Удалить существующую (сломанную) конфигурацию службы для openvpn
sudo rm /etc/systemd/system/multi-user.target.wants/openvpn.service
Настройте openvpn для работы в качестве службы systemd
Конфигурация, поставляемая с openvpn, была сломана, поэтому я удалил ее и создал новую на основе этого ответа
Создать сервис systemd для openvpn
судо vim / usr / lib / systemd / system / openvpn @ service
добавьте этот конфиг:
[Единица]
Описание = OpenVPN Надежное и очень гибкое приложение для туннелирования на% I
После = syslog.target network.target
[Служба]
PrivateTmp = true
Тип = разветвление
PIDFile = / var / run / openvpn /% i.pid
ExecStart = / usr / sbin / openvpn --daemon --writepid /var/run/openvpn/%i.pid --cd / etc / openvpn / --config% i.conf
[Установить]
WantedBy = multi-user.target
% i
используется как подстановочный знак, поэтому эту службу можно использовать для нескольких конфигураций VPN. Настройте его для файла a Amsterdam-2.conf
, который мы создали ранее
sudo systemctl start openvpn @ Амстердам-2.служба
, теперь служба systemd должна работать на амстердамском vpn. проверьте его статус так
sudo systemctl status [email protected]
, вы должны увидеть несколько строк вывода, оканчивающихся на Initialization Sequence Completed
, и ваш vpn должен быть запущен.
Надеюсь, это поможет! связанное чтение:
vpn — Какова цель каталогов OpenVPN / etc / openvpn / {client, server}?
vpn — Для чего нужны каталоги OpenVPN / etc / openvpn / {client, server}? — Спросите Ubuntu
Сеть обмена стеками
Сеть Stack Exchange состоит из 176 сообществ вопросов и ответов, включая Stack Overflow, крупнейшее и пользующееся наибольшим доверием онлайн-сообщество, где разработчики могут учиться, делиться своими знаниями и строить свою карьеру.
Посетить Stack Exchange
0
+0
- Авторизоваться
Подписаться
Ask Ubuntu — это сайт вопросов и ответов для пользователей и разработчиков Ubuntu.Регистрация займет всего минуту.
Зарегистрируйтесь, чтобы присоединиться к этому сообществу
Кто угодно может задать вопрос
Кто угодно может ответить
Лучшие ответы голосуются и поднимаются наверх
Спросил
Просмотрено
7к раз
Пакет Ubuntu / Debian OpenVPN содержит 2 загадочных каталога:
dpkg -L openvpn
...
/ и т. д. / openvpn / клиент
/ и т. д. / openvpn / сервер
...
Мне интересно, каково назначение этих каталогов? Все руководства советуют размещать файлы непосредственно в / etc / openvpn /
, а сценарии init / systemd также выбирают файлы конфигурации оттуда.
Chroot? Но тогда почему 2?
Создан 21 июн.
ezaquariiezaquarii
23322 серебряных знака66 бронзовых знаков
В v2.4 они представили новые сервисные профили systemd, адаптированные для клиентов, соответственно. серверные приложения.
Начиная с OpenVPN v2.4, апстрим поставляет файлы модулей systemd для предоставления
детальный контроль каждой конфигурации OpenVPN, а также попытки
чтобы ограничить возможности процесса OpenVPN в системе.Эти новые файлы модулей разделяют профили клиента и сервера.
Файлы конфигурации хранятся в отдельных каталогах, чтобы обеспечить
ясность профиля, под которым они работают.Обычно профиль клиента не может связываться ни с одним портом ниже 1024 порта.
и конфигурация клиента всегда начинается с —nobind.
источник
Он остается обратно совместимым, то есть вы все еще можете хранить свой файл .conf
в / etc / openvpn
.
Если ваша конфигурация находится в
/etc/openvpn/MyVpn.conf
,
используйтеsystemctl start openvpn @ MyVpn
для запуска службыЕсли ваша конфигурация находится в
/ etc / openvpn / client / MyVpn.conf
,
используйтеsystemctl start openvpn-client @ MyVpn
для запуска службыЕсли ваша конфигурация находится в
/etc/openvpn/server/MyVpn.conf
,
используйтеsystemctl start openvpn-server @ MyVpn
для запуска службы
Создан 23 окт.
3dGrabber3dGrabber
17611 серебряный знак55 бронзовых знаков
2
Я не могу опубликовать комментарий выше в ответ на ответ 3dGrabber, так как моя репутация в этом шее юго-восточного леса слишком низка.Я хотел указать на ошибку в указанном ответе для тех, кто пришел через поиск, чтобы они не перестали чесать в затылках, когда это несколько загадочно терпит неудачу.
systemctl start [email protected]
должно быть:
systemctl start openvpn-client @ MyVpn
и
systemctl start [email protected]
должно быть:
systemctl start openvpn-server @ MyVpn
Модель .суффикс service
, вероятно, был ошибочно принят из файла, созданного при systemctl enable ...
Создан 20 фев.
szrszr
4133 бронзовых знака
Спросите Ubuntu лучше всего работает с включенным JavaScript
Ваша конфиденциальность
Нажимая «Принять все файлы cookie», вы соглашаетесь с тем, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Принимать все файлы cookie
Настроить параметры
Как настроить клиент OpenVPN для Linux
Винсент Данен дополняет свой совет по настройке сервера OpenVPN следующими шагами по настройке клиента Linux на OpenVPN.
В предыдущем сообщении на прошлой неделе мы рассмотрели настройку сервера OpenVPN. Теперь я расскажу вам о настройке клиента Linux OpenVPN. (Я также рассмотрел настройку клиента OS X на OpenVPN в блоге Macs in Business). Клиент Linux будет основан на CentOS 5 с использованием OpenVPN 2.0.9.
Для каждого клиента вам необходимо скопировать сертификат и ключ клиента, а также сертификат CA с сервера.Это должно быть сделано безопасным способом, чтобы вы могли гарантировать, что файлы не будут изменены каким-либо образом, например, с использованием SSH для передачи или USB-накопителя, находящегося в вашем распоряжении. Когда они будут на клиенте, скопируйте их в каталог / etc / openvpn /:
# cd / и т. Д. / Openvpn
# cp ~ / client. {Ключ, crt}.
# cp ~ / ca.crt.
# cp /usr/share/doc/openvpn-2.0.9/sample-config-files/client.conf.
# vim client.conf
В client.conf вам нужно раскомментировать директивы «user» и «group», чтобы openvpn запускался от имени непривилегированного пользователя «none», а не root.Кроме того, если ваши файлы ключей и сертификатов не имеют имен «client.key» и «client.crt», вам также необходимо изменить директивы crt и key в файле.
Далее следует файл конфигурации клиента без комментариев, который служит примером:
клиент
dev tun
протокол udp
удаленный linsec.ath.cx 1194
resolv-retry infinite
nobind
пользователь никто
группа никто
постоянный ключ
персист-тун
ок. Ок.крт
сертификат client1.crt
ключ client1.key
comp-lzo
тянуть dhcp-опции
Чтобы запустить тест при запуске, выполните:
# openvpn client.conf
Вт, 14 сентября 17:18:14 2010 OpenVPN 2.0.9 x86_64-redhat-linux-gnu [SSL] [LZO] [EPOLL] построено 8 марта 2007 г.
...
Вт, 14 сентября, 17:18:15 2010 [сервер] Одноранговое соединение, инициированное с помощью 1.2.3.4:1194
Вт, 14 сентября, 17:18:16 2010 SENT CONTROL [сервер]: 'PUSH_REQUEST' (status = 1)
Вт, 14 сентября, 17:18:16 2010 PUSH: Получено управляющее сообщение: 'PUSH_REPLY, route 192.168.10.0 255.255.254.0, маршрут 10.8.0.0, ping 10, ping-restart 120, ifconfig 10.8.0.6 10.8.0.5 '
...
Вт, 14 сентября 17:18:16 2010 / sbin / ip addr add dev tun0 local 10.8.0.6 peer 10.8.0.5
Вт, 14 сентября 17:18:16 2010 / sbin / ip route добавить 192.168.10.0/23 через 10.8.0.5
Вт, 14 сентября 17:18:16 2010 / sbin / ip route добавить 10.8.0.0/32 через 10.8.0.5
Вт, 14 сентября, 17:18:16 2010 GID не установлен никому
Вт, 14 сентября, 17:18:16 2010 UID не задан как none
Вт, 14 сентября 17:18:16 2010 Последовательность инициализации завершена
Выходных данных намного больше, но вышеперечисленное включает важные биты.Здесь мы видим, что установлено соединение с удаленным сервером с IP-адресом 1.2.3.4. Мы также видим, что были добавлены маршруты для удаленной сети 192.168.10.0/23 и сети 10.8.0.0/32, специфичной для VPN. Теперь вы можете убедиться, что ссылка активна, используя:
# ifconfig tun0
tun0 Link encap: UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet адрес: 10.8.0.6 P-t-P: 10.8.0.5 Маска: 255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU: 1500 Метрическая система: 1
пакетов RX: 0 ошибок: 0 отброшено: 0 переполнений: 0 кадров: 0
пакетов TX: 0 ошибок: 0 отброшено: 0 переполнений: 0 несущая: 0
коллизий: 0 txqueuelen: 100
байтов приема: 0 (0.0 б) байты передачи: 0 (0,0 б)
И, наконец, убедитесь, что он работает:
# пинг 10.8.0.1 -c 2
PING 10.8.0.1 (10.8.0.1) 56 (84) байтов данных.
64 байта из 10.8.0.1: icmp_seq = 1 ttl = 64 time = 21,1 мс
64 байта из 10.8.0.1: icmp_seq = 2 ttl = 64 time = 14,8 мс
Соединение с удаленным сервером OpenVPN успешно установлено. И если вы следовали предыдущему совету по настройке сервера OpenVPN, на этом этапе вы также должны иметь возможность выполнить эхо-запрос и установить соединение с любой другой доступной системой в локальной сети сервера.
Чтобы получить доступ к машинам в удаленной сети по их FQDN (Полное доменное имя), вам необходимо изменить /etc/resolv.conf, чтобы добавить сервер имен из удаленной сети в начало списка. Это может и, вероятно, должно быть написано в сценарии, чтобы DNS-сервер использовался всякий раз, когда устанавливается VPN-соединение. Это позволит вам подключаться к server.foo.com вместо того, чтобы всегда использовать IP-адреса, например 192.168.10.23. На стороне сервера убедитесь, что запросы из этого диапазона IP-адресов (10.8.0.0 / 32) не блокируются списками ACL DNS-сервера — это важно помнить, поскольку это укусило меня и стоило мне дня разочарования.
На этом этапе клиент Linux настроен.