Строим туннели VPN

НОВОСТИ
2016-11-11 02:45:02
0
8.3K

Давно я не писал ни каких гайдов и статей полезных нам в нашем изучение мегаполиса Дипвеб. Он у нас тёмный, кому-то может даже показаться мрачным, и передвигаемся мы по нему только с помощью Tor, но всем нам понятно что этого бывает мало, по этмоу мы продолжаем возводить цитадель параноиков, сегодня мы будем строить тоннели VPN, и рассмотрим не которые новики этого рынка. Будем честны наши государства постоянно что-то пытаются заблокировать, дать им волю они вообще на каждого чип повесят, а лучше анально его нам засунут по самые гланды, наверное. благодаря этому и вырос инетрес к VPN-решениям, наряду с уже стандартными IPsec/XFRM и OpenVPN в сообществе Linux начали довольно таки активно развиваться несколько новых проектов. Сегодня мы внимательно будем изучать четыре новики: SoftEther VPN, WireGuard, FreeLAN и GoVPN.

word-image-29

SoftEther VPN

Это проект японской разработки, а точнее разработки Цукубского университета, University of Tsukuba, распространяется он по лицензии GPLv2. Его главная особенность — это поддержка сразу нескольких протоколов VPN. Эта уникальная особенность позволяет вместо целого гаража из поприетарных или же open source проектов использовать для подключения к клиентам. даже работающих под разными операционноыми системами, одно и тоже приложение, согласитесь это приятно? Вы просто можете выбрать протокол взависимости от Вашей конкретной необходимости. Проект поддерживает: SSL-VPN (HTTPS), IPsec, L2TP, MS-SSTP, L2TPv3, EtherIP и OpenVPN. Не слабый такой списочек, очень вкусный. SoftEther VPN может функционировать в таких режимах как, remote-access и site-to-site, на уровнях L2 (Ethernet-bridging) и L3 (IP). Если же мы решим перейти на OpenVPN, то просто получим более простую конфигурацию. В проекте есть генератор ovpn-файлов для момнетального подключения к VPN. Более того замена SSTP VPN позволяет отказаться вообще от серверов, работающих на базе Win2k8/2012, которые кстати требуют лицензии, фу такими быть. Протокол у проекта свой рукописный, что позволяет постоянно проходить Ethernet поверх HTTPS, отсюда и появилось название проекта Software Ethernet. У данного решения большая пропускная способность, хоть фильмы смотри, и довольно низкая латентность. Если граммотно всё настроить то Вы сможете легко использовать несколько Ethernet-сетей в одной, то есть у Вас отпадёт постоянно возникающих дополнительных решениях Ethernet-over-IP.

Самое приятное в этом проекте он совместим с NAT, а значит работает стандартный и простой 443-порт, который не блокируется брендмаузерами провайдеров. Эта уникальная функция позволяет вообще скрыть использовывание VPN, со стороны трафик выглядит как абсолютно обычный и никак не может обнаружиться злободневным Deep Packet Inspection. Эта причина сделала его невероятно популярным в Китае, где его стали на постоянной основе использовывать для обхода великого китайского фаирвола. Не забываем. тчо при этом всё на стороне клиента реализован виртуальный сетевой адаптер Ethernet, а на сервере — виртуальный коммутатор. Так же огромный плюс — наличие NAT Traversal, который включён по умолчанию, то есть не нужно просить администратора открывать доступ к VPN-серверу, который находитяс внутри сети. Вы думаете это всё? Нет. Если же сеть с ограниченным доступом, в которой блокируется все TCP и UDP пакеты, например тот же публичный Wi-Fi, для создания VPN можно легко использовать протокол ICMP и DNS, который в большинстве случаев просто не блокируется никаким брендмаузером. В функционал включена поддержка Dynamic DNS, что позволяет легко получать доступ при динамически меняющемся IP-адресе. Чтобы это всё работало реализован VPN Gate, к нему можно организовать соединение из внутренней сети, а затем при необходимости легко попадать снова внутрь сети. Клиентская часть содержмит специальный плагин VPN Gate, который следит за сменой IP и моментально подключается к VPN Gate.

Данное решение выстраивает отличный туннель с пропускной способностью 1 Гбайт,сек, без существенных ограничений по объёмам ОЗУ и минимальной нагрузкой на процессор. По этому к серверной части минимальны, особенно учитывая каких монстров выпускают каждый год. По тестам SoftEther VPN на одинаковом оборудовании обходит многие оригинальные решения. Разумеетяс он поддерживает шифрование, такие как AES-256 и RSA-4096, IPv4/IPv6, может вести журнал трафика и событий. Аутентификация пользователей локальная, RADIUS и домен Windows.

Всё администрирование даже учётных записей пользователей, а так же параметры безопасности можно настроить удалённо, с помощью графического интерфейса Server Manager, локализация только на английском, японском и китайском, не знаешь английский анон? Учи мунспик ? . Установить можно на Windows или Mac, разумеется необходим доступ администратора, ну или можно с помощью командной строки vpncmd. Помимо винды и мака установить можно на Linux, FreeBSD и Solaris. Так же на сайте выложен исходный код с компилированным приложением. Для установки Вам необходимо выбрать сначала ОС, затем платформу и компонент, сервер, клиент, btidge. Официально подерживаются Linux ядра 2.4/2.6/3.x, но я Вам по секрету говорю, что работать будет так же на дистрибутивах с ядром 4.x . В Linux достатчно будет распаковать архив и запустил install.sh, потом Вы три раза принимаете услвоия лицензии, разумеется её никто не читал, и как установка завершится запустится сразу и сервер, командой $ sudo ./vpnserver start.

Потом либо Вы овтечаете на вопросы или используете Server Manager, и настраиваете параметры подключения.

WireGuArd

Создал глава компании Edge Security Джейсон Доненфилд. Он решил создать максимально простой продукт со встроенной криптографией, чтобы он был прост и в использовани и в реализации, это ему удалось всего решеие занимает чуть более 4 000 строк кода, это значительно выделяет его продукт от всех остальных. Достоинство, что его код, например, гораздо легче проанализировать, чем абсолютно всё что написано в рамках Swan/IPsec или OpenVPN. Это самый молодой проект нашего обзора. В середине лета 2016 года после публикации анонса разработчиков ядра Linux, мир услышал о данном проекте, ведь именно там патч и был представлен. Парадокс в том, что проекту уже несколько лет, и он прошёл рецензирование криптографии, то есть его можно спокойно внедрять в основное ядро.

маскагаяфокса

Соединение инилициализируется через обмен открытыми ключами, это очень напоминает способ используемый в SSH. Всё остельное прозрачно обрабатывается WideGuard, Вам не надо каждый раз задумываться о ключах или роутинге, контроле состояния среды, это всё не Ваши заботы, это всё берёт на себя WideGuard. Если же Вы совсем хотите усложнить задачу, желающим дешифровать Ваш трафик, то присутствует возможность симметричного шифрования, но для этого Вам придётся потратить какое-то время и покопаться в настройках. Маршрутизация так же происходит только по ключам шифрования, по этмоу к каждому сетевому интерфейсу автоматически добавляется его закрытый ключ. И казалось, ну отлично, но нет, через определёное время по сигналу ну или команде, происходит автоматчиеское обновление handshake каждого ключа шифрования. Чтобы ключи согласовывались и соединялись с «замочками» программа использует Noise_IK из Noise Protocol Framework, он очень схож на подобный инструмент в authorized_keys в SSH, если не усложнять это происходит в виде x509 и ASN.1, хотя мне кажется я и так пшу статью понятную разве что парочке анонимусов, ну кто не поймёт всё, хотя бы ознакомиться и осознает, что есть куда расти.

Теперь конкретно о шифровании, здесь используется потоковый шифр ChaCha20 и алгоритм аутентификации сообщений Poly1305. И на этом разработчик так же не остановился, для генерации секретного ключа — Протокол Диффи — Хелманна, который исполнен на эллиптических кривых и реализован в Curve25519, что предложил сделать Дэниель Бернштейн. За хеширование отвечает BLAKE2s (RFC 7693) и SipHash-2-4. Чтобы не происходили replay-атаки установлена метка времени TAI64N любые пакеты с меньшей меткой времени просто игнорируются.

За передачу данных в данной сборке отвечает ISO на третеьм уровне, осуществляя это через инкапсуляцию в пакеты UDP. Разумеется поддерживаются IPv4 и IPv6, инкапсуляция v4 в v6 и v6 в v4. При необходимости легко может работать при NAT и фаерволле. Если Ваш IP динамический то разработчик включил функцию поддержки смены IP-адреса VPN-сервера без разрыва соединения, с последующей автоматической перенастройкой клиента.

Как только Вы установили данное чудо в Вашей системе появится новый сетевой интерфейс wg0, для настрйоки можно пользоваться стандартынми инструментами ipconfig/ip-address и route/ip-route. Присутствует специальная утилита, позваляющая устанвоить секретный ключ устройства и указать все параметры для определённых клиентов, его публичный ключ, разрешённый IP.

Чтобы установить WireGuard Вам понадобится дистрибутив Linux с ядром версии >4.1 . Данный пакет легко можно обнаружить в репозиториях основных дистрибутивов Linux, для Ubuntu 16.04 есть PPA.

$ sudo add-apt-repository ppa:hda-me/wireguard

$ sudo apt update

$ sudo apt install wireguard-dkms wireguard-tools

Если решили совсем заморачиваться, то вполне реально собрать самостоятельно из исходников, поднимаем интерфейс и генерируем пару ключей, разумеется не забывая сохранить privatekey и publickkey:

$ sudo ip link add dev wg0 type wireguard

$ wg genkey | tee privatekey | wg pubkey > publickey

Теперь мы получили публичный ключ от клиента, то делаем? Создаём решение:

$ sudo wg set wg0 listen-port 1234 private-key ~/privatekey peer IKy1eCE9pP1w… allowed-ips 192.168.0.0/24 endpoint 1.2.3.4:9876

Использовав команду wg genpsk, возможно подключить к этому PresharedKey , который к этому криптографическому мини-аду добавит дополнительный уровень шифровния к имеющимся. Для пира указывать можно даже PersistentKeepalive, который позволяет поддерживать соединение не смотря на NAT и файрвол. Снова поднимаем интерфейс:

$ sudo ip address add dev wg0 192.168.0.1

Заглядываем в настройки:

$ sudo wg

Чтобы было удобно лучше заранее подготовить файл конфинга, внутри которого будет секция interface и секции peer. Формат файла легко можно подглядеть введя wg showconf.

$ sudo wg setconf wg0 myconfig.conf

Это решение отлично подойдёт как и для небольших устройств, например смартфонов, так и для больших магистральных маршрутизаторов. Если сравнивать WideGuard с OpenVPN (256-bit AES c HMAC-SHA-2–256), то он имеет в 4 раза лучшую пропускную способность и 3,8 раза отзывчивей, а это, согласитесь, огромная разница. Почему же так получилось? Причин на самом деле несколько. Главная разумеется, в том что WideGuard реализован в виде модля, в то время как OpenVPN работает в userspace.

Так же разработчик отказался использовывать CryptoAPI ядра, которая действительно работает крайне медленно. Всё это было решено заменить на собственные реализации, о которых мы писали выше, ChaCha20, Poly1305, BLAKE2s и Curve25519, все они позиционируются как быстрые и не менее безопасные аналоги нам хорошо известных AES-256-CTR и HMAC, отличная программная реализация дала хороший результат, в виде фиксированного времени выполнения абсолютно без аппаратной поддержки.

Помимо этого WideGuard имеет меньшие задержки, и благодаря этому его производительность чуть выше, чем у IPsec (256-bit ChaCha20 + Poly1305 и AES-256-GCM-128), зато настрйоки WideGuard в несколько раз проще.

Покаместь WideGuard доступен только на Linux, в ближайшем будущем его уже собираются портировать на все остальные ОС, код распространяется по лицензии GNU GPLv2.

FreeLAN

Это мультиплатформенный VPN-клиент, лицензицию он использует GNU GPL, если выбирать к какой категории относить этот VPN-клиент, то наверняка данное ПО Full Mesh, то есть здеь используются P2P-технологии. Так же как и все вышеперечисленные проекты, это относительно молодой проект, активно развитие началось только в 2013 году. Основное отличие от коллег по цеху, выбор вариант архитектуры: клиент-сервреная, всем привычный VPN, клиет в зависимости от настройки может обмениваться данными друг с другом, или сервер будет выступать в роли релея, P2P, то есть клиенты могут подключаться друг к другу напрямую, ну и смешанный, то есть сразу оба варианта используются. С помощью таких вариаций можно настроить VPN крайне гибко, почти под любые условия. Вот пример, сервер понадобиться Вам, если необходимо получить доступ во внутренню сеть, ну или для контроля соединений, в остальных случаях заморачиваться не стоит, просто можно подключаться напрямую.

grizzly-brew

FSCP (FreeLAN Secure Channel Protocol) собственный протокол является фундаментом проекта, он основан на UDP. Легко способен работать как и на уровне Ethernet, совершая устанвоку прямых Ethernet-соединeний между узлами сети, а так же на уровне IPv4/IPv6. В клиенте есть возможность авторизации по секретному слову, а так же по X.509-сертификатам, минимальный размер ключа RSA-1024 бита, но я настоятельно рекомендую использовать 2048 бит, стандартно в роли симметричного ключа используется AES-256. Все сессии работают только ограниченное врея, после того как таймер истёк, службы перезапускаются, сообщения содержат счётчики и контролируют время, это легко позволяет миновать replay-атак. Чтобы сенас не прерывался клиент отправлят сообщения keep-alive. Заголовк подписывается частным ключом ну или по стандарту HMAC-SHA-256, если Вы решили использовать pre-shared-ключ. Я могу дальше описывать, но это бестолку выбор в настройках действительно довольно большой.

Операционные системы, которые поддерживаются на данный момент, Windows, Linux, macOS, Raspberry Pi. Пакет есть в репозиториях основных дистрибутивов, так что устанвока не вызовет никаких сложностей. Если говорить по факту, то программа представляет собой один сплошной бинарник, следовательно создавать сети чрезвычайно просто.

$ freelan —security.passphrase «secret»

Этой командой Вы откроете по умолчанию порт сервера UDP/12000 сразу на всех интерфейсах, а Ваш виртуальный интерфейс получит адрес 9.0.0.1 . Теперь подключаем дополнительные параметры, их можно переопределить, а затем точно указать все сертификаты. Подключаемся к серверу с другого узла, и присваиваем ему его внутренний IP.

$ freelan —security.passphrase «secret» —fscp.contact 1.2.3.4:12000 —tap_adapter.ipv4_address_prefix_length 9.0.0.2/24

Честно скажу. если хотите удобства. рекомендую все настройки засунуть в конфигурационный файл. Если будете устанавливать на Ubuntu, то лучше используйте готовый шаблон /etc/freelan/freelan.cfg, как только программа запустится она сразу же его прочитает, так что лучше сразу внесите его в параметры. Есть у FreeLan альтернативы, это PeerVPN и Cjdns, там используются так же распределительные технологии, но это уже совсем другая история.

GoVPN

Вот это действительно лёгкий и до безумия простой в настройке, настоящий демон VPN, его предназначение создание шифрованных и аутентифицированных каналов связи поверх UDP или TCP, оценили параноики? У проекта так же есть и другие задачи — безопасный код, который крайне легко читать и анализировать, безопасность, устойчивость к DPI/цензуре. Если говорить честно, то фактически GoVPN, просто берёт и туннелирует Ethernet, и больше он ничего не делает, да и не должен. У него нет никаких особых инструментов для точного управления IP, но если уж Вы желаете то можете написать кучу скриптов, лично для себя. Далее оон использует TAP сетевые интерфейсы, Вы можете даже задавать его имя. MTU конфиг для каждого клиента по отдельности, что крайне приятно, лишний раз понимаете, что это только у Вас. Написан на языке Go, использует лицензию GPLv3, что в принципе не так и редко. Теперь о ключах, для их согласования используется протокол с двусторонней аутентификацией сторон по парольной фразе (PAKE DH A-EKE: Diffie — Hellman Augmented Encrypted Key Exchange). То есть клиент для подключения вводит контрольную фразу, в это время на сервере, который на севере, хранится вертификатор, он никак не используется с клиентской стороны, поэтому даже при удачном взломе сервера хакер никак не сможет выдавать себя за Вас, хотя если Вы серьёзно нарушаете закон, то лучше за Вас сбея никому не выдывать.

У проекта есть три режима работы:

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

2. Шумовой, для постоянной длины все пакеты дополняются шумом.

3. Постоянная скорость, теперь в дополнение к шумовым пакетам, они не просто отправляются а отправляются через определённый промежуток, а если нет ни какой полезной информации, то в сеть просто постоянно будут уходить шумовые пакеты, пускай их декодируют =).

Два последних режма работы очень интересны, так как благодаря постоянной генерации шумового трафика, удаётся скрывать длины сообщений, да и вообще сам факт передачи какой-либо полезной нагрузки. У проекта есть полезное свойство нулевого неразглашения, оно позваляет даже теоритически допустить возможность offline-атаки по словарю. Клиент устойчив к replay-атакам, благодаря использованию одноразавого кода аутентификации сообщения (message authentication code), а так же опционально использует синхронизацию времени. В клиенте изначально предусмотнена ротация сессионых ключей и отправка heartbeat, чтобы поддерживалась работа через NAT или фаирвол. Для хеширования кодовых фраз решили использовать Ballon, в версии 6.0, в версии 5.0 кстати использовался Argon2d, до этого был PBKDF2, из-за этого старые версии никак не совместивы с новыми.

Если Вам в принципе нечего сркывать, просто хочется лазить спокойно по интернету есть даже нешифрованный режим, который обеспечивает конфиденциальность и аутентичность данных, ведь в нём есть технология chaffing and winnowing. Толку с него конечно, как с козла молока, но он позволяет легко обойти тот же самый РосРеестр и прочую лабуду в других странах, которая плодится каждый день. Здесь вместо шфрования используются алгоритмы аутентификации и просто в тупую шлётся огромное количество лишних пакетов, получатель просто отбирает те, которые ему подходят. Есть проблема, это увлеичивает пакет на 4128 байт, по этому процесс крайне требователен к процессору, разумеется он жрёт в разы больше трафика, по этмоу шифруйте всё и вся, всегда.

Клиент отлично совместим с IPv4 и IPv6. Если надо можно легко подключиться через внешний HTTP-проки, так же клиент имеет встроенный режим HTTP-прокси, который если надо можно использовать для доступа к серверу. Для получения стастики о подключениях клиентов в режиме реального времени в JSOn-формате будет использоваться собственный HTTP-сервер. Клиент поддерживает работу с GNU/Linux и FreeBSD, сервер же конфигуриется через использование YAML-файла.

К сожалению, готовых пакетов проект абсолютно не предлагает, только исходные текст, для сборки Вам понадобаться пакеты uml-utilities и golang. В принципе, уже появились неофициальные порты в некоторых дистрибутивах. Но надо понимать, что проект постоянно развиваетя, и вполне вероятно, что часть инструкций уже завтра будет абсолютно бесполезной.

Заключение.

Эта статья далеко не так легко понятна обычному пользователю, он конечно имеет полное право сказать, а зачем я подобное писал тогда, да ещё и в таком объёме?

Ответ прост, посмотрите на количество новостей о задержаниях по всему миру. и не продавцов, уже начинают постоянно задерживать и покупателей, кем бы Вы не были и чем бы не занимались, посмотрите на количество ботнетов в сети и хакеров, повышайте свою информационную безопасность, чтобы через какое-то время перечитать этот материал и понять всё, Вы мне ещё спасибо скажете. =)

0
8.3K