Анонимность в интернете своими руками. Установка и настройка VPN сервера.

Все настройки выполнены в VPS от hostsailor.com

Мы выполнили необходимый минимум подготовительных работ, а именно:

  • настроили SSH, как написано здесь;
  • настроили файрволл, как написано здесь.

Теперь наш сервер неплохо защищен от злонамеренных воздействий. Пора сделать то, для чего мы всё это затевали.

Немного теории, для понимания того, что мы сечас будем делать. VPN (Virtual Private Network) — виртуальная частная сеть. Идея в том, что мы строим свою сеть «поверх» других сетей.

Допустим вы решили зайти на запрещенный ресурс. Какой маршрут вашего интернет трафика? В большинстве случаев схема такая:

Безусловно, это очень упрощенная схема. Но для понимания процесса достаточна. Как видите, у провайдера есть некий-фильтр, который «просматривает» весь ваш трафик и принимает решения, пропустить или нет (настучать на вас или нет J ). Фактически ваша точка выхода в интернет – это внешние маршрутизаторы вашего провайдера. Именно тут принимается решение, увидите вы тот или иной ресурс или нет.

Что сейчас сделаем мы, запустив наш трафик через интернет:

На наших личных устройствах (компьютер, смартфон, планшет и т.д.) будут установлены и настроены программы-клиенты для VPN сервера. На нашем VPS будет установлена и настроена программа-сервер VPN. Как только они соединятся между собой, появляется наш виртуальный зашифрованный канал поверх всех остальных каналов (красная пунктирная линия на рисунке). Теперь никто не знает, что содержится в трафике между нашими устройствами и нашим VPN сервером, весь трафик надёжно зашифрован. Фактически теперь наша точка выхода в интернет – это наш VPS. Именно его IP-адрес будут видеть все те Интернет-ресурсы, на которые мы будем заходить. Теперь никакой товарищ майор не узнает, какие видосики вы смотрите, на какие сайты вы ходите и какие сообщения на форумах пишете. Да, если получить доступ к вашему VPS, можно узнать содержимое вашего трафика. Но ведь наш VPS в другой стране, надавить авторитетом на хостера не получится. Нужно затевать полноценное расследование, привлекать международные соглашения, Интерпол, направлять обоснованный (причем обоснованный с точки зрения законодательства страны хостера) запрос. В общем, если вы не натворите чего-нибудь совсем плохого, никто ничего и не получит. Единственное, что от вас требуется: аккуратное обращение с ключами и паролями. Вернёмся к этому вопросу позже.

Хватит теории, переходим к практике.

 У вас уже запущены и соединены с сервером PuTTY и WinCSP. Переходим к консоли PuTTY и выполняем следующие команды:

Создадим папку для ключей установим её текущей. Для это выполним в консоли команды:

Для генерации ключей мы используем утилиту Easy-RSA. Для начала скачем её себе:

Распакуем:

Перейдем в папку с утилитой:

Создадим файл с настройками из приложенного образца:

Свернём пока консоль и развернём WinCSP. Перейдём в папку /etc/openvpn/keys/easy-rsa-master/easyrsa3.

Примечание: если в правой панели WinCSP вы вдруг не видите каких-либо файлов или папок, которые там должны быть, нажмите кнопку обновления:

Находим и открываем файл vars. Находим строчки

#set_var EASYRSA_REQ_COUNTRY    «US»

#set_var EASYRSA_REQ_PROVINCE   «California»

#set_var EASYRSA_REQ_CITY       «San Francisco»

#set_var EASYRSA_REQ_ORG        «Copyleft Certificate Co»

#set_var EASYRSA_REQ_EMAIL      «[email protected]»

#set_var EASYRSA_REQ_OU      «My Organizational Unit»

и убираем в начале каждой символ #

Теперь можно включить фантазию и изменить под себя значения в кавычках. Например:

set_var EASYRSA_REQ_PROVINCE    «Moscow»

set_var EASYRSA_REQ_CITY        «Moscow»

set_var EASYRSA_REQ_ORG         «RosComNadzor»

set_var EASYRSA_REQ_EMAIL       «[email protected]»

set_var EASYRSA_REQ_OU       «Otdel besnennogo printera»

Эти параметры обязательны при генерации ключа, но, в нашем случае, ни на что не влияют. Далее находим и приводим к указанному виду следующие параметры:

Строчку

#set_var EASYRSA_KEY_SIZE    2048

превращаем в:

set_var EASYRSA_KEY_SIZE     4096

Строчку

#set_var EASYRSA_DIGEST      «sha256»

превращаем в:

set_var EASYRSA_DIGEST       «sha512»

В этом файле можно еще много чего поправить, например, срок действия ключа. Но мы не будем этого делать. Перегенерировать ключ раз 180 дней – не так уж и сложно. Закрываем файл с сохранением.

Возвращаемся к консоли PuTTY. Создаем инфраструктуру публичных ключей (PKI, Public Key Infrastructure). Выполним команду:

Easy-RSA отвечает нам, что создан каталог

/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/

Не буду расписывать, что такое PKI. Про это есть отличная статься с картинками в Википеди. Нам важно знать, что ключи создаются парами – закрытый и открытый. Для обмена с кем-то защищаемой информацией мы обмениваемся открытыми ключами. В данном случае у сервера будет свой закрытый ключ и открытые ключи клиентов. У клиентов свои закрытые ключи и открытый ключ сервера. А удостоверять подлинность ключей, будет созданный нами же удостоверяющий центр. Его корневой сертификат будет у всех участников обмена.

Создадим свой удостоверяющий центр (СА). По-хорошему, его бы надо создавать не здесь, а на какой-то отдельной машине и, в идеале, не подключенной к интернету. Но, в нашем частном случае, это чрезмерная паранойя. Не будем забывать, что наша задача просто выйти из-под регулирования законодательства своей страны. Если кто-то получит возможность покопаться в нашем сервере, он и так всё узнает. Поэтому не будем усложнять.

Выполним команду:

Нас просят придумать пароль:             

Да-да, опять пароль. Требования к сложности примерно такие же, как и для пароля ключа SSH. Зачем этот пароль: если корневой сертификат вашего удостоверяющего центра попадёт в чужие руки, то любой сможет сгенерировать пользовательские сертификаты и подключиться к вашему VPN-серверу. Поэтому вы должны беречь от разглашения и закрытый ключ корневого сертификата (файл ca.key, и пароль к нему). Забывать этот пароль также не стоит. Восстановить его нельзя и придется заново создавать корневой сертификат и все пользовательские сертификаты. Не смертельно, но не приятно. В общем придумываем и вводим пароль. Нас попросят ввести его два раза. На следующий вопрос:

просто жмём Enter. У нас появились файлы ca.crt (корневой сертификат. Он открыт, мы его будем передавать клиентам)

и ca.key (закрытый ключ удостоверяющего центра, его нужно беречь от разглашения. Это самая ценная для вас вещь на вашем сервере).

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

На запрос ввести Common Name просто жмём Enter.

Как видите, на выходе у нас два файла: server.key – это закрытый ключ сервера; server.req – это запрос нашему CA на удостоверение (подписывание) сертификата. Скормим запрос нашему CA:

CA просит подтвердить, что мы в своём уме и действительно хотим подписать сертификат. Убедим его в этом: наберём yes и нажмём Enter.

Теперь введём пароль от нашего закрытого ключа CA

И вот CA создал подписанный открытый ключ нашего сервера /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/server.crt

А теперь мы сделаем очень нужную штуку. Мы создадим ключ Диффи-Хелмана. Этот ключ защитит наш трафик от расшифровки даже в случае похищения ключей сервера и клиентов. Т.е. если товарищ майор записывал весь ваш шифрованный трафик, скрипя зубами от досады, что не может понять, что ж такое вы делаете. А потом он вдруг заполучит все ваши ключи, то он всё равно не сможет расшифровать тот трафик, который у него записан. Вот такая вот магия математики. Берегите математиков, они умные и защищают нас от товарища майора.

Вводим в консоли команду:

и идём пить чай ибо процесс это не быстрый. А учитывая, что процессор у VPS весьма слабенький, генерация может занять до 15 минут (а может и больше). В общем ждите, магия быстро не делается.

Когда генерация завершиться, мы получим файлик /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/dh.pem

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

Выполним команду:

 

И получим файл /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/crl.pem. В нём и будет список отозванных сертификатов. Отзывать сертификаты мы потренируемся позже, пока оставим так.

Теперь подкинем VPN-серверу все необходимые ключи. Для этого выполним несколько команд:

Получится вот так:

И сделаем текущей папку VPN-сервера:

Еще не много магии для усиления безопасности. Сделаем HMAC (ищите описание на Хабре и в Википедии). Выполним команду:

Рядом с нашими ключами в папке /etc/openvpn будет создан файл ta.key. Его мы также будем отдавать клиентам.

Теперь с помощью WinCSP поправим права на файлы: ca.crt, crl.pem, dh.pem, server.crt. Сделаем для всех 0644.

А для файлов server.key, ta.key установим права 0600 (по-идее они сразу такие и есть, но на всякий случай проверьте).

В принципе VPN-сервер можно уже сконфигурировать и запускать, но нам пока нечем к нему подключиться. Поэтому создадим ключи для клиента. Вернёмся в папку утилиты Easy-RSA:

Для создания ключа и запроса на подпись используется команда (не спешите вводить, сначала прочитайте то, что ниже):

Для подписания запроса и создания открытого ключа команда:

Всё также, как и при создании ключей сервера. Если возникнут вопросы, смотри выше, как мы там это делали.

Обратите внимание на следующее:

  • ключ nopass вы можете использовать, а можете не использовать. С ключом nopass вам не потребуется придумывать пароль для закрытого ключа клиента. Тогда, при подключении к VPN-серверу, и вводить его не придётся. Но в этом случае любой, кто завладеет ключом клиента, сможет подключиться к вашему VPN-серверу. Однако, вводить каждый раз пароль не удобно. Ищите компромисс. Например, на домашнем компьютере ключ без пароля, на рабочем – с паролем. Если ваше переносное устройство не имеет дополнительных мер защиты (шифрование накопителя, контроль доступа и пр.) и есть риск потерять устройство, или иным образом скомпрометировать – сделайте ключ с паролем.
  • client_name это произвольное, понятное вам название того клиента, который будет им пользоваться. Например, для домашнего компьютера можно сделать имя my_home_pc. Тогда команды будут выглядеть так:

А для своего смартфона сделать ключи с именем my_smartphone и с защитой паролем. Тогда команды будут выглядеть так:

В общем делайте удобное и понятное имя, чтобы не запутаться в ключах.

Для данной статьи я сделаю тестовые ключи для компьютера и смартфона с именами test_pc и test_smart

Сначала покажу как настроить подключение с компьютера. Мы проверим, что наш VPN работает, а потом расскажу, как настроить на смартфоне.

Клиенту нужно будет передать следующие файлы:

  • сгенерированную пару ключей клиента (в моём случае test_pc.crt и test_pc.key)
  • открытый сертификат CA (ca.crt)
  • ta.key

Никаких других ключей и сертификатов у клиента быть не должно!

Ну вот, все ключи у нас есть. Давайте уже конфигурировать и запускать.

В папке /etc/openvpn создадим файл server.conf (если он там уже есть, удалите и создайте заново). Как создавать файлы, было написано ранее. Содержимое файла будет следующее:

Описание опций файла выходит за рамки статьи. О некоторых опциях я расскажу ниже, в процессе.

Сохраним файл. Проверим, чтобы права были 0644.

Теперь пробуем запустить сервер. В консоли команда:

Проверяем, что запустился.

Сначала посмотрим на состояние службы сервера командой:

Если всё хрошо, то это будет выглядеть вот так:

Но может быть и плохо:

Смотрим лог (/etc/openvpn/openvpn.log) и видим там, например:

us=64300 ERROR: Cannot open TUN/TAP dev /dev/net/tun: No such file or directory (errno=2)

us=64310 Exiting due to fatal error

Т.е. не найден TUN/TAP драйвер. Об этом я писал в начале статьи. В случае моего текущего хостера это решается просто. В письме (смотри раздел про аренду VPS), которое содержало IP-адрес сервера и пароль на SSH, была дана ссылка на панель управления сервером и логин-пароль к ней. Заходим в эту панель и видим:

Так включим же его. После включения сервер уйдет в перезагрузку, придется закрыть PuTTY и WinCSP, открыть их заново и подключиться к серверу.

Еще раз пробуем запустить службу и проверить её состояние. Всё должно стать хорошо. Если не стало, смотрим логи. Тут универсального рецепта нет. Например, может мешать SELinux (это такая система безопасности Linux). Чиним командой:

И опять пробуем запустить службу и проверить состояние.

Если пишет, что

Тогда сначала:

А уже потом

Еще проверим, что служба VPN-сервера слушает нужный порт (у нас 443):

Если напишет что-то типа: -bash: netstat: command not found, то выполняем команду:

И потом:

Должно быть так:

Убедившись, что служба стартует без проблем, добавляем её в автозагрузку:

Ну и отключим логи. На всякий случай 😉 Для этого откроем для редактирования файл /etc/openvpn/server.conf и строчку:

log openvpn.log

переделываем в:

log /dev/null

сохраняем и закрываем. Делаем:

И удаляем файл /etc/openvpn/openvpn.log

Нет у нас логов, товарищ майор.

Пришла пора подключиться к нашему серверу. Речь пойдет о компьютерах под управлением операционной системы семейства Windows. Если у вас Linux, то я не пойму, зачем вы всё это читаете.

ВНИМАНИЕ: если вы не выполните настройки портов, как написано в этой статье, у вас не получится соединиться!

Скачиваем клиента. https://swupdate.openvpn.org/community/releases/openvpn-install-2.4.2-I601.exe

И устанавливаем. В процессе убираем галочку с OpenVPN Service

Остальное не трогаем.

После установки открываем папку C:\Program Files\OpenVPN\config\ и создаем в ней файл client_name.ovpn

В данном случае client_name это произвольное имя, можете сделать его совпадающим с именем ключей.

Содержимое файла:

Вместо 123.123.123.123 вписываем IP-адрес своего сервера. Вместо test_pc.crt, test_pc.key вписываем правильные названия своих клиентских ключей. В общем-то ключи совсем не обязательно должны лежать в папке C:\Program Files\OpenVPN\config\, даже было бы намного лучше, чтобы они здесь не лежали, а находились на флешке и были всегда под контролем. Тогда путь выглядел бы примерно так:

ca «E:\\my_keys\\ca.crt» 

Но мы не будем пока мудрить и сделаем так. Сохраняем файл.

При помощи WinCSP скопируем к себе на компьютер все необходимые ключи:

И запускаем OpenVPN GUI (кнопка Пуск -> OpenVPN -> OpenVPN GUI)

Так у вас всего один файл .ovpn в папке  C:\Program Files\OpenVPN\config\, то соединение должно начаться автоматически. Появится окно с логом соединения:

А как только соединение будет установлено, в трее появится соответствующий значок зеленого цвета:

Если подключиться не получается, проверяйте настройки файрвола сервера, как это написано выше.

Проверяем, что теперь наш видимый в интернете IP совпадает с IP сервера. Например, по адресу http://myip.ru/

Всё, ваша личная VPN сеть работает, товарищ майор больше не может отслеживать ваш трафик.

Вы можите оставить комментарий, или поставить трэкбек со своего сайта.

Написать комментарий

XHTML: Вы можете использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">