Следующая новость
Предыдущая новость

Твой тайный туннель. Детальный гайд по настройке OpenVPN и stunnel для создания защищенного канала

08.12.2017 14:35
Твой тайный туннель. Детальный гайд по настройке OpenVPN и stunnel для создания защищенного канала

Содержание статьи

  • О сервисах и блокировках
  • Пара слов об OpenVPN
  • Что такое stunnel
  • Что нам понадобится
  • Провайдер VPS
  • Выбор ОС
  • Подготовка и первичная настройка
  • Базовая защита
  • Работа на сервере
  • Easy-rsa
  • OpenVPN-сервер
  • Сервер stunnel
  • Настройка файрвола и маршрутизации
  • Настройка клиентов
  • Клиент stunnel
  • Клиент OpenVPN
  • NOTE

У тебя могут быть самые разные мотивы, чтобы пользоваться VPN: недоверенные сети, разного рода ограничения или просто разумное желание не распространять лишний раз свои данные. В этой статье я расскажу, как сделать себе личный VPN на арендованном сервере и настроить OpenVPN и stunnel таким образом, чтобы даже глубокая инспекция пакетов ничего не давала.

О сервисах и блокировках

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

  1. Качество. Те, кто пользовался бесплатным VPN, знают, что в большинстве случаев сервис просто ужасен: низкая скорость, постоянные обрывы. Это и неудивительно, ведь, кроме тебя, им одновременно может пользоваться еще пара сотен человек.
  2. Безопасность. Даже если качество более-менее сносное, ты не знаешь, что на самом деле происходит с твоим трафиком. Хранится и анализируется ли он, кто и в каких целях оперирует сервисом. Бесплатный сыр, как говорится…
  3. Малое количество или полное отсутствие опций и настроек: нет возможности выбрать шифр, протокол и порт. Остается только пользоваться тем, что дали.

С платными сервисами дела обстоят лучше: можно ожидать какого-то гарантированного качества и наличия настроек. Но ты все еще не можешь знать наверняка, хранятся твои логи непосредственно на сервере или нет. К тому же твоего провайдера могут заблокировать.

Великий китайский файрвол, к примеру, научили определять и блокировать трафик OpenVPN при помощи техники Deep packet inspection (DPI). На какой бы порт ты его ни прятал, будь то UDP 53 или TCP 443, в Китае просто так OpenVPN не попользуешься. Дело в том, что в режиме TLS трафик OpenVPN отличается от обычного трафика HTTPS. Если под рукой есть сниффер, в этом несложно убедиться.

TLS-трафик OpenVPN

А вот как выглядит обычный HTTPS.

Твой тайный туннель. Детальный гайд по настройке OpenVPN и stunnel для создания защищенного канала
Трафик HTTPS

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

Пара слов об OpenVPN

OpenVPN использует два канала: канал управления (control channel) и канал данных (data channel). В первом случае задействуется TLS — с его помощью ведется аутентификация и обмен ключами для симметричного шифрования. Эти ключи используются в канале данных, где и происходит само шифрование трафика.

Существуют скрипты, которые автоматизируют установку, и процесс занимает меньше времени. Но, во-первых, эти скрипты подходят только для конкретных дистрибутивов, а во-вторых, они не предоставляют выбора. Например, используют RSA и AES-CBC, когда есть поддержка ECDSA и AES-GCM. Таким образом, без знания и понимания того, как это работает, ты не сможешь подправить скрипт, чтобы он исполнялся на других системах или делал то, что ты хочешь.

Что такое stunnel

Stunnel — это утилита для обеспечения защищенного соединения между клиентом и сервером посредством TLS для программ, которые сами шифровать трафик не умеют. Например, можно туннелировать трафик для netcat, vnc и даже bash. В нашем случае stunnel будет использоваться для маскировки трафика OpenVPN под «чистый» TLS, чтобы его было невозможно определить посредством DPI и, следовательно, заблокировать.

Твой тайный туннель. Детальный гайд по настройке OpenVPN и stunnel для создания защищенного канала
Трафик, туннелируемый через stunnel, ничем не отличается от обычного HTTPS

С учетом того что OpenVPN использует шифрование для своего канала данных, у нас есть два варианта настройки:

  • использовать шифрование stunnel плюс шифрование канала данных OpenVPN;
  • использовать шифрование stunnel, а шифрование канала данных OpenVPN отключить.

Таким образом, в первом варианте получается два слоя: один от stunnel, второй от OpenVPN. Этот вариант позволит использовать RSA вместе с ECDSA. Недостаток в том, что тратится больше ресурсов, и второй вариант позволит этого избежать. В любом случае настройка stunnel остается неизменной.

Что нам понадобится

Провайдер VPS

Первым делом нужно выбрать провайдера, который нам предоставит виртуальный выделенный сервер (VPS). Что выбирать — дело каждого и зависит от страны и от того, сколько ты готов платить. Главная рекомендация — выбирай страну, наиболее близкую по географическому расположению, это сведет задержку к минимуму. Но, конечно, живя в Китае, покупать сервис в Индии или Пакистане смысла мало.

Выбор ОС

Я буду использовать RHEL 7.4. Для точного копирования команд из статьи годится и CentOS 7 (1708), так как это бесплатная и почти идентичная копия RHEL, основанная на его коде. Возможно, подойдут другие дистрибутивы, а также производные RHEL (Fedora), но пути конфигурационных файлов и версии программ могут отличаться.

Подготовка и первичная настройка

После покупки сервера и установки системы нам нужно попасть на сервер. Я буду делать это с помощью SSH. Вся конфигурация будет проходить в два этапа: настройка на сервере (включает в себя первичную настройку) и настройка клиентов.

После покупки, скорее всего, тебе дадут доступ по SSH с логином root и паролем. Позже лучше создать обычного пользователя, а рутовые команды выполнять после sudo -i. Нужно это в том числе для защиты от брутфорса — пользователь root общеизвестный, и при попытках брута, вероятней всего, будет использоваться именно он.

Для начала нам понадобится подключить репозиторий EPEL — пакет openvpn лежит именно там.

$ yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm $ yum update -y 

На RHEL, CentOS, Fedora, OpenSUSE и, возможно, других установлен и включен по умолчанию SELinux. Проверить это можно командой getenforce или sestatus. Чтобы не нырять в дебри его настроек и спастись от возможной головной боли, мы переведем его в режим permissive. В этом режиме он будет оповещать нас о нарушениях политик безопасности, но предпринимать никаких действий не станет. Таким образом, у тебя всегда будет возможность его поизучать. Для этого нужно изменить следующую директиву в файле /etc/selinux/config:

SELINUX=permissive 

Перезагружаемся и ставим необходимые пакеты:

$ yum install -y iptables-services openvpn unzip 
  • iptables-services — файлы .service для управления утилитой iptables;
  • openvpn — сам сервер OpenVPN;
  • зачем нужен unzip, попробуй догадаться сам. ????

Базовая защита

Поскольку китайские боты и скрипт-киддиз не дремлют и, скорее всего, уже сейчас пробуют подобрать пароль к твоему серверу, перенесем sshd на другой порт и запретим логин от рута. Перед тем как это сделать, нужно убедиться, что в системе существует другой пользователь с доступом по SSH или добавить нового и установить для него пароль.

$ useradd -G wheel -m eakj $ passwd eakj 

где eakj — имя пользователя. В идеале нужно использовать ключи SSH, но в этом случае обойдемся паролем. Не забудь проверить, раскомментирована ли строчка %wheel ALL=(ALL) ALL в файле /etc/sudoers. Теперь изменим следующие директивы в файле /etc/ssh/sshd_config:

Port 12222 PermitRootLogin no PasswordAuthentication yes 

Перечитаем конфиги (systemctl reload sshd), убедимся, что sshd поднялся без проблем (systemctl status sshd), и попробуем открыть дополнительную сессию SSH, не закрывая текущей.

Продолжение статьи доступно только подписчикам

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

Подпишись на журнал «Хакер» по выгодной цене!

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

1 год

5090 р.

Экономия 1400 рублей!

1 месяц

580 р.

25-30 статей в месяц

Уже подписан?

Источник

Последние новости