PDA

Просмотр полной версии : Прорыв цензуры в рф. Сервисы VPN + SSH / SSL маскировка



stayer
11.10.2017, 19:20
Грядет взрослая борьба с анонимизацией. Вероятно, что чекисткая подворотня под видом неимеющегоаналогов купит китайский комплекс борьбы с анонимизаторами и более простыми средствами обхода цензуры. А китайцы этим занимаются давно и на гос. уровне: стандартный Tor даже с мостами и маскировкой трафика там работает слабо (http://blogerator.org/page/osobennosti-kitajskogo-interneta-blokirovki-vpn-kitaj-dpi) (блок входных узлов, статистический анализ трафика самообучающейся нейросетью, активные бот-атаки на адреса с подозрением на Tor-узлы), тоже касается I2P, уже не говоря о простых прокси и анонимизаторах.

Продвинутые китаезы обходят это, помимо прочего, при помощи VPN-сервисов, маскируемых защищенными SSL-протоколами или SSH (т.н. тунеллированием).

Что за зверь VPN? Расшифровывается как частная виртуальная сеть. Возник изначально сугубо как техническая схема, позволяющая сэкономить бабло путем расщепления одного внешнего (настоящего) сетевого адреса на кучу внутренних (частных). Т.о. VPN создавал сеть, паразитирующую на другой сети. Т.е. грубо фирмешка заводила 1 адресок Internet, а потом расщепляла его на своих сотрудников при помощи VPN, а платила только за одинс свой внешний адрес. Расщепление это производилось путем внесения в пакеты дополнительных пометок, по которым внутри понималось кому идет пакет или от кого. Позднее универсальность схемы VPN позволила применять ее и для сокрытия реальных адресатов, т.е. для анонимизации. Чтобы упорядочить это безобразие, мнополии кинулись строчить стандарты (протоколы) VPN: сейчас широко известны протоколы PPTP, L2TP, открытый OpenVPN, зашифрованный Ipsec. Собственно обычно под VPN сейчас понимают реализацию одного из этих протоколов.

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

По свидетельствам из китая, VPN+туннелирование вполне рабочая схема, хотя с нею также борются. Последние новости (http://chinapk.ru/eshhe-odin-arest-v-svyazi-s-prodazhej-vpn/) о начале арестов в китае VPN-энтузиастов косвенно показывают, что тамошние цензоры расписались в своей беспомощности. Тема довольно обширная. Универсальной инструкции пока не нашел. Хотя есть много материала. Читайте, изучайте, скоро пригодиться. Времени написать хорошую инструкцию пока нет, пробуйте сами.

rufabula - https://www.rufabula.com/articles/20...top-censorship (https://www.rufabula.com/articles/2014/06/03/stop-censorship)
Вот еще по раздаче wi-fi с android-телефона (с левой симкой) - известный трюк с TTL по обходу провайдерских ограничений:
https://habrahabr.ru/post/238351/
https://4pda.ru/forum/index.php?showtopic=596728
http://compblog.ru/kak-obojti-ograni...menit-ttl.html (http://compblog.ru/kak-obojti-ogranichenie-mts-bezlimitishhe-na-platnuyu-razdachu-interneta-kak-izmenit-ttl.html)

Списки платных VPN-сервисов:
https://www.tomsguide.com/us/best-vpn,review-4292.html
https://thebestvpn.com
https://allvpn.org/ru (rus)
https://geektimes.ru/post/244290/

Немного про 5 известных протоколов VPN:
https://habrahabr.ru/post/191874/
https://habrahabr.ru/company/1cloud/blog/307280/
Еще немного по основам:
http://fb.ru/article/221829/kak-rabotaet-vpn-soedinenie

OpenVPN в туннеле SSH или SSL-защищенного протокола. По этому поводу:

https://www.comparitech.com/blog/vpn...th-ssh-tunnel/ (https://www.comparitech.com/blog/vpn-privacy/hide-openvpn-traffic-with-ssh-tunnel/)
https://1cloud.ru/help/linux/openvpn...bian7_ubuntu12 (https://1cloud.ru/help/linux/openvpnserver_debian7_ubuntu12)

О настройке в Ubuntu своего VPN-сервиса c SSH-туннелем на amazon.com и работе с ним:
https://habrahabr.ru/post/315664/

Настройка VPN + SSH в Windows:
https://secfall.com/anonimnost-v-int...a-vpn-servera/ (https://secfall.com/anonimnost-v-internete-svoimi-rukami-ustanovka-i-nastroyka-vpn-servera/)

stayer
23.10.2017, 17:40
Одним из наиболее ходовых протоколов обхода китайской цензуры стал Ipsec:
https://habrahabr.ru/post/250859/

По маскировке OpenVPN при помощи программы obfsproxy используемого для маскировки Tor-соединений:
https://habrahabr.ru/post/251569/

Эти протоколы получили наибольшее распространение. А собственно сами посредники - VPN - сервера либо поднимаются самостоятельно на зарубежных виртуальных хостингах (VPS), либо получаются через платную подписку на один из VPN-сервисов, см. выше.

Борс
31.10.2017, 19:36
1.Что случится 1 ноября?

В России вступит в силу закон, позволяющий блокировать сервисы, позволяющие обходить блокировки в интернете: VPN, Tor, анонимайзеры и встроенные сервисы браузеров (например, в Opera).

2.А это возможно технически?
Мы пока точно не знаем — нужно посмотреть, как будет применяться новый запрет. Самое простое, что могут сделать власти, — начать блокировать сайты сервисов VPN, чтобы пользователи не могли купить к ним доступ. Анонимайзерам и браузерам они тоже могут угрожать блокировкой сайтов, а у Tor заблокировать публичные серверы.

3. И что делать?
Проще всего заранее купить VPN-сервис. Для обхода блокировок подойдет любой из тех, что рекомендует PCMag (https://www.pcmag.com/article2/0,2817,2403388,00.asp). Например:


NordVPN (https://join.nordvpn.com/order/) (69 долларов в год, 12 долларов в месяц);
Private Internet Access (https://rus.privateinternetaccess.com/) (40 долларов в год, 7 долларов в месяц);
KeepSolid VPN Unlimited (https://www.vpnunlimitedapp.com/en/pricing) (45 долларов в год, 9 долларов в месяц);
PureVPN (https://www.purevpn.com/order) (78 долларов за два года, 11 долларов в месяц).

Все эти сервисы работают и на телефонах с iOS, и с Android.

4.А Tor можно будет пользоваться?
Да, но с некоторыми неудобствами. По умолчанию Tor использует серверы из открытого списка, и так как он открыт, серверы могут заблокировать. Но есть еще закрытый список серверов, и Tor может выдавать их по запросу пользователя. Звучит немного пугающе, но вот простая инструкция на русском языке (https://bridges.torproject.org/bridges).

5. Я ничего не понимаю в технике! Что делать?!
Не спешите паниковать. Едва ли власти заблокируют одновременно все сервисы — описанная в законе процедура требует времени. Пока можно установить расширение для браузера и посмотреть, как контролирующим органам удастся договориться с разработчиками. У Google Chrome есть официальное расширение Data Saver (https://chrome.google.com/webstore/detail/data-saver/pfmgfdlgomnbgkofeojodiodmgpgmkac?hl=en), для Mozilla Firefox подойдет Zenmate (https://zenmate.com/), в Opera (http://www.opera.com/ru/computer/features/free-vpn) и «Яндекс.Браузере» (https://browser.yandex.ru/turbo/)» есть встроенные режимы, позволяющие обойти блокировки сайтов. Подробнее про обход блокировок читайте в карточках «Как обойти блокировки сайтов?» (https://meduza.io/cards/kak-oboyti-blokirovki-saytov) и «Власти решили запретить Tor, VPN и другие средства обхода блокировок. Что делать?» (https://meduza.io/cards/vlasti-reshili-zapretit-tor-vpn-i-drugie-sredstva-obhoda-blokirovok-chto-delat).

https://meduza.io/cards/1-noyabrya-v-rossii-nachnut-blokirovat-vpn-servisy-tor-i-anonimayzery-chto-delat?utm_source=website&utm_medium=push&utm_campaign=browser_news

stayer
11.12.2017, 13:52
Полная инструкция по настройке защищенного OpenVPN канала на виртуальном хостинге VPS

Статья с "хакера" о поднятии собственного VPN канала, который способен пробить современную цензуру по типу китайского "золотого щита". Поставновка задачи следующая. Дано: компьютер/смартфон на ОС Windows/Linux/Android, цензурируемый Интернет, доступ к купленному за бугром виртуальному серверу (VPS)*. Требуется создать нецензурируемый канал выхода в Интернет с компьютера/смартфона.

*списки провайдеров платных VPS см. выше, оплатить доступ или даже подписаться на сервис можно кучей способов, включая анонимные.

Настройка OpenVPN и stunnel для создания защищенного канала


Содержание

1 Сервисы и блокировки
2 Пара слов об OpenVPN
3 Что такое stunnel
4 Что нам понадобится
4.1 Провайдер VPS
4.2 Выбор ОС
5 Подготовка и первичная настройка
5.1 Базовая защита
6 Работа на сервере
6.1 Easy-rsa
6.2 OpenVPN-сервер
6.3 Сервер stunnel
6.4 Настройка файрвола и маршрутизации
7 Настройка клиентов
7.1 Клиент stunnel
7.2 Клиент OpenVPN

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

Из сегодняшней статьи вы узнаете, как поднять свой личный VPN на арендованном сервере. А также о том, как настроить OpenVPN и stunnel так, чтобы даже глубокий анализ пакетов ничего не давал.
Сервисы и блокировки

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

Почему же бесплатный VPN —плохая идея?

Качество. А точнее низкая скорость и постоянные сбои, т.к. одновременно одним и тем же сервисом могут одновременно пользоваться как минимум несколько сотен человек.
Безопасность. Т.е. никогда не известно, что на самом деле происходит с трафиком, кто и в каких целях имеет к нему доступ.
Минимальное количество настроек или полное их отсутствие. Это касается так же невозможности выбрать шифр, протокол и порт.

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

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

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-1.png
TLS-трафик OpenVPN

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

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-2.png
Трафик HTTPS

Что такое stunnel

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

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-3.png
Трафик, туннелируемый через 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, не закрывая текущей.

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-4.png
Статус sshd

Работа на сервере
Easy-rsa

Утилита easy-rsa была создана, чтобы облегчить процесс создания Certificate Authority (CA) и управления ими, а также серверными и клиентскими сертификатами. В идеале для CA нужно выделить специальную машину, но для экономии времени можно использовать все ту же. Поддержку ECDSA добавили в версии 3.0, а в репозиториях у нас 2.2.2, поэтому скачаем последнюю версию с GitHub. Это бинарник, поэтому ничего компилировать уже не придется. ��

$ cd /opt/ && curl -O -L https://github.com/OpenVPN/easy-rsa/archive/master.zip
$ unzip master.zip && rm -f master.zip
$ cd easy-rsa-master/easyrsa3/ && cp vars.example vars

Далее в файле vars нужно раскомментировать и настроить некоторые параметры.

/opt/easy-rsa-master/easyrsa3/vars

set_var EASYRSA_DN "cn_only"
set_var EASYRSA_ALGO ec
set_var EASYRSA_CURVE secp521r1
set_var EASYRSA_CA_EXPIRE 3650
set_var EASYRSA_CERT_EXPIRE 3650
set_var EASYRSA_CRL_DAYS 3650

Здесь указано, что использовать нужно только Common Name (CN) для Distinguished Name (DN) и криптографию на эллиптических кривых (ec). Также задано название кривой (secp521r1) и время действия сертификатов.

ПРИМЕЧАНИЕ: Некоторые версии OpenSSL отличаются нестабильной работой, так что рекомендую выбирать проверенные эллиптические кривые: prime256v1, secp384r1, secp521r1. В RHEL и родственных дистрибутивах доступны только они. Список можно посмотреть при помощи openssl ecparam -list_curves.

По умолчанию, easyrsa будет искать vars в той же директории, где и сам исполняемый файл. Но для надежности мы объявим переменную окружения:

$ export EASYRSA_VARS_FILE=/opt/easy-rsa-master/easyrsa3/vars

Создаем свой CA, а также генерируем сертификаты и ключи сервера и клиентов:

$ ./easyrsa init-pki
$ ./easyrsa --batch build-ca nopass
$ ./easyrsa build-server-full openvpn-server nopass
$ ./easyrsa build-client-full openvpn-client nopass

где openvpn-server и openvpn-client — это наш CN для сервера и клиента.

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-5.png
easy-rsa

Скопируем сертификат и ключ сервера в /etc/openvpn/server, а сертификат и ключ клиента — в /tmp.

$ cp -p pki/ca.crt pki/private/openvpn-server.key pki/issued/openvpn-server.crt /etc/openvpn/server/
$ cp -p pki/ca.crt pki/private/openvpn-client.key pki/issued/openvpn-client.crt /tmp/

OpenVPN-сервер

Приступим к созданию конфигов и настройки сервера OpenVPN.

$ cd /etc/openvpn/server/
$ openvpn --genkey --secret ta.key

Файл ta.key нужен для директивы tls-auth, которая предоставляет дополнительный уровень защиты для нашего OpenVPN. Этот ключ должен быть и у клиента, поэтому скопируем его в /tmp:

$ cp -p ta.key /tmp/

Пример конфига:

/etc/openvpn/server/openvpn-server.conf

### Bind на loopback-адрес и стандартный порт,
### так как коннект из интернета все равно получает stunnel
local 127.0.0.1
port 1194
### Stunnel туннелирует только TCP
proto tcp
### Режим туннеля
dev tun

### Файлы сертификатов и ключей
ca ca.crt
cert openvpn-server.crt
key openvpn-server.key
### Включаем использование Elliptic Curve Diffie — Hellman (ECDH)
dh none
### На сервере ставим 0
tls-auth ta.key 0
### Явно указываем, что можно использовать для канала управления (control channel)
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-ECDSA-WITH-CHACHA20-POLY1305-SHA256
### Шифр для канала данных (data channel)
cipher AES-256-GCM

server 10.8.8.0 255.255.255.0
### Указываем клиентам перенаправлять весь трафик в туннель,
### где 52.214.41.150 — IP сервера
push "redirect-gateway def1"
push "route 52.214.41.150 255.255.255.255 net_gateway"
### Указываем использовать эти DNS
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

### Включаем возможность использования одного клиентского
### сертификата на многих устройствах одновременно
### для большего контроля — можно выключить (закомментировать)
duplicate-cn
keepalive 10 120

user nobody
group nobody
persist-key
persist-tun

### Никаких логов. Есть смысл включить для отладки
### в случае сбоя
status /dev/null
log /dev/null
verb 0

Также этот конфиг не позволяет клиентам общаться между собой в сети. Если хочется больше контроля, то можно запретить использование одного сертификата на многих устройствах одновременно. Тогда придется генерировать клиентский сертификат для каждого устройства отдельно. Для этого нужно закомментировать duplicate-cn.

Чтобы отключить шифрование, устанавливаем cipher none, остальное — без изменений. В этом режиме все еще будет проходить аутентификация, но канал данных шифроваться не будет.

Пробуем стартовать:

$ systemctl start [email protected]

Смотрим статус:

$ systemctl status [email protected]

То, что идет после @, — это название файла с конфигом. Например, если он у тебя называется просто server.conf, тогда будет systemctl start [email protected]

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-6.png
Статус OpenVPN

Если все хорошо, добавляем автоматическую загрузку:

$ systemctl enable [email protected]

Сервер stunnel

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

$ cd /opt && curl -O -L https://rpmfind.net/linux/fedora/linux/updates/25/x86_64/Packages/s/stunnel-5.41-1.fc25.x86_64.rpm
$ rpm -ivh stunnel-5.41-1.fc25.x86_64.rpm
### Проверим
$ rpm -qi stunnel

Теперь добавим нового пользователя stunnel и создадим ему домашнюю директорию в /var/stunnel:

$ useradd -d /var/stunnel -m -s /bin/false stunnel

Проверим, что все успешно:

$ ls -ld /var/stunnel

Это делается для того, чтобы не запускать stunnel от root, и дает возможность использовать chroot.

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-7.png
Статус stunnel

Примерно так должен выглядеть /etc/stunnel/stunnel.conf:

### Помните: exec исполняется из каталога chroot!
chroot = /var/stunnel
setuid = stunnel
setgid = stunnel
pid = /stunnel.pid

debug = 0

## performance tunning
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1

### curve used for ECDHE
curve = secp521r1
sslVersion = all
options = NO_SSLv2
options = NO_SSLv3

[openvpn]
accept = 443
connect = 127.0.0.1:1194
renegotiation = no

### RSA
ciphers = ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-SHA
cert = /etc/stunnel/stunnel-server.crt
key = /etc/stunnel/stunnel-server.key
CAfile = /etc/stunnel/clients.crt
verifyPeer = yes

Основные директивы в этом файле:

accept = [address:] — указывает, на каком адресе и порте будет слушать наш stunnel;

connect = [address:] — указывает, на какой адрес и порт будет перенаправляться трафик;

cert = — абсолютный путь к сертификату;

key = — абсолютный путь к ключу от этого сертификата. Эту директиву можно опустить, если ключ встроен в файл с сертификатом.

Имя сервиса [openvpn] заключается в квадратные скобки и может быть произвольным.

Создадим ключи и сертификаты:

$ cd /etc/stunnel
$ openssl req -newkey rsa:2048 -nodes -keyout stunnel-server.key \
-x509 -days 3650 -subj "/CN=stunnel-server" \
-out stunnel-server.crt

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-8.png
Так как все сертификаты клиентов должны быть записаны в clients.crt на сервере, сгенерируем их:

$ openssl req -newkey rsa:2048 -nodes -keyout eakj-desktop.key \
-x509 -days 3650 -subj "/CN=eakj-desktop" \
-out eakj-desktop.crt

$ openssl req -newkey rsa:2048 -nodes -keyout eakj-mobile.key \
-x509 -days 3650 -subj "/CN=eakj-mobile" \
-out eakj-mobile.crt

$ openssl pkcs12 -export -in eakj-mobile.crt \
-inkey eakj-mobile.key -out eakj-mobile.p12

При генерации eakj-mobile.p12 нужно будет ввести пароль, не забудь его.

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-9.png
Запишем все клиентские сертификаты в clients.crt. Вот что должно примерно получиться:

<strong>/etc/stunnel/clients.crt</strong>

### eakj-desktop
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

### eakj-mobile
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

Стартуем:

$ systemctl start stunnel

И проверяем:

$ systemctl status stunnel`

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-10.png
Статус stunnel

Если все хорошо, то добавляем на автостарт:

$ systemctl enable stunnel

Как и в случае с OpenVPN, скопируем клиентские файлы, а также серверный сертификат в /tmp:

$ cp -p eakj-* stunnel-server.crt /tmp/

Настройка файрвола и маршрутизации
Внимание! Утилита iptables — это мощный инструмент, но он не терпит ошибок в конфигурации. Стоит быть предельно аккуратным и перепроверять правила, чтобы случайно не закрыть себе доступ. Открыть его после этого бывает трудно, и все зависит от провайдера VPS.

Чтобы снизить риск перекрытия доступа самому себе, рекомендую не прописывать iptables в автозагрузку и для начала хорошенько проверить содержимое файла /etc/sysconfig/iptables. Если что-то пойдет не так, то ты сможешь перезагрузить машину и продолжить эксперименты.

Ну а если уверен, что все настроил правильно, то пиши:

$ systemctl enable iptables

В некоторых случаях firewalld может быть установлен и включен по умолчанию, например на минимальной установке CentOS 7.4. Так что для начала лучше проверь:

$ systemctl status firewalld

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-11.png
Firewalld в CentOS 7.4.1708

Если он включен, то нужно его остановить и убрать из автозагрузки.

$ systemctl stop firewalld
$ systemctl disable firewalld
$ systemctl status firewalld

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-12.png
Firewalld отключен

Убедимся, что список правил у нас пуст (iptables -nvL), и приступим.

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-13.png
Список правил iptables

Нам нужно создать набор базовых правил для файрвола, который говорит:

позволять пинг;
принимать любой трафик на интерфейс lo;
пропускать пакеты на порты 443 и 12222 (еще не забыл, что мы перенесли наш SSH?);
а также принимать ответы на наши исходящие запросы. Больше информации о conntrack можно найти в интернете.

$ iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
$ iptables -A INPUT -i lo -j ACCEPT
$ iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 443 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 12222 -j ACCEPT
Пока эти правила ничем не опасны, так как у них стоит действие ACCEPT, то есть принимать и пропускать. Смотрим, все ли добавилось (снова iptables -nvL).

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-14.png
Основной набор правил iptables

Далее нам понадобится несколько правил переадресации.

$ iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
$ iptables -A FORWARD -i tun+ -s 10.8.8.0/24 -j ACCEPT

Здесь 10.8.8.0/24 — адрес и маска подсети, которую мы указывали в openvpn-server.conf.

Добавим правила, которые позволят клиентам отсылать и принимать пакеты из интернета. Тут возможны два варианта: вариант, когда у тебя есть статический IP, и вариант, когда адрес динамический. Первый лучше тем, что не тратятся ресурсы на определение IP-адреса. Преимущество второго варианта — в том, что не надо иметь статический IP. Если ты не уверен или не знаешь, какой у тебя, используй второй вариант. Для начала узнаем свой адрес командой ip a. У меня сервер за NAT, поэтому и IP тут локальной сети.

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-15.png
Вот варианты правил. Помни, что тебе нужно либо 1, либо 2, вместе их не добавляй.

iptables -t nat -A POSTROUTING -s 10.8.8.0/24 -o eth0 -j SNAT —to-source 172.31.26.46, где 172.31.26.46 — это IP, присвоенный интерфейсу, который смотрит в инет, а eth0 — это сам интерфейс.
iptables -t nat -A POSTROUTING -s 10.8.8.0/24 -o eth0 -j MASQUERADE.

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-16.png
Настройки форвардинга

Осталось указать политику DROP по умолчанию для цепочек INPUT и FORWARD, после чего сохраним наши правила.

$ iptables -P INPUT DROP
$ iptables -P FORWARD DROP
$ iptables-save > /etc/sysconfig/iptables

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

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-17.png
Финальные настройки

Если на этом этапе ты еще не потерял доступ к своему серверу, тогда добавим правила в автозагрузку и продолжим. ��

$ systemctl enable iptables

Далее нам нужно включить форвардинг пакетов, так как по умолчанию он выключен. Проверить это можно командой

$ sysctl net.ipv4.ip_forward

Если вывод команды показывает net.ipv4.ip_forward = 1, то ничего делать не нужно, форвардинг уже включен. Если же net.ipv4.ip_forward = 0, то в файле /etc/sysctl.conf нужно изменить уже существующую или добавить новую строчку net.ipv4.ip_forward = 1. Это позволит нашим изменениям переживать перезагрузку. Далее выполним команду sysctl -p, чтобы изменения применились немедленно.
Настройка клиентов

Настройка сервера закончена. Сейчас у нас в /tmp должны быть все необходимые файлы для клиентов.
openvpn server

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-18.png
Содержимое папки /tmp

Как видно, некоторые файлы доступны для чтения только руту, что не позволит их скачать при помощи scp (ведь логин от рута у нас запрещен). Поэтому присвоим им другого владельца командой

$ chown eakj: /tmp/{ta.key,ca.crt,openvpn-client.crt,openvpn-client.key}

где eakj — это имя пользователя, которого мы создали в начале для доступа по SSH. Не забудь удалить эти файлы из /tmp на сервере. После того как настроишь все свои клиенты, они там только для удобства скачивания.

Для экономии времени я возьму один и тот же сертификат и ключ для подключения к OpenVPN в Linux, Windows и Android. Но на Android будет другой сертификат и ключ для подключения к stunnel, так как там придется использовать формат PKCS#12.
Клиент stunnel
Linux

С правами разобрались, перейдем к настройке клиента. Нужно скачать и установить stunnel, обычно он есть в репозиториях и c установкой нет проблем. Также исходники можно найти на официальном сайте.

В Fedora надо набрать dnf install -y stunnel, в Arch Linux: pacman -S stunnel, в Ubuntu: apt install stunnel4.
ПРИМЕЧАНИЕ. В Ubuntu 16.04.3 LTS пакет stunnel4 имеет версию 5.30, которая не поддерживает верификацию (verifyPeer), поэтому придется или найти свежий пакет, или закомментировать verifyPeer и CAfile. Также нужно изменить ENABLED=0 на ENABLED=1 в файле /etc/default/stunnel4. Возможны и другие мелкие отличия, для их обнаружения понадобится включить логирование.

Теперь скачаем клиентские файлы командой scp. Обрати внимание, что для записи в /etc/stunnel нужны права рута, поэтому и scp нужно запустить от суперпользователя.

$ scp -P 12222 [email protected]:"/tmp/{eakj-*,stunnel-server.crt}" /etc/stunnel/

Теперь нужно создать клиентский /etc/stunnel/stunnel.conf. Вот пример.

[openvpn]
client = yes
accept = 127.0.0.1:1194
connect = 52.214.41.150:443
### Проверить сервер
verifyPeer = yes
### Для этого нужен его сертификат
CAfile = /etc/stunnel/stunnel-server.crt
### Сертификат и ключ нужен для проверки
### клиента (verifyPeer) на сервере
cert = /etc/stunnel/eakj-desktop.crt
key = /etc/stunnel/eakj-desktop.key

Запускаем (systemctl start stunnel) и проверяем (systemctl status stunnel).

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-19.png
Клиент stunnel в Fedora

Windows

Для начала нужно скачать и установить stunnel. Найти его можно на официальном сайте.

Затем нужно скачать клиентские сертификаты и ключи с нашего сервера и поместить их в C:\Program Files (x86)\stunnel\config, как показано на скрине. Я делал это при помощи WinSCP, ты можешь использовать любой удобный тебе клиент SSH. После установки и запуска увидишь главное окно программы.

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-20.png
Настройки stunnel в Windows

Нужно отредактировать стандартный конфиг, а также переместить или удалить сгенерированные при установке ключи и сертификаты. Я переместил их в папку old. Для Windows конфиг почти идентичен линуксовому, только с другими путями.

[openvpn]
client = yes
accept = 127.0.0.1:1194
connect = 52.214.41.150:443
### Проверить сервер
verifyPeer = yes
### Для этого нужен его сертификат
CAfile = C:\Program Files (x86)\stunnel\config\stunnel-server.crt
### Сертификат и ключ нужны для проверки
### клиента (verifyPeer) на сервере
cert = C:\Program Files (x86)\stunnel\config\eakj-desktop.crt
key = C:\Program Files (x86)\stunnel\config\eakj-desktop.key

После того как изменил и сохранил конфиг, в окне stunnel жмешь Configuration → Reload Configuration.
Android

В качестве клиента stunnel на мобильных устройствах будет использоваться приложение SSLDroid. Перенесем на телефон файл eakj-mobile.p12 и настроим приложение.

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-21.png
SSLDroid config

Укажем путь к файлу, введем пароль, который запомнили при генерации eakj-mobile.p12, сохраним настройки и запустим сервис.

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-22.png
SSLDroid service start

Клиент OpenVPN

Linux

Скачаем и установим openvpn из репозитория. Клиент и сервер идут вместе. В Fedora пили: dnf install -y openvpn, в Arch Linux: pacman -S openvpn, в Ubuntu: apt install openvpn.

Скачаем файлы клиента с сервера при помощи scp. Для записи в /etc/openvpn/client/ также нужны права рута.

В Ubuntu клиентские файлы хранятся в /etc/openvpn/ и сервисы называются [email protected]<имя конфиг файла>. Например:

$ systemctl start [email protected]

В репозиториях Ubuntu 16.04.3 LTS пакет openvpn имеет версию 2.3.10, а поддержка AES-256-GCM появилась в 2.4. Придется или найти свежий пакет, или использовать шифрование AES-256-CBC (не забудь изменить и на сервере). Также могут возникнуть проблемы с отсутствием группы nobody (фиксится командой groupadd nobody). Если что-то еще пойдет не так, включай логи и чини.

$ scp -P 12222 [email protected]:"/tmp/{openvpn-client*,ca.crt,ta.key}" /etc/openvpn/client/

Примерный файл конфигурации /etc/openvpn/client/openvpn-client.conf:

client
dev tun
proto tcp
remote 127.0.0.1 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun

ca ca.crt
cert openvpn-client.crt
key openvpn-client.key
### на клиенте 1
tls-auth ta.key 1

remote-cert-tls server
cipher AES-256-GCM
verb 3

Для отключения шифрования делаем то же, что и на сервере: cipher none.

При таком конфигурационном файле клиенту всегда нужно носить с собой пять файлов:

файл конфигурации (openvpn-client.conf);
сертификат CA (ca.crt);
клиентский сертификат (openvpn-client.key);
клиентский ключ (openvpn-client.key);
ключ для tls-auth (ta.key).

Это может быть не всегда удобно, поэтому есть возможность записать их содержимое в конфигурационный файл. Вместо ca ca.crt, cert client.crt, key client.key и tls-auth ta.key 1 используется , , , key-direction 1 и . Выглядит это примерно так:

<ca>
содержимое ca.crt
</ca>
<cert>
содержимое openvpn-client.crt
</cert>
<key>
содержимое openvpn-client.key
</key>
### Указываем что tls-auth на стороне клиента
key-direction 1
<tls-auth>
содержимое ta.key
</tls-auth>

Детальнее пример такого конфига рассмотрим при настройке клиента Android.

Стартуем:

$ systemctl start [email protected]

и проверяем:

$ systemctl status [email protected]

Windows

Скачать клиент OpenVPN для Windows можно c официального сайта. Конфиги хранятся в C:\Program Files\OpenVPN\config. После установки нужно скачать клиентские сертификаты и ключи с нашего сервера и поместить их в C:\Program Files\OpenVPN\config, как показано на скрине. Будем использовать те же сертификаты и ключи, что и для Linux (привет duplicate-cn).

Чтобы создать клиентский конфиг, открывай «Блокнот» от админа, копируй пример и удаляй user nobody и group nobody. Должно получиться как на скрине. Заметь, используется расширение .ovpn.

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-23.png
Конфиг OpenVPN для Windows

Стартуешь и видишь заветную надпись Initialization Sequence Completed — значит, все работает.

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-24.png
OpenVPN и stunnel в Windows

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-25.png
Убедимся

Android

Для Android есть приложение OpenVPN for Android, будем использовать именно его. Конфиг с записанными в него сертификатами и ключами выглядит примерно так:

client
dev tun
proto tcp
remote 127.0.0.1 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun

remote-cert-tls server
cipher AES-256-GCM

### На клиенте можно :-)
verb 3

### Содержимое ca.crt
<ca>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</ca>

### Содержимое openvpn-client.crt
<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>

### Содержимое openvpn-client.key
<key>
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
</key>

### Указываем, что tls-auth на стороне клиента
key-direction 1

### Содержимое ta.key
<tls-auth>
##
## 2048 bit OpenVPN static key
##
-----BEGIN OpenVPN Static key V1-----
...
-----END OpenVPN Static key V1-----
</tls-auth>

Как ты мог заметить, файл openvpn-client.crt в начале содержит примерно следующую информацию.

Certificate:
Data:
Version: 3 (0x2)
Serial Number:
9b:0a:56:f3:d4:70:97:66:d9:92:81:54:26:fc:9c:53
Signature Algorithm: ecdsa-with-SHA256
Issuer: CN=ChangeMe
Validity
Not Before: Dec 4 22:02:32 2017 GMT
Not After : Dec 2 22:02:32 2027 GMT
Subject: CN=openvpn-client

Все это можно опустить и добавить в файл конфига только сам сертификат (от пометок BEGIN до END), как сделано в примере.

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

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-26.png
OpenVPN на Android: главное меню и импорт профиля

Нажимаешь на импортированный профиль и смотришь за процессом подключения.

http://www.spy-soft.net/wp-content/uploads/configuring-openvpn-stunnel-27.png
Подключается. Ура!

Наконец, видим три заветных слова: Initialization Sequence Completed. Все работает! В некоторых случаях может понадобиться подкорректировать значение MSS, о чем это приложение нам любезно сообщит. Удачной отладки!

http://www.spy-soft.net/configuring-openvpn-stunnel/

Доктор Моро
11.12.2017, 18:50
Слишком громоздкая инструкция для чайника, есть более простые описания. Установку можно свести банально к запуску подходящего скрипта. Сам пользуюсь freeopenvpn.org если нужно обойти блокировку провайдера, в том числе для банального торрент-тв. Есть выбор tcp/upd, бесплатные сервера. Если для банального серфинга, то плагины для браузеров, тот же Zenmate. А в идеале конечно, VDS-ка и тунель.

ridelo
12.12.2018, 19:18
Золотую стену трудно сломать. Китай также пытается заблокировать VPN. некоторые VPN, такие как Ivacy, все еще работают, но это игра в кошки-мышки.