shema vzlom
sim prava
kredit birzi
ban probiv
voenbilet diplom

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

PHANTOM

Команда форума
Модератор
Регистрация
Сообщения
733
Реакции
39
Привет мой дорогой друг. Ну вот и ты озадачился вопросом безопасности и/или анонимности в сети интернет в столь сложное высокотехнологичное время, где каждый очень хочет подглядеть за тобой или как то ограничить в доступе к ресурсам.

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

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

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

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

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

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 "[email protected]"
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

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 клиент и сервер будут ругаться что весь трафик не зашифрован
#не рекомендуется указывать в случае использования 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 / compress lz4 / compress lz4-v2 не указываем
#не хочет дружить с обфускацией
###########################################
Перезапускаем сервис

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

Настройка Iptables​

В случае, если использование сервера предполагает только через 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 [ER Этот текст убрать ROR]: 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. Или эти билды пригодятся в будущем...

Загрузка​

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

Исходники
 
Сверху