Практика
Хотите иметь безопасный и защищенный доступ в Интернет с вашего смартфона или ноутбука при подключении к незащищенной сети через WiFi отеля или кафе? Виртуальная частная сеть (Virtual Private Network, VPN) позволяет использовать незащищенные сети таким образом, как если бы вы работали в частной сети. Весь ваш трафик в этом случае проходит через VPN-сервер.
В комбинации с использованием HTTPS-соединения описываемые далее настройки позволят вам обезопасить свою приватную информацию, например, логины и пароли, а также ваши покупки. Более того, вы сможете обходить региональные ограничения и цензуру, а также скрывать свое местонахождение и незашифрованный HTTP-трафик от незащищенной сети.
OpenVPN представляет собой мощное и гибко настраиваемое программное обеспечение с открытым исходным кодом для работы с Secure Socket Layer (SSL) VPN. В этой статье мы установим и настроим OpenVPN сервер, а также научимся осуществлять к нему доступ из Windows, Mac OS, iOS и Android. Для этого мы выполним несколько простых шагов.
Прежде всего вам необходимо иметь сервер с Ubuntu 16.04.
Перед тем, как начать следовать шагам, описанным в этой статье, вам необходимо настроить отдельный, не-рутовый (non-root) профиль пользователя с привилегиями
Когда вы будете готовы начать, зайдите на ваш сервер под созданным вами
Сначала установим OpenVPN на наш сервер. OpenVPN доступен в стандартных репозиториях Ubuntu, мы можем использовать
Обновим список пакетов сервера и установим необходимые пакеты следующими командами:
Необходимое программное обеспечение установлено и готово к настройке.
OpenVPN это виртуальная частная сеть, использующая TLS/SSL. Это означает, что OpenVPN использует сертификаты для шифрования трафика между сервером и клиентами. Для выпуска доверенных сертификатов (trusted certificates) нам потребуется создать наш собственный центр сертификации.
Для начала скопируем шаблонную директорию
Далее зайдем в эту директорию для начала настройки центра сертификации:
Для настройки переменных нашего центра сертификации нам необходимо отредактировать файл
Внутри файла вы найдете переменные, которые можно отредактировать, и которые задают параметры сертификатов при их создании. Нам нужно изменить всего несколько переменных.
Перейдите ближе к концу файла и найдите настройки полей, используемые по умолчанию при создании сертификатов. Они должны выглядеть примерно так:
. . . export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="me@myhost.mydomain" export KEY_OU="MyOrganizationalUnit" . . .
Замените значения, выделенные красным, на что-нибудь другое, не оставляйте их не заполненными:
. . . export KEY_COUNTRY="US" export KEY_PROVINCE="NY" export KEY_CITY="New York City" export KEY_ORG="DigitalOcean" export KEY_EMAIL="admin@example.com" export KEY_OU="Community" . . .
Пока мы в этом файле, отредактируем значение
export KEY_NAME="server"
Сохраните и закройте файл.
Теперь мы можем использовать заданные нами переменные и утилиты
Убедитесь, что вы находитесь в директории центра сертификации и используйте команду
Вы должны увидеть следующий вывод:
NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/sammy/openvpn-ca/keys
Убедимся, что мы работаем в "чистой среде" выполнив следующую команду:
Теперь мы можем создать наш корневой центр сертификации командой:
Эта команда запустит процесс создания ключа и сертификата корневого центра сертификации. Поскольку мы задали все переменные в файле
Generating a 2048 bit RSA private key ..........................................................................................+++ ...............................+++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [US]: State or Province Name (full name) [NY]: Locality Name (eg, city) [New York City]: Organization Name (eg, company) [DigitalOcean]: Organizational Unit Name (eg, section) [Community]: Common Name (eg, your name or your server's hostname) [DigitalOcean CA]: Name [server]: Email Address [admin@email.com]:
Теперь у нас есть центр сертификации, который мы сможем использовать для создания всех остальных необходимых нам файлов.
Далее создадим сертификат, пару ключей и некоторые дополнительные файлы, используемые для осуществления шифрования, для нашего сервера.
Начнем с создания сертификата OpenVPN и ключей для сервера. Это можно сделать следующей командой:
Внимание: Если ранее вы выбрали имя, отличное от
Вывод опять будет содержать значения по умолчанию, переданные этой команде (
Согласитесь со всеми значениями по умолчанию, нажимая 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
Далее создадим оставшиеся файлы. Мы можем сгенерировать сильные ключи протокола Диффи-Хеллмана, используемые при обмене ключами, командой:
Для завершения этой команды может потребоваться несколько минут.
Далее мы можем сгенерировать подпись HMAC для усиления способности сервера проверять целостность TSL:
Далее мы можем сгенерировать сертификат и пару ключей для клиента. Вообще это можно сделать и на клиентской машине и затем подписать полученный ключ центром сертификации сервера, но в этой статье для простоты мы сгенерируем подписанный ключ на сервере.
В этой статье мы создадим ключ и сертификат только для одного клиента. Если у вас несколько клиентов, вы можете повторять этот процесс сколько угодно раз. Просто каждый раз передавайте уникальное значение скрипту.
Поскольку мы можем вернуться к этому шагу позже, мы повторим команду
Для создания файлов без пароля для облегчения автоматических соединений используйте команду
Для создания файлов, защищенных паролем, используйте команду
В ходе процесса создания файлов все значения по умолчанию будут введены, вы можете нажимать ENTER. Не задавайте challenge password и введите y на запросы о подписи и подтверждении создания сертификата.
Далее настроим сервис OpenVPN с использованием созданных ранее файлов.
Нам необходимо скопировать нужные нам файлы в директорию
Сначала скопируем созданные нами файлы. Они находятся в директории
Далее нам необходимо скопировать и распаковать файл-пример конфигурации OpenVPN в конфигурационную директорию, мы будем использовать этот файл в качестве базы для наших настроек:
Теперь, когда наши файлы находятся на своем месте, займемся настройкой конфигурационного файла сервера:
Сначала найдем секцию HMAC поиском директивы
tls-auth ta.key 0 # This file is secret key-direction 0
Далее найдем секцию шифрования, нас интересуют закомментированные строки
cipher AES-128-CBC
Под этой строкой добавьте строку
auth SHA256
Наконец, найдите настройки
user nobody group nogroup
Сделанные нами настройки создают VPN соединение между двумя машинами, но они не заставляют эти машины использовать VPN соединение. Если вы хотите использовать VPN соединение для всего своего трафика, вам необходимо протолкнуть (push) настройки DNS на клиентские машины.
Для этого вам необходимо раскомментировать несколько директив. Найдите секцию
push "redirect-gateway def1 bypass-dhcp"
Чуть ниже находится секция
push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220"
Это позволит клиентам сконфигурировать свои настройки DNS для использования VPN соединения в качестве основного.
По умолчанию OpenVPN использует порт 1194 и протокол UDP для соединения с клиентами. Если вам необходимо изменить порт из-за каких-либо ограничений для ваших клиентов, вы можете сделать это изменив настройку
# Optional! port 443
Используемый протокол может иметь ограничения по номеру порта. В этом случае измените
# Optional! proto tcp
Если у вас нет явной необходимости использовать другой порт, лучше оставить обе эти настройки со значениями по умолчанию.
Если во время использования команды
cert server.crt key server.key
Сохраните и закройте файл.
Далее нам необходимо настроить сетевую конфигурацию сервера, чтобы OpenVPN мог корректно перенаправлять трафик.
Сначала разрешим серверу перенаправлять трафик. Это ключевая функциональность нашего VPN сервера.
Настроим это в файле
Найдите строку настройки
net.ipv4.ip_forward=1
Сохраните и закройте файл.
Для применения настроек к текущей сессии наберите команду:
Если вы следовали статье о настройке Ubuntu 16.04, упомянутой в начале этой статьи, у вас должен быть установлен и настроен файрвол UFW. Вне зависимости от того, используете ли вы файрвол для блокировки нежелательного трафика (что вам стоит делать практически всегда), в этой статье нам потребуется файрвол для манипулирования с входящим на сервер трафиком. Мы должны изменить файл настроек для сокрытия соединений (masquerading).
Перед тем, как изменить этот файл, мы должны найти публичный интерфейс сети (public network interface). Для этого наберите команду:
Публичный интерфейс должен следовать за словом "dev". Например, в нашем случае этот интерфейс называется
default via 203.0.113.1 dev wlp11s0 proto static metric 600
Зная название интерфейса откроем файл
Это файл содержит настройки UFW, которое применяются перед применением правил UFW. Добавьте в начало файла выделенные красным строки. Это настроит правила, применяемые по умолчанию, к цепочке
Внимание: не забудьте заменить
# # 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, что ему по умолчанию необходимо разрешать перенаправленные пакеты. Для этого откройте файл
Найдите в файле директиву
DEFAULT_FORWARD_POLICY="ACCEPT"
Сохраните и закройте файл.
Далее настроим сам файрвол для разрешения трафика в OpenVPN.
Если вы не меняли порт и протокол в файле
Даже мы добавим порт SSH на случай, если вы не сделали этого ранее.
Теперь деактивируем и активируем UFW для применения внесенных изменений:
Теперь наш сервер сконфигурирован для обработки трафика OpenVPN.
Мы готовы включит сервис OpenVPN на нашем сервере. Мы можем сделать это с помощью systemd.
Нам необходимо запустить сервер OpenVPN указав имя нашего файла конфигурации в качестве переменной после имени файла systemd. Файл конфигурации для нашего сервера называется
Убедимся, что сервис успешно запущен командой:
Если все получилось, вывод должен выглядеть примерно следующим образом:
● openvpn@server.service - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/openvpn@.service; 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/openvpn@server.service └─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 May 03 15:30:05 openvpn2 ovpn-server[5856]: /sbin/ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2 May 03 15:30:05 openvpn2 ovpn-server[5856]: /sbin/ip route add 10.8.0.0/24 via 10.8.0.2 May 03 15:30:05 openvpn2 ovpn-server[5856]: GID set to nogroup May 03 15:30:05 openvpn2 ovpn-server[5856]: UID set to nobody May 03 15:30:05 openvpn2 ovpn-server[5856]: UDPv4 link local (bound): [undef] May 03 15:30:05 openvpn2 ovpn-server[5856]: UDPv4 link remote: [undef] May 03 15:30:05 openvpn2 ovpn-server[5856]: MULTI: multi_init called, r=256 v=256 May 03 15:30:05 openvpn2 ovpn-server[5856]: IFCONFIG POOL: base=10.8.0.4 size=62, ipv6=0 May 03 15:30:05 openvpn2 ovpn-server[5856]: IFCONFIG POOL LIST May 03 15:30:05 openvpn2 ovpn-server[5856]: Initialization Sequence Completed
Вы также можете проверить доступность интерфейса OpenVPN
Вы должны увидеть конфигурацию интерфейса:
4: tun0: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
Если все в порядке, настроем сервис на автоматическое включение при загрузке сервера:
Далее настроим систему для простого создания файлов конфигурации для клиентов.
В домашней директории создайте структуру директорий для хранения файлов:
Поскольку наши файлы конфигурации будут содержать клиентские ключи, мы должны настроить права доступа для созданных директорий:
Далее скопируем конфигурацию-пример в нашу директорию для использования в качестве нашей базовой конфигурации:
Откройте этот файл в вашем текстовом редакторе:
Сделаем несколько изменений в этом файле.
Сначала найдите директиву
. . . # The hostname/IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote server_IP_address 1194 . . .
Убедитесь, что протокол совпадает с настройками сервера:
proto udp
Далее раскомментируйте директивы
# Downgrade privileges after initialization (non-Windows only) user nobody group nogroup
Найдите директивы
# 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
Добавьте настройки
cipher AES-128-CBC auth SHA256
Далее добавьте директиву
key-direction 1
Наконец, добавьте несколько закомментированных строк. Мы ходим добавить эти строки в каждый файл конфигурации, но они будут включены только для клиентов на Linux, которые используют файл
# script-security 2 # up /etc/openvpn/update-resolv-conf # down /etc/openvpn/update-resolv-conf
Если ваш клиент работает на Linux и использует файл
Сохраните и закройте файл.
Теперь создадим простой скрипт для генерации файлов конфигурации с релевантными сертификатами, ключами и файлами шифрования. Он будет помещать сгенерированные файла конфигурации в директорию
Создайте и откройте файл
Вставьте следующие текст в этот файл:
#!/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 '') \ ${KEY_DIR}/ca.crt \ <(echo -e ' \n') \ ${KEY_DIR}/${1}.crt \ <(echo -e ' \n') \ ${KEY_DIR}/${1}.key \ <(echo -e ' \n') \ ${KEY_DIR}/ta.key \ <(echo -e ' ') \ > ${OUTPUT_DIR}/${1}.ovpn
Сохраните и закройте файл.
Сделайте его исполняемым файлом командой:
Теперь мы можем легко сгенерировать файлы конфигурации клиентов.
Если вы следовали всем шагам этой статьи, вы создали сертификат
Если все прошло успешно, мы должны получить файл
client1.ovpn
Теперь мы должны переместить файл конфигурации на клиентское устройство. Например, на компьютер или смартфон.
Способ доставки файла зависит от операционной системы вашего устройства и программного обеспечения, которое вы захотите использовать для перемещения файла. Мы рекомендуем передавать файл по защищенному соединению, например, с использованием SFTP или SCP.
Ниже мы приводим пример передачи файла client1.ovpn с использованием SFTP. Следующую команду можно использовать на вашем локальном компьютере под управлением Mac OS или Linux. Она перемещает файл
Ниже представлено несколько ссылок на инструменты и статьи о безопасном переносе файлов с сервера на локальный компьютер:
Теперь мы поговорим о том, как устанавливать клиентские профили VPN на Windows, Mac OS, iOS и Android. Процесс установки уникален для каждой платформы, поэтому пропускайте платформы, которые вы не планируете использовать.
Название соединения OpenVPN зависит от того, как вы называли свой
Вы можете загрузить клиент для работы с OpenVPN для Windows со страницы загрузок OpenVPN. Выберите необходимую вам версию установщика.
Внимание: установка OpenVPN требует администраторской учетной записи.
После установки OpenVPN скопируйте ваш
C:\Program Files\OpenVPN\config
Запустите OpenVPN, клиент должен автоматически увидеть ваш профиль.
Клиент OpenVPN требует запуска с правами администратора даже для аккаунтов администратора. Для запуска сделайте щелчок правой кнопкой мыши на клиенте и выберите Run as administrator каждый раз при запуске клиента. Это также означает, что обычные пользователи должны будут вводить пароль администратора для использования OpenVPN.
Для того, чтобы приложение OpenVPN всегда запускалось с правами администратора, сделайте щелчок правой кнопкой мыши на иконке клиента и перейдите в раздел Properties. В нижней части вкладки Compatibility нажмите на кнопку Change settings for all users. В открывшемся окне выберите Run this program as an administrator.
Каждый раз при запуске клиента OpenVPN Windows будет спрашивать, хотите ли вы разрешить программе внести изменения в настройки вашего компьютера. Нажмите Да. Запуск клиента OpenVPN просто помещает приложение в системный трей, при этом само соединение не устанавливается автоматически.
Для установки соединения сделайте щелчок правой кнопкой мыши на иконке OpenVPN в системном трее. В открывшемся контекстном меню выберите client1 (это наш профиль
Откроется окно статуса, которое будет отображать лог соединения. При завершении соединения вы увидите соответствующее сообщение.
Закрыть VPN соединение можно точно так же: сделайте щелчок правой кнопкой мыши на иконке OpenVPN в системном трее, выберите профиль клиента и нажмите Disconnect.
Tunnelblick - это бесплатный OpenVPN клиент для Mac OS с открытым исходным кодом. Вы можете загрузить его со страницы загрузок Tunnelblick. Сделайте двойной щелчок на загруженном
В конце процесса установки Tunnelblick спросит, есть ли у вас конфигурационные файлы. Проще всего ответить No и завершить установку Tunnelblick. Откройте Finder и сделайте двойной щелчок на
Запустите Tunnelblick двойным щелчком из папки Applications. После запуска в панели меню в правой верхней части экрана появится иконка Tunnelblick. Для установки соединения нажмите на иконку, а затем Connect. Далее выберите соединение client1.
В зависимости от используемой вами версии Linux, вы можете использовать самые разные программы для установки соединения. Возможно, это умеет делать даже ваш менеджер окон.
Наиболее универсальным способом установки соединения, тем не менее, является программное обеспечение OpenVPN.
В Ubuntu или Debian вы можете установить его точно так же, как и на сервере:
В CentOS вы можете активировать EPEL репозитории и затем ввести следующие команды:
Сначала проверьте, содержит ли ваш дистрибутив скрипт
update-resolve-conf
Далее отредактируйте полученный с сервера файл конфигурации клиента OpenVPN:
Если вам удалось найти файл
script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf
Если вы используете CentOS, измените
group nobody
Сохраните и закройте файл.
Теперь вы можете соединиться с VPN используя команду
В результате вы подключитесь к серверу.
Найдите в iTunes App Store официальный клиент OpenVPN Connect и установите его. Для переноса файла конфигурации клиента на ваше устройство, подключите устройство к компьютеру.
Запустите iTunes на компьютере и выберите iPhone > apps. Найдите секцию File Sharing и нажмите на приложение OpenVPN. Перенесите ваш файл
Далее запустите приложение OpenVPN на iPhone. Вы получите уведомление, что новый профиль готов к импорту. Нажмите на зеленый плюсик для импорта профиля.
OpenVPN готов к использованию с новым профилем. Для установки соединения потяните слайдер Connect в позицию On. Для остановки соединения переместите этот же слайдер в положение Off.
Откройте Google Play Store. Найдите и установите официальное приложение OpenVPN Android OpenVPN Connect.
Передать профиль с компьютера на телефон можно подключив Android устройство к компьютеру через USB и скопировав файл. Вы также можете переместить файл профиля с помощью SD карты, скопировав профиль на карту и вставив карту в Android устройство.
Запустите приложение OpenVPN и нажмите на меню для импорта профиля.
Далее найдите файл в файловой системе (в нашем примере это
Для установки соединения нажмите кнопку Connect. Вам будет задан вопрос, доверяете ли вы приложению OpenVPN. Ответьте OK для установки соединения. Для остановки соединения зайдите в приложение OpenVPN и выберите Disconnect.
После того, как все установлено и настроено, убедимся, что все работает правильно. Без установки соединения с VPN откройте браузер и зайдите на DNSLeakTest.
Этот сайт вернет IP адрес, назначенный вам вашим Интернет-провайдером. Для того, чтобы проверить, какие DNS сервера используются, нажмите на Extended Test.
Теперь установите соединение, используя ваш VPN клиент и обновите страницу в браузере. Выдаваемый вам IP адрес должен быть совершенно другим. Теперь для всех в Интернете вы используете этот новый IP адрес. Нажмите Extended Test еще раз, чтобы проверить ваши настройки DNS и убедитесь, что теперь вы используете DNS сервера вашего VPN.
Время от времени, вам может понадобиться отозвать клиентский сертификат для предотвращения доступа к серверу VPN&
Для этого зайдите в вашу директорию центра сертификации и введите команды:
Далее используйте команду
Вывод результатов работы этой команды будет оканчиваться ошибкой 23. Это нормально. В результате работы будет создан файл
Переместите этот файл в директорию
Далее откройте файл конфигурации сервера OpenVPN:
Добавьте в конец файла строку
crl-verify crl.pem
Сохраните и закройте файл.
Перезапустите OpenVPN для завершения процесса отзыва сертификата:
Теперь клиент не сможет устанавливать соединение с сервером OpenVPN используя старый сертификат.
Для отзыва дополнительных сертификатов выполните следующие шаги:
Сгенерируйте новый список отозванных сертификатов используя команду
Скопируйте новый список отозванных сертификатов в директорию
Перезапустите сервис OpenVPN.
Эта процедура может быть использована для отзыва любых созданных вами ранее сертификатов.
Поздравляем! Теперь вы можете безопасно выходить в Интернет, весь ваш трафик защищен от прослушки цензоров и злоумышленников.
Для конфигурации дополнительных клиентов повторите шаги 6 и 11-13 для каждого нового устройства. Для отзыва доступа того или иного клиента используйте шаг 14.
Комментарии
Оставить комментарий
Компьютерные сети
Термины: Компьютерные сети