Маскировка трафика OpenVPN при помощи обфускации

от автора

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

Так-же подобный вид маскировки трафика отлично подойдет для использования в сетях 4G/LTE или иных сетях, где есть ограничение по виду трафика в попытках ограничить доступ или скорость.

Обфускация трафика тема не новая, но и не особо популярная. По этому действительно рабочих и стоющих статей крайне мало.

И так, в качестве сервера будет взят VDS на ubuntu 22.04. В качестве клиента будем настраивать все ту-же ubuntu и Windows 10. (Думаю что большинство предпочтут именно 2 вариант настроек клиента.) Для реализации самой обфускации трафика, на сервере и клиенте будет использоваться Shapeshifter Dispatcher Проект не плохой. Но они отказались от поддержки протокола obfs4 и скомпилить бил из свежих исходников не возможно. За старые исходники отдельное спасибо @fuccsoc Рабочие билды можно будет скачать по ссылке в конце поста.

Установка и настройка сервера

И так. Сперва обновляемся. И устанавливаем нужные пакеты.

apt update apt upgrade apt install openvpn  apt install easy-rsa

Настраиваем обфускацию

Собранный билд под нашу ОС помещаем в папку /usr/local/bin И выставляем права на выполнение.

chmod +x /usr/local/bin/shapeshifter-dispatcher

После чего выполняем тестовый запуск:

shapeshifter-dispatcher -transparent -server -state /var/lib/state -orport 127.0.0.1:1515 -transport obfs4 -bindaddr obfs4-0.0.0.0:1516  -logLevel DEBUG -enableLogging

В ответ мы должны получить listening on 0.0.0.0:1516 — адрес и порт на который будет идти наш шифрованный трафик. После чего, можно остановить выполнение данной программы. И идем в папку /var/lib/state, там создались 3 файла. dispatcher.log и 2 конфиг файла obfs4_bridgeline.txt + obfs4_state.json

В файле obfs4_bridgeline.txt копируем ключ после переменной cert= Он генерируется автоматически и нужен будет для наших клиентов.

Что-бы shapeshifter-dispatcher стартовал при запуске системы, создадим для него свой сервис с нужными аргументами для запуска. Для этого создаем файл сервиса:

nano /etc/systemd/system/shapeshifter-dispatcher.service 

Со следующими строками:

[Unit] Description=shapeshifter-dispatcher service After=syslog.target network.target  [Service] Type=simple ExecStart=/usr/local/bin/shapeshifter-dispatcher -transparent -server -state /var/lib/state -orport 127.0.0.1:1515 -transport obfs4 -bindaddr obfs4-0.0.0.0:1516  -logLevel DEBUG -enableLogging Restart=on-failure RestartSec=30s  [Install] WantedBy=multi-user.target

Перезапускаем systemd

systemctl daemon-reload

Далее запускаем наш сервис, и делаем его активным на автозапуск

systemctl start shapeshifter-dispatcher.service  systemctl enable  shapeshifter-dispatcher.service 

Настраиваем OpenVPN

Т.к протокол obfs4 имеет собственное шифрование, OpenVPN будет настраиваться на работу без шифрования. Это уменьшит нагрузку на наш сервер и клиентскую машину.

Но сертификат и ключи все равно придется создавать. У меня версия easy-rsa 3.0.8, в котором внесены незначительные изменения по синтаксису и алгоритмы работы. Будьте внимательны, есть отличия на более ранних версиях. Копируем нужные файлы и переходим к настройке:

mkdir /etc/openvpn/easy-rsa cp -r /usr/share/easy-rsa /etc/openvpn cd /etc/openvpn/easy-rsa cp -r ./vars.example ./vars nano vars

Образец 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       "me@example.net" set_var EASYRSA_REQ_OU          "My Organizational Unit"

Затем генерируем ключи и перемещаем в рабочую папку. (инициализация конфиг файла ./vars уже не требуется.)

./easyrsa init-pki ./easyrsa build-ca ./easyrsa gen-dh ./easyrsa gen-req vpn-server nopass ./easyrsa sign-req server vpn-server mkdir /etc/openvpn/keys cp -r pki/* /etc/openvpn/keys/

Теперь собственно конфиг для OpenVPN

nano /etc/openvpn/server.conf

Добавляем следующие строки:

mode            server  dev             tun_obfs4  #протокол всегда должен быть tcp  proto           tcp  port 1515  # Optimizing TCP tunnel #соберет мелкие пакеты в один,но более крупный #уменьшит нагрузку на сервер и на клиент #при отсутствии трафика незначительно увеличит пинг socket-flags    TCP_NODELAY  persist-tun persist-key  ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/issued/vpn-server.crt key /etc/openvpn/keys/private/vpn-server.key dh /etc/openvpn/keys/dh.pem  topology subnet  server 10.8.0.0 255.255.255.0  ifconfig-pool-persist /var/log/openvpn/ipp.txt  push "dhcp-option DNS 1.1.1.1" push "dhcp-option DNS 1.0.0.1"  push "redirect-gateway def1 bypass-dhcp"  client-to-client  keepalive 60 300  #отключаем шифрование #openvpn клиент и сервер будут ругаться что весь трафик не зашифрован data-ciphers none cipher none  tun-mtu 1500  status /var/log/openvpn/openvpn-status.log log  /var/log/openvpn/openvpn.log  verb 3  ########################################### #tls-server не указываем #файл ta.key не генерируем # #comp-lzo не указываем #не хочет дружить с обфускацией ###########################################

Перезапускаем сервис

service openvpn restart

Теперь при вводе команды ifconfig мы должны увидеть наш интерфейс tun_obfs4. Отлично, сервер openvpn запустился.

Создаем клиента

./easyrsa build-client-full client nopass

Для подключения клиента к серверу копируем следующие файлы:

/etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/easy-rsa/pki/issued/client.crt /etc/openvpn/easy-rsa/pki/private/client.key

Настройка Ipables

В случае, если использование сервера предполагает только через obfs4, тогда открываем 1516 порт. Если предполагается использование мобилок и прочих устройств, где нет возможности реализовать подключение через obfs4, тогда открываем дополнительно прямой порт 1515 до OpenVPN. И разрешаем обмен трафика за nat.

iptables -I INPUT -p tcp -m tcp --dport 1516 -j ACCEPT iptables -t nat -A POSTROUTING -o ens3 -s 10.8.0.0/24 -j MASQUERADE

На этом, настройка сервера закончена.

Дебаг по серверу

shapeshifter-dispatcher в файле логов dispatcher.log всегда будет писать ошибку вида:

2023/01/13 06:34:13 [INFO]: initializing transparent proxy 2023/01/13 06:34:13 [INFO]: initializing TCP transparent proxy 2023/01/13 06:34:13 [NOTICE]: dispatcher-0.0.7-dev - launched 2023/01/13 06:34:13 [INFO]: initializing server transport listeners 2023/01/13 06:34:13 [INFO]: shapeshifter-dispatcher - initializing server transport listeners 2023/01/13 06:34:13 [ERROR]: Error resolving Extended OR address "missing port in address" 2023/01/13 06:34:13 [INFO]: shapeshifter-dispatcher - accepting connections 2023/01/13 06:34:13 [INFO]: obfs4 - registered listener: [scrubbed]:1516 

С чем это связанно не известно. Но работает стабильно.

Настройка клиента для Windows

Качаем архив с билдами. Подходящий исполняемый файл shapeshifter-dispatcher-386.exe или shapeshifter-dispatcher-amd64.exe помещаем в папку C:\shapeshifter-dispatcher.

Создаем .bat файл с содержимым:

@echo off cd C:\Program Files\OpenVPN\bin openvpn-gui.exe --connect client.ovpn cd C:\shapeshifter-dispatcher\ shapeshifter-dispatcher-amd64.exe -transparent -client -state state -target 45.45.45.45:1516     -transports obfs4     -proxylistenaddr 127.0.0.1:1515     -optionsFile obfs4.json     -logLevel DEBUG     -enableLogging 

-target 45.45.45.45:1516 — меняем IP на свой.

В папке C:\shapeshifter-dispatcher\state создаем файл obfs4.json с содержимым:

{"cert": "uXsRLSgnHHI0JwGE+uPFRVCnGLIZesduokAAbMGy7cTxdErirK8aYWcrFol7Nr6k/c6pAw", "iat-mode": "0"}

В переменную «cert»: «……..» вставляем свой ключ, который сгенерировал сервер.

Осталось создать конфиг файл для клиента OpenVPN C:\Users\client\OpenVPN\config\client.ovpn и запихивает туда это:

client  dev tun  remote 127.0.0.1 1515  socket-flags    TCP_NODELAY  proto tcp  persist-key  persist-tun  cipher none  data-ciphers none  tun-mtu 1500  ca C:\\Users\\client\\OpenVPN\\config\\keys\\ca.crt cert C:\\Users\\client\\OpenVPN\\config\\keys\\client.crt key C:\\Users\\client\\OpenVPN\\config\\keys\\client.key

И скормить ему файлы ключей которые мы качали ранее с сервера.

/etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/easy-rsa/pki/issued/client.crt /etc/openvpn/easy-rsa/pki/private/client.key

Файл .bat будет запускать OpenVPN клиент и следом обфускатор в один клик.

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

Настройка клиента для linux ubuntu 22.04

Hidden text

В процессе…

Настройка клиента для macOS

В архиве есть готовый билд который позволит запустить OpenVPN с обфускацией. Но опыта работы с этой ОС у меня нет. Если будут желающие, статью можно будет дописать.

Настройка клиента для arm/mips/mipsle

Мне удалось скомпилировать билды для этих архитектур. Я пытался запустить их на бюджетном роутере TL-WR841N под управлением OpenWrt. Но увы не получилось. Возможно кому-то удастся запуститься на одноплатных системах типа raspberry pi. Или эти билды пригодятся в будущем…

Загрузка

Готовые билды

Исходники


ссылка на оригинал статьи https://habr.com/ru/post/712082/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *